Web Engineer · Developer Hut· South Africa

I build promotional games and the platforms that run them.

Web engineer with a diploma in visual communication and twelve years of shipping web apps, mostly on the front end but comfortable down to the database. Currently in SvelteKit and TypeScript at Developer Hut: a multi-tenant campaign platform, an AI campaign builder, a property finance system and the company’s component library.

Experience
Since Feb 2014
Before code
Visual communication
Based
South Africa, remote

Working pieces from the day job

Spin · where I used it

Svelte 5TypeScriptReactAngularVueNext.jsNodePostgreSQLFigmathree.jsGoClaude Code

Spin to land on one

Svelte 5

Developer Hut, 2025 to now: the GameSights portal, FT Finance and the sui component library.

First entries

1 670

7% vs previous period

Sample data

Scratch card

A canvas overlay, cleared with destination-out. Scratch, or press reveal.

01 / 05 Work

Things I have shipped.

Each card carries a small working version of the thing it describes. The numbers inside them are sample data.

Spinning wheels · Scratch cards · Gameboards · Leaderboards · Prize draws · Serial entry · Share images · Reporting portals · Component libraries · AI agents · Settlement ledgers · Hearing screeners

01 Developer Hut

Campaign Summer wheel Range Last 14 days Compare previous period

First entries

2 078

+12%

Redemptions

534

+5%

Draw winners

18

this period

current previous

Sample data

GameSights Kinesis engine and client portal

  • Built the client portal’s reporting suite: first entries, monthly rollups and serials, redemptions and draw winners, with filter bars, column selection, per-day series, previous-period comparison and KPI rows.
  • Added platform admin roles, tenant-scoped user management and invite-link onboarding. Fixed a security issue where integration API keys could read other tenants’ reports.
  • Set up Sentry and alerts for failed scheduled jobs and payouts. Release the Kinesis SDK to GitHub Packages and promote staging to production.
  • SvelteKit
  • TypeScript
  • Drizzle
  • PostgreSQL
  • TanStack Table
  • Sentry

02 Developer Hut

Monthly jackpot · 0 of 9 revealed

Sample board

1-To-Win Campaign app for Flash

  • Runs in a mobile WebView: weekly prize drops, a monthly jackpot gameboard with 3D card reveals, coin-based qualification, a leaderboard, serial entry and generated share images.
  • Windhoek 330 Reasons, a second campaign: age gate, registration, plays against the Kinesis engine and prize codes sent by SMS.
  • SvelteKit
  • Kinesis SDK
  • WebView

03 Developer Hut

sui · components

Date 1–14 Oct Status Live ▾ FlashWindhoekTenant…

Entries

2 786

+9% vs prev.

Campaign
Summer wheel1 284
Scratch & win962
Jackpot board540

Sample content

@developer-hut/sui Shared Svelte component library

  • Build and release the library: KPI cards, filter bars, multi-selects, date pickers, sortable tables, a file explorer and a CodeMirror editor.
  • Moved overlays to the browser top layer and migrated the GameSights portal onto it, with dark and light themes.
  • Svelte 5
  • TypeScript
  • CodeMirror

04 Developer Hut Lead

studio · run done
  1. Read the brief Spin-to-win for a cold drinks brand, two prize tiers
  2. Brandfetch Logo and brand colours pulled from the domain
  3. Wheel skill 8 wedges, win rate and prize pool wired to the engine
  4. Figma handover Handover prepared for Figma
  5. Model Claude selected, OpenRouter as fallback
  6. Screen tour Opened every screen and checked it before finishing
  7. Commit Pushed to the campaign’s private repo via the GitHub App

Illustrative run, made-up brief

GameSights Studio An AI agent that builds campaigns from a brief and design files

  • Built the agent’s skills for wheel, scratch card and gameboard games, Figma handover, Brandfetch lookups, Claude and OpenRouter model selection, and a screen tour where the agent checks every screen before it finishes.
  • Gave each campaign its own private repo through a GitHub App, with commit, restore, stash and undo in the studio. Moved the studio from an Electron app to a containerised Node server deployed from CI.
  • Node
  • TypeScript
  • Claude
  • OpenRouter
  • GitHub App
  • Docker

05 Developer Hut Lead

Deal 0417 · settlement

Capital advancedR 250 000
Daily fee accrual 0.05% × 18d+ R 2 250
Receipt allocated− R 40 000
Sub-deal payout− R 15 000
Net proceedsR 197 250

Sample figures, illustrative rate

FT Finance Deal management for property finance advances

  • Built the financial core: settlement calculations, daily fee accrual on outstanding capital, receipt allocation across payouts, sub-deals and net proceeds.
  • Added dashboards, generated PDFs (applications, undertakings, schedules) and client-specific CSV exports.
  • SvelteKit
  • PostgreSQL
  • Drizzle
  • PDF
  • CSV

06 Developer Hut

  1. Linear

    DH-482 Add draw winners export

  2. Plan approved ✓

    3 lanes, in stack order

  3. PR 1/3 on staging

    [DH-482] schema and migration

  4. PR 2/3 on PR 1/3

    [DH-482] query and export

  5. PR 3/3 on PR 2/3

    [DH-482] portal UI

Flow, made-up ticket

dh-skills Team Claude Code plugin

  • Takes work from Linear tickets to stacked pull requests.
  • Alongside it, an AI PR reviewer hardened against hallucinated findings.
  • Claude Code
  • Linear
  • GitHub

07 hearX

Screener · 1 kHz

ready
Quiet and short. Headphones help.

Demo, not a hearing test

Hearing screeners Embeddable widgets for hearX

  • Widgets that clients embed in iframes: they play audio clips and score what the user heard. Shared packages in a Turborepo monorepo, with the older Vue widgets kept running.
  • Also at hearX: merged the Jekyll site with its replacement so pages could move one at a time, guided the Next.js and Strapi rewrite, and maintained an Angular 8 clinical data platform.
  • React
  • Redux Toolkit
  • Next.js
  • Vue
  • Turborepo

08 Developer Hut

Prototypes PickPro and Savanna AR

  • PickPro, a white-label pick’em demo on live Opta football data.
  • Savanna AR, a WebAR scene anchored to a QR code with three.js.
  • Opta
  • three.js
  • WebAR

02 / 05 Career

Twelve years, eight teams.

Every job on one axis, drawn to scale from 2014 to today.

First role
Feb 2014
Current
Developer Hut
  1. Developer Hut Web Engineer Feb 2025 – now · Remote

    Promotional campaign platform, AI campaign builder, component library, property finance.

  2. hearX Front-End Developer Feb 2022 – Feb 2025

    Hearing screener widgets, the company website, a clinical hearing data platform.

  3. IOT.next Intermediate Software Engineer Sep 2020 – May 2021

    Angular apps and a shared library used across them. NgRx, RxJS, Angular Material CDK, Azure pipelines.

  4. Standard Bank Angular Developer Sep 2019 – Sep 2020

    Angular apps and shared libraries with NgRx and RxJS, deployed through GitLab CI.

  5. Nedbank Programmer Mar 2018 – Feb 2019

    UX and UI concepts in Angular 6 for the next nedbank.co.za. NgRx, Firebase deployments.

  6. Code et al Programmer Nov 2016 – Dec 2017

    Node and Express back ends, React and Angular 4 front ends, MySQL.

  7. BigBrave Digital Developer Feb – Oct 2016

    Node and Express back ends, AngularJS and Bootstrap front ends, MongoDB.

  8. CherryOlive DevOps Engineer Feb 2014 – Jul 2015

    AngularJS front ends, Node back ends, and brand identities with animated SVG icons.

03 / 05 Stack

The stack, and what I reach for daily.

Grouped the way the CV groups them. The highlighted ones are the current Developer Hut stack.

In daily use at Developer Hut · 16 of 42

01 Front end

  • Svelte 5 (daily)
  • SvelteKit (daily)
  • TypeScript (daily)
  • React
  • Next.js
  • Angular
  • Vue
  • Astro
  • Tailwind CSS (daily)
  • SASS
  • Storybook

02 State

  • Redux Toolkit
  • NgRx
  • RxJS
  • Vuex
  • TanStack Table (daily)
  • Zod

03 Back end

  • Node.js
  • Bun
  • Express
  • PostgreSQL (daily)
  • Drizzle ORM (daily)
  • Firebase (daily)
  • MongoDB
  • MySQL
  • some Go

04 Delivery

  • Git (daily)
  • GitHub Actions (daily)
  • Docker (daily)
  • Coolify (daily)
  • Sentry (daily)
  • Vitest (daily)
  • Jest
  • Testing Library
  • Linear (daily)

05 AI tooling

  • Claude Code plugins and skills (daily)
  • OpenRouter
  • AI code review in CI

06 Design

  • Figma
  • Illustrator
  • Photoshop
  • SVG animation

04 / 05 Designer first

Designer first, engineer since.

I trained in visual communication before I wrote code for a living.

The diploma covered interactive media design, 2D and 3D visualisation, commercial design and audio visual studies. My first job after it, at CherryOlive, mixed AngularJS front ends and Node back ends with brand identities and animated SVG icons.

  • Figma
  • Illustrator
  • Photoshop
  • SVG animation
01 · WIREFRAMEØ 20012 × 30°02 · BUILT
  • 2013

    Diploma in Visual Communication

    Open Window Institute

    Interactive media design, 2D and 3D visualisation, commercial design, audio visual studies.

  • 2008

    Matric

    Willowridge High School

    Mathematics, Information Technology, Physical Sciences, Economics.

05 / 05 Contact

Get in touch.

Email or call. I work remotely from South Africa.

Phone
+27 66 250 4106