commit 970835e4990e2401436f10d55ccc5536154d105f
parent 7aad9799ced71c80cd3311be1bb839ed156f0bf8
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date: Fri, 18 Jul 2025 11:28:50 -0300
content/projects: add Plato client project
Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Diffstat:
69 files changed, 2711 insertions(+), 22 deletions(-)
diff --git a/assets/css/custom.css b/assets/css/custom.css
@@ -225,3 +225,4 @@
visibility: visible;
opacity: 1;
}
+
diff --git a/content/projects/plato-desktop-client.md b/content/projects/plato-desktop-client.md
@@ -0,0 +1,81 @@
++++
+date = '2025-07-17T11:21:04-03:00'
+draft = false
+title = 'Plato Desktop Client'
+description = "Desktop game client in Go."
+authors = ["Jack Mordaunt"]
+tags = ["Go", "Gio", "Native", "Portfolio"]
+categories = ["development"]
++++
+
+<style>
+.carousel {
+ display: flex;
+ overflow: scroll;
+}
+</style>
+
+<div class="carousel">
+ <img src="/images/plato/PlatoHome.png" alt="Home Page" />
+ <img src="/images/plato/PlatoGame.png" alt="Game Page" />
+ <img src="/images/plato/PlatoMulti.png" alt="Multi Window" />
+</div>
+
+
+## Overview
+
+A cross-platform desktop game client built for **Plato Team Inc.**, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.
+
+The application was built in **Go**, using the **Gio** immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including **ANGLE** (OpenGL ES), **V8** (JavaScript engine), **SQLite**, and **libwebp** for image decoding.
+
+---
+
+### My Role
+
+As one of two primary developers, I contributed across the full stack, with a focus on architecture, performance, and cross-platform integration.
+
+- **Reactive GUI Architecture**
+ Co-developed a highly concurrent, fully reactive GUI system using **Gio** and **SQLite**. Built a declarative state model with the database as the single source of truth, enabling seamless multi-window synchronization.
+
+- **Tooling & Abstractions**
+ Created reusable libraries and tooling ([skel](https://git.sr.ht/~gioverse/skel)) for stream-based data handling and safe inter-window communication. This enabled clean separation of concerns and race-free concurrency.
+
+- **Auto-Updater System**
+ Designed and implemented a binary patch-based self-updater for seamless client updates with minimal bandwidth usage.
+
+- **Embedded Game Logic**
+ Integrated game runtime logic using **V8**, communicating over a custom binary protocol with a proprietary backend.
+
+- **Deep OS Integration**
+ Delivered native features on both Windows and macOS:
+ - Implemented **Windows COM interfaces in pure Go** for AAC audio decoding and system toast notifications.
+ - Used **Objective-C and C** on macOS for native audio and system notification support.
+
+---
+
+This project demanded **low-level systems programming**, **high-concurrency architecture**, and custom GUI tooling—all within the Go ecosystem. It reflects my ability to deliver **production-ready, cross-platform software** with deep OS integration and thoughtful abstractions.
+
+### Platforms
+
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <i class="fa-4x fa-brands fa-windows"></i>
+ <i class="fa-4x fa-brands fa-apple"></i>
+ <i class="fa-4x fa-brands fa-linux"></i>
+</div>
+
+### Languages
+
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <img style="max-height: 100px;" src="/images/brands/go.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/c.png"/>
+</div>
+
+### Tech
+
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <img style="max-height: 100px;" src="/images/brands/gio.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/sqlite.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/opengl.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/v8.svg"/>
+</div>
+
diff --git a/hugo.toml b/hugo.toml
@@ -105,10 +105,14 @@ style = "github-dark"
weight = 2
url = "about/"
[[menu.main]]
- name = "Contact"
+ name = "Projects"
weight = 3
+ url = "projects/"
+[[menu.main]]
+ name = "Contact"
+ weight = 4
url = "contact/"
[[menu.main]]
name = "Pay"
- weight = 4
+ weight = 5
url = "pay-with-bitcoin/"
diff --git a/public/404.html b/public/404.html
@@ -124,6 +124,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/about/index.html b/public/about/index.html
@@ -128,6 +128,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/authors/index.html b/public/authors/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
@@ -158,7 +162,7 @@
<li>
<span class="taxonomy-element">
<a href="http://jackmordaunt.com/authors/jack-mordaunt/">Jack Mordaunt</a>
- <sup>2</sup>
+ <sup>3</sup>
</span>
</li>
diff --git a/public/authors/index.xml b/public/authors/index.xml
@@ -6,12 +6,12 @@
<description>Recent content in Authors on Jack Mordaunt</description>
<generator>Hugo</generator>
<language>en</language>
- <lastBuildDate>Wed, 16 Jul 2025 14:57:56 -0300</lastBuildDate>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
<atom:link href="http://jackmordaunt.com/authors/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Jack Mordaunt</title>
<link>http://jackmordaunt.com/authors/jack-mordaunt/</link>
- <pubDate>Wed, 16 Jul 2025 14:57:56 -0300</pubDate>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
<guid>http://jackmordaunt.com/authors/jack-mordaunt/</guid>
<description></description>
</item>
diff --git a/public/authors/jack-mordaunt/index.html b/public/authors/jack-mordaunt/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
@@ -152,6 +156,11 @@
<ul>
<li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ <li>
<span class="date">July 16, 2025</span>
<a class="title" href="/posts/hugo-nip-05/">Hugo and nip-05</a>
</li>
diff --git a/public/authors/jack-mordaunt/index.xml b/public/authors/jack-mordaunt/index.xml
@@ -6,9 +6,16 @@
<description>Recent content on Jack Mordaunt</description>
<generator>Hugo</generator>
<language>en</language>
- <lastBuildDate>Wed, 16 Jul 2025 14:57:56 -0300</lastBuildDate>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
<atom:link href="http://jackmordaunt.com/authors/jack-mordaunt/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ <item>
<title>Hugo and nip-05</title>
<link>http://jackmordaunt.com/posts/hugo-nip-05/</link>
<pubDate>Wed, 16 Jul 2025 14:57:56 -0300</pubDate>
diff --git a/public/categories/development/index.html b/public/categories/development/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
@@ -152,6 +156,11 @@
<ul>
<li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ <li>
<span class="date">July 16, 2025</span>
<a class="title" href="/posts/hugo-nip-05/">Hugo and nip-05</a>
</li>
diff --git a/public/categories/development/index.xml b/public/categories/development/index.xml
@@ -6,9 +6,16 @@
<description>Recent content in Development on Jack Mordaunt</description>
<generator>Hugo</generator>
<language>en</language>
- <lastBuildDate>Wed, 16 Jul 2025 14:57:56 -0300</lastBuildDate>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
<atom:link href="http://jackmordaunt.com/categories/development/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ <item>
<title>Hugo and nip-05</title>
<link>http://jackmordaunt.com/posts/hugo-nip-05/</link>
<pubDate>Wed, 16 Jul 2025 14:57:56 -0300</pubDate>
diff --git a/public/categories/index.html b/public/categories/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
@@ -158,7 +162,7 @@
<li>
<span class="taxonomy-element">
<a href="http://jackmordaunt.com/categories/development/">development</a>
- <sup>2</sup>
+ <sup>3</sup>
</span>
</li>
diff --git a/public/categories/index.xml b/public/categories/index.xml
@@ -6,12 +6,12 @@
<description>Recent content in Categories on Jack Mordaunt</description>
<generator>Hugo</generator>
<language>en</language>
- <lastBuildDate>Wed, 16 Jul 2025 14:57:56 -0300</lastBuildDate>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
<atom:link href="http://jackmordaunt.com/categories/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Development</title>
<link>http://jackmordaunt.com/categories/development/</link>
- <pubDate>Wed, 16 Jul 2025 14:57:56 -0300</pubDate>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
<guid>http://jackmordaunt.com/categories/development/</guid>
<description></description>
</item>
diff --git a/public/contact/index.html b/public/contact/index.html
@@ -147,6 +147,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/images/Plato/PlatoGame.png b/public/images/Plato/PlatoGame.png
Binary files differ.
diff --git a/public/images/Plato/PlatoHome.png b/public/images/Plato/PlatoHome.png
Binary files differ.
diff --git a/public/images/Plato/PlatoMulti.png b/public/images/Plato/PlatoMulti.png
Binary files differ.
diff --git a/public/images/brands/c.png b/public/images/brands/c.png
Binary files differ.
diff --git a/public/images/brands/cpp.svg b/public/images/brands/cpp.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="306px" height="344.35px" viewBox="0 0 306 344.35" enable-background="new 0 0 306 344.35" xml:space="preserve">
+<path fill="#00599C" d="M302.107,258.262c2.401-4.159,3.893-8.845,3.893-13.053V99.14c0-4.208-1.49-8.893-3.892-13.052L153,172.175
+ L302.107,258.262z"/>
+<path fill="#004482" d="M166.25,341.193l126.5-73.034c3.644-2.104,6.956-5.737,9.357-9.897L153,172.175L3.893,258.263
+ c2.401,4.159,5.714,7.793,9.357,9.896l126.5,73.034C147.037,345.401,158.963,345.401,166.25,341.193z"/>
+<path fill="#659AD2" d="M302.108,86.087c-2.402-4.16-5.715-7.793-9.358-9.897L166.25,3.156c-7.287-4.208-19.213-4.208-26.5,0
+ L13.25,76.19C5.962,80.397,0,90.725,0,99.14v146.069c0,4.208,1.491,8.894,3.893,13.053L153,172.175L302.108,86.087z"/>
+<g>
+ <path fill="#FFFFFF" d="M153,274.175c-56.243,0-102-45.757-102-102s45.757-102,102-102c36.292,0,70.139,19.53,88.331,50.968
+ l-44.143,25.544c-9.105-15.736-26.038-25.512-44.188-25.512c-28.122,0-51,22.878-51,51c0,28.121,22.878,51,51,51
+ c18.152,0,35.085-9.776,44.191-25.515l44.143,25.543C223.142,254.644,189.294,274.175,153,274.175z"/>
+</g>
+<g>
+ <polygon fill="#FFFFFF" points="255,166.508 243.666,166.508 243.666,155.175 232.334,155.175 232.334,166.508 221,166.508
+ 221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "/>
+</g>
+<g>
+ <polygon fill="#FFFFFF" points="297.5,166.508 286.166,166.508 286.166,155.175 274.834,155.175 274.834,166.508 263.5,166.508
+ 263.5,177.841 274.834,177.841 274.834,189.175 286.166,189.175 286.166,177.841 297.5,177.841 "/>
+</g>
+</svg>
diff --git a/public/images/brands/g14.svg b/public/images/brands/g14.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 52271.184 17265.223"
+ xml:space="preserve"
+ width="52271.184"
+ height="17265.223"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><defs
+ id="defs14" />
+<style
+ type="text/css"
+ id="style1">
+ .st0{fill:#2DBCAF;}
+ .st1{fill:#5DC9E1;}
+ .st2{fill:#FDDD00;}
+ .st3{fill:#CE3262;}
+ .st4{fill:#00ACD7;}
+ .st5{fill:#FFFFFF;}
+</style>
+<g
+ id="g14"
+ transform="translate(-196.46121,-217.7058)">
+ <g
+ id="g3">
+ <g
+ id="g2">
+ <g
+ id="g1">
+ <path
+ class="st1"
+ d="m 40.2,101.1 c -0.4,0 -0.5,-0.2 -0.3,-0.5 L 42,97.9 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 35.7 c 0.4,0 0.5,0.3 0.3,0.6 l -1.7,2.6 c -0.2,0.3 -0.7,0.6 -1,0.6 z"
+ id="path1" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g6">
+ <g
+ id="g5">
+ <g
+ id="g4">
+ <path
+ class="st1"
+ d="m 25.1,110.3 c -0.4,0 -0.5,-0.2 -0.3,-0.5 l 2.1,-2.7 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 45.6 c 0.4,0 0.6,0.3 0.5,0.6 l -0.8,2.4 c -0.1,0.4 -0.5,0.6 -0.9,0.6 z"
+ id="path3" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g9">
+ <g
+ id="g8">
+ <g
+ id="g7">
+ <path
+ class="st1"
+ d="m 49.3,119.5 c -0.4,0 -0.5,-0.3 -0.3,-0.6 l 1.4,-2.5 c 0.2,-0.3 0.6,-0.6 1,-0.6 h 20 c 0.4,0 0.6,0.3 0.6,0.7 l -0.2,2.4 c 0,0.4 -0.4,0.7 -0.7,0.7 z"
+ id="path6" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g13">
+ <g
+ id="CXHf1q_7_">
+ <g
+ id="g12">
+ <g
+ id="g10">
+ <path
+ class="st1"
+ d="m 153.1,99.3 c -6.3,1.6 -10.6,2.8 -16.8,4.4 -1.5,0.4 -1.6,0.5 -2.9,-1 -1.5,-1.7 -2.6,-2.8 -4.7,-3.8 -6.3,-3.1 -12.4,-2.2 -18.1,1.5 -6.8,4.4 -10.3,10.9 -10.2,19 0.1,8 5.6,14.6 13.5,15.7 6.8,0.9 12.5,-1.5 17,-6.6 0.9,-1.1 1.7,-2.3 2.7,-3.7 -3.6,0 -8.1,0 -19.3,0 -2.1,0 -2.6,-1.3 -1.9,-3 1.3,-3.1 3.7,-8.3 5.1,-10.9 0.3,-0.6 1,-1.6 2.5,-1.6 5.1,0 23.9,0 36.4,0 -0.2,2.7 -0.2,5.4 -0.6,8.1 -1.1,7.2 -3.8,13.8 -8.2,19.6 -7.2,9.5 -16.6,15.4 -28.5,17 -9.8,1.3 -18.9,-0.6 -26.9,-6.6 -7.4,-5.6 -11.6,-13 -12.7,-22.2 -1.3,-10.9 1.9,-20.7 8.5,-29.3 7.1,-9.3 16.5,-15.2 28,-17.3 9.4,-1.7 18.4,-0.6 26.5,4.9 5.3,3.5 9.1,8.3 11.6,14.1 0.6,0.9 0.2,1.4 -1,1.7 z"
+ id="path9" />
+ </g>
+ <g
+ id="g11">
+ <path
+ class="st1"
+ d="m 186.2,154.6 c -9.1,-0.2 -17.4,-2.8 -24.4,-8.8 -5.9,-5.1 -9.6,-11.6 -10.8,-19.3 -1.8,-11.3 1.3,-21.3 8.1,-30.2 7.3,-9.6 16.1,-14.6 28,-16.7 10.2,-1.8 19.8,-0.8 28.5,5.1 7.9,5.4 12.8,12.7 14.1,22.3 1.7,13.5 -2.2,24.5 -11.5,33.9 -6.6,6.7 -14.7,10.9 -24,12.8 -2.7,0.5 -5.4,0.6 -8,0.9 z M 210,114.2 c -0.1,-1.3 -0.1,-2.3 -0.3,-3.3 -1.8,-9.9 -10.9,-15.5 -20.4,-13.3 -9.3,2.1 -15.3,8 -17.5,17.4 -1.8,7.8 2,15.7 9.2,18.9 5.5,2.4 11,2.1 16.3,-0.6 7.9,-4.1 12.2,-10.5 12.7,-19.1 z"
+ id="path10" />
+ </g>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/public/images/brands/gio.svg b/public/images/brands/gio.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 160 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+<style>
+g { fill: black; }
+@media (prefers-color-scheme: dark) {
+ g { fill: white; }
+}
+</style>
+ <g transform="matrix(1,0,0,1,1.22222,3.55271e-15)">
+ <g id="path2" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M171.134,10.115C171.84,11.392 172.165,13.133 171.984,14.168C171.316,17.968 168.964,19.601 165.807,20.624C148.634,26.189 132.083,33.584 116.569,42.675C108.995,47.114 101.674,51.972 94.703,57.322C77.002,70.907 61.594,87.37 52.415,107.596C48.489,116.247 45.831,125.496 44.699,134.896C43.859,141.876 43.667,148.993 44.534,156.079C45.456,163.605 47.702,170.993 51.516,177.552C54.435,182.572 58.057,187.166 62.469,190.949C78.478,204.675 100.817,211.151 120.372,213.484C135.569,215.297 149.911,214.536 163.655,211.838C180.311,208.567 198.86,205.535 209.789,192.688C213.426,188.413 215.651,182.73 215.155,177.597C214.323,168.986 208.837,162.234 202.244,157.505C199.697,155.679 196.944,154.058 193.925,153.176C193.329,153.002 192.726,152.834 192.166,152.585C190.099,151.665 188.556,149.62 188.203,147.387C187.894,145.426 188.315,143.471 189.44,142.128C192.131,138.917 195.451,138.925 198.864,140.016C202.713,141.246 206.376,143.094 209.86,145.152C215.301,148.366 220.413,152.243 224.38,157.138C228.916,162.738 232.424,169.058 234.1,174.975C236.728,184.255 235.629,194.287 231.397,202.941C226.991,211.953 219.08,220.371 212.105,225.647C203.69,232.011 193.837,237.646 185.27,240.728C169.125,246.537 152.174,249.708 137.48,249.446C114.349,249.033 87.966,241.122 69.152,231.056C56.668,224.377 45.644,215.491 37.2,204.588C25.491,189.471 20.135,168.125 20.595,151.172C21.241,127.364 31.624,101.506 43.916,84.37C54.228,69.995 67.442,57.677 81.69,47.204C99.365,34.213 118.987,23.818 139.427,15.388C147.133,12.21 154.954,9.353 162.902,6.841C166.149,5.814 169.708,7.882 171.134,10.115Z"/>
+ </g>
+ <g id="path6" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M102.759,140.491C105.163,141.239 106.575,143.558 107.173,145.907C109.053,153.297 112.049,160.342 114.334,167.607C114.9,169.406 115.491,171.255 115.562,173.15C115.035,176.173 112.807,178.473 111.288,181.035C110.09,183.054 108.934,185.271 107.037,186.668C106.402,187.136 105.608,186.151 105.035,185.737C102.131,183.639 99.683,180.985 97.002,178.615C95.704,177.468 94.61,175.892 94.729,174.088C94.477,169.097 95.218,164.126 95.543,159.153C95.79,155.392 96.107,151.636 96.136,147.867C96.153,145.699 96.43,143.404 98.048,141.777C99.281,140.536 101.093,139.973 102.759,140.491Z"/>
+ </g>
+ <g id="path10" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M151.528,151.13C147.029,153.552 145.008,159.311 145.942,164.151C146.444,166.753 149.525,167.129 151.755,167.197C153.696,167.255 155.833,166.64 156.314,164.508C157.568,158.948 155.442,153.863 151.528,151.13ZM151.393,140.253C157.36,139.387 163.702,140.348 168.865,143.575C173.347,146.377 176.736,151.041 177.422,156.361C178.458,164.399 175.638,172.946 169.844,178.621C164.94,183.424 157.727,185.336 150.961,184.286C144.191,183.235 137.441,179.803 134.104,173.62C130.625,167.175 131.536,159.225 134.619,152.841C137.497,146.883 142.831,141.672 149.5,140.394C150.126,140.296 150.76,140.249 151.393,140.253Z"/>
+ </g>
+ </g>
+ <g transform="matrix(4.10469,0,0,3.89982,-222.482,-45.2143)">
+ <text x="72.932px" y="24.026px" style="font-family:'Roboto-Regular', 'Roboto';font-size:12px;">Gio</text>
+ </g>
+ <g transform="matrix(1,0,0,1,7.42299,-0.815793)">
+ <rect x="58.624" y="3.957" width="2.015" height="55.516"/>
+ </g>
+</svg>
diff --git a/public/images/brands/go.svg b/public/images/brands/go.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 166.95184 62.374398"
+ xml:space="preserve"
+ width="166.95184"
+ height="62.374397"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><defs
+ id="defs14" />
+<style
+ type="text/css"
+ id="style1">
+ .st0{fill:#2DBCAF;}
+ .st1{fill:#5DC9E1;}
+ .st2{fill:#FDDD00;}
+ .st3{fill:#CE3262;}
+ .st4{fill:#00ACD7;}
+ .st5{fill:#FFFFFF;}
+</style>
+<g
+ id="g14"
+ transform="matrix(0.81286174,0,0,0.81286174,-20.077685,-63.294027)">
+ <g
+ id="g3">
+ <g
+ id="g2">
+ <g
+ id="g1">
+ <path
+ class="st1"
+ d="m 40.2,101.1 c -0.4,0 -0.5,-0.2 -0.3,-0.5 L 42,97.9 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 35.7 c 0.4,0 0.5,0.3 0.3,0.6 l -1.7,2.6 c -0.2,0.3 -0.7,0.6 -1,0.6 z"
+ id="path1" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g6">
+ <g
+ id="g5">
+ <g
+ id="g4">
+ <path
+ class="st1"
+ d="m 25.1,110.3 c -0.4,0 -0.5,-0.2 -0.3,-0.5 l 2.1,-2.7 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 45.6 c 0.4,0 0.6,0.3 0.5,0.6 l -0.8,2.4 c -0.1,0.4 -0.5,0.6 -0.9,0.6 z"
+ id="path3" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g9">
+ <g
+ id="g8">
+ <g
+ id="g7">
+ <path
+ class="st1"
+ d="m 49.3,119.5 c -0.4,0 -0.5,-0.3 -0.3,-0.6 l 1.4,-2.5 c 0.2,-0.3 0.6,-0.6 1,-0.6 h 20 c 0.4,0 0.6,0.3 0.6,0.7 l -0.2,2.4 c 0,0.4 -0.4,0.7 -0.7,0.7 z"
+ id="path6" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g13">
+ <g
+ id="CXHf1q_7_">
+ <g
+ id="g12">
+ <g
+ id="g10">
+ <path
+ class="st1"
+ d="m 153.1,99.3 c -6.3,1.6 -10.6,2.8 -16.8,4.4 -1.5,0.4 -1.6,0.5 -2.9,-1 -1.5,-1.7 -2.6,-2.8 -4.7,-3.8 -6.3,-3.1 -12.4,-2.2 -18.1,1.5 -6.8,4.4 -10.3,10.9 -10.2,19 0.1,8 5.6,14.6 13.5,15.7 6.8,0.9 12.5,-1.5 17,-6.6 0.9,-1.1 1.7,-2.3 2.7,-3.7 -3.6,0 -8.1,0 -19.3,0 -2.1,0 -2.6,-1.3 -1.9,-3 1.3,-3.1 3.7,-8.3 5.1,-10.9 0.3,-0.6 1,-1.6 2.5,-1.6 5.1,0 23.9,0 36.4,0 -0.2,2.7 -0.2,5.4 -0.6,8.1 -1.1,7.2 -3.8,13.8 -8.2,19.6 -7.2,9.5 -16.6,15.4 -28.5,17 -9.8,1.3 -18.9,-0.6 -26.9,-6.6 -7.4,-5.6 -11.6,-13 -12.7,-22.2 -1.3,-10.9 1.9,-20.7 8.5,-29.3 7.1,-9.3 16.5,-15.2 28,-17.3 9.4,-1.7 18.4,-0.6 26.5,4.9 5.3,3.5 9.1,8.3 11.6,14.1 0.6,0.9 0.2,1.4 -1,1.7 z"
+ id="path9" />
+ </g>
+ <g
+ id="g11">
+ <path
+ class="st1"
+ d="m 186.2,154.6 c -9.1,-0.2 -17.4,-2.8 -24.4,-8.8 -5.9,-5.1 -9.6,-11.6 -10.8,-19.3 -1.8,-11.3 1.3,-21.3 8.1,-30.2 7.3,-9.6 16.1,-14.6 28,-16.7 10.2,-1.8 19.8,-0.8 28.5,5.1 7.9,5.4 12.8,12.7 14.1,22.3 1.7,13.5 -2.2,24.5 -11.5,33.9 -6.6,6.7 -14.7,10.9 -24,12.8 -2.7,0.5 -5.4,0.6 -8,0.9 z M 210,114.2 c -0.1,-1.3 -0.1,-2.3 -0.3,-3.3 -1.8,-9.9 -10.9,-15.5 -20.4,-13.3 -9.3,2.1 -15.3,8 -17.5,17.4 -1.8,7.8 2,15.7 9.2,18.9 5.5,2.4 11,2.1 16.3,-0.6 7.9,-4.1 12.2,-10.5 12.7,-19.1 z"
+ id="path10" />
+ </g>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/public/images/brands/go.webp b/public/images/brands/go.webp
Binary files differ.
diff --git a/public/images/brands/js.png b/public/images/brands/js.png
Binary files differ.
diff --git a/public/images/brands/opengl.svg b/public/images/brands/opengl.svg
@@ -0,0 +1,77 @@
+<svg version="1.1" id="OpenGL" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1200px" height="500px" viewBox="0 0 1200 500" enable-background="new 0 0 1200 500" xml:space="preserve">
+<g>
+ <g>
+ <path fill="#5586A4" d="M182.039,212.314c3.851-11.769,9.633-22.192,17.334-31.26c7.701-9.067,17.29-16.309,28.753-21.711
+ c11.464-5.404,24.814-8.111,40.046-8.111c15.226,0,28.577,2.708,40.04,8.111c11.463,5.402,21.052,12.644,28.753,21.711
+ c7.701,9.067,13.483,19.491,17.333,31.26c3.851,11.768,5.782,24.018,5.782,36.749s-1.931,24.986-5.782,36.754
+ c-3.85,11.769-9.632,22.192-17.333,31.261c-7.701,9.066-17.29,16.264-28.753,21.581c-11.463,5.311-24.814,7.976-40.04,7.976
+ c-15.231,0-28.582-2.664-40.046-7.976c-11.463-5.317-21.052-12.515-28.753-21.581c-7.701-9.068-13.483-19.492-17.334-31.261
+ c-3.851-11.768-5.776-24.023-5.776-36.754S178.189,224.082,182.039,212.314z M205.477,277.016
+ c2.513,9.165,6.459,17.412,11.842,24.741c5.379,7.332,12.284,13.223,20.718,17.677c8.427,4.452,18.47,6.673,30.135,6.673
+ c11.66,0,21.702-2.221,30.136-6.673c8.427-4.454,15.333-10.345,20.717-17.677c5.378-7.329,9.323-15.576,11.835-24.741
+ c2.512-9.166,3.769-18.461,3.769-27.886s-1.257-18.713-3.769-27.879c-2.512-9.166-6.458-17.412-11.835-24.747
+ c-5.385-7.328-12.29-13.218-20.717-17.671c-8.434-4.453-18.477-6.68-30.136-6.68c-11.665,0-21.707,2.227-30.135,6.68
+ c-8.434,4.454-15.339,10.344-20.718,17.671c-5.384,7.335-9.329,15.581-11.842,24.747c-2.512,9.165-3.762,18.454-3.762,27.879
+ S202.965,267.85,205.477,277.016z"/>
+ <path fill="#5586A4" d="M397.94,223.478v16.135h0.404c3.296-6.606,8.478-11.411,15.548-14.409
+ c7.07-2.997,14.84-4.496,23.324-4.496c9.419,0,17.625,1.69,24.618,5.07c6.988,3.38,12.795,7.945,17.429,13.699
+ c4.633,5.761,8.124,12.398,10.485,19.918c2.355,7.523,3.535,15.506,3.535,23.949c0,8.444-1.143,16.426-3.416,23.951
+ c-2.279,7.523-5.731,14.087-10.365,19.688c-4.633,5.601-10.447,10.017-17.435,13.236c-6.995,3.221-15.118,4.835-24.385,4.835
+ c-2.986,0-6.325-0.307-10.012-0.919c-3.692-0.621-7.341-1.614-10.952-2.996c-3.61-1.382-7.032-3.271-10.251-5.65
+ c-3.219-2.381-5.927-5.335-8.124-8.876h-0.404v61.471h-20.2V223.478H397.94z M469.637,265.815
+ c-1.49-5.292-3.755-10.011-6.81-14.156c-3.056-4.144-6.975-7.444-11.754-9.898c-4.785-2.455-10.383-3.683-16.803-3.683
+ c-6.742,0-12.46,1.308-17.157,3.917c-4.703,2.609-8.54,6.02-11.52,10.239c-2.979,4.219-5.132,9.018-6.464,14.391
+ c-1.332,5.371-1.995,10.818-1.995,16.338c0,5.835,0.7,11.474,2.115,16.919c1.407,5.454,3.642,10.245,6.698,14.391
+ c3.054,4.145,7.006,7.482,11.867,10.012c4.86,2.533,10.738,3.798,17.63,3.798c6.893,0,12.65-1.301,17.271-3.91
+ c4.621-2.609,8.346-6.062,11.167-10.362c2.816-4.293,4.854-9.202,6.11-14.729c1.25-5.527,1.881-11.202,1.881-17.036
+ C471.871,276.522,471.126,271.113,469.637,265.815z"/>
+ <path fill="#5586A4" d="M596.31,334.933c-9.129,6.748-20.61,10.121-34.461,10.121c-9.759,0-18.224-1.534-25.382-4.6
+ c-7.165-3.071-13.186-7.371-18.066-12.898c-4.879-5.526-8.54-12.125-10.977-19.804c-2.436-7.675-3.812-16.045-4.128-25.099
+ c0-9.055,1.414-17.344,4.254-24.87c2.834-7.524,6.811-14.05,11.931-19.577c5.119-5.527,11.185-9.819,18.192-12.891
+ c7.007-3.071,14.689-4.607,23.041-4.607c10.87,0,19.884,2.195,27.054,6.575c7.172,4.385,12.922,9.961,17.252,16.728
+ c4.331,6.772,7.329,14.155,8.983,22.148c1.654,8,2.323,15.612,2.008,22.841h-91.303c-0.158,5.212,0.467,10.153,1.881,14.828
+ c1.414,4.675,3.687,8.814,6.83,12.417c3.144,3.601,7.146,6.469,12.019,8.615c4.867,2.147,10.599,3.22,17.195,3.22
+ c8.477,0,15.428-1.917,20.844-5.761c5.416-3.843,8.988-9.683,10.718-17.529h19.821
+ C611.339,318.138,605.438,328.185,596.31,334.933z M591.416,258.53c-1.803-4.133-4.234-7.698-7.289-10.683
+ c-3.062-2.985-6.672-5.36-10.827-7.124c-4.16-1.764-8.749-2.646-13.767-2.646c-5.176,0-9.847,0.882-14.001,2.646
+ c-4.16,1.764-7.726,4.176-10.706,7.235c-2.98,3.065-5.334,6.631-7.058,10.689c-1.729,4.059-2.746,8.388-3.061,12.983H594.6
+ C594.283,267.035,593.223,262.668,591.416,258.53z"/>
+ <path fill="#5586A4" d="M648.387,223.478v18.905h0.379c8.369-14.446,21.645-21.675,39.818-21.675
+ c8.055,0,14.769,1.079,20.148,3.232c5.371,2.153,9.715,5.15,13.035,8.994c3.32,3.842,5.65,8.413,6.994,13.717
+ c1.338,5.305,2.014,11.184,2.014,17.641v78.395h-20.199V262.04c0-7.371-2.211-13.206-6.623-17.511
+ c-4.418-4.3-10.484-6.453-18.205-6.453c-6.146,0-11.469,0.926-15.963,2.77c-4.494,1.845-8.238,4.453-11.23,7.833
+ c-2.99,3.38-5.238,7.334-6.734,11.861c-1.502,4.533-2.248,9.486-2.248,14.865v67.279h-20.199V223.478H648.387z"/>
+ <path fill="#5586A4" d="M870.412,341.391c-9.121,3.757-18.332,5.639-27.623,5.639c-14.67,0-27.857-2.5-39.572-7.483
+ c-11.717-4.989-21.594-11.86-29.643-20.619c-8.049-8.752-14.217-19.04-18.51-30.858c-4.291-11.817-6.437-24.561-6.437-38.217
+ c0-14.001,2.141-27.004,6.42-39c4.281-11.991,10.434-22.451,18.463-31.383c8.031-8.932,17.897-15.932,29.605-21.015
+ c11.709-5.076,24.896-7.617,39.566-7.617c9.834,0,19.354,1.449,28.562,4.343c9.211,2.898,17.525,7.154,24.949,12.767
+ c7.422,5.613,13.545,12.533,18.373,20.755c4.83,8.228,7.785,17.665,8.857,28.323h-40.234
+ c-2.506-10.479-7.336-18.344-14.488-23.586c-7.158-5.243-15.83-7.864-26.02-7.864c-9.48,0-17.529,1.794-24.144,5.384
+ c-6.615,3.59-11.982,8.408-16.098,14.446c-4.115,6.044-7.107,12.915-8.98,20.619c-1.883,7.704-2.816,15.667-2.816,23.895
+ c0,7.883,0.939,15.543,2.82,22.982c1.883,7.438,4.881,14.136,8.996,20.089c4.115,5.951,9.488,10.719,16.115,14.309
+ c6.623,3.59,14.682,5.385,24.178,5.385c13.963,0,24.744-3.44,32.355-10.325c7.613-6.883,12.045-16.863,13.301-29.939h-42.381
+ V241.63h80.357v101.199h-26.738l-4.281-21.23C887.853,331.035,879.533,337.635,870.412,341.391z"/>
+ <path fill="#5586A4" d="M994.678,155.574v152.374h93.354v34.737H952.662V155.574H994.678z"/>
+ </g>
+ <path fill="#5586A4" d="M795.977,365.945c-64.285,38.205-160.568,59.951-267.996,59.951c-193.548,0-350.451-78.75-350.451-175.897
+ S334.433,74.102,527.981,74.102c107.822,0,204.496,22.149,268.783,60.593C726.594,70.282,600.779,25.022,456.926,25
+ C236.608,24.965,57.988,125.675,57.969,249.938C57.95,374.199,236.537,474.97,456.856,475
+ C600.137,475.024,725.625,429.908,795.977,365.945z"/>
+</g>
+<g>
+ <path fill="#5586A4" d="M1143.848,325.427c0,3.141-0.786,6.067-2.356,8.779c-1.57,2.712-3.711,4.85-6.423,6.412
+ c-2.712,1.563-5.639,2.345-8.779,2.345c-3.126,0-6.045-0.781-8.757-2.345c-2.712-1.562-4.854-3.7-6.424-6.412
+ c-1.571-2.712-2.355-5.639-2.355-8.779c0-3.126,0.784-6.048,2.355-8.769c1.57-2.72,3.712-4.86,6.424-6.424
+ c2.712-1.562,5.631-2.344,8.757-2.344c3.141,0,6.067,0.781,8.779,2.344c2.712,1.564,4.853,3.704,6.423,6.424
+ C1143.062,319.379,1143.848,322.301,1143.848,325.427z M1140.446,325.427c0-3.907-1.383-7.244-4.148-10.01
+ c-2.767-2.766-6.103-4.148-10.009-4.148c-3.907,0-7.244,1.383-10.01,4.148c-2.766,2.766-4.148,6.103-4.148,10.01
+ c0,3.907,1.383,7.243,4.148,10.009c2.766,2.766,6.103,4.148,10.01,4.148c3.906,0,7.242-1.383,10.009-4.148
+ C1139.063,332.67,1140.446,329.334,1140.446,325.427z M1118.336,316.05h8.39c2.374,0,4.095,0.478,5.159,1.436
+ c1.064,0.957,1.598,2.24,1.598,3.85c0,1.256-0.406,2.344-1.218,3.264c-0.812,0.919-2.092,1.586-3.839,1.999
+ c0.72,0.276,1.249,0.567,1.586,0.873c0.475,0.43,0.973,1.065,1.494,1.908c0.03,0.061,1.041,1.87,3.034,5.424h-5.517
+ c-1.792-3.569-2.995-5.704-3.607-6.401c-0.614-0.696-1.227-1.046-1.84-1.046c-0.138,0-0.33,0.023-0.574,0.069v7.378h-4.666V316.05z
+ M1123.002,324.001h2.022c1.348,0,2.299-0.218,2.851-0.654c0.551-0.438,0.827-1,0.827-1.69c0-0.689-0.265-1.253-0.793-1.689
+ c-0.529-0.437-1.43-0.654-2.701-0.654h-2.206V324.001z"/>
+</g>
+</svg>
diff --git a/public/images/brands/sqlite.svg b/public/images/brands/sqlite.svg
@@ -0,0 +1,64 @@
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ width="381.8515"
+ height="180.60349"
+ id="svg2985"
+ xml:space="preserve"><title
+ id="title2998">SQLite</title><metadata
+ id="metadata2991"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>SQLite</dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs2989"><linearGradient
+ x1="0"
+ y1="0"
+ x2="1"
+ y2="0"
+ id="linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-4.02e-6,-91.8907,-91.8907,4.02e-6,85.8809,161.434)"
+ spreadMethod="pad"><stop
+ id="stop3029"
+ style="stop-color:#97d9f6;stop-opacity:1"
+ offset="0" /><stop
+ id="stop3031"
+ style="stop-color:#0f80cc;stop-opacity:1"
+ offset="0.92024499" /><stop
+ id="stop3033"
+ style="stop-color:#0f80cc;stop-opacity:1"
+ offset="1" /></linearGradient><linearGradient
+ x1="-15.614694"
+ y1="-9.1082983"
+ x2="-6.7410073"
+ y2="-9.1082983"
+ id="linearGradient5421"
+ xlink:href="#linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-4.02e-7,-9.18907,-9.18907,4.02e-7,8.58809,16.1434)"
+ spreadMethod="pad" /><linearGradient
+ x1="-15.614694"
+ y1="-9.1082983"
+ x2="-6.7410073"
+ y2="-9.1082983"
+ id="linearGradient2995"
+ xlink:href="#linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-5.025e-7,11.486337,-11.486337,-5.025e-7,-30.839638,202.18698)"
+ spreadMethod="pad" /></defs><path
+ d="m 147.53125,89.218755 c -4.8225,0 -8.74375,1.4275 -11.75,4.28125 -3.00625,2.85625 -4.53125,6.600135 -4.53125,11.187505 0,2.37738 0.37875,4.545 1.125,6.53125 0.74625,1.99025 1.9075,3.834 3.46875,5.5 1.56125,1.6675 4.68625,3.93263 9.34375,6.8125 5.715,3.48887 9.455,6.32037 11.25,8.53124 1.79625,2.209 2.6875,4.524 2.6875,6.9375 0,3.2315 -1.06375,5.811 -3.25,7.75 -2.19,1.93988 -5.11875,2.90625 -8.75,2.90625 -3.83,0 -7.16625,-1.35012 -10.03125,-4.03125 -2.865,-2.685 -4.31125,-6.23637 -4.34375,-10.6875 l -1.78125,0 0,16.15625 1.78125,0 c 0.54375,-1.52988 1.29625,-2.3125 2.28125,-2.3125 0.47375,0 1.58375,0.32675 3.3125,0.9375 4.20625,1.49662 7.66,2.21875 10.375,2.21875 4.67875,0 8.6725,-1.63862 12,-4.96875 3.3225,-3.32862 5,-7.34375 5,-12.03125 0,-3.63475 -1.1075,-6.86863 -3.28125,-9.68749 -2.17375,-2.82225 -6.40125,-6.10501 -12.71875,-9.875 -5.43625,-3.26614 -8.965,-5.92625 -10.59375,-8 -1.63125,-2.07076 -2.46875,-4.36137 -2.46875,-6.875 0,-2.718755 0.99875,-4.902505 2.96875,-6.531255 1.97,-1.63 4.55125,-2.4375 7.78125,-2.4375 3.635,0 6.665,1.07875 9.0625,3.25 2.395,2.175 3.78,5.189 4.1875,9.062505 l 1.78125,0 0,-14.000005 -1.65625,0 c -0.2025,0.71375 -0.39,1.17 -0.5625,1.375 -0.1675,0.20375 -0.49,0.3125 -0.96875,0.3125 -0.57625,0 -1.60375,-0.2425 -3.0625,-0.71875 -3.125,-1.0525 -6.00625,-1.59375 -8.65625,-1.59375 z m 58.21875,0 c -5.87625,0 -11.21125,1.385 -16.03125,4.15625 -4.8275,2.76625 -8.64875,6.6075 -11.46875,11.500005 -2.81875,4.89212 -4.21875,10.08786 -4.21875,15.625 0,7.43899 2.435,14.06636 7.34375,19.87499 4.91125,5.80513 10.79625,9.42238 17.625,10.8125 1.56125,0.8135 3.795,2.9135 6.71875,6.3125 3.295,3.83587 6.0825,6.6025 8.375,8.25 2.29,1.64837 4.7625,2.8565 7.375,3.65625 2.615,0.79638 5.4425,1.1875 8.5,1.1875 3.7025,0 7.0175,-0.6435 9.9375,-1.96875 L 239.25,167 c -1.695,0.61138 -3.5025,0.90625 -5.40625,0.90625 -2.58375,0 -5.195,-0.852 -7.8125,-2.5625 -2.61375,-1.71475 -5.8825,-4.98637 -9.78125,-9.8125 -1.8325,-2.3125 -3.0975,-3.7715 -3.8125,-4.34375 7.47125,-1.459 13.615,-5.08 18.40625,-10.875 4.79,-5.7925 7.1875,-12.40336 7.1875,-19.81249 0,-8.79739 -3.13,-16.19088 -9.34375,-22.218755 -6.21875,-6.0285 -13.86625,-9.0625 -22.9375,-9.0625 z m 36.34375,0 0.0937,1.90625 c 3.9125,0 6.10375,1.1525 6.59375,3.46875 0.1825,0.82875 0.26625,2.359 0.28125,4.5625 l -0.0312,42.156245 c -0.0325,3.1485 -0.48125,5.15875 -1.34375,6.03125 -0.86375,0.86625 -2.32375,1.40875 -4.4375,1.625 l -0.0937,1.90625 39,0 1,-9.5625 -1.78125,0 c -0.50875,2.605 -1.675,4.47113 -3.53125,5.53125 -1.86125,1.06787 -5.1525,1.59375 -9.90625,1.59375 l -3.6875,0 c -4.2775,0 -6.7525,-1.54638 -7.40625,-4.65625 -0.135,-0.61525 -0.18125,-1.27488 -0.1875,-2 l 0.15625,-42.624995 c -10e-4,-3.1435 0.39625,-5.25 1.21875,-6.28125 0.83125,-1.0275 2.33,-1.6025 4.5,-1.75 l -0.0937,-1.90625 -20.34375,0 z m -35.71875,2.3125 c 6.6275,0 12.03875,2.61025 16.21875,7.875 4.17875,5.266635 6.25,12.484875 6.25,21.625005 0,8.66111 -2.10125,15.59612 -6.3125,20.81249 -4.21125,5.21475 -9.81625,7.8125 -16.78125,7.8125 -6.69125,0 -12.1175,-2.67875 -16.28125,-8.0625 -4.16,-5.38375 -6.21875,-12.3735 -6.21875,-20.96874 0,-8.8325 2.08375,-15.90288 6.28125,-21.187505 4.195,-5.279 9.8125,-7.90625 16.84375,-7.90625 z m 89.6875,9.062505 c -0.95125,0 -1.67625,0.32125 -2.21875,0.96875 -0.555,0.64499 -0.725,1.42624 -0.53125,2.375 0.1875,0.92037 0.70625,1.727 1.53125,2.40625 0.82,0.67861 1.705,1.03125 2.65625,1.03125 0.92,0 1.62125,-0.35262 2.125,-1.03125 0.50375,-0.67925 0.6575,-1.48588 0.46875,-2.40625 -0.19375,-0.94876 -0.695,-1.73001 -1.46875,-2.375 -0.7825,-0.6475 -1.6425,-0.96875 -2.5625,-0.96875 z m 25.71875,6.46875 c -1.61625,6.21774 -5.12,9.58249 -10.5,10.125 l 0.0625,1.78125 6.28125,0 -0.125,21.06249 c 0.01,3.601 0.12,5.9985 0.375,7.21875 0.61875,2.92138 2.52625,4.40625 5.71875,4.40625 4.61875,0 9.46375,-2.8135 14.53125,-8.4375 l -1.53125,-1.3125 c -3.65875,3.70363 -6.89375,5.5625 -9.71875,5.5625 -1.73625,0 -2.8125,-0.9985 -3.21875,-2.96875 C 323.545,144.0215 323.5,143.46238 323.5,142.8125 l 0.0625,-23.84374 9.59375,0 -0.0937,-2.84375 -9.46875,0 0,-9.0625 -1.8125,0 z m 37.09375,7.9375 c -5.36625,0 -9.73125,2.605 -13.125,7.78125 -3.37625,5.185 -4.42125,10.92961 -3.09375,17.24999 0.78125,3.70212 2.3375,6.57138 4.71875,8.59375 2.3775,2.0215 5.39375,3.03125 9,3.03125 3.3575,0 8.0325,-0.85012 10,-2.5625 1.9725,-1.71138 3.79,-4.48388 5.46875,-8.28125 L 370.5,139.40625 c -2.6775,4.92625 -8.08125,7.40625 -12.15625,7.40625 -5.6025,0 -9.03375,-3.07375 -10.3125,-9.1875 -0.16625,-0.78038 -0.29,-1.61875 -0.375,-2.5 6.665,-1.05525 11.71625,-2.92388 15.125,-5.625 3.40625,-2.70261 6.82625,-5.56737 6.1875,-8.59374 -0.38,-1.79838 -1.31375,-3.21238 -2.75,-4.28125 -1.455,-1.06837 -5.2325,-1.625 -7.34375,-1.625 z m -58.65625,0.21875 -11.5625,2.65625 0,2.0625 4,-0.5 c 1.9375,0 3.0775,0.87738 3.4375,2.625 0.12125,0.58488 0.1975,1.40625 0.21875,2.4375 l -0.125,18.90624 c -0.0325,2.61625 -0.3225,4.13712 -0.90625,4.59375 -0.58875,0.4575 -2.14125,0.6875 -4.65625,0.6875 l -0.0625,1.78125 18.34375,0 -0.0312,-1.78125 c -2.54875,0 -4.20125,-0.20112 -4.9375,-0.59375 -0.72375,-0.39012 -1.2225,-1.10012 -1.4375,-2.1875 -0.16625,-0.78363 -0.23875,-2.13387 -0.25,-4 l 0.0625,-26.68749 -2.09375,0 z m 55.71875,3.5 c 1.11625,0 2.195,0.43112 3.28125,1.28125 1.07125,0.84713 1.72375,1.78912 1.9375,2.8125 1.04625,5.02638 -3.41,8.50136 -13.4375,10.43749 -0.28625,-3.66512 0.34875,-6.99224 1.96875,-9.99999 1.6075,-3.00488 3.70125,-4.53125 6.25,-4.53125 z"
+ id="SQLite"
+ style="fill:#003b57;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 121.6315,17.03623 -99.506,0 C 15.4565,17.03623 10,22.49373 10,29.16248 l 0,109.7365 c 0,6.66837 5.4565,12.125 12.1255,12.125 l 65.53725,0 C 86.918884,118.41477 98.054499,55.130402 121.6315,17.03623 z"
+ id="solid-background"
+ style="fill:#0f80cc;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 118.0165,20.57373 -95.891,0 c -4.735375,0 -8.588875,3.8525 -8.588875,8.58875 l 0,101.73013 c 21.71725,-8.335 54.31221,-15.5269 76.849585,-15.20027 4.52893,-23.680901 17.83941,-70.090424 27.63029,-95.11861 z"
+ id="gradient-background"
+ style="fill:url(#linearGradient2995);fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 144.8415,13.44498 c -6.815,-6.0775 -15.06625,-3.63625 -23.21,3.59125 -1.20875,1.07375 -2.415,2.265 -3.615,3.5375 -13.93125,14.77875 -26.8625,42.15375 -30.88,63.06 1.565,3.17375 2.7875,7.22375 3.5925,10.3175 0.20625,0.79375 0.3925,1.53875 0.54125,2.1725 0.35375,1.499875 0.54375,2.4725 0.54375,2.4725 0,0 -0.125,-0.472625 -0.6375,-1.95875 -0.0975,-0.285 -0.20625,-0.59625 -0.335,-0.9625 -0.055,-0.15125 -0.13125,-0.335 -0.215,-0.53125 -0.90875,-2.1125 -3.4225,-6.57125 -4.52875,-8.5125 -0.94625,2.79125 -1.7825,5.4025 -2.4825,7.765 3.19375,5.8435 5.14,15.85775 5.14,15.85775 0,0 -0.16875,-0.649 -0.97125,-2.91412 -0.7125,-2.00338 -4.26125,-8.22113 -5.101875,-9.674755 -1.438,5.308505 -2.009375,8.892505 -1.494125,9.765125 1.000375,1.69088 1.953125,4.60838 2.78975,7.83488 1.89,7.26862 3.20375,16.11725 3.20375,16.11725 0,0 0.0425,0.58637 0.11375,1.48875 -0.2625,6.104 -0.105,12.43262 0.3675,18.15287 0.62625,7.57225 1.805,14.07713 3.3075,17.5585 l 1.02,-0.55612 c -2.20625,-6.85888 -3.1025,-15.84763 -2.71,-26.21388 0.59375,-15.84512 4.24,-34.95362 10.9775,-54.87 11.3825,-30.065 27.175,-54.1875 41.62875,-65.7075 -13.17375,11.8975 -31.00375,50.40875 -36.34125,64.67 -5.97625,15.97 -10.21125,30.95638 -12.76375,45.31475 4.40375,-13.46087 18.6425,-19.247 18.6425,-19.247 0,0 6.98375,-8.61287 15.145,-20.91775 -4.88875,1.115 -12.91625,3.02375 -15.605,4.15375 -3.96625,1.66375 -5.035,2.23125 -5.035,2.23125 0,0 12.8475,-7.82375 23.87,-11.36625 15.15875,-23.875 31.67375,-57.7925 15.0425,-72.62875"
+ id="feather"
+ style="fill:#003b57;fill-opacity:1;fill-rule:nonzero;stroke:none" /></svg>
diff --git a/public/images/brands/v8.svg b/public/images/brands/v8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 2020 2020"><clipPath id="a"><path d="M1890 370l-160 280-46 80h-108l-138 261a441.1 441.1 0 01-268 509l-15 6-145 264-146-265c-5-2-10-4-15-5a441.6 441.6 0 01-269-510L444 730H336l-46-80-160-280h460l75 149 4 2c0-1 1-2 1-2 16-173 162-309 339-309s323 136 339 309c0 1-2 2-2 2l-1-2 85-149z"/></clipPath><radialGradient id="b" cx="152.5" cy="387.5" r="1854.4" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity=".1"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><path fill="#4285f4" stroke="#fff" stroke-miterlimit="10" stroke-width="150" d="M1890 370h-460l-82 144a339.6 339.6 0 00-338-304c-178 0-324 136-340 309 0 1-2 2-2 2l-4-2-70-139h1l-5-10H130l6 10 154 270 41 70h-1l6 10h109l137 260c-2 8-3 16-5 24-4 25-6 50-6 75 0 186 116 346 280 410 5 2 10 4 15 5l144 266 146-265c5-2 10-3 15-5 164-64 280-223 280-410 0-34-4-68-11-100l138-260h108l6-10 194-340z"/><g clip-path="url(#a)"><path fill="#9e9e9e" d="M1605 640l-43 90h122l6-10 45-80zm-1192 0H285l52 90h120z"/><path fill="#424242" d="M1890 370l-160 280h-112l-179 341-429 779-429-780-179-340H290L130 370h460l75 149 244 445 100 183 96-183 240-445 85-149"/><path d="M1180 1090a169.9 169.9 0 11-340 0 169.9 169.9 0 11340 0zm-20-520a149.8 149.8 0 11-300 0 149.8 149.8 0 11300 0z"/><g fill="#263238" fill-opacity=".2"><path d="M1690 720l-6 10h-109l-137 261-428 779-429-780-137-260H336l-6-10h114l5 10 132 250 429 780 429-779 137-261"/><path fill="#4285f4" fill-opacity="1" d="M1439 991c-22-97-77-182-152-243 40-56 63-124 63-198 0-10-1-21-1-31-16-173-162-309-339-309S687 346 672 519c-1 10-2 21-2 31 0 74 23 142 63 198-75 61-130 145-152 242-8 32-11 65-11 100 0 186 116 346 280 410 50 19 104 30 160 30s111-11 160-30c164-64 280-223 280-410 0-34-4-68-11-99zm-429-561c77 0 140 63 140 140s-63 140-140 140-140-63-140-140 63-140 140-140zm0 820c-88 0-160-72-160-160 0-51 24-97 62-126 27-21 61-34 98-34s71 13 98 34c38 29 62 75 62 126 0 88-72 160-160 160z"/><path fill="#fff" d="M1350 550v5c-3-185-154-335-340-335S673 370 670 555v-5c0-188 152-340 340-340s340 152 340 340zM729 752c-97 80-159 202-159 338v5c2-136 65-258 163-337l5-4-5-6zm562 0l-4-4-5 6 5 4c99 80 162 201 163 337v-5c0-136-62-258-159-338zM596 380H136l-6-10h460zm834-10l-6 10h460l6-10z"/><path d="M1450 1085v5a440 440 0 01-880 0v-5c3 241 199 435 440 435s437-194 440-435zM670 545v5c0 77 25 147 68 204 2-1 3-2 5-4-45-56-72-128-73-205zm680 0c-1 78-28 149-73 205 2 1 3 2 5 4 43-56 68-127 68-204z"/></g></g><path fill="url(#b)" d="M1890 370l-160 280-46 80h-108l-137 261a441.1 441.1 0 01-268 509l-15 6-146 264-146-265c-5-2-10-4-15-5a441.6 441.6 0 01-269-510L444 730H336l-46-80-160-280h460l75 149 4 2c0-1 1-2 1-2 16-173 162-309 339-309s323 136 339 309c0 1-2 2-2 2l-1-2 85-149z"/></svg>
diff --git a/public/index.html b/public/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/pay-with-bitcoin/index.html b/public/pay-with-bitcoin/index.html
@@ -146,6 +146,10 @@ Scan or copy the address to send Bitcoin">
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/posts/hugo-nip-05/index.html b/public/posts/hugo-nip-05/index.html
@@ -131,6 +131,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/posts/hugo-svg-tricks/index.html b/public/posts/hugo-svg-tricks/index.html
@@ -132,6 +132,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/posts/index.html b/public/posts/index.html
@@ -127,6 +127,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/projects/index.html b/public/projects/index.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Projects · Jack Mordaunt</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Coffee developer, software brewer.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Projects">
+ <meta name="twitter:description" content="Coffee developer, software brewer.">
+
+<meta property="og:url" content="http://jackmordaunt.com/projects/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Projects">
+ <meta property="og:description" content="Coffee developer, software brewer.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="website">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/projects/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+<link rel="alternate" type="application/rss+xml" href="/projects/index.xml" title="Jack Mordaunt" />
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container list">
+ <header>
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/projects/">Projects</a>
+ </h1>
+ </header>
+
+ <ul>
+
+ <li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ </ul>
+
+
+
+
+
+
+
+</section>
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/projects/index.xml b/public/projects/index.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Projects on Jack Mordaunt</title>
+ <link>http://jackmordaunt.com/projects/</link>
+ <description>Recent content in Projects on Jack Mordaunt</description>
+ <generator>Hugo</generator>
+ <language>en</language>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
+ <atom:link href="http://jackmordaunt.com/projects/index.xml" rel="self" type="application/rss+xml" />
+ <item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ </channel>
+</rss>
diff --git a/public/projects/page/1/index.html b/public/projects/page/1/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>http://jackmordaunt.com/projects/</title>
+ <link rel="canonical" href="http://jackmordaunt.com/projects/">
+ <meta name="robots" content="noindex">
+ <meta charset="utf-8">
+ <meta http-equiv="refresh" content="0; url=http://jackmordaunt.com/projects/">
+ </head>
+</html>
diff --git a/public/projects/plato-desktop-client/index.html b/public/projects/plato-desktop-client/index.html
@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>
+ Plato Desktop Client · Jack Mordaunt
+</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Desktop game client in Go.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Plato Desktop Client">
+ <meta name="twitter:description" content="Desktop game client in Go.">
+
+<meta property="og:url" content="http://jackmordaunt.com/projects/plato-desktop-client/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Plato Desktop Client">
+ <meta property="og:description" content="Desktop game client in Go.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="article">
+ <meta property="article:section" content="projects">
+ <meta property="article:published_time" content="2025-07-17T11:21:04-03:00">
+ <meta property="article:modified_time" content="2025-07-17T11:21:04-03:00">
+ <meta property="article:tag" content="Go">
+ <meta property="article:tag" content="Gio">
+ <meta property="article:tag" content="Native">
+ <meta property="article:tag" content="Portfolio">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/projects/plato-desktop-client/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container page">
+ <article>
+ <header>
+
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/projects/plato-desktop-client/">
+ Plato Desktop Client
+ </a>
+ </h1>
+
+ </header>
+
+ <style>
+.carousel {
+ display: flex;
+ overflow: scroll;
+}
+</style>
+<div class="carousel">
+ <img src="/images/plato/PlatoHome.png" alt="Home Page" />
+ <img src="/images/plato/PlatoGame.png" alt="Game Page" />
+ <img src="/images/plato/PlatoMulti.png" alt="Multi Window" />
+</div>
+<h2 id="overview">
+ Overview
+ <a class="heading-link" href="#overview">
+ <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
+ <span class="sr-only">Link to heading</span>
+ </a>
+</h2>
+<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
+<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p>
+<hr>
+<h3 id="my-role">
+ My Role
+ <a class="heading-link" href="#my-role">
+ <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
+ <span class="sr-only">Link to heading</span>
+ </a>
+</h3>
+<p>As one of two primary developers, I contributed across the full stack, with a focus on architecture, performance, and cross-platform integration.</p>
+<ul>
+<li>
+<p><strong>Reactive GUI Architecture</strong><br>
+Co-developed a highly concurrent, fully reactive GUI system using <strong>Gio</strong> and <strong>SQLite</strong>. Built a declarative state model with the database as the single source of truth, enabling seamless multi-window synchronization.</p>
+</li>
+<li>
+<p><strong>Tooling & Abstractions</strong><br>
+Created reusable libraries and tooling (<a href="https://git.sr.ht/~gioverse/skel" class="external-link" target="_blank" rel="noopener">skel</a>) for stream-based data handling and safe inter-window communication. This enabled clean separation of concerns and race-free concurrency.</p>
+</li>
+<li>
+<p><strong>Auto-Updater System</strong><br>
+Designed and implemented a binary patch-based self-updater for seamless client updates with minimal bandwidth usage.</p>
+</li>
+<li>
+<p><strong>Embedded Game Logic</strong><br>
+Integrated game runtime logic using <strong>V8</strong>, communicating over a custom binary protocol with a proprietary backend.</p>
+</li>
+<li>
+<p><strong>Deep OS Integration</strong><br>
+Delivered native features on both Windows and macOS:</p>
+<ul>
+<li>Implemented <strong>Windows COM interfaces in pure Go</strong> for AAC audio decoding and system toast notifications.</li>
+<li>Used <strong>Objective-C and C</strong> on macOS for native audio and system notification support.</li>
+</ul>
+</li>
+</ul>
+<hr>
+<p>This project demanded <strong>low-level systems programming</strong>, <strong>high-concurrency architecture</strong>, and custom GUI tooling—all within the Go ecosystem. It reflects my ability to deliver <strong>production-ready, cross-platform software</strong> with deep OS integration and thoughtful abstractions.</p>
+<h3 id="platforms">
+ Platforms
+ <a class="heading-link" href="#platforms">
+ <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
+ <span class="sr-only">Link to heading</span>
+ </a>
+</h3>
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <i class="fa-4x fa-brands fa-windows"></i>
+ <i class="fa-4x fa-brands fa-apple"></i>
+ <i class="fa-4x fa-brands fa-linux"></i>
+</div>
+<h3 id="languages">
+ Languages
+ <a class="heading-link" href="#languages">
+ <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
+ <span class="sr-only">Link to heading</span>
+ </a>
+</h3>
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <img style="max-height: 100px;" src="/images/brands/go.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/c.png"/>
+</div>
+<h3 id="tech">
+ Tech
+ <a class="heading-link" href="#tech">
+ <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
+ <span class="sr-only">Link to heading</span>
+ </a>
+</h3>
+<div style="display: flex; flex-wrap: wrap; gap: 2rem;">
+ <img style="max-height: 100px;" src="/images/brands/gio.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/sqlite.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/opengl.svg"/>
+ <img style="max-height: 100px;" src="/images/brands/v8.svg"/>
+</div>
+
+ </article>
+</section>
+
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/series/index.html b/public/series/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/sitemap.xml b/public/sitemap.xml
@@ -3,33 +3,51 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://jackmordaunt.com/authors/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
<loc>http://jackmordaunt.com/categories/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
<loc>http://jackmordaunt.com/categories/development/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
- <loc>http://jackmordaunt.com/tags/hugo/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <loc>http://jackmordaunt.com/tags/gio/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
- <loc>http://jackmordaunt.com/posts/hugo-nip-05/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <loc>http://jackmordaunt.com/tags/go/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
<loc>http://jackmordaunt.com/</loc>
- <lastmod>2025-07-16T14:57:56-03:00</lastmod>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
</url><url>
<loc>http://jackmordaunt.com/authors/jack-mordaunt/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/tags/native/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/projects/plato-desktop-client/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/tags/portfolio/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/projects/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/tags/</loc>
+ <lastmod>2025-07-17T11:21:04-03:00</lastmod>
+ </url><url>
+ <loc>http://jackmordaunt.com/tags/hugo/</loc>
<lastmod>2025-07-16T14:57:56-03:00</lastmod>
</url><url>
- <loc>http://jackmordaunt.com/tags/nostr/</loc>
+ <loc>http://jackmordaunt.com/posts/hugo-nip-05/</loc>
<lastmod>2025-07-16T14:57:56-03:00</lastmod>
</url><url>
- <loc>http://jackmordaunt.com/posts/</loc>
+ <loc>http://jackmordaunt.com/tags/nostr/</loc>
<lastmod>2025-07-16T14:57:56-03:00</lastmod>
</url><url>
- <loc>http://jackmordaunt.com/tags/</loc>
+ <loc>http://jackmordaunt.com/posts/</loc>
<lastmod>2025-07-16T14:57:56-03:00</lastmod>
</url><url>
<loc>http://jackmordaunt.com/tags/css/</loc>
diff --git a/public/tags/css/index.html b/public/tags/css/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/tags/gio/index.html b/public/tags/gio/index.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Tag: Gio · Jack Mordaunt</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Coffee developer, software brewer.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Gio">
+ <meta name="twitter:description" content="Coffee developer, software brewer.">
+
+<meta property="og:url" content="http://jackmordaunt.com/tags/gio/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Gio">
+ <meta property="og:description" content="Coffee developer, software brewer.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="website">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/tags/gio/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+<link rel="alternate" type="application/rss+xml" href="/tags/gio/index.xml" title="Jack Mordaunt" />
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container list">
+ <header>
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/tags/gio/">Tag: Gio</a>
+ </h1>
+ </header>
+
+ <ul>
+
+ <li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ </ul>
+
+
+
+
+
+
+
+</section>
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/tags/gio/index.xml b/public/tags/gio/index.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Gio on Jack Mordaunt</title>
+ <link>http://jackmordaunt.com/tags/gio/</link>
+ <description>Recent content in Gio on Jack Mordaunt</description>
+ <generator>Hugo</generator>
+ <language>en</language>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
+ <atom:link href="http://jackmordaunt.com/tags/gio/index.xml" rel="self" type="application/rss+xml" />
+ <item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ </channel>
+</rss>
diff --git a/public/tags/gio/page/1/index.html b/public/tags/gio/page/1/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>http://jackmordaunt.com/tags/gio/</title>
+ <link rel="canonical" href="http://jackmordaunt.com/tags/gio/">
+ <meta name="robots" content="noindex">
+ <meta charset="utf-8">
+ <meta http-equiv="refresh" content="0; url=http://jackmordaunt.com/tags/gio/">
+ </head>
+</html>
diff --git a/public/tags/go/index.html b/public/tags/go/index.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Tag: Go · Jack Mordaunt</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Coffee developer, software brewer.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Go">
+ <meta name="twitter:description" content="Coffee developer, software brewer.">
+
+<meta property="og:url" content="http://jackmordaunt.com/tags/go/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Go">
+ <meta property="og:description" content="Coffee developer, software brewer.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="website">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/tags/go/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+<link rel="alternate" type="application/rss+xml" href="/tags/go/index.xml" title="Jack Mordaunt" />
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container list">
+ <header>
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/tags/go/">Tag: Go</a>
+ </h1>
+ </header>
+
+ <ul>
+
+ <li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ </ul>
+
+
+
+
+
+
+
+</section>
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/tags/go/index.xml b/public/tags/go/index.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Go on Jack Mordaunt</title>
+ <link>http://jackmordaunt.com/tags/go/</link>
+ <description>Recent content in Go on Jack Mordaunt</description>
+ <generator>Hugo</generator>
+ <language>en</language>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
+ <atom:link href="http://jackmordaunt.com/tags/go/index.xml" rel="self" type="application/rss+xml" />
+ <item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ </channel>
+</rss>
diff --git a/public/tags/go/page/1/index.html b/public/tags/go/page/1/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>http://jackmordaunt.com/tags/go/</title>
+ <link rel="canonical" href="http://jackmordaunt.com/tags/go/">
+ <meta name="robots" content="noindex">
+ <meta charset="utf-8">
+ <meta http-equiv="refresh" content="0; url=http://jackmordaunt.com/tags/go/">
+ </head>
+</html>
diff --git a/public/tags/hugo/index.html b/public/tags/hugo/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/tags/index.html b/public/tags/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
@@ -168,6 +172,28 @@
<li>
<span class="taxonomy-element">
+ <a href="http://jackmordaunt.com/tags/gio/">Gio</a>
+ <sup>1</sup>
+ </span>
+ </li>
+
+
+
+
+
+ <li>
+ <span class="taxonomy-element">
+ <a href="http://jackmordaunt.com/tags/go/">Go</a>
+ <sup>1</sup>
+ </span>
+ </li>
+
+
+
+
+
+ <li>
+ <span class="taxonomy-element">
<a href="http://jackmordaunt.com/tags/hugo/">hugo</a>
<sup>2</sup>
</span>
@@ -179,6 +205,17 @@
<li>
<span class="taxonomy-element">
+ <a href="http://jackmordaunt.com/tags/native/">Native</a>
+ <sup>1</sup>
+ </span>
+ </li>
+
+
+
+
+
+ <li>
+ <span class="taxonomy-element">
<a href="http://jackmordaunt.com/tags/nostr/">nostr</a>
<sup>1</sup>
</span>
@@ -190,6 +227,17 @@
<li>
<span class="taxonomy-element">
+ <a href="http://jackmordaunt.com/tags/portfolio/">Portfolio</a>
+ <sup>1</sup>
+ </span>
+ </li>
+
+
+
+
+
+ <li>
+ <span class="taxonomy-element">
<a href="http://jackmordaunt.com/tags/svg/">svg</a>
<sup>1</sup>
</span>
diff --git a/public/tags/index.xml b/public/tags/index.xml
@@ -6,9 +6,37 @@
<description>Recent content in Tags on Jack Mordaunt</description>
<generator>Hugo</generator>
<language>en</language>
- <lastBuildDate>Wed, 16 Jul 2025 14:57:56 -0300</lastBuildDate>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
<atom:link href="http://jackmordaunt.com/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Gio</title>
+ <link>http://jackmordaunt.com/tags/gio/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/tags/gio/</guid>
+ <description></description>
+ </item>
+ <item>
+ <title>Go</title>
+ <link>http://jackmordaunt.com/tags/go/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/tags/go/</guid>
+ <description></description>
+ </item>
+ <item>
+ <title>Native</title>
+ <link>http://jackmordaunt.com/tags/native/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/tags/native/</guid>
+ <description></description>
+ </item>
+ <item>
+ <title>Portfolio</title>
+ <link>http://jackmordaunt.com/tags/portfolio/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/tags/portfolio/</guid>
+ <description></description>
+ </item>
+ <item>
<title>Hugo</title>
<link>http://jackmordaunt.com/tags/hugo/</link>
<pubDate>Wed, 16 Jul 2025 14:57:56 -0300</pubDate>
diff --git a/public/tags/native/index.html b/public/tags/native/index.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Tag: Native · Jack Mordaunt</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Coffee developer, software brewer.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Native">
+ <meta name="twitter:description" content="Coffee developer, software brewer.">
+
+<meta property="og:url" content="http://jackmordaunt.com/tags/native/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Native">
+ <meta property="og:description" content="Coffee developer, software brewer.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="website">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/tags/native/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+<link rel="alternate" type="application/rss+xml" href="/tags/native/index.xml" title="Jack Mordaunt" />
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container list">
+ <header>
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/tags/native/">Tag: Native</a>
+ </h1>
+ </header>
+
+ <ul>
+
+ <li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ </ul>
+
+
+
+
+
+
+
+</section>
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/tags/native/index.xml b/public/tags/native/index.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Native on Jack Mordaunt</title>
+ <link>http://jackmordaunt.com/tags/native/</link>
+ <description>Recent content in Native on Jack Mordaunt</description>
+ <generator>Hugo</generator>
+ <language>en</language>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
+ <atom:link href="http://jackmordaunt.com/tags/native/index.xml" rel="self" type="application/rss+xml" />
+ <item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ </channel>
+</rss>
diff --git a/public/tags/native/page/1/index.html b/public/tags/native/page/1/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>http://jackmordaunt.com/tags/native/</title>
+ <link rel="canonical" href="http://jackmordaunt.com/tags/native/">
+ <meta name="robots" content="noindex">
+ <meta charset="utf-8">
+ <meta http-equiv="refresh" content="0; url=http://jackmordaunt.com/tags/native/">
+ </head>
+</html>
diff --git a/public/tags/nostr/index.html b/public/tags/nostr/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/public/tags/portfolio/index.html b/public/tags/portfolio/index.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Tag: Portfolio · Jack Mordaunt</title>
+ <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="color-scheme" content="light dark">
+
+
+
+
+<meta name="author" content="Jack Mordaunt">
+<meta name="description" content="Coffee developer, software brewer.">
+<meta name="keywords" content="blog,developer,personal,software,robust,performance,sovereign">
+
+
+
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Portfolio">
+ <meta name="twitter:description" content="Coffee developer, software brewer.">
+
+<meta property="og:url" content="http://jackmordaunt.com/tags/portfolio/">
+ <meta property="og:site_name" content="Jack Mordaunt">
+ <meta property="og:title" content="Portfolio">
+ <meta property="og:description" content="Coffee developer, software brewer.">
+ <meta property="og:locale" content="en">
+ <meta property="og:type" content="website">
+
+
+
+
+<link rel="canonical" href="http://jackmordaunt.com/tags/portfolio/">
+
+
+<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
+<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+
+ <link rel="stylesheet" href="/css/coder.min.6445a802b9389c9660e1b07b724dcf5718b1065ed2d71b4eeaf981cc7cc5fc46.css" integrity="sha256-ZEWoArk4nJZg4bB7ck3PVxixBl7S1xtO6vmBzHzF/EY=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css" integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="/css/custom.min.fd8b75de7d8e4f6f1f351171122f59843d11c90cfd6a2968c311769f5a3b5e25.css" integrity="sha256-/Yt13n2OT28fNRFxEi9ZhD0RyQz9ailowxF2n1o7XiU=" crossorigin="anonymous" media="screen" />
+
+
+
+
+
+
+<link rel="icon" type="image/svg+xml" href="/images/self-tiny-white.svg" sizes="any">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="32x32">
+<link rel="icon" type="image/png" href="/images/self-tiny-white.png" sizes="16x16">
+
+<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
+
+<link rel="manifest" href="/site.webmanifest">
+<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
+
+
+<link rel="alternate" type="application/rss+xml" href="/tags/portfolio/index.xml" title="Jack Mordaunt" />
+
+
+
+
+
+
+
+</head>
+
+
+
+
+
+
+<body class="preload-transitions colorscheme-auto">
+
+<div class="float-container">
+ <a id="dark-mode-toggle" class="colorscheme-toggle">
+ <i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
+ </a>
+</div>
+
+
+ <main class="wrapper">
+ <nav class="navigation">
+ <section class="container">
+
+ <a class="navigation-title" href="http://jackmordaunt.com/">
+ Jack Mordaunt
+ </a>
+
+
+ <input type="checkbox" id="menu-toggle" />
+ <label class="menu-button float-right" for="menu-toggle">
+ <i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
+ </label>
+ <ul class="navigation-list">
+
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/posts/">Blog</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/about/">About</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/contact/">Contact</a>
+ </li>
+
+ <li class="navigation-item">
+ <a class="navigation-link " href="/pay-with-bitcoin/">Pay</a>
+ </li>
+
+
+
+ </ul>
+
+ </section>
+</nav>
+
+
+ <div class="content">
+
+ <section class="container list">
+ <header>
+ <h1 class="title">
+ <a class="title-link" href="http://jackmordaunt.com/tags/portfolio/">Tag: Portfolio</a>
+ </h1>
+ </header>
+
+ <ul>
+
+ <li>
+ <span class="date">July 17, 2025</span>
+ <a class="title" href="/projects/plato-desktop-client/">Plato Desktop Client</a>
+ </li>
+
+ </ul>
+
+
+
+
+
+
+
+</section>
+
+
+ </div>
+
+ <footer class="footer">
+ <section class="container">
+ ©
+
+ 2025
+ Jack Mordaunt
+ ·
+
+ Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
+
+ </section>
+</footer>
+
+ </main>
+
+
+
+
+
+ <script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/public/tags/portfolio/index.xml b/public/tags/portfolio/index.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Portfolio on Jack Mordaunt</title>
+ <link>http://jackmordaunt.com/tags/portfolio/</link>
+ <description>Recent content in Portfolio on Jack Mordaunt</description>
+ <generator>Hugo</generator>
+ <language>en</language>
+ <lastBuildDate>Thu, 17 Jul 2025 11:21:04 -0300</lastBuildDate>
+ <atom:link href="http://jackmordaunt.com/tags/portfolio/index.xml" rel="self" type="application/rss+xml" />
+ <item>
+ <title>Plato Desktop Client</title>
+ <link>http://jackmordaunt.com/projects/plato-desktop-client/</link>
+ <pubDate>Thu, 17 Jul 2025 11:21:04 -0300</pubDate>
+ <guid>http://jackmordaunt.com/projects/plato-desktop-client/</guid>
+ <description><style>
.carousel {
 display: flex;
 overflow: scroll;
}
</style>
<div class="carousel">
 <img src="http://jackmordaunt.com/images/plato/PlatoHome.png" alt="Home Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoGame.png" alt="Game Page" />
 <img src="http://jackmordaunt.com/images/plato/PlatoMulti.png" alt="Multi Window" />
</div>
<h2 id="overview">
 Overview
 <a class="heading-link" href="#overview">
 <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i>
 <span class="sr-only">Link to heading</span>
 </a>
</h2>
<p>A cross-platform desktop game client built for <strong>Plato Team Inc.</strong>, supporting Windows, macOS, and Linux. Though now discontinued, the project showcased a modern, multi-window architecture with a primary chat interface and independent game windows.</p>
<p>The application was built in <strong>Go</strong>, using the <strong>Gio</strong> immediate-mode GUI toolkit. It interfaced extensively with C and C++ libraries, including <strong>ANGLE</strong> (OpenGL ES), <strong>V8</strong> (JavaScript engine), <strong>SQLite</strong>, and <strong>libwebp</strong> for image decoding.</p></description>
+ </item>
+ </channel>
+</rss>
diff --git a/public/tags/portfolio/page/1/index.html b/public/tags/portfolio/page/1/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>http://jackmordaunt.com/tags/portfolio/</title>
+ <link rel="canonical" href="http://jackmordaunt.com/tags/portfolio/">
+ <meta name="robots" content="noindex">
+ <meta charset="utf-8">
+ <meta http-equiv="refresh" content="0; url=http://jackmordaunt.com/tags/portfolio/">
+ </head>
+</html>
diff --git a/public/tags/svg/index.html b/public/tags/svg/index.html
@@ -125,6 +125,10 @@
</li>
<li class="navigation-item">
+ <a class="navigation-link " href="/projects/">Projects</a>
+ </li>
+
+ <li class="navigation-item">
<a class="navigation-link " href="/contact/">Contact</a>
</li>
diff --git a/static/images/Plato/PlatoGame.png b/static/images/Plato/PlatoGame.png
Binary files differ.
diff --git a/static/images/Plato/PlatoHome.png b/static/images/Plato/PlatoHome.png
Binary files differ.
diff --git a/static/images/Plato/PlatoMulti.png b/static/images/Plato/PlatoMulti.png
Binary files differ.
diff --git a/static/images/brands/c.png b/static/images/brands/c.png
Binary files differ.
diff --git a/static/images/brands/cpp.svg b/static/images/brands/cpp.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="306px" height="344.35px" viewBox="0 0 306 344.35" enable-background="new 0 0 306 344.35" xml:space="preserve">
+<path fill="#00599C" d="M302.107,258.262c2.401-4.159,3.893-8.845,3.893-13.053V99.14c0-4.208-1.49-8.893-3.892-13.052L153,172.175
+ L302.107,258.262z"/>
+<path fill="#004482" d="M166.25,341.193l126.5-73.034c3.644-2.104,6.956-5.737,9.357-9.897L153,172.175L3.893,258.263
+ c2.401,4.159,5.714,7.793,9.357,9.896l126.5,73.034C147.037,345.401,158.963,345.401,166.25,341.193z"/>
+<path fill="#659AD2" d="M302.108,86.087c-2.402-4.16-5.715-7.793-9.358-9.897L166.25,3.156c-7.287-4.208-19.213-4.208-26.5,0
+ L13.25,76.19C5.962,80.397,0,90.725,0,99.14v146.069c0,4.208,1.491,8.894,3.893,13.053L153,172.175L302.108,86.087z"/>
+<g>
+ <path fill="#FFFFFF" d="M153,274.175c-56.243,0-102-45.757-102-102s45.757-102,102-102c36.292,0,70.139,19.53,88.331,50.968
+ l-44.143,25.544c-9.105-15.736-26.038-25.512-44.188-25.512c-28.122,0-51,22.878-51,51c0,28.121,22.878,51,51,51
+ c18.152,0,35.085-9.776,44.191-25.515l44.143,25.543C223.142,254.644,189.294,274.175,153,274.175z"/>
+</g>
+<g>
+ <polygon fill="#FFFFFF" points="255,166.508 243.666,166.508 243.666,155.175 232.334,155.175 232.334,166.508 221,166.508
+ 221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "/>
+</g>
+<g>
+ <polygon fill="#FFFFFF" points="297.5,166.508 286.166,166.508 286.166,155.175 274.834,155.175 274.834,166.508 263.5,166.508
+ 263.5,177.841 274.834,177.841 274.834,189.175 286.166,189.175 286.166,177.841 297.5,177.841 "/>
+</g>
+</svg>
diff --git a/static/images/brands/g14.svg b/static/images/brands/g14.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 52271.184 17265.223"
+ xml:space="preserve"
+ width="52271.184"
+ height="17265.223"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><defs
+ id="defs14" />
+<style
+ type="text/css"
+ id="style1">
+ .st0{fill:#2DBCAF;}
+ .st1{fill:#5DC9E1;}
+ .st2{fill:#FDDD00;}
+ .st3{fill:#CE3262;}
+ .st4{fill:#00ACD7;}
+ .st5{fill:#FFFFFF;}
+</style>
+<g
+ id="g14"
+ transform="translate(-196.46121,-217.7058)">
+ <g
+ id="g3">
+ <g
+ id="g2">
+ <g
+ id="g1">
+ <path
+ class="st1"
+ d="m 40.2,101.1 c -0.4,0 -0.5,-0.2 -0.3,-0.5 L 42,97.9 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 35.7 c 0.4,0 0.5,0.3 0.3,0.6 l -1.7,2.6 c -0.2,0.3 -0.7,0.6 -1,0.6 z"
+ id="path1" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g6">
+ <g
+ id="g5">
+ <g
+ id="g4">
+ <path
+ class="st1"
+ d="m 25.1,110.3 c -0.4,0 -0.5,-0.2 -0.3,-0.5 l 2.1,-2.7 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 45.6 c 0.4,0 0.6,0.3 0.5,0.6 l -0.8,2.4 c -0.1,0.4 -0.5,0.6 -0.9,0.6 z"
+ id="path3" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g9">
+ <g
+ id="g8">
+ <g
+ id="g7">
+ <path
+ class="st1"
+ d="m 49.3,119.5 c -0.4,0 -0.5,-0.3 -0.3,-0.6 l 1.4,-2.5 c 0.2,-0.3 0.6,-0.6 1,-0.6 h 20 c 0.4,0 0.6,0.3 0.6,0.7 l -0.2,2.4 c 0,0.4 -0.4,0.7 -0.7,0.7 z"
+ id="path6" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g13">
+ <g
+ id="CXHf1q_7_">
+ <g
+ id="g12">
+ <g
+ id="g10">
+ <path
+ class="st1"
+ d="m 153.1,99.3 c -6.3,1.6 -10.6,2.8 -16.8,4.4 -1.5,0.4 -1.6,0.5 -2.9,-1 -1.5,-1.7 -2.6,-2.8 -4.7,-3.8 -6.3,-3.1 -12.4,-2.2 -18.1,1.5 -6.8,4.4 -10.3,10.9 -10.2,19 0.1,8 5.6,14.6 13.5,15.7 6.8,0.9 12.5,-1.5 17,-6.6 0.9,-1.1 1.7,-2.3 2.7,-3.7 -3.6,0 -8.1,0 -19.3,0 -2.1,0 -2.6,-1.3 -1.9,-3 1.3,-3.1 3.7,-8.3 5.1,-10.9 0.3,-0.6 1,-1.6 2.5,-1.6 5.1,0 23.9,0 36.4,0 -0.2,2.7 -0.2,5.4 -0.6,8.1 -1.1,7.2 -3.8,13.8 -8.2,19.6 -7.2,9.5 -16.6,15.4 -28.5,17 -9.8,1.3 -18.9,-0.6 -26.9,-6.6 -7.4,-5.6 -11.6,-13 -12.7,-22.2 -1.3,-10.9 1.9,-20.7 8.5,-29.3 7.1,-9.3 16.5,-15.2 28,-17.3 9.4,-1.7 18.4,-0.6 26.5,4.9 5.3,3.5 9.1,8.3 11.6,14.1 0.6,0.9 0.2,1.4 -1,1.7 z"
+ id="path9" />
+ </g>
+ <g
+ id="g11">
+ <path
+ class="st1"
+ d="m 186.2,154.6 c -9.1,-0.2 -17.4,-2.8 -24.4,-8.8 -5.9,-5.1 -9.6,-11.6 -10.8,-19.3 -1.8,-11.3 1.3,-21.3 8.1,-30.2 7.3,-9.6 16.1,-14.6 28,-16.7 10.2,-1.8 19.8,-0.8 28.5,5.1 7.9,5.4 12.8,12.7 14.1,22.3 1.7,13.5 -2.2,24.5 -11.5,33.9 -6.6,6.7 -14.7,10.9 -24,12.8 -2.7,0.5 -5.4,0.6 -8,0.9 z M 210,114.2 c -0.1,-1.3 -0.1,-2.3 -0.3,-3.3 -1.8,-9.9 -10.9,-15.5 -20.4,-13.3 -9.3,2.1 -15.3,8 -17.5,17.4 -1.8,7.8 2,15.7 9.2,18.9 5.5,2.4 11,2.1 16.3,-0.6 7.9,-4.1 12.2,-10.5 12.7,-19.1 z"
+ id="path10" />
+ </g>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/static/images/brands/gio.svg b/static/images/brands/gio.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 160 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+<style>
+g { fill: black; }
+@media (prefers-color-scheme: dark) {
+ g { fill: white; }
+}
+</style>
+ <g transform="matrix(1,0,0,1,1.22222,3.55271e-15)">
+ <g id="path2" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M171.134,10.115C171.84,11.392 172.165,13.133 171.984,14.168C171.316,17.968 168.964,19.601 165.807,20.624C148.634,26.189 132.083,33.584 116.569,42.675C108.995,47.114 101.674,51.972 94.703,57.322C77.002,70.907 61.594,87.37 52.415,107.596C48.489,116.247 45.831,125.496 44.699,134.896C43.859,141.876 43.667,148.993 44.534,156.079C45.456,163.605 47.702,170.993 51.516,177.552C54.435,182.572 58.057,187.166 62.469,190.949C78.478,204.675 100.817,211.151 120.372,213.484C135.569,215.297 149.911,214.536 163.655,211.838C180.311,208.567 198.86,205.535 209.789,192.688C213.426,188.413 215.651,182.73 215.155,177.597C214.323,168.986 208.837,162.234 202.244,157.505C199.697,155.679 196.944,154.058 193.925,153.176C193.329,153.002 192.726,152.834 192.166,152.585C190.099,151.665 188.556,149.62 188.203,147.387C187.894,145.426 188.315,143.471 189.44,142.128C192.131,138.917 195.451,138.925 198.864,140.016C202.713,141.246 206.376,143.094 209.86,145.152C215.301,148.366 220.413,152.243 224.38,157.138C228.916,162.738 232.424,169.058 234.1,174.975C236.728,184.255 235.629,194.287 231.397,202.941C226.991,211.953 219.08,220.371 212.105,225.647C203.69,232.011 193.837,237.646 185.27,240.728C169.125,246.537 152.174,249.708 137.48,249.446C114.349,249.033 87.966,241.122 69.152,231.056C56.668,224.377 45.644,215.491 37.2,204.588C25.491,189.471 20.135,168.125 20.595,151.172C21.241,127.364 31.624,101.506 43.916,84.37C54.228,69.995 67.442,57.677 81.69,47.204C99.365,34.213 118.987,23.818 139.427,15.388C147.133,12.21 154.954,9.353 162.902,6.841C166.149,5.814 169.708,7.882 171.134,10.115Z"/>
+ </g>
+ <g id="path6" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M102.759,140.491C105.163,141.239 106.575,143.558 107.173,145.907C109.053,153.297 112.049,160.342 114.334,167.607C114.9,169.406 115.491,171.255 115.562,173.15C115.035,176.173 112.807,178.473 111.288,181.035C110.09,183.054 108.934,185.271 107.037,186.668C106.402,187.136 105.608,186.151 105.035,185.737C102.131,183.639 99.683,180.985 97.002,178.615C95.704,177.468 94.61,175.892 94.729,174.088C94.477,169.097 95.218,164.126 95.543,159.153C95.79,155.392 96.107,151.636 96.136,147.867C96.153,145.699 96.43,143.404 98.048,141.777C99.281,140.536 101.093,139.973 102.759,140.491Z"/>
+ </g>
+ <g id="path10" transform="matrix(0.200326,0,0,0.200326,4.98618,5.25398)">
+ <path d="M151.528,151.13C147.029,153.552 145.008,159.311 145.942,164.151C146.444,166.753 149.525,167.129 151.755,167.197C153.696,167.255 155.833,166.64 156.314,164.508C157.568,158.948 155.442,153.863 151.528,151.13ZM151.393,140.253C157.36,139.387 163.702,140.348 168.865,143.575C173.347,146.377 176.736,151.041 177.422,156.361C178.458,164.399 175.638,172.946 169.844,178.621C164.94,183.424 157.727,185.336 150.961,184.286C144.191,183.235 137.441,179.803 134.104,173.62C130.625,167.175 131.536,159.225 134.619,152.841C137.497,146.883 142.831,141.672 149.5,140.394C150.126,140.296 150.76,140.249 151.393,140.253Z"/>
+ </g>
+ </g>
+ <g transform="matrix(4.10469,0,0,3.89982,-222.482,-45.2143)">
+ <text x="72.932px" y="24.026px" style="font-family:'Roboto-Regular', 'Roboto';font-size:12px;">Gio</text>
+ </g>
+ <g transform="matrix(1,0,0,1,7.42299,-0.815793)">
+ <rect x="58.624" y="3.957" width="2.015" height="55.516"/>
+ </g>
+</svg>
diff --git a/static/images/brands/go.svg b/static/images/brands/go.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 166.95184 62.374398"
+ xml:space="preserve"
+ width="166.95184"
+ height="62.374397"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><defs
+ id="defs14" />
+<style
+ type="text/css"
+ id="style1">
+ .st0{fill:#2DBCAF;}
+ .st1{fill:#5DC9E1;}
+ .st2{fill:#FDDD00;}
+ .st3{fill:#CE3262;}
+ .st4{fill:#00ACD7;}
+ .st5{fill:#FFFFFF;}
+</style>
+<g
+ id="g14"
+ transform="matrix(0.81286174,0,0,0.81286174,-20.077685,-63.294027)">
+ <g
+ id="g3">
+ <g
+ id="g2">
+ <g
+ id="g1">
+ <path
+ class="st1"
+ d="m 40.2,101.1 c -0.4,0 -0.5,-0.2 -0.3,-0.5 L 42,97.9 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 35.7 c 0.4,0 0.5,0.3 0.3,0.6 l -1.7,2.6 c -0.2,0.3 -0.7,0.6 -1,0.6 z"
+ id="path1" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g6">
+ <g
+ id="g5">
+ <g
+ id="g4">
+ <path
+ class="st1"
+ d="m 25.1,110.3 c -0.4,0 -0.5,-0.2 -0.3,-0.5 l 2.1,-2.7 c 0.2,-0.3 0.7,-0.5 1.1,-0.5 h 45.6 c 0.4,0 0.6,0.3 0.5,0.6 l -0.8,2.4 c -0.1,0.4 -0.5,0.6 -0.9,0.6 z"
+ id="path3" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g9">
+ <g
+ id="g8">
+ <g
+ id="g7">
+ <path
+ class="st1"
+ d="m 49.3,119.5 c -0.4,0 -0.5,-0.3 -0.3,-0.6 l 1.4,-2.5 c 0.2,-0.3 0.6,-0.6 1,-0.6 h 20 c 0.4,0 0.6,0.3 0.6,0.7 l -0.2,2.4 c 0,0.4 -0.4,0.7 -0.7,0.7 z"
+ id="path6" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g13">
+ <g
+ id="CXHf1q_7_">
+ <g
+ id="g12">
+ <g
+ id="g10">
+ <path
+ class="st1"
+ d="m 153.1,99.3 c -6.3,1.6 -10.6,2.8 -16.8,4.4 -1.5,0.4 -1.6,0.5 -2.9,-1 -1.5,-1.7 -2.6,-2.8 -4.7,-3.8 -6.3,-3.1 -12.4,-2.2 -18.1,1.5 -6.8,4.4 -10.3,10.9 -10.2,19 0.1,8 5.6,14.6 13.5,15.7 6.8,0.9 12.5,-1.5 17,-6.6 0.9,-1.1 1.7,-2.3 2.7,-3.7 -3.6,0 -8.1,0 -19.3,0 -2.1,0 -2.6,-1.3 -1.9,-3 1.3,-3.1 3.7,-8.3 5.1,-10.9 0.3,-0.6 1,-1.6 2.5,-1.6 5.1,0 23.9,0 36.4,0 -0.2,2.7 -0.2,5.4 -0.6,8.1 -1.1,7.2 -3.8,13.8 -8.2,19.6 -7.2,9.5 -16.6,15.4 -28.5,17 -9.8,1.3 -18.9,-0.6 -26.9,-6.6 -7.4,-5.6 -11.6,-13 -12.7,-22.2 -1.3,-10.9 1.9,-20.7 8.5,-29.3 7.1,-9.3 16.5,-15.2 28,-17.3 9.4,-1.7 18.4,-0.6 26.5,4.9 5.3,3.5 9.1,8.3 11.6,14.1 0.6,0.9 0.2,1.4 -1,1.7 z"
+ id="path9" />
+ </g>
+ <g
+ id="g11">
+ <path
+ class="st1"
+ d="m 186.2,154.6 c -9.1,-0.2 -17.4,-2.8 -24.4,-8.8 -5.9,-5.1 -9.6,-11.6 -10.8,-19.3 -1.8,-11.3 1.3,-21.3 8.1,-30.2 7.3,-9.6 16.1,-14.6 28,-16.7 10.2,-1.8 19.8,-0.8 28.5,5.1 7.9,5.4 12.8,12.7 14.1,22.3 1.7,13.5 -2.2,24.5 -11.5,33.9 -6.6,6.7 -14.7,10.9 -24,12.8 -2.7,0.5 -5.4,0.6 -8,0.9 z M 210,114.2 c -0.1,-1.3 -0.1,-2.3 -0.3,-3.3 -1.8,-9.9 -10.9,-15.5 -20.4,-13.3 -9.3,2.1 -15.3,8 -17.5,17.4 -1.8,7.8 2,15.7 9.2,18.9 5.5,2.4 11,2.1 16.3,-0.6 7.9,-4.1 12.2,-10.5 12.7,-19.1 z"
+ id="path10" />
+ </g>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/static/images/brands/go.webp b/static/images/brands/go.webp
Binary files differ.
diff --git a/static/images/brands/js.png b/static/images/brands/js.png
Binary files differ.
diff --git a/static/images/brands/opengl.svg b/static/images/brands/opengl.svg
@@ -0,0 +1,77 @@
+<svg version="1.1" id="OpenGL" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1200px" height="500px" viewBox="0 0 1200 500" enable-background="new 0 0 1200 500" xml:space="preserve">
+<g>
+ <g>
+ <path fill="#5586A4" d="M182.039,212.314c3.851-11.769,9.633-22.192,17.334-31.26c7.701-9.067,17.29-16.309,28.753-21.711
+ c11.464-5.404,24.814-8.111,40.046-8.111c15.226,0,28.577,2.708,40.04,8.111c11.463,5.402,21.052,12.644,28.753,21.711
+ c7.701,9.067,13.483,19.491,17.333,31.26c3.851,11.768,5.782,24.018,5.782,36.749s-1.931,24.986-5.782,36.754
+ c-3.85,11.769-9.632,22.192-17.333,31.261c-7.701,9.066-17.29,16.264-28.753,21.581c-11.463,5.311-24.814,7.976-40.04,7.976
+ c-15.231,0-28.582-2.664-40.046-7.976c-11.463-5.317-21.052-12.515-28.753-21.581c-7.701-9.068-13.483-19.492-17.334-31.261
+ c-3.851-11.768-5.776-24.023-5.776-36.754S178.189,224.082,182.039,212.314z M205.477,277.016
+ c2.513,9.165,6.459,17.412,11.842,24.741c5.379,7.332,12.284,13.223,20.718,17.677c8.427,4.452,18.47,6.673,30.135,6.673
+ c11.66,0,21.702-2.221,30.136-6.673c8.427-4.454,15.333-10.345,20.717-17.677c5.378-7.329,9.323-15.576,11.835-24.741
+ c2.512-9.166,3.769-18.461,3.769-27.886s-1.257-18.713-3.769-27.879c-2.512-9.166-6.458-17.412-11.835-24.747
+ c-5.385-7.328-12.29-13.218-20.717-17.671c-8.434-4.453-18.477-6.68-30.136-6.68c-11.665,0-21.707,2.227-30.135,6.68
+ c-8.434,4.454-15.339,10.344-20.718,17.671c-5.384,7.335-9.329,15.581-11.842,24.747c-2.512,9.165-3.762,18.454-3.762,27.879
+ S202.965,267.85,205.477,277.016z"/>
+ <path fill="#5586A4" d="M397.94,223.478v16.135h0.404c3.296-6.606,8.478-11.411,15.548-14.409
+ c7.07-2.997,14.84-4.496,23.324-4.496c9.419,0,17.625,1.69,24.618,5.07c6.988,3.38,12.795,7.945,17.429,13.699
+ c4.633,5.761,8.124,12.398,10.485,19.918c2.355,7.523,3.535,15.506,3.535,23.949c0,8.444-1.143,16.426-3.416,23.951
+ c-2.279,7.523-5.731,14.087-10.365,19.688c-4.633,5.601-10.447,10.017-17.435,13.236c-6.995,3.221-15.118,4.835-24.385,4.835
+ c-2.986,0-6.325-0.307-10.012-0.919c-3.692-0.621-7.341-1.614-10.952-2.996c-3.61-1.382-7.032-3.271-10.251-5.65
+ c-3.219-2.381-5.927-5.335-8.124-8.876h-0.404v61.471h-20.2V223.478H397.94z M469.637,265.815
+ c-1.49-5.292-3.755-10.011-6.81-14.156c-3.056-4.144-6.975-7.444-11.754-9.898c-4.785-2.455-10.383-3.683-16.803-3.683
+ c-6.742,0-12.46,1.308-17.157,3.917c-4.703,2.609-8.54,6.02-11.52,10.239c-2.979,4.219-5.132,9.018-6.464,14.391
+ c-1.332,5.371-1.995,10.818-1.995,16.338c0,5.835,0.7,11.474,2.115,16.919c1.407,5.454,3.642,10.245,6.698,14.391
+ c3.054,4.145,7.006,7.482,11.867,10.012c4.86,2.533,10.738,3.798,17.63,3.798c6.893,0,12.65-1.301,17.271-3.91
+ c4.621-2.609,8.346-6.062,11.167-10.362c2.816-4.293,4.854-9.202,6.11-14.729c1.25-5.527,1.881-11.202,1.881-17.036
+ C471.871,276.522,471.126,271.113,469.637,265.815z"/>
+ <path fill="#5586A4" d="M596.31,334.933c-9.129,6.748-20.61,10.121-34.461,10.121c-9.759,0-18.224-1.534-25.382-4.6
+ c-7.165-3.071-13.186-7.371-18.066-12.898c-4.879-5.526-8.54-12.125-10.977-19.804c-2.436-7.675-3.812-16.045-4.128-25.099
+ c0-9.055,1.414-17.344,4.254-24.87c2.834-7.524,6.811-14.05,11.931-19.577c5.119-5.527,11.185-9.819,18.192-12.891
+ c7.007-3.071,14.689-4.607,23.041-4.607c10.87,0,19.884,2.195,27.054,6.575c7.172,4.385,12.922,9.961,17.252,16.728
+ c4.331,6.772,7.329,14.155,8.983,22.148c1.654,8,2.323,15.612,2.008,22.841h-91.303c-0.158,5.212,0.467,10.153,1.881,14.828
+ c1.414,4.675,3.687,8.814,6.83,12.417c3.144,3.601,7.146,6.469,12.019,8.615c4.867,2.147,10.599,3.22,17.195,3.22
+ c8.477,0,15.428-1.917,20.844-5.761c5.416-3.843,8.988-9.683,10.718-17.529h19.821
+ C611.339,318.138,605.438,328.185,596.31,334.933z M591.416,258.53c-1.803-4.133-4.234-7.698-7.289-10.683
+ c-3.062-2.985-6.672-5.36-10.827-7.124c-4.16-1.764-8.749-2.646-13.767-2.646c-5.176,0-9.847,0.882-14.001,2.646
+ c-4.16,1.764-7.726,4.176-10.706,7.235c-2.98,3.065-5.334,6.631-7.058,10.689c-1.729,4.059-2.746,8.388-3.061,12.983H594.6
+ C594.283,267.035,593.223,262.668,591.416,258.53z"/>
+ <path fill="#5586A4" d="M648.387,223.478v18.905h0.379c8.369-14.446,21.645-21.675,39.818-21.675
+ c8.055,0,14.769,1.079,20.148,3.232c5.371,2.153,9.715,5.15,13.035,8.994c3.32,3.842,5.65,8.413,6.994,13.717
+ c1.338,5.305,2.014,11.184,2.014,17.641v78.395h-20.199V262.04c0-7.371-2.211-13.206-6.623-17.511
+ c-4.418-4.3-10.484-6.453-18.205-6.453c-6.146,0-11.469,0.926-15.963,2.77c-4.494,1.845-8.238,4.453-11.23,7.833
+ c-2.99,3.38-5.238,7.334-6.734,11.861c-1.502,4.533-2.248,9.486-2.248,14.865v67.279h-20.199V223.478H648.387z"/>
+ <path fill="#5586A4" d="M870.412,341.391c-9.121,3.757-18.332,5.639-27.623,5.639c-14.67,0-27.857-2.5-39.572-7.483
+ c-11.717-4.989-21.594-11.86-29.643-20.619c-8.049-8.752-14.217-19.04-18.51-30.858c-4.291-11.817-6.437-24.561-6.437-38.217
+ c0-14.001,2.141-27.004,6.42-39c4.281-11.991,10.434-22.451,18.463-31.383c8.031-8.932,17.897-15.932,29.605-21.015
+ c11.709-5.076,24.896-7.617,39.566-7.617c9.834,0,19.354,1.449,28.562,4.343c9.211,2.898,17.525,7.154,24.949,12.767
+ c7.422,5.613,13.545,12.533,18.373,20.755c4.83,8.228,7.785,17.665,8.857,28.323h-40.234
+ c-2.506-10.479-7.336-18.344-14.488-23.586c-7.158-5.243-15.83-7.864-26.02-7.864c-9.48,0-17.529,1.794-24.144,5.384
+ c-6.615,3.59-11.982,8.408-16.098,14.446c-4.115,6.044-7.107,12.915-8.98,20.619c-1.883,7.704-2.816,15.667-2.816,23.895
+ c0,7.883,0.939,15.543,2.82,22.982c1.883,7.438,4.881,14.136,8.996,20.089c4.115,5.951,9.488,10.719,16.115,14.309
+ c6.623,3.59,14.682,5.385,24.178,5.385c13.963,0,24.744-3.44,32.355-10.325c7.613-6.883,12.045-16.863,13.301-29.939h-42.381
+ V241.63h80.357v101.199h-26.738l-4.281-21.23C887.853,331.035,879.533,337.635,870.412,341.391z"/>
+ <path fill="#5586A4" d="M994.678,155.574v152.374h93.354v34.737H952.662V155.574H994.678z"/>
+ </g>
+ <path fill="#5586A4" d="M795.977,365.945c-64.285,38.205-160.568,59.951-267.996,59.951c-193.548,0-350.451-78.75-350.451-175.897
+ S334.433,74.102,527.981,74.102c107.822,0,204.496,22.149,268.783,60.593C726.594,70.282,600.779,25.022,456.926,25
+ C236.608,24.965,57.988,125.675,57.969,249.938C57.95,374.199,236.537,474.97,456.856,475
+ C600.137,475.024,725.625,429.908,795.977,365.945z"/>
+</g>
+<g>
+ <path fill="#5586A4" d="M1143.848,325.427c0,3.141-0.786,6.067-2.356,8.779c-1.57,2.712-3.711,4.85-6.423,6.412
+ c-2.712,1.563-5.639,2.345-8.779,2.345c-3.126,0-6.045-0.781-8.757-2.345c-2.712-1.562-4.854-3.7-6.424-6.412
+ c-1.571-2.712-2.355-5.639-2.355-8.779c0-3.126,0.784-6.048,2.355-8.769c1.57-2.72,3.712-4.86,6.424-6.424
+ c2.712-1.562,5.631-2.344,8.757-2.344c3.141,0,6.067,0.781,8.779,2.344c2.712,1.564,4.853,3.704,6.423,6.424
+ C1143.062,319.379,1143.848,322.301,1143.848,325.427z M1140.446,325.427c0-3.907-1.383-7.244-4.148-10.01
+ c-2.767-2.766-6.103-4.148-10.009-4.148c-3.907,0-7.244,1.383-10.01,4.148c-2.766,2.766-4.148,6.103-4.148,10.01
+ c0,3.907,1.383,7.243,4.148,10.009c2.766,2.766,6.103,4.148,10.01,4.148c3.906,0,7.242-1.383,10.009-4.148
+ C1139.063,332.67,1140.446,329.334,1140.446,325.427z M1118.336,316.05h8.39c2.374,0,4.095,0.478,5.159,1.436
+ c1.064,0.957,1.598,2.24,1.598,3.85c0,1.256-0.406,2.344-1.218,3.264c-0.812,0.919-2.092,1.586-3.839,1.999
+ c0.72,0.276,1.249,0.567,1.586,0.873c0.475,0.43,0.973,1.065,1.494,1.908c0.03,0.061,1.041,1.87,3.034,5.424h-5.517
+ c-1.792-3.569-2.995-5.704-3.607-6.401c-0.614-0.696-1.227-1.046-1.84-1.046c-0.138,0-0.33,0.023-0.574,0.069v7.378h-4.666V316.05z
+ M1123.002,324.001h2.022c1.348,0,2.299-0.218,2.851-0.654c0.551-0.438,0.827-1,0.827-1.69c0-0.689-0.265-1.253-0.793-1.689
+ c-0.529-0.437-1.43-0.654-2.701-0.654h-2.206V324.001z"/>
+</g>
+</svg>
diff --git a/static/images/brands/sqlite.svg b/static/images/brands/sqlite.svg
@@ -0,0 +1,64 @@
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ width="381.8515"
+ height="180.60349"
+ id="svg2985"
+ xml:space="preserve"><title
+ id="title2998">SQLite</title><metadata
+ id="metadata2991"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>SQLite</dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs2989"><linearGradient
+ x1="0"
+ y1="0"
+ x2="1"
+ y2="0"
+ id="linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-4.02e-6,-91.8907,-91.8907,4.02e-6,85.8809,161.434)"
+ spreadMethod="pad"><stop
+ id="stop3029"
+ style="stop-color:#97d9f6;stop-opacity:1"
+ offset="0" /><stop
+ id="stop3031"
+ style="stop-color:#0f80cc;stop-opacity:1"
+ offset="0.92024499" /><stop
+ id="stop3033"
+ style="stop-color:#0f80cc;stop-opacity:1"
+ offset="1" /></linearGradient><linearGradient
+ x1="-15.614694"
+ y1="-9.1082983"
+ x2="-6.7410073"
+ y2="-9.1082983"
+ id="linearGradient5421"
+ xlink:href="#linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-4.02e-7,-9.18907,-9.18907,4.02e-7,8.58809,16.1434)"
+ spreadMethod="pad" /><linearGradient
+ x1="-15.614694"
+ y1="-9.1082983"
+ x2="-6.7410073"
+ y2="-9.1082983"
+ id="linearGradient2995"
+ xlink:href="#linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-5.025e-7,11.486337,-11.486337,-5.025e-7,-30.839638,202.18698)"
+ spreadMethod="pad" /></defs><path
+ d="m 147.53125,89.218755 c -4.8225,0 -8.74375,1.4275 -11.75,4.28125 -3.00625,2.85625 -4.53125,6.600135 -4.53125,11.187505 0,2.37738 0.37875,4.545 1.125,6.53125 0.74625,1.99025 1.9075,3.834 3.46875,5.5 1.56125,1.6675 4.68625,3.93263 9.34375,6.8125 5.715,3.48887 9.455,6.32037 11.25,8.53124 1.79625,2.209 2.6875,4.524 2.6875,6.9375 0,3.2315 -1.06375,5.811 -3.25,7.75 -2.19,1.93988 -5.11875,2.90625 -8.75,2.90625 -3.83,0 -7.16625,-1.35012 -10.03125,-4.03125 -2.865,-2.685 -4.31125,-6.23637 -4.34375,-10.6875 l -1.78125,0 0,16.15625 1.78125,0 c 0.54375,-1.52988 1.29625,-2.3125 2.28125,-2.3125 0.47375,0 1.58375,0.32675 3.3125,0.9375 4.20625,1.49662 7.66,2.21875 10.375,2.21875 4.67875,0 8.6725,-1.63862 12,-4.96875 3.3225,-3.32862 5,-7.34375 5,-12.03125 0,-3.63475 -1.1075,-6.86863 -3.28125,-9.68749 -2.17375,-2.82225 -6.40125,-6.10501 -12.71875,-9.875 -5.43625,-3.26614 -8.965,-5.92625 -10.59375,-8 -1.63125,-2.07076 -2.46875,-4.36137 -2.46875,-6.875 0,-2.718755 0.99875,-4.902505 2.96875,-6.531255 1.97,-1.63 4.55125,-2.4375 7.78125,-2.4375 3.635,0 6.665,1.07875 9.0625,3.25 2.395,2.175 3.78,5.189 4.1875,9.062505 l 1.78125,0 0,-14.000005 -1.65625,0 c -0.2025,0.71375 -0.39,1.17 -0.5625,1.375 -0.1675,0.20375 -0.49,0.3125 -0.96875,0.3125 -0.57625,0 -1.60375,-0.2425 -3.0625,-0.71875 -3.125,-1.0525 -6.00625,-1.59375 -8.65625,-1.59375 z m 58.21875,0 c -5.87625,0 -11.21125,1.385 -16.03125,4.15625 -4.8275,2.76625 -8.64875,6.6075 -11.46875,11.500005 -2.81875,4.89212 -4.21875,10.08786 -4.21875,15.625 0,7.43899 2.435,14.06636 7.34375,19.87499 4.91125,5.80513 10.79625,9.42238 17.625,10.8125 1.56125,0.8135 3.795,2.9135 6.71875,6.3125 3.295,3.83587 6.0825,6.6025 8.375,8.25 2.29,1.64837 4.7625,2.8565 7.375,3.65625 2.615,0.79638 5.4425,1.1875 8.5,1.1875 3.7025,0 7.0175,-0.6435 9.9375,-1.96875 L 239.25,167 c -1.695,0.61138 -3.5025,0.90625 -5.40625,0.90625 -2.58375,0 -5.195,-0.852 -7.8125,-2.5625 -2.61375,-1.71475 -5.8825,-4.98637 -9.78125,-9.8125 -1.8325,-2.3125 -3.0975,-3.7715 -3.8125,-4.34375 7.47125,-1.459 13.615,-5.08 18.40625,-10.875 4.79,-5.7925 7.1875,-12.40336 7.1875,-19.81249 0,-8.79739 -3.13,-16.19088 -9.34375,-22.218755 -6.21875,-6.0285 -13.86625,-9.0625 -22.9375,-9.0625 z m 36.34375,0 0.0937,1.90625 c 3.9125,0 6.10375,1.1525 6.59375,3.46875 0.1825,0.82875 0.26625,2.359 0.28125,4.5625 l -0.0312,42.156245 c -0.0325,3.1485 -0.48125,5.15875 -1.34375,6.03125 -0.86375,0.86625 -2.32375,1.40875 -4.4375,1.625 l -0.0937,1.90625 39,0 1,-9.5625 -1.78125,0 c -0.50875,2.605 -1.675,4.47113 -3.53125,5.53125 -1.86125,1.06787 -5.1525,1.59375 -9.90625,1.59375 l -3.6875,0 c -4.2775,0 -6.7525,-1.54638 -7.40625,-4.65625 -0.135,-0.61525 -0.18125,-1.27488 -0.1875,-2 l 0.15625,-42.624995 c -10e-4,-3.1435 0.39625,-5.25 1.21875,-6.28125 0.83125,-1.0275 2.33,-1.6025 4.5,-1.75 l -0.0937,-1.90625 -20.34375,0 z m -35.71875,2.3125 c 6.6275,0 12.03875,2.61025 16.21875,7.875 4.17875,5.266635 6.25,12.484875 6.25,21.625005 0,8.66111 -2.10125,15.59612 -6.3125,20.81249 -4.21125,5.21475 -9.81625,7.8125 -16.78125,7.8125 -6.69125,0 -12.1175,-2.67875 -16.28125,-8.0625 -4.16,-5.38375 -6.21875,-12.3735 -6.21875,-20.96874 0,-8.8325 2.08375,-15.90288 6.28125,-21.187505 4.195,-5.279 9.8125,-7.90625 16.84375,-7.90625 z m 89.6875,9.062505 c -0.95125,0 -1.67625,0.32125 -2.21875,0.96875 -0.555,0.64499 -0.725,1.42624 -0.53125,2.375 0.1875,0.92037 0.70625,1.727 1.53125,2.40625 0.82,0.67861 1.705,1.03125 2.65625,1.03125 0.92,0 1.62125,-0.35262 2.125,-1.03125 0.50375,-0.67925 0.6575,-1.48588 0.46875,-2.40625 -0.19375,-0.94876 -0.695,-1.73001 -1.46875,-2.375 -0.7825,-0.6475 -1.6425,-0.96875 -2.5625,-0.96875 z m 25.71875,6.46875 c -1.61625,6.21774 -5.12,9.58249 -10.5,10.125 l 0.0625,1.78125 6.28125,0 -0.125,21.06249 c 0.01,3.601 0.12,5.9985 0.375,7.21875 0.61875,2.92138 2.52625,4.40625 5.71875,4.40625 4.61875,0 9.46375,-2.8135 14.53125,-8.4375 l -1.53125,-1.3125 c -3.65875,3.70363 -6.89375,5.5625 -9.71875,5.5625 -1.73625,0 -2.8125,-0.9985 -3.21875,-2.96875 C 323.545,144.0215 323.5,143.46238 323.5,142.8125 l 0.0625,-23.84374 9.59375,0 -0.0937,-2.84375 -9.46875,0 0,-9.0625 -1.8125,0 z m 37.09375,7.9375 c -5.36625,0 -9.73125,2.605 -13.125,7.78125 -3.37625,5.185 -4.42125,10.92961 -3.09375,17.24999 0.78125,3.70212 2.3375,6.57138 4.71875,8.59375 2.3775,2.0215 5.39375,3.03125 9,3.03125 3.3575,0 8.0325,-0.85012 10,-2.5625 1.9725,-1.71138 3.79,-4.48388 5.46875,-8.28125 L 370.5,139.40625 c -2.6775,4.92625 -8.08125,7.40625 -12.15625,7.40625 -5.6025,0 -9.03375,-3.07375 -10.3125,-9.1875 -0.16625,-0.78038 -0.29,-1.61875 -0.375,-2.5 6.665,-1.05525 11.71625,-2.92388 15.125,-5.625 3.40625,-2.70261 6.82625,-5.56737 6.1875,-8.59374 -0.38,-1.79838 -1.31375,-3.21238 -2.75,-4.28125 -1.455,-1.06837 -5.2325,-1.625 -7.34375,-1.625 z m -58.65625,0.21875 -11.5625,2.65625 0,2.0625 4,-0.5 c 1.9375,0 3.0775,0.87738 3.4375,2.625 0.12125,0.58488 0.1975,1.40625 0.21875,2.4375 l -0.125,18.90624 c -0.0325,2.61625 -0.3225,4.13712 -0.90625,4.59375 -0.58875,0.4575 -2.14125,0.6875 -4.65625,0.6875 l -0.0625,1.78125 18.34375,0 -0.0312,-1.78125 c -2.54875,0 -4.20125,-0.20112 -4.9375,-0.59375 -0.72375,-0.39012 -1.2225,-1.10012 -1.4375,-2.1875 -0.16625,-0.78363 -0.23875,-2.13387 -0.25,-4 l 0.0625,-26.68749 -2.09375,0 z m 55.71875,3.5 c 1.11625,0 2.195,0.43112 3.28125,1.28125 1.07125,0.84713 1.72375,1.78912 1.9375,2.8125 1.04625,5.02638 -3.41,8.50136 -13.4375,10.43749 -0.28625,-3.66512 0.34875,-6.99224 1.96875,-9.99999 1.6075,-3.00488 3.70125,-4.53125 6.25,-4.53125 z"
+ id="SQLite"
+ style="fill:#003b57;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 121.6315,17.03623 -99.506,0 C 15.4565,17.03623 10,22.49373 10,29.16248 l 0,109.7365 c 0,6.66837 5.4565,12.125 12.1255,12.125 l 65.53725,0 C 86.918884,118.41477 98.054499,55.130402 121.6315,17.03623 z"
+ id="solid-background"
+ style="fill:#0f80cc;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 118.0165,20.57373 -95.891,0 c -4.735375,0 -8.588875,3.8525 -8.588875,8.58875 l 0,101.73013 c 21.71725,-8.335 54.31221,-15.5269 76.849585,-15.20027 4.52893,-23.680901 17.83941,-70.090424 27.63029,-95.11861 z"
+ id="gradient-background"
+ style="fill:url(#linearGradient2995);fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ d="m 144.8415,13.44498 c -6.815,-6.0775 -15.06625,-3.63625 -23.21,3.59125 -1.20875,1.07375 -2.415,2.265 -3.615,3.5375 -13.93125,14.77875 -26.8625,42.15375 -30.88,63.06 1.565,3.17375 2.7875,7.22375 3.5925,10.3175 0.20625,0.79375 0.3925,1.53875 0.54125,2.1725 0.35375,1.499875 0.54375,2.4725 0.54375,2.4725 0,0 -0.125,-0.472625 -0.6375,-1.95875 -0.0975,-0.285 -0.20625,-0.59625 -0.335,-0.9625 -0.055,-0.15125 -0.13125,-0.335 -0.215,-0.53125 -0.90875,-2.1125 -3.4225,-6.57125 -4.52875,-8.5125 -0.94625,2.79125 -1.7825,5.4025 -2.4825,7.765 3.19375,5.8435 5.14,15.85775 5.14,15.85775 0,0 -0.16875,-0.649 -0.97125,-2.91412 -0.7125,-2.00338 -4.26125,-8.22113 -5.101875,-9.674755 -1.438,5.308505 -2.009375,8.892505 -1.494125,9.765125 1.000375,1.69088 1.953125,4.60838 2.78975,7.83488 1.89,7.26862 3.20375,16.11725 3.20375,16.11725 0,0 0.0425,0.58637 0.11375,1.48875 -0.2625,6.104 -0.105,12.43262 0.3675,18.15287 0.62625,7.57225 1.805,14.07713 3.3075,17.5585 l 1.02,-0.55612 c -2.20625,-6.85888 -3.1025,-15.84763 -2.71,-26.21388 0.59375,-15.84512 4.24,-34.95362 10.9775,-54.87 11.3825,-30.065 27.175,-54.1875 41.62875,-65.7075 -13.17375,11.8975 -31.00375,50.40875 -36.34125,64.67 -5.97625,15.97 -10.21125,30.95638 -12.76375,45.31475 4.40375,-13.46087 18.6425,-19.247 18.6425,-19.247 0,0 6.98375,-8.61287 15.145,-20.91775 -4.88875,1.115 -12.91625,3.02375 -15.605,4.15375 -3.96625,1.66375 -5.035,2.23125 -5.035,2.23125 0,0 12.8475,-7.82375 23.87,-11.36625 15.15875,-23.875 31.67375,-57.7925 15.0425,-72.62875"
+ id="feather"
+ style="fill:#003b57;fill-opacity:1;fill-rule:nonzero;stroke:none" /></svg>
diff --git a/static/images/brands/v8.svg b/static/images/brands/v8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 2020 2020"><clipPath id="a"><path d="M1890 370l-160 280-46 80h-108l-138 261a441.1 441.1 0 01-268 509l-15 6-145 264-146-265c-5-2-10-4-15-5a441.6 441.6 0 01-269-510L444 730H336l-46-80-160-280h460l75 149 4 2c0-1 1-2 1-2 16-173 162-309 339-309s323 136 339 309c0 1-2 2-2 2l-1-2 85-149z"/></clipPath><radialGradient id="b" cx="152.5" cy="387.5" r="1854.4" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity=".1"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><path fill="#4285f4" stroke="#fff" stroke-miterlimit="10" stroke-width="150" d="M1890 370h-460l-82 144a339.6 339.6 0 00-338-304c-178 0-324 136-340 309 0 1-2 2-2 2l-4-2-70-139h1l-5-10H130l6 10 154 270 41 70h-1l6 10h109l137 260c-2 8-3 16-5 24-4 25-6 50-6 75 0 186 116 346 280 410 5 2 10 4 15 5l144 266 146-265c5-2 10-3 15-5 164-64 280-223 280-410 0-34-4-68-11-100l138-260h108l6-10 194-340z"/><g clip-path="url(#a)"><path fill="#9e9e9e" d="M1605 640l-43 90h122l6-10 45-80zm-1192 0H285l52 90h120z"/><path fill="#424242" d="M1890 370l-160 280h-112l-179 341-429 779-429-780-179-340H290L130 370h460l75 149 244 445 100 183 96-183 240-445 85-149"/><path d="M1180 1090a169.9 169.9 0 11-340 0 169.9 169.9 0 11340 0zm-20-520a149.8 149.8 0 11-300 0 149.8 149.8 0 11300 0z"/><g fill="#263238" fill-opacity=".2"><path d="M1690 720l-6 10h-109l-137 261-428 779-429-780-137-260H336l-6-10h114l5 10 132 250 429 780 429-779 137-261"/><path fill="#4285f4" fill-opacity="1" d="M1439 991c-22-97-77-182-152-243 40-56 63-124 63-198 0-10-1-21-1-31-16-173-162-309-339-309S687 346 672 519c-1 10-2 21-2 31 0 74 23 142 63 198-75 61-130 145-152 242-8 32-11 65-11 100 0 186 116 346 280 410 50 19 104 30 160 30s111-11 160-30c164-64 280-223 280-410 0-34-4-68-11-99zm-429-561c77 0 140 63 140 140s-63 140-140 140-140-63-140-140 63-140 140-140zm0 820c-88 0-160-72-160-160 0-51 24-97 62-126 27-21 61-34 98-34s71 13 98 34c38 29 62 75 62 126 0 88-72 160-160 160z"/><path fill="#fff" d="M1350 550v5c-3-185-154-335-340-335S673 370 670 555v-5c0-188 152-340 340-340s340 152 340 340zM729 752c-97 80-159 202-159 338v5c2-136 65-258 163-337l5-4-5-6zm562 0l-4-4-5 6 5 4c99 80 162 201 163 337v-5c0-136-62-258-159-338zM596 380H136l-6-10h460zm834-10l-6 10h460l6-10z"/><path d="M1450 1085v5a440 440 0 01-880 0v-5c3 241 199 435 440 435s437-194 440-435zM670 545v5c0 77 25 147 68 204 2-1 3-2 5-4-45-56-72-128-73-205zm680 0c-1 78-28 149-73 205 2 1 3 2 5 4 43-56 68-127 68-204z"/></g></g><path fill="url(#b)" d="M1890 370l-160 280-46 80h-108l-137 261a441.1 441.1 0 01-268 509l-15 6-146 264-146-265c-5-2-10-4-15-5a441.6 441.6 0 01-269-510L444 730H336l-46-80-160-280h460l75 149 4 2c0-1 1-2 1-2 16-173 162-309 339-309s323 136 339 309c0 1-2 2-2 2l-1-2 85-149z"/></svg>