Mobile
06Cross-platform and native, shipped to both stores.

I build software products end to end — from the model that makes them intelligent to the interface that makes them worth opening.
I founded AppCraft Studios to ship my own work. Slip-Scan is the first out of it and is live on both app stores: line-item OCR, role-based approval workflows and direct sync into Xero and Sage. Four more products are in development behind it.
Alongside that I built CapeFinAI for a commercial lender — it reads bank statement PDFs, rebuilds the ledger and reconciles it against the totals the bank printed on the page, across a corpus of 246,000 transactions.
Before all of it I rebuilt a yacht club's entire mobile ecosystem alone, trained an MRI classifier past 95% accuracy, and fine-tuned a 7B model to write WebAssembly that actually compiles.

“Strategic, entrepreneurial, and technically deep — the combination is the point.”
A financial capture platform that turns a photograph of a receipt into reconciled, approved accounting data.
Line-item OCR reads merchants, dates, taxes, tips and individual items into structured fields — not a photograph filed away, but data a ledger can use.
Teams run on role-based workspaces: owners, managers, accountants and employees, with multi-tier approval workflows, per-employee spend reporting and shared workspace codes.
Eleven report types cover expense, category, profit & loss, tax, line-item and organisation breakdowns, exporting to Excel, PDF, CSV or a zipped archive.
Live on the App Store and Google Play, with direct sync into Xero and Sage.
Role — Founder · Principal Developer
Reads bank statement PDFs, rebuilds the ledger, reconciles it against the bank's own printed totals, and computes DSCR for underwriters.
Extraction runs one stage per request so it fits inside a 60-second serverless limit: a layout-aware text layer is built first, and any page without one escalates to Google Document AI, paged fifteen at a time with the resume position checkpointed against the document.
A regex row parser reads the ledger first; four layout readers — stacked-cell, column-major, column-stream and balance-less — plus cell repair take over where it cannot cope, re-anchoring rows against the statement's running-balance chain so a misread digit is caught by arithmetic rather than by a pattern.
Correctness is proven rather than asserted. Each bank's own printed opening balance, closing balance and, where the layout carries it, turnover are read back off the page and reconciled against the parsed ledger, resolving to one of eight statuses. A figure the statement never printed is never counted against it.
Every number a credit committee reads — DSCR, CFADS, monthly net movement — is computed in a single module, and a lexical guard in the build fails if any other file re-derives one from a raw backend field.

Role — Sole engineer · Commercial lending client
The generalisation of the CapeFin engine into a product: region detection, layout parsing and self-verifying ledgers.
Where CapeFin was built around South African statement layouts, FinYang infers the country from the document itself — scoring currency codes, regulator boilerplate, bank domains, dialling prefixes and identifier shapes against a 68-country registry, and reporting low confidence rather than guessing when two regions score within three points of each other.
Five South African banks have dedicated layout readers; every other institution falls through to a generic ledger parser and is named from its own letterhead. A test fails the build if a borrower's name or a memorised figure ever appears in executable code.
The same self-verification idea carries over: a statement prints the totals its own ledger has to reproduce, and anything short of that publishes as PARTIAL or UNVERIFIABLE rather than as a clean result.

Role — Founder · Principal Developer
Hiring that matches on meaning rather than keywords, with a swipe interface over a scoring engine.
Candidate skills and open positions are matched as vectors, so a strong fit surfaces even when the two documents share no vocabulary.
Screening is structured to fast-track high-potential candidates without the bias a keyword filter encodes, alongside a career copilot that identifies growth areas and résumé strengths.
Team notes, interview stages and feedback run on a shared collaborative pipeline.

Role — Founder
A fine-tuned 7B model that emits executable WebAssembly, verified symbolically before it runs.
Fine-tuned a 7B parameter language model on more than 28,000 synthetic samples to generate WebAssembly binaries.
A neuro-symbolic verification layer checks every output, achieving 100% compilation validity across the evaluation set.

Role — Research · Engineering
A physics-driven swipe deck that scores recipes against your taste vector and what is already in your fridge.
Every swipe recalibrates a taste vector, so the deck sharpens as you use it rather than reshuffling the same suggestions.
Recipes are scored by overlap with your pantry inventory, which turns 'what do I cook' into 'what can I cook without shopping'.
Draws on 797+ chef collections, from Gordon Ramsay and Jamie Oliver through to street food.

Role — Founder · Principal Developer
In-flight telemetry, itineraries and peer-to-peer games — all working with the Wi-Fi off.
Reads GNSS directly in airplane mode for altitude, ground speed and route ETA, with no connection at all.
Day-by-day itineraries pull live destination weather, gates and reservations while you still have signal, then keep working when you do not.
An offline lounge runs peer-to-peer multiplayer Rummikub and chess between passengers, plus a travel wallet for stacked boarding passes and eSIM data.

Role — Founder · Principal Developer
A Temporal Fusion Transformer that forecasts crude oil direction from a decade of supply-chain signal.
Engineered a Temporal Fusion Transformer over ten years of multi-modal supply chain data to forecast WTI crude price direction.
The model reads tanker movement, inventory and macro series together rather than treating price as a lone time series.

Role — Research · Engineering
A binary classifier trained on 4,500+ MRI scans to flag the presence of brain tumours.
Trained a binary logistic regression classifier on over 4,500 MRI images, reaching 95%+ accuracy on held-out data.
The pipeline handles preprocessing, feature extraction and evaluation end to end.

Role — AI Solutions · Emeris
A cybersecurity agent that reasons over language using edit distance, cosine similarity and GloVe.
Combined Levenshtein edit distance, cosine similarity and GloVe embeddings into a single scoring pipeline.
The result is an agent that recognises malicious intent phrased in ways a keyword filter would miss.

Role — Engineering
Took over an ageing Tempus ecosystem and rebuilt it cross-platform, alone.
Overhauled the existing ecosystem, using Flutter to bring the club onto one cross-platform codebase.
Stripped out redundant systems, untangled outdated transitive dependencies, redesigned the interface and cloned the infrastructure for a safe cutover.

Role — Sole Mobile App Developer
A South African software studio building a portfolio of AI and financial-automation products.
Founded AppCraft Studios (Pty) Ltd to design, build and ship products under one roof rather than one client engagement at a time.
Five products sit in the portfolio: Slip-Scan in production, with FinYang AI, RecruitAI, CraveMatch and TripKit in development.
The studio also takes on select engineering work — cross-platform apps, cloud backends, bespoke models and design systems.

Role — Founder · Principal Developer
Photograph a receipt or pull one from the gallery. Line-item OCR reads the merchant, date, tax, tips and every individual item.
Everything lands in a searchable invoice gallery, filterable by role, team member, vendor and date, with the original image kept against each record.
Approved expenses sync straight into Xero and Sage, so the ledger updates without anyone re-typing a number.
A business dashboard tracks spend over time, tax totals and top spenders across the workspace, exporting to Excel, PDF or CSV.




Currency codes, regulator boilerplate, bank domains, dialling prefixes and identifier shapes are each scored against a 68-country catalog. A document that says nothing about its origin is reported as undetected rather than guessed.
Five South African banks have dedicated layout readers. Every other institution falls through to a generic ledger parser and is named from its own letterhead rather than being forced into someone else's format.
A statement is treated as self-verifying: it prints the totals its own ledger has to reproduce. Failures publish as PARTIAL or UNVERIFIABLE — never quietly as a clean result.
Every headline figure is computed once, in one module, and a build-time guard fails if any other file re-derives it. The assistant queries ledger rows through a structured tool instead of being handed the whole file.




Mobile, web, models and infrastructure. I ship products where every layer is mine, which is why they get finished.
Cross-platform and native, shipped to both stores.
Product surfaces that hold up in production.
Models trained, fine-tuned and verified.
The parts nobody sees and everybody depends on.
Deploy, automate, keep it running.
Ethical hacking as a discipline, not a hobby.