Advertising & Media · Global
AdStream Radio
Client: Xtreme Reach — XR.global. A global creative-logistics company that manages and delivers advertising assets to broadcasters worldwide. AdStream Radio is the platform that runs the radio side of that business.
A platform that automates the entire life of a radio advertising asset — from order and audio upload, through broadcast-quality validation, to automated delivery and tracking across radio stations in multiple countries.
Scope
- One platform serving Australia, the UK, Brazil and South Africa, each with its own database and localized content
- Full order lifecycle: quote → confirm → finalize → deliver
- Broadcast-quality audio processing — EBU R128 loudness checks, duration validation and format conversion
- Automated delivery to broadcaster networks with end-to-end tracking
- A modern REST API and background worker services doing the heavy lifting
My technical contribution
I'm leading a phased modernization of a large, long-running system — introducing a modern .NET REST API and clean domain boundaries alongside the existing platform. The business keeps operating while the architecture is renewed, avoiding a risky "big bang" rewrite. Automated code generation keeps the data layer consistent and removes the bulk of hand-written boilerplate.
.NET 7+
ASP.NET Core Minimal APIs
SQL Server
JWT auth
Audio / EBU R128
Multi-region architecture
Code generation
Creative Industry Awards · Africa & Middle East
The Loeries Awards
Client: The Loeries (loeries.com). For over 30 years, the body that recognizes the best brand communication and creativity across Africa and the Middle East — a credentialing platform for the region's agencies and creative talent.
The digital platform behind the awards — managing the full journey from entry submission and rich media, through online judging, to a permanent public archive of award-winning work.
Scope
- Entry lifecycle — category selection, multi-step entry forms, media attachment and validation
- A media pipeline that converts video and generates thumbnails in the background
- Online judging workflows, including finalist and Grand Prix selection
- Reliable award duplication for each new awards season
- A public archive presenting winning work with full credits
My technical contribution
I'm re-platforming a 15-year-old legacy system onto a modern, maintainable foundation while preserving the look and feel entrants already trust. A clean API architecture and a background media-processing pipeline mean large volumes of entries and video are handled reliably through the peak entry rush.
.NET 10
CQRS · MediatR + Carter
FluentValidation
Dapper + SQL Server
FFmpeg media processing
React 19 + Vite
Self-Storage · South Africa
Rent-A-Store
Client: Rent-A-Store (rent-a-store.co.za). A multi-branch self-storage operator renting units to consumers and businesses across South Africa.
A unified digital platform for a self-storage business — letting customers find units, see pricing and book online, while giving staff a single modern system for the entire tenant lifecycle across every branch.
Scope
- Customer website with live unit availability, pricing, online reservations and payment
- Three separate legacy systems consolidated into one platform with a single customer view across all branches
- Staff portal for sales, contracts, tenants, ticketing and transport logistics
- An integration layer wrapping the legacy SiteLink system, exposing 260+ operations as modern APIs
- Safe, validated migration of data off the old systems
My technical contribution
I designed the architecture for a full digital transformation — applying Domain-Driven Design to carve a tangle of legacy systems into clear business domains, with an anti-corruption layer that isolates the legacy SiteLink dependency. The result is a single source of truth for customers, automated communications, and a platform that can grow without accumulating technical debt.
.NET 10
CQRS · MediatR + Carter
Domain-Driven Design
Dapper + SQL Server
React 19 + TypeScript
MJML email
PayFast payments
Financial Services · Retirement
LifeGauge
Client: Alexforbes (Alexander Forbes) — one of South Africa's largest retirement and financial-services firms. LifeGauge is the tool Alexforbes' retirement-fund consultants rely on in the field.
An interactive financial-visualization tool that helps retirement-fund consultants turn complex actuarial data into clear member outcomes — modelling retirement scenarios and building member presentations, even offline.
Scope
- Modernization of a legacy AngularJS / .NET Framework product onto Angular 21 + .NET 10
- A Backend-for-Frontend architecture with cloud identity (Microsoft Entra ID) replacing on-premise Active Directory
- Offline-first capability so consultants can work and present without connectivity, syncing when reconnected
- A branded design system aligned to the Alexforbes identity
- Interactive data visualization and scenario modelling — the next delivery phase
My technical contribution
I'm leading the modernization with a security-first architecture where authentication tokens never reach the browser, and a phased, zero-downtime rollout so consultants migrate at their own pace. Clean architectural seams — a provider-agnostic identity layer, shared libraries and an offline sync layer — cut future risk and cost.
.NET 10 (BFF)
Angular 21 + TypeScript
Microsoft Entra ID (OIDC)
YARP
Offline-first PWA
D3.js
SQL Server
Medical Technology · Surgical Navigation · In design / early build
SNT Systems — SurNavTec
Client: SNT — Surgical Navigation Technology (snt.co.za), the South African partner for Brainlab's cranial, spinal and ENT surgical-navigation systems. SNT's technicians attend complex procedures in theatre, setting up and operating navigation equipment across the country.
A surgical case-management platform that replaces a tangle of spreadsheets and group chats with a single system of record — coordinating the surgical cases, technicians, equipment and billing behind every navigated procedure.
Scope
- Domain-led design first — a DDD domain map of eight bounded contexts, an architecture evaluation, and a phased roadmap with value gates between phases
- Built so far: the case-management core (full case lifecycle), reference data, work tasks, and a React admin interface
- Working integrations with Google Calendar (scheduling) and QuickBooks (billing), plus a web-push notifications proof-of-concept
- In design: the technician scheduling & dispatch engine, equipment & inventory tracking, full billing, and reporting
- An event-based audit trail aligned to POPIA for sensitive medical-case data
My technical contribution
I'm establishing the architecture and domain model from the ground up — mapping the business into clear bounded contexts and choosing a pragmatic, hybrid event-driven design that gives a full audit trail without the weight of full event sourcing. The phased roadmap moves the business from after-the-fact transcription to capturing events at the source, and proves value at each step before committing to the next.
.NET 10
Domain-Driven Design
CQRS · Carter
Event-driven audit trail
Dapper + SQL Server
React 19 + Tailwind
MCP (AI-ready)
POPIA compliance