site/content/resume.md
g_it 9d354c437c
Some checks are pending
lint / runner / vale (push) Waiting to run
Lint / MegaLinter (push) Waiting to run
Remove section menu in Resume.
2026-03-14 22:41:29 +01:00

405 lines
56 KiB
Markdown
Executable file

---
description: experience, skills, education.
extra_css:
- assets/css/resume.css
hide:
- toc
- navigation
search:
exclude: true
template: "chapter.html"
title: Resume
---
<!-- markdownlint-disable MD033 -->
<!-- markdownlint-disable MD013 -->
<!-- <div class="section-menu">
<span><a href="#experience">experience</a></span>
<span><a href="#skills">skills</a></span>
<span><a href="#learning">learning</a></span>
</div> -->
<div id="hero">
<div class="title">Gugulethu Hlekwayo</div>
<div class="metadetails">
<div>
<figure>
<img src="assets/media/berlin-logo-200x200.webp" alt="City of Berlin logo" >
<figcaption>Based in <br>Berlin, Germany</figcaption>
</figure>
</div>
<div>
<figure>
<img src="assets/media/id-card-icon-512x512.webp" alt="ID card icon" >
<figcaption>German <br>Permanent Residency</figcaption>
</figure>
</div>
<div>
<figure>
<img src="assets/media/languages-icon-512x512.webp" alt="Languages icon" >
<figcaption>Fluent English, B1 German,<br> isiZulu, isiXhosa, A1 Mandarin</figcaption>
</figure>
</div>
<div>
<figure>
<img src="assets/media/technical-writing-icon-512x512.webp" alt="Technical Writing icon" >
<figcaption><abbr title="8 years in content management, 2 years in copywriting, and 5 years in Technical Writing" >15 years</abbr> of <br>professional writing experience</figcaption>
</figure>
</div>
</div>
</div>
<div id="experience">
<div class="jobs">
<div class="job" style="--bg-image: url('../media/mambu-logo-272x263.webp')">
<h2>Senior Technical Writer</h2>
<div class="company">
<abbr title="Mambu is a Software-as-a-Service (SaaS) banking backend.">MAMBU</abbr>
<span>2021 to 2023</span>
</div>
<div class="job-blurb">Promoted to team lead; managing a team of three technical writers.</div>
<div class="job-achievements">
<h5 onclick="document.querySelector('.mambu-ecosystem-modal-container').classList.add('is-visible')">Documented the Mambu ecosystem <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Documented integrations, such as payment and compliance services, and the low-code orchestrator that clients used for their workflows.</p>
<h5 onclick="document.querySelector('.mambu-cli-modal-container').classList.add('is-visible')">Documented a command-line interface <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Documented the Mambu <abbr title='Command-line interfaces use text instead of UI elements.'>CLI</abbr> for external engineers to connect to the backend directly.</p>
<h5 style="cursor: default" >Assumed leadership role</h5>
<p>Promoted to team lead, which shifted the role into more managerial responsibilities - on top of working on documentation.</p>
</div>
</div>
<div class="job" style="--bg-image: url('../media/spread-ai-logo-125x144.webp')">
<h2>Documentation Engineer</h2>
<div class="company"><abbr title="SPREAD is a Software-as-a-Service (SaaS) platform for creating actionable and contextualised data for product engineers. The platform counts Volkswagen, Audi, BMW, and other automotive firms as users.">SPREAD</abbr> <span>2024 to 2026</span></div>
<div class="job-blurb">First Technical Writer hired; to establish the documentation function. <a href="https://docs.spread.ai" target="_blank"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="var(--dark-grey)" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a></div>
<div class="job-achievements">
<h5 style="cursor: default">Built a docs-as-code publishing pipeline</h5>
<p>Built a pipeline that used GitHub Actions to build the documentation site, Vale to lint content, Docker to deploy the site, and shell scripting.</p>
<h5 onclick="document.querySelector('.spread-docs-modal-container').classList.add('is-visible')">Established the documentation function <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Socialized the company to documentation processes; this included onboarding colleagues to edit and use docs.</p>
<h5 style="cursor: default">Documented the full product range</h5>
<p>Documented the full product range within two quarters. Kept the documentation up to date through two product refreshes.</p>
</div>
</div>
</div>
</div>
<!-- <div id="experience" >
<div class="grid cards">
<ul>
<li>
<div class="mambu">
<h2>Senior Technical Writer</h2>
<div class="company"><abbr title="Mambu is a Software-as-a-Service (SaaS) banking backend that provides services to banks such as N26 and Solaris.">MAMBU</abbr> <span>2021 to 2023</span></div>
<div class="job-blurb">Promoted to team lead; managing a team of three technical writers.</div>
<div class="job-achievements">
<h5 onclick="document.querySelector('.mambu-ecosystem-modal-container').classList.add('is-visible')">Documented the Mambu ecosystem <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Documented integrations, such as payment and compliance services, and the low-code orchestrator that clients used for their workflows.</p>
<h5 onclick="document.querySelector('.mambu-cli-modal-container').classList.add('is-visible')">Documented a command-line interface <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Documented the Mambu <abbr title='Command-line interfaces use text instead of UI elements.'>CLI</abbr> for external engineers to connect to the backend directly.</p>
<h5 style="cursor: default" >Assumed leadership role</h5>
<p>Promoted to team lead, which shifted the role into more managerial responsibilities - on top of working on documentation.</p>
</div>
</div>
</li>
<li>
<div class="spread">
<h2>Documentation Engineer</h2>
<div class="company"><abbr title="SPREAD is a Software-as-a-Service (SaaS) platform for creating actionable and contextualised data for product engineers. The platform counts Volkswagen, Audi, BMW, and other automotive firms as users.">SPREAD</abbr> <span>2024 to 2026</span></div>
<div class="job-blurb">First Technical Writer hired; to establish the documentation function. <a href="https://docs.spread.ai" target="_blank"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="var(--dark-grey)" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a></div>
<div class="job-achievements">
<h5 style="cursor: default">Built a docs-as-code publishing pipeline</h5>
<p>Built a pipeline that used GitHub Actions to build the documentation site, Vale to lint content, Docker to deploy the site, and shell scripting.</p>
<h5 onclick="document.querySelector('.spread-docs-modal-container').classList.add('is-visible')">Established the documentation function <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></h5>
<p>Socialized the company to documentation processes; this included onboarding colleagues to edit and use docs.</p>
<h5 style="cursor: default">Documented the full product range</h5>
<p>Documented the full product range within two quarters. Kept the documentation up to date through two product refreshes.</p>
</div>
</div>
</li>
</ul>
</div>
</div> -->
<div class="mambu-ecosystem-modal-container modal-container">
<label onclick="this.closest('.modal-container').classList.remove('is-visible')" class="close-icon">
<span class="icon close">
<p><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 20c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m2.59 6L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41z"></path></svg></span></p>
</span>
</label>
<div class="modal" id="mambu-ecosystem-modal">
<div class="modal-content">
<img src="assets/media/mpo-complex-process-1200x630.webp" alt="An image of a process in the Mambu Process Orchestartor" height="300px" >
<h5>Challenge</h5>
<p>Mambu Process Orchestrator, a white-labelled product built on top of the Corezoid low-code engine, had no documentation, but was already being used by clients. Some with highly complex workflows that were beginning to break in unexpected ways. The underlying technology was built by a Ukrainian company, who were under strain following the invasion by Russia in the same time period.</p>
<h5>Solution</h5>
<p>Partner with Corezoid to help them develop their documentation alongside Mambu. Get field-tested best practices from clients who were using the tool. Ask the Solution Engineers to sketch out the most urgent work needed and the scope they cover when working with clients. Compile a documentation set in the shortest time possible to fill this documentation gap.</p>
<button type="button" onclick="window.open('https://ecosystem.mambu.com/mpo/overview/', '_blank')" title="This documentation was written in 2022 and since then there may have been additional work done on it by someone else. The product was deprecated towards the end of my time at Mambu, so most of the content has not changed.">See the documentation set</button>
</div>
</div>
</div>
<div class="mambu-cli-modal-container modal-container">
<label onclick="this.closest('.modal-container').classList.remove('is-visible')" class="close-icon">
<span class="icon close">
<p><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 20c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m2.59 6L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41z"></path></svg></span></p>
</span>
</label>
<div class="modal" id="mambu-cli-modal">
<div class="modal-content">
<img src="assets/media/mambu-cli-994x800.webp" alt="An image of the Mambu CLI" height="300px" >
<h5>Challenge</h5>
<p>Document the command-line context as efficiently as possible, with little support from the developing team. Mambu CLI was in prototype and the team had no time to help me document the commands, flags, topics, and functioning of the CLI.</p>
<h5>Solution</h5>
<p>Embedded documentation with the engineering team, where I was part of the race to beta. Engineers would develop a feature alongside me and I would be in the code documenting. This involved working in TypeScript and translating the concepts and trials engineers were developing with them.</p>
</div>
</div>
</div>
<div class="spread-docs-modal-container modal-container">
<label onclick="this.closest('.modal-container').classList.remove('is-visible')" class="close-icon">
<span class="icon close">
<p><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 20c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m2.59 6L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41z"></path></svg></span></p>
</span>
</label>
<div class="modal" id="spread-docs-modal">
<div class="modal-content">
<img src="assets/media/spread-docs-v3-1500x970.webp" alt="An image of Spread documentation site" height="300px" >
<h5>Challenge</h5>
<p>There was no documentation, except for a few Confluence pages put together by engineers. The challenge was to create a documentation site, create the processes and pipelines to maintain it, and to write the content.</p>
<h5>Solution</h5>
<p><strong>In the first three months:</strong>
<ul>
<li>Evaluated and selected options for the technical infrastructure.</li>
<li>Socialized the newly established function in the company.</li>
<li>Created the internal documentation website for testing.</li>
<li>Created the initial build pipelines.</li>
<li>Got to 50% product documentation coverage.</li>
<li>Wrote an initial style guide for other contributors.</li>
</ul>
</p>
<img alt="The first published version of the SPREAD docs site" src="assets/media/spread-docs-v1-1500x938.webp" height="300px" class="body-image" >
<p><strong>In the second quarter:</strong>
<ul>
<li>Got product coverage to 90%.</li>
<li>Moved to multi-repo setup, where engineering teams owned their content and maintained updates.</li>
<li>Built the linting pipelines for contributions from engineers.</li>
<li>Documented white-labelled products with internal customisations.</li>
</ul>
</p>
<img alt="The first public version of the SPREAD docs site" src="assets/media/spread-docs-v2-1500x938.webp" height="300px" class="body-image" >
<p><strong>Within the first year:</strong>
<ul>
<li>Published the documentation site publicly.</li>
<li>Published the SPREAD glossary of terms.</li>
<li>Created course content for new users.</li>
</ul>
</p>
<p><strong>Within the last year:</strong>
<ul>
<li>Moved to a mono-repo setup.</li>
<li>Created more course content.</li>
<li>Added AI enhancements to the build pipeline.</li>
<li>Bettered monitoring of product changes.</li>
<li>Re-started initiative for more people to write documentation.</li>
</ul>
</p>
</div>
</div>
</div>
<div id="skills" >
<div class="grid cards">
<ul>
<li>
<h3>Technical</h3>
<div class="technical-icons">
<div class="technical">
<span><img src="assets/media/doc-detective-logo-200x200.webp" alt="Zensical logo" > <abbr title='Doc Detective allows you to test and check documentation for accuracy and errors. Used this tool to keep the Spread documentation up to date.'>Doc Detective</abbr></span>
</div>
<div class="technical">
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.983 11.078h2.119a.186.186 0 0 0 .186-.185V9.006a.186.186 0 0 0-.186-.186h-2.119a.185.185 0 0 0-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 0 0 .186-.186V3.574a.186.186 0 0 0-.186-.185h-2.118a.185.185 0 0 0-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 0 0 .186-.186V6.29a.186.186 0 0 0-.186-.185h-2.118a.185.185 0 0 0-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 0 0 .184-.186V6.29a.185.185 0 0 0-.185-.185H8.1a.185.185 0 0 0-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 0 0 .185-.186V6.29a.185.185 0 0 0-.185-.185H5.136a.186.186 0 0 0-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 0 0 .186-.185V9.006a.186.186 0 0 0-.186-.186h-2.118a.185.185 0 0 0-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 0 0 .184-.185V9.006a.185.185 0 0 0-.184-.186h-2.12a.185.185 0 0 0-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 0 0 .185-.185V9.006a.185.185 0 0 0-.184-.186h-2.12a.186.186 0 0 0-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 0 0 .184-.185V9.006a.185.185 0 0 0-.184-.186h-2.12a.185.185 0 0 0-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51q-.508.001-1.01.087c-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.75.75 0 0 0-.75.748 11.4 11.4 0 0 0 .692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137a15.7 15.7 0 0 0 2.93-.266 12.3 12.3 0 0 0 3.823-1.389 10.5 10.5 0 0 0 2.61-2.136c1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"></path></svg> <abbr title="Docker allows you to create and run images of custom development environments on top of any system. At Spread, the documentation site was deployed as a containerised application.">Docker</abbr></span>
</div>
<div class="technical">
<span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 559 446" ><path fill="currentColor" d="M390 56v12c.1 2.3.5 4 1 6a73 73 0 0 0 12 24c2 2.3 5.7 4 7 7 4 3.4 9.6 6.8 14 9 1.7.6 5.7 1.1 7 2 1.9 1.3 2.9 2.3 0 4v1c-.6 1.8-1.9 3.5-3 5q-3 4-7 7c-4.3 3.2-9.5 6.8-15 7h-1q-2 1.6-5 2h-4c-5.2.7-12.9 2.2-18 0h-6c-1.6 0-3-.8-4-1h-3a17 17 0 0 1-6-2h-1c-2.5-.1-4-1.2-6-2l-4-1c-8.4-2-20.3-6.6-27-12h-1c-4.6-1-9.5-4.3-13.7-6.3s-10.5-3-13.3-6.7h-1c-4-1-8.9-3.5-12-6h-1c-6.8-1.6-13.6-6-20-9-6.5-2.8-14.6-5.7-20-10h-1c-7-1.2-15.4-4-22-6h-97c-5.3 4.3-13.7 4.3-18.7 10.3S90.8 101 88 108c-.4 1.5-.8 2.3-1 4-.2 1.6-.8 4-1 5v51c.2 1.2.8 3.2 1 5 .2 2 .5 3.2 1 5a79 79 0 0 0 6 12c.8.7 1.4 2.2 2 3 1.8 2 4.9 3.4 6 6 9.5 8.3 23.5 10.3 33 18h1c5.1 1.2 12 4.8 16 8h1c4 1 8.9 3.5 12 6h1q4.6 1.2 8 4h1c2 .1 2.6 1.3 4 2 1.6.8 2.7.7 4 2h1q2.5.3 4 2h1c3 .7 6.7 2 9 4h1c4.7.8 13.4 3.1 17 6h1c2.5.1 4 1.3 6 2 1.8.4 3 .8 5 1q3 .4 5 1c1.6-.2 2 0 3 1h1q2.5-.5 4 1h1q2.5-.5 4 1h1c2.2-.2 4.5-.3 6 1h1q4-.4 7 1h45c1.2-.2 3.1-1 5-1h6c1.5-.6 2.9-1.3 5-1h1q1.5-1.4 4-1h1q1.5-1.4 4-1h1c2.4-1.3 5-1.6 8-2l5-1c2-.7 3.6-1.6 6-2 4-.7 7.2-1.7 11-3 2.3-1 4.2-2.5 7-3h1q1.5-1.7 4-2h1c1.9-1.5 3.9-2 6-3q2.9-1.6 6-3a95 95 0 0 0 11-5c4.4-2.8 8.9-6 14-8 0 0 .6.2 1 0 1.8-2.8 7-4.8 10-6 0 0 .6.2 1 0 1.5-2.4 5.3-4 8-5 0 0 .6.2 1 0 1.5-2.4 5.3-4 8-5 0 0 .6.2 1 0 1.3-2 3.8-3.1 6-4 0 0 .6.2 1 0 2-3 7.7-5.6 11-7l5-2c6.3-3.8 11.8-9.6 18-14v-1c0-1.9-.4-4.2 0-6-1-4.5-3.9-5.5-7-8h-1c-1.2 0-2.8-.2-4 0-8.9 1.7-16.5 11.3-25.2 14.8-8.8 3.4-16.9 10.7-25.8 14.2h-1c-10.9 10.6-29.2 16-42.7 23.3S343.7 234.6 328 235h-1q-1.5 1.4-4 1h-1q-1.5 1.4-4 1h-1c-1.5 1.3-3.9 1.2-6 1h-1c-1.7 1.3-4.6 1.2-7 1-1 .2-2.4 1-4 1h-5c-6.6 0-13.4.4-20 0-1.9-.1-2.7.3-4-1h-8c-2.8-.2-5.7-1.3-8-2h-2q-5.7.4-10-2h-1q-4.5 0-8-2h-1a10 10 0 0 1-6-2h-1c-5.9-.2-12-3.8-17-6l-4-1c-1.7-.5-2.8-.7-4-2h-1q-2.5-.2-4-2h-1q-3.4-.9-6-3h-1c-3.5-.8-7.3-2.9-10-5h-1c-1.7 0-2.2-.7-3-2h-1c-11.6-2.7-23.2-11.5-34.2-15.8-11-4.2-25.9-9.2-29.8-21.2h4c16.2 0 32.8-1 49 0 1.7.1 3 .8 4 1 2.1.4 3.4-.5 5 1h1c3.6.1 8.4 1.8 11 4h1a45 45 0 0 1 18 8h1q4.6 1.2 8 4h1c4.2 1 8.3 3.4 12 5q3.4 1.2 7 2c5.7 1.3 13 2.3 18 5h1c3.7-.2 7 1.1 10 2h9c1.6 0 3 .8 4 1h32c2.2-1.6 6-1 9-1h1a63 63 0 0 1 22-4 22 22 0 0 1 8-2c1.7-1.4 3.7-1.6 6-2a81 81 0 0 0 12-3c2.3-1 4.2-2.5 7-3h1q1.5-1.7 4-2h1c1.9-1.5 3.6-2.2 6-3l3-1c4.1-2.3 8.4-5.2 13-7 0 0 .6.2 1 0 1.5-2.4 6.3-5 9-6 0 0 .6.2 1 0 5.3-8.1 17.6-12.5 24.8-20.2C439.9 144 445 133 452 126v-1a12 12 0 0 1 2-5c2.1-2.2 8.9-1 12-1q2 .2 4 0c1-.2 2.3-1.2 4-1h1q2.1-1.5 5-2h1q2.1-1.9 5-3s.6.2 1 0c9-9.3 18-15.4 23-28 1.1-2.8 3.5-6.4 4-9 .2-1 .2-3 0-4-1.5-6-12.3-2.4-15.7 2.3S484.7 80 479 80h-7c-7.8 4.3-19.3 5.7-23 16a37 37 0 0 0-22-24c-1.5-.5-2.5-.7-4-1-2.1-.5-3.6-.2-5-2h-1a22 22 0 0 1-12-8c-2-2.9-3.4-6.5-6-9h-1c-3.9-.6-6.1 1-8 4m-181 45h1c2.2-.2 4.5-.3 6 1h1q2.5-.5 4 1h1a33 33 0 0 1 17 7h1c4.4 1 8.2 4.1 12 6 2.1 1 4.1 1.5 6 3h1c4 1 8.9 3.5 12 6h1c4 1 8.9 3.5 12 6h1c4 1 8.9 3.5 12 6h1a61 61 0 0 1 21 10h1c3.5.8 7.3 2.9 10 5h1c6.1 1.4 12.3 5 18 7 1.8.4 3 .8 5 1 1.8.2 3.7.8 5 1q2.5-.5 4 1h6c2.5 0 4 .3 6 1h3q-.7 2.1-3 2a46 46 0 0 1-16 7l-10 3c-2 .8-3.4 1.9-6 2h-1c-2.6 2.1-7.5 3-11 3h-1c-3.1 2.5-10.7 3.5-15 3h-1c-1.5 1.3-3.9 1.2-6 1-1 .2-2.4 1-4 1h-11c-3.8.4-8.3.4-12 0h-9c-2.3 0-4.3-.7-6-1h-3c-1.8 0-2.9-.7-4-1-3.5-.8-7-.7-10-2h-1c-4.1-.7-9.8-1.4-13-4h-1q-4-.6-7-3h-1q-2.5-.2-4-2h-1q-3.4-.9-6-3h-1c-7.2-1.7-13.3-5.9-20.2-8.8-7-2.8-16.2-4.3-22.8-7.2h-11c-14 0-28.9.3-42-1-2.3 0-4.8.3-7 0a6 6 0 0 1-5-5c-1.8-4.8-.4-10.4 0-15 0-4.3-.4-8.7 0-13 .2-3.2 2.2-7.3 4-10q2-3 5-5c2.1-2 5.4-2.3 8-3 15.6-3.9 36.3-1 53-1 5.2 0 12-.5 17 0s12.2-1.8 16 1Z"></path><path fill="currentColor" d="M162 132v1c1.8 2.9 4.5 5.3 8 6 .3-.2 3.7-.2 4 0 7-1.4 9.2-8.8 7-15v-1a14 14 0 0 0-7-4c-.3.2-3.7.2-4 0-6.5 1.3-8.6 6.8-8 13Z"></path><path fill="currentColor" d="M465 211h-1c-18.2 14.6-41.2 24.6-60 39-19 14.2-42.7 29.3-66 34l-4 1c-2.4 1-4 2-7 2h-1q-3.5 2-8 2h-1c-1.3 1.2-3 1.1-5 1h-2q-2.6 1.1-6 1h-2c-3 1.2-6.5 1-10 1-6.3.6-13.8.6-20 0-3.4 0-8.4.9-11-1h-1c-2.2.2-4.5.3-6-1h-1c-2 .2-3.7.2-5-1h-1c-7.6.5-16.5-3.4-23-6l-4-1a129 129 0 0 1-36.2-15.8c-10.4-6.6-23.2-12.8-32.5-20.5-9.2-7.7-23.8-12.8-30.3-22.7h-1c-2.3-1.4-4.5-2.7-6-5h-1c-4-2.5-8.5-5.2-12-8h-9a9 9 0 0 0-6 7c.3 3.3 0 6.7 0 10v9c.2 1.6 1 3.8 1 6v3c.2 1 1.2 2.2 1 4v1c1.2 1.2.8 2.2 1 4 .8 6.7 3 12.6 5 19 1.7 4.3 4.2 9.1 5 14v1q1.8 1.5 2 4v1a36 36 0 0 1 5 10c.7 2 1 3 2 5 8 12.7 15.7 25.5 25.8 37.3 10 11.7 20.8 20.6 32.4 30.4 11.7 9.9 28.3 14 39.8 23.3h1q2.5.3 4 2h1c2.8.4 4.8 2 7 3l7 2c5.7 1.3 13 2.3 18 5h1c2.1-.3 3.6.8 5 1h3c2.8.2 5.8 1 8 2h8c2.1 0 4.6.8 6 1h21c1.2-.2 3.2-1 5-1h9c3.3-1 7-2.4 11-2h1c2.7-2.2 7.4-2.4 11-3a55 55 0 0 0 8-2c6.5-2.6 13.9-6.3 21-8h1c8.5-6.8 20.6-9.7 29.2-16.8 8.7-7 18.3-12.8 26.8-20.2 4.4-3.8 9-9 13-13 14.8-14.8 20.7-34.6 33-50v-1q.9-3.4 3-6v-1q.3-2.5 2-4v-1c.5-3.3 2-8.6 4-11v-1q0-3.5 2-6v-1c1.1-6.7 2.4-15 5-21v-1c-.2-2-.2-3.7 1-5v-8c0-5.3-.5-10.8 0-16a14 14 0 0 0-4-6c-1-.5-1.1-.4-2-1h-6q-2.1 1.5-5 2m-6 38c-2.1 13.4-21.2 20.3-31 30-10 9.5-23.7 19-35 27-11.5 8-25.1 19.7-39 23h-1a22 22 0 0 1-10 4h-1a25 25 0 0 1-12 4h-1q-3.5 2-8 2h-1c-1.1 1.1-2.3 1-4 1h-2c-1.2.4-2.2 1-4 1h-2c-1.8.7-3.6 1.3-6 1h-1c-1.2 1.2-2.3 1-4 1h-5c-5.7.6-12.3.8-18 0h-4c-1.9 0-2.7-.6-4-1h-6c-1.9 0-2.7.3-4-1h-1q-2.5.5-4-1h-1c-8.1.5-16.8-3.6-24.2-5.8S210 329.8 204 325h-1c-12.8-5-27.1-15.6-37.7-24.3S138.8 284.2 131 273c-.3-.2-1 0-1 0-5.7-4.4-16.6-10-19-17-.9-2.6-1-5.4-2-8-.8-2.2-2.5-5-2-8a667 667 0 0 0 88 56h1q3.4.9 6 3h1c2.8.4 4.8 2 7 3q5 1.8 10 3l6 2q2.9.6 6 1 3 .4 5 1c1.6-.2 2 0 3 1h1c2-.2 3.7-.2 5 1h1c2.2-.3 3.4.4 5 1h8c1.6 0 3 .9 4 1h40c1.8-1.3 4.6-1.2 7-1h1c1.2-1.2 3.2-1.2 5-1h1c1.2-1.2 3.2-1.2 5-1h1c1.1-1.1 2.3-1 4-1h2c3.5-1.7 6.9-2.3 11-3l4-1c3.4-1.4 7.1-3 11-4 1.5-.4 2.5-.5 4-1 1.4-.7 2-1.9 4-2h1q2.6-2.1 6-3h1c2.5-2 6-3.8 9-5l3-1c1.4-.9 2-2.5 4-3h1q1.4-2.2 4-3h1c7.3-7.7 19-13.2 27.7-19.3 8.8-6.1 18.2-15 28.3-18.7.4-.2 1 0 1 0q3.8-3.9 9-6c1.3 2.5-.5 6.7-1 10m-20 55c-.2.4 0 1 0 1-3.4 9.6-12.7 19-19 27a88 88 0 0 1-12 12 214 214 0 0 1-26.7 20.3c-9.5 5.8-20 14.8-31.3 16.7h-1a22 22 0 0 1-10 4h-1c-3.2 2.6-8.9 3.3-13 4h-1q-1.5 1.4-4 1h-1q-1.5 1.4-4 1h-1c-4.9 2.3-10.5 1-16 2-1 .2-2.5 1-4 1-6.2.4-12.8.3-19 0-1.8 0-3.8-.8-5-1h-4c-1.6 0-3-.9-4-1h-4c-3.9-.3-8.8-1.3-12-3h-1c-3.3-.5-7.5-1-10-3h-1c-3.6-.1-8.4-1.8-11-4h-1c-3.9-.6-8-2.6-11-5h-1c-16.1-3.8-32.2-18.9-45-29a200 200 0 0 1-40-51c17.7 11.5 35 25.5 52 38h1c4 1.6 12.8 5.4 15 9h1c4.6 1 10.4 4.1 14 7h1q2.5.3 4 2h1c3.3.5 8.6 2 11 4h1q3.5 0 6 2h1q2.5-.5 4 1h1q2.5-.5 4 1h1c3.8-.2 7.9 1 11 2h9c1.6 0 3 .8 4 1h32c1.2-.2 3.2-1 5-1h8a139 139 0 0 1 20-4l5-1c2-.7 3.7-1.5 6-2l4-1c1.5-.6 3-1.7 5-2h1q3-2.4 7-3h1q2.6-2.1 6-3h1c11.7-9.4 27.6-14.6 39-25 11.6-10.3 25-18.5 37-28a15 15 0 0 1-5 10Z"></path></svg> <abbr title='Dokploy is a platform for deploying containerised applications. My server uses Dokploy and this site is delivered as a Docker application.'>Dokploy</abbr></span>
</div>
<div class="technical" >
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12.002 0a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277m8.54 4.931a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277m0 9.862a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277m-8.54 4.931a2.138 2.138 0 1 0 0 4.276 2.138 2.138 0 1 0 0-4.276m-8.542-4.93a2.138 2.138 0 1 0 0 4.276 2.138 2.138 0 1 0 0-4.277zm0-9.863a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277m8.542-3.378L2.953 6.777v10.448l9.049 5.224 9.047-5.224V6.777zm0 1.601 7.66 13.27H4.34zm-1.387.371L3.97 15.037V7.363zm2.774 0 6.646 3.838v7.674zM5.355 17.44h13.293l-6.646 3.836z'></path></svg> <abbr title='GraphQL is an API that returns more concise results than REST APIs. It also includes a self-documenting feature, which I managed by creating guidelines for engineers to write endpoint descriptions.'>GraphQL</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M11.754 0a4 4 0 0 0-2.049.596L3.33 4.532a4.25 4.25 0 0 0-2.017 3.615v8.03a4.13 4.13 0 0 0 2.067 3.574l6.486 3.733a3.88 3.88 0 0 0 3.835.018l7.043-3.966a3.82 3.82 0 0 0 1.943-3.323V7.752a3.57 3.57 0 0 0-1.774-3.084L13.817.541a4 4 0 0 0-2.063-.54zm.022 1.674c.413-.006.828.1 1.2.315l7.095 4.127c.584.34.941.96.94 1.635v8.462c0 .774-.414 1.484-1.089 1.864l-7.042 3.966a2.2 2.2 0 0 1-2.179-.01l-6.485-3.734a2.45 2.45 0 0 1-1.228-2.123v-8.03c0-.893.461-1.72 1.221-2.19l6.376-3.935a2.3 2.3 0 0 1 1.19-.347zm-4.7 3.844V18.37h2.69v-5.62h4.46v5.62h2.696V5.518h-2.696v4.681h-4.46V5.518Z'></path></svg> <abbr title='Hugo is a general purpose static site generator. The Mambu ecosystem documentation site was created using this.'>Hugo</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7c0 43.6-25.6 63.5-62.9 63.5m85.8-43 34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6-39.1 0-64.4-18.6-76.7-43"></path></svg> <abbr title='JavaScript is a programming language. I use it for creating dynamic content and animations, such as the GSAP and D3 libraries that are used on this website.'>JavaScript</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m23.718.668-.08.04s-4.563 2.174-8.244 2.651c-1.854.24-4.554.481-6.964.62a66 66 0 0 1-3.254.117c-.917.005-1.63-.032-1.95-.11a20 20 0 0 1-2.4-.732l-.252-.1.346 1.172-.92.81.248.436.44.033 1.052.131.162.514.635.057.318 1.078.092.006s1.338.115 1.762.115c.365 0 .93-.04 1.072-.05l.024.396.287.054v.315l-.8.71.157.028c-.14.01-.227.018-.5.03-.43.017-.934.02-1.203-.018-.586-.086-.71-.086-.71-.086H2.98l-.122.13-.046.446h.152l.055 1.111 2.933-.113-.205 3.682-.02.347-2.242-.127-.02-.761h.538l.057-.42.464-.106.223-.312-2.111-.51-1.705.506.465.388h.166l.025.334.494.028v.763l-.611.157.19.404.105.068v.825h.343v3.296l-.566.086.098 1.247.334.056-.055 2.342 1.803.033-.32-2.303 1.982-.048-.14 1.087-.25 1.032 2.609.033.027-2.28 1.322-.12-.072 1.294-.063.99h1.633l-.053-2.3.176.027.067-1.392h-.243l-.058-.34-.131-1.29.049-1.364h.295v-1.182l-.364.027.04-.806.43-.043.023-.352.172-.025.51-.389-1.827-.375-1.71.379.286.469.239-.02.054-.004.034.442.41-.02.004.674-1.526-.035.053-.877.059-.926v-1.213l.048-1.152 3.485-.178 4.155-.24.033.674-.152 1.949-.063 1.693-1.32-.023-.006-1.018.574-.021.028-.373.27-.041-.012-.057.152-.01.29-.388-2.01-.471-1.986.426.258.45.14-.01v.089h.246v.402l.524.008-.006.856h-.527l-.014.505.187.022-.021.978.393.02-.044 3.615-.523.108.016.423h.176v.985h.289l-.07 1.205-.112 1.314 2.17.057-.07-1.172-.138-.848-.022-.593 1.325-.024-.04 1.002-.009 1.33 1.033.082 1.252-.05.533-.157-.25-.76-.053-1-.08-.583 1.233-.045-.057.742-.006 1.515.738.069.631-.016.416-.13-.187-1.424-.049-.862.25-.027.006-.895.08-.017-.027-.43h-.303l-.049-.527-.023-2.692.222-.006v-.902l.096.014v-.461l-.334-.027.006-.836.57-.051-.033-.362.26-.021-.024-.117.58-.29-2.056-.413-1.88.38.231.432.223-.02.014.077h.203l.011.426.547-.006.035.773-1.67-.012-.212-1.457-.178-.826-.145-1.469.075-.746 3.847-.293.012-1.316.201-.05-.023-.38-.239-.138h-.037l-.357.05-.793.116a62 62 0 0 1-1.625.216l-.19.02-.015-.178-.785-.41.006-.275.271-.008.02-.672c.09-.006.352-.024.771-.062.484-.045 1.04-.105 1.361-.18.597-.14 1.452-.28 1.452-.28l.076-.013.408-1.108.805-.234.066-.184 1.78-.492.306-.252-.717-1.564.047-.236.344-.18.297-.906-.252-.223zM14.825 6.73l-.01.526.407.017-.016.32-.789.518-.086.258-1.86.09.01-.184.112-.18.01-.154.001-.228.067-.156.031-.16v-.092l.08-.323zm-5.18.461-.043.264.199.234-.014.387.176.27-.047.328.025.035-1.847.074.02-.152-.653-.354-.022-.345.29-.014.029-.598zm4.014 8.5 1.258.082-.05 1.938.183 1.54-1.34-.046zm-10.225.084 2.16.112L5.4 17.17v1.219l.137.523-2.09.098zm15.376.01v3.256l-1.29.094-.052-1.723-.158-1.592zm-11.494.076 1.538.006.017 2.996-1.43.026-.076-.928-.006-1.047z'></path></svg> <abbr title='Jinja is a templating engine that can be used to extend MkDocs Material and Zensical. Used this to create highly customized doocumentation sites.'>Jinja</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M22.27 19.385H1.73A1.73 1.73 0 0 1 0 17.655V6.345a1.73 1.73 0 0 1 1.73-1.73h20.54A1.73 1.73 0 0 1 24 6.345v11.308a1.73 1.73 0 0 1-1.73 1.731zM5.769 15.923v-4.5l2.308 2.885 2.307-2.885v4.5h2.308V8.078h-2.308l-2.307 2.885-2.308-2.885H3.46v7.847zM21.232 12h-2.309V8.077h-2.307V12h-2.308l3.461 4.039z'></path></svg> <abbr title='Markdown is a markup language used to create and maintain content. I have used it as the markup language for most of the written documentation.'>Markdown</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m17.029 18.772.777 1.166-5.417 2.709L0 16.451V4.063l5.417-2.709 5.298 7.948 7.867-5.24L24 1.354V16.84l-5.417 2.709zm2.023-13.827v13.253l3.949-1.975V2.97zM5.076 2.642 1.458 4.45 12.73 21.358l3.618-1.809z'></path></svg> <abbr title='MkDocs Material is a customizable static site generator for documentation content. I built the Spread documentation using this tool.'>MkDocs Material</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M21.039 0a2.96 2.96 0 0 0-2.65 4.274l-6.447 6.447a2.96 2.96 0 1 0 1.335 1.336l6.447-6.447A2.959 2.959 0 1 0 21.04 0zM10.628 2.745q-.108.001-.214.004-.107.002-.215.005a11 11 0 0 0-1.335.138l-.03.005-.185.033-.105.02a8 8 0 0 0-.289.062l-.032.008a10.7 10.7 0 0 0-2.55.95l-.155.089q-.094.052-.187.105-.07.039-.14.079H5.19l-.01.005-.036.02v.002l.111.184 3.15 5.23a4 4 0 0 1 .38-.202 4.3 4.3 0 0 1 1.628-.413q.107-.007.214-.008zm.428.01v6.333q.489.05.96.209l4.66-4.66q-.259-.181-.528-.347l-.026-.015q-.084-.052-.168-.1l-.098-.056-.099-.055-.171-.092-.027-.014a11 11 0 0 0-1.425-.617c-.69-.241-1.403-.41-2.128-.505l-.089-.012-.09-.01-.17-.019-.049-.004-.204-.017a6 6 0 0 0-.255-.015q-.046-.004-.093-.004M4.782 4.498a10 10 0 0 0-1.36 1.062l4.461 4.461.018.018q.073-.06.149-.116l-.011-.018zm-1.67 1.36q-.074.076-.147.154l-.149.155q-.494.536-.902 1.118l-.039.056a11 11 0 0 0-.216.326 10.6 10.6 0 0 0-1.65 5.276l-.006.215-.003.214h6.317c0-.072.007-.143.01-.214.005-.072.006-.144.013-.215a4.3 4.3 0 0 1 .952-2.3c.045-.055.096-.106.144-.16.048-.052.093-.107.144-.158zm16.255 1.464-4.663 4.663q.158.47.21.959h6.332l-.004-.094a12 12 0 0 0-.032-.456l-.005-.052-.026-.241v-.009l-.033-.24v-.009a11 11 0 0 0-.327-1.493l-.003-.01-.07-.228-.01-.03-.069-.204-.02-.055a6 6 0 0 0-.153-.405l-.093-.227-.063-.144-.037-.081-.08-.171-.024-.052-.096-.194-.014-.027-.112-.212-.004-.008a11 11 0 0 0-.604-.98m-4.43 6.05c0 .071-.006.142-.01.214q-.003.108-.012.214a4.3 4.3 0 0 1-.952 2.301c-.045.055-.096.107-.144.16s-.093.108-.144.159l4.467 4.467q.075-.078.148-.155.076-.078.148-.155.497-.538.905-1.122l.032-.046.098-.144.085-.13.04-.063a10.6 10.6 0 0 0 1.647-5.272q.004-.107.006-.214.003-.107.004-.214zM.01 13.8l.004.093.01.179.005.076.017.206.005.046q.01.115.024.228l.003.022.033.248q.109.758.327 1.497l.002.006q.034.116.071.23l.004.014.005.014a16 16 0 0 0 .153.439l.03.08.059.148.093.228.062.14.038.084.078.169.027.054a11 11 0 0 0 .225.441l.025.043 5.408-3.258.02-.012a4.3 4.3 0 0 1-.395-1.414h-.025zm.505 2.846-.206.058.002.005zm6.425-1.052-5.415 3.262q.125.207.259.406l.008.014.004.005.008.014h.001l.022.032.001.002v.001a11 11 0 0 0 .298.417l.006.008a10 10 0 0 0 .29.368l.033.04q.064.078.13.153l.057.065.112.127.064.069.029.031.083.09.035.035q.073.077.149.153L7.58 16.42a4 4 0 0 1-.285-.321 4.4 4.4 0 0 1-.356-.505zm6.416 1.111q-.075.06-.15.116l.011.018 3.257 5.407q.227-.148.446-.307.473-.348.914-.756l-4.46-4.46zm-5.457.003-.015.015-4.46 4.46.195.176q.033.03.065.058l.152.13.215.174.023.017.191.148.008.005q.403.3.834.564l.03.018.164.097.101.057a6 6 0 0 0 .27.148q.012.007.025.013.243.127.493.24l.158-.385 2.243-5.448.009-.02a4.3 4.3 0 0 1-.701-.467m4.951.353q-.092.054-.187.104a4.32 4.32 0 0 1-3.271.336c-.069-.02-.135-.047-.203-.071-.067-.024-.136-.044-.202-.072l-2.242 5.444-.088.213-.075.183v.001l.017.007.019.007.005.003q.079.03.159.06.1.04.2.077l.102.04c.702.247 1.43.42 2.168.518l.087.012.09.01.172.019a7 7 0 0 0 .252.022q.035 0 .071.003l.184.011.112.005a7 7 0 0 0 .358.007h.05a10.7 10.7 0 0 0 1.793-.15l.185-.034.105-.02.109-.023.18-.04.032-.008a10.7 10.7 0 0 0 2.55-.95q.078-.044.156-.089.094-.052.187-.105.065-.035.13-.073h.001l.002-.002.002-.001.002-.001.007-.004.042-.025-.11-.183-.11-.184zm3.262 5.414-.042.025zm-.055.033h-.002z'></path></svg> <abbr title='The OpenAPI specification (OAS) is a standard for documenting REST APIs. The legacy Mambu API reference used OAS2 and I worked on upgrading it to OAS3.'>OpenAPI</abbr></span>
</div>
<div class="technical">
<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m14.25.18.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z'></path></svg> <abbr title='Python is a general purpose programming language. Used this to create dynamic content at Spread.'>Python</abbr></span>
</div>
<div class="technical">
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 19v-3h8v3zm-4.5-6L2.47 7h4.24l4.96 4.95c.58.59.58 1.55 0 2.12L6.74 19H2.5z"></path></svg> <abbr title='Bash or ZSH allow you to create shell scripts in the terminal to automate tasks and use packages. Used Schell scripts for some tasks in the publishing pipeline, such as prepush vulnerability checks.'>Shell</abbr></span>
</div>
<div class="technical">
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75q.918 0 1.627.111a6.4 6.4 0 0 1 1.306.34v2.458a4 4 0 0 0-.643-.361 5 5 0 0 0-.717-.26 5.5 5.5 0 0 0-1.426-.2q-.45 0-.819.086a2.1 2.1 0 0 0-.623.242q-.254.156-.393.374a.9.9 0 0 0-.14.49q0 .294.156.529.156.234.443.444c.287.21.423.276.696.41q.41.203.926.416.705.296 1.266.628.561.333.963.753.402.418.614.957.213.538.214 1.253 0 .986-.373 1.656a3.03 3.03 0 0 1-1.012 1.085 4.4 4.4 0 0 1-1.487.596q-.85.18-1.79.18a10 10 0 0 1-1.84-.164 5.5 5.5 0 0 1-1.512-.493v-2.63a5.03 5.03 0 0 0 3.237 1.2q.5 0 .872-.09.373-.09.623-.25.249-.162.373-.38a1.02 1.02 0 0 0-.074-1.089 2.1 2.1 0 0 0-.537-.5 5.6 5.6 0 0 0-.807-.444 28 28 0 0 0-1.007-.436q-1.377-.575-2.053-1.405t-.676-2.005q0-.92.369-1.582.368-.662 1.004-1.089a4.5 4.5 0 0 1 1.47-.629 7.5 7.5 0 0 1 1.77-.201m-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z"></path></svg> <abbr title='TypeScript is the stricter version of JavaScript. Documenting the Mambu CLI required working with TypeScript.'>TypeScript</abbr></span>
</div>
<div class="technical">
<span class="twemoji"><svg version="1.0" viewBox="0 0 417.000000 387.000000" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6"><defs></defs><g transform="translate(0.000000,387.000000) scale(0.100000,-0.100000)" fill="currentColor" stroke="none"><path d="M2761 3207 c-30 -61 -162 -329 -293 -593 -131 -265 -238 -488 -238 -495 0 -8 75 -165 166 -349 92 -184 170 -346 175 -359 8 -19 12 -21 24 -11 8 7 15 16 15 20 0 5 132 275 293 602 162 326 370 748 464 938 94 190 169 348 166 353 -2 4 -165 7 -361 7 l-357 0 -54 -113z"></path><path d="M560 2467 c0 -2 20 -39 45 -83 25 -43 45 -82 45 -86 0 -4 134 -279 299 -610 452 -914 541 -1095 541 -1107 0 -7 12 -16 26 -21 33 -13 684 -13 704 0 12 8 13 13 3 27 -7 10 -30 54 -52 98 -41 84 -332 674 -673 1365 -110 223 -205 408 -212 412 -10 7 -726 12 -726 5z"></path></g></svg> <abbr title="Vale allows you to language lint content. All of my documentation work has included Vale as part of the publication process.">Vale</abbr></span>
</div>
<div class="technical">
<span><img src="assets/media/zensical-logo-200x200.webp" alt="Zensical logo" > <abbr title='Zensical is the successor to MkDocs Material. This site uses Zensical to create a heavily-customized experience.'>Zensical</abbr></span>
</div>
</div>
</li>
<li>
<h3>Writing</h3>
<div class="writing" >
<div class="writing-types" >
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3 1 9l11 6 9-4.91V17h2V9M5 13.18v4L12 21l7-3.82v-4L12 17z"></path></svg></span>
<span><strong>Course</strong></span><br><a href="https://docs.spread.ai/getting-started/getting-started-overview" target="_blank"><span>Building solutions</span><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a>
</div>
<div class="writing-types" >
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 19c0 1.08.25 2.09.68 3H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v8.08c-.33-.05-.66-.08-1-.08-3.87 0-7 3.13-7 7m11.8 1.4c.1 0 .1.1 0 .2l-1 1.7c-.1.1-.2.1-.3.1l-1.2-.4c-.3.2-.5.3-.8.5l-.2 1.3c0 .1-.1.2-.2.2h-2c-.1 0-.2-.1-.3-.2l-.2-1.3c-.3-.1-.6-.3-.8-.5l-1.2.5c-.1 0-.2 0-.3-.1l-1-1.7c-.1-.1 0-.2.1-.3l1.1-.8v-1l-1.1-.8c-.1-.1-.1-.2-.1-.3l1-1.7c.1-.1.2-.1.3-.1l1.2.5c.3-.2.5-.3.8-.5l.2-1.3c0-.1.1-.2.3-.2h2c.1 0 .2.1.2.2l.2 1.3c.3.1.6.3.9.5l1.2-.5c.1 0 .3 0 .3.1l1 1.7c.1.1 0 .2-.1.3l-1.1.8v1zM20.5 19c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5.7 1.5 1.5 1.5 1.5-.7 1.5-1.5"></path></svg></span>
<span><strong>Theory</strong></span><br><a href="https://docs.spread.ai/getting-started/build-custom-solutions/module-4/understanding-graphql-mutations" target="_blank"><span>Understanding GraphQL mutations</span><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a>
</div>
<div class="writing-types" >
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 72c0-13.2 10.7-24 24-24h48c13.3 0 24 10.7 24 24v104h24c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h24V96H24C10.7 96 0 85.3 0 72m30.4 229.2C41.8 292.6 55.7 288 70 288h4.9c33.7 0 61.1 27.4 61.1 61.1 0 19.6-9.4 37.9-25.2 49.4l-24 17.5H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H29.3C13.1 464 0 450.9 0 434.7c0-9.4 4.5-18.2 12.1-23.7l70.5-51.3c3.4-2.5 5.4-6.4 5.4-10.6 0-7.2-5.9-13.1-13.1-13.1H70c-3.9 0-7.7 1.3-10.8 3.6l-20.8 15.6c-10.6 8-25.6 5.8-33.6-4.8s-5.8-25.6 4.8-33.6zM224 64h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32m0 160h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32m0 160h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32"></path></svg></span>
<span><strong>Tutorial</strong></span><br><a href="https://docs.spread.ai/solutions/byos/flows/tutorials/use-data-in-a-flow" target="_blank"><span>Using data in a Flow</span><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a>
</div>
<div class="writing-types" >
<span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="m230.6 390.6-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32v306.7l25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm182-340.9c50.7 101.3 77.3 154.7 80 160 7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3l-7.2-14.3h-88.4l-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9c2.7-5.3 29.3-58.7 80-160C360.8 38.9 371.9 32 384 32s23.2 6.8 28.6 17.7M384 135.6 363.8 176h40.4zM288 320c0-17.7 14.3-32 32-32h128c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L397.3 416H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l73.4-73.4H320c-17.7 0-32-14.3-32-32z"></path></svg></span>
<span><strong>Reference</strong></span><br><a href="https://docs.spread.ai/glossary/glossary" target="_blank"><span>Spread and industry terminology</span><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96c0-35.3 28.7-64 64-64zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h54.1l-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103z"></path></svg></span></a>
</div>
</div>
</li>
<li>
<h3>Media</h3>
<div class="media-tools" >
<figure>
<img src="assets/media/mermaid-logo-200x200.webp" alt="The Mermaid logo" >
<figcaption><strong>Mermaid</strong><br>Created programmatic diagrams to explain complex interactions.</figcaption>
</figure>
</div>
<div class="media-tools" >
<figure>
<img src="assets/media/affinity-logo-160x160.webp" alt="The Affinity logo" >
<figcaption><strong>Affinity</strong><br>Edited images and created PDF user guides for legacy clients.</figcaption>
</figure>
</div>
<div class="media-tools" >
<figure>
<img src="assets/media/davinciresolve-logo-200x200.webp" alt="The Da Vinci Resolve logo" >
<figcaption><strong>Da Vinci Resolve</strong><br>Edited video run-throughs for tutorials.</figcaption>
</figure>
</div>
</li>
<li>
<h3>AI</h3>
<div class="grid cards ai">
<ul>
<li>
<figure>
<img src="assets/media/ollama-logo-250x250.webp" alt="The Ollama logo" >
<figcaption>Used Ollama to manage and run models locally.</figcaption>
</figure>
</li>
<li>
<figure>
<img src="assets/media/n8n-logo-250x250.webp" alt="The n8n logo" >
<figcaption>Created workflows to review drafts as reader personas.</figcaption>
</figure>
</li>
<li>
<figure>
<img src="assets/media/modelcontextprotocol-logo-250x250.webp" alt="The MCP logo" >
<figcaption>Experimented with Model Context Protocol servers.</figcaption>
</figure>
</li>
<li>
<figure>
<img src="assets/media/krita-logo-200x200.webp" alt="The Krita logo" >
<figcaption>Used Krita to create simple AI-generated graphics locally.</figcaption>
</figure>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
<div id="learning" >
<div class="grid cards">
<ul>
<li>
<div>
<figure>
<img src="assets/media/uct-logo-204x250.webp" alt="University of Cape Town logo" >
<figcaption><strong>University of Cape Town</strong><br>Bachelor of Arts (Honours)<br>History</figcaption>
</figure>
</div>
</li>
<li>
<div>
<figure>
<img src="assets/media/treehouse-logo-178x200.webp" alt="TreeHouse logo" >
<figcaption><strong>TreeHouse</strong><br>Introduction to Programming Using Python</figcaption>
</figure>
</div>
</li>
<li>
<div>
<figure>
<img src="assets/media/berlin-writers-workshop-188x188.webp" alt="Berlin Writers' Workshop logo" >
<figcaption><strong>Berlin Writers' Workshop</strong><br>Creative Writing</figcaption>
</figure>
</div>
</li>
<li>
<div>
<figure>
<img src="assets/media/coursera-logo-250x250.webp" alt="Coursera logo" >
<figcaption><strong>Coursera</strong><br>Building intelligent agents using DeepSeek and N8N</figcaption>
</figure>
</div>
</li>
</ul>
</div>
</div>
<div class="prefooter" >
<div><a href="https://git.gugulet.hu/explore" target="_blank"><img src="assets/media/git-link-512x512.webp" alt="Self-hosted ForgeJo instance with git repos"></a></div>
<div><a href="https://linkedin.com/in/gugulet-hu" target="_blank"><img src="assets/media/linkedin-logo-512x512.webp" alt="Link to LinkedIn profile"></a></div>
<div><a href="assets/media/gugulethu-hlekwayo-v202602.pdf" target="_blank"><img src="assets/media/download-link-256x256.webp" alt="Link to download the PDF resume (860kb)"></a></div>
</div>
<div class="faq-container">
<input type="checkbox" id="faq-toggle" class="visually-hidden">
<label for="faq-toggle" class="question-icon">
<span class="icon question"><p><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512m0-336c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 47.2-36 67.2-56 74.5v3.8c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8.1c0-20.5 14.8-35.2 30.1-40.2 6.4-2.1 13.2-5.5 18.2-10.3 4.3-4.2 7.7-10 7.7-19.6 0-17.7-14.3-32-32-32zm-32 192a32 32 0 1 1 64 0 32 32 0 1 1-64 0"></path></svg></span></p></span>
<span class="icon close"><p><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 20c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m2.59 6L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41z"></path></svg></span></p></span>
</label>
<div class="faq">
<h3>Questions and Answers</h3>
<p>Why did you resign from your last job?</p>
<blockquote>The company changed direction and I am looking for a new challenge.</blockquote>
<p>Where can I see your written work?</p>
<blockquote>On this page, under <strong>skills</strong> > <strong>writing</strong>.</blockquote>
<p>Where can I see your programming?</p>
<blockquote>On my self-hosted ForgeJo instance at <a href="https://git.gugulet.hu" target="_blank">git.gugulet.hu</a>.</blockquote>
<p>Do you need visa support?</p>
<blockquote>No, I do not need visa support. I am a permanent resident of Germany.</blockquote>
<p>Can you work remotely?</p>
<blockquote>Yes, my previous roles were mostly hybrid and remote.</blockquote>
</div>
</div>