I ship AI into real products, where it has to hold up.

I'm Dean Norman, a senior engineer in Cape Town with 15+ years building software people depend on at work.

Dean Norman
  1. AI readsthe tender and argues a fit
  2. Code checkseach claim against its source quote
  3. A person decidesand records why

The rule I work by

The rule I work by is simple.

  1. AI reads.
  2. Code checks.
  3. A person decides.

Most recently I built Tenderly, an AI tool my team now works from to pick which government tenders are worth bidding on. See Tenderly

Three chapters, one instinct.

Find the real decision inside a messy workflow, then make it easier to understand, run and trust.

2014 to 2021

Product and UX at 22seven

Almost seven years on Old Mutual's personal finance app, a pioneer in South Africa: React and React Native, design sprints, user testing, and behavioural data that decided what got built next.

2021 to 2025

Leading delivery

Silicon Overdrive, Whitehart and Kepler: running client projects and teams, mentoring developers, then making releases trustworthy with end-to-end test automation.

2025 to now

Shipping AI at Zamatrack

“I joined Zamatrack to build one app. Over the following year I took on the dashboard's architecture, testing and release process, moved onto the backend, and drove the move to one route to production. I didn't arrive with that scope. I earned it one screen, one release and one decision at a time.”

Selected work

Systems that people actually run on.

Described at category level, because some of it is commercially sensitive. Screens show synthetic demo data; the rest are illustrations.

October 2026 · Zamatrack

Tenderly: which government tenders are worth bidding on

Problem
Thousands of tenders are open at once, in PDFs, scans, Word and Excel files. The team has to find the few worth reading.
What I built
An AI gate scores the open listings and sets most aside. An AI reader reads the best ones, scans included. Code checks every quote against the document and shows how much of it was read. A person decides Bid, Maybe or No with a one-tap reason.
The judgement call
Models chosen by a blind test against real past decisions, with the pass mark agreed before the run. Anything that learns from past decisions stays switched off until a replay proves it helps.
Result
Built as a lean MVP in a night, and the team now works from it.
  • TypeScript
  • React
  • Node.js
  • SQLite
  • Zod
  • Gemini
  • Claude Haiku
Tenderly is open for early access
2025 to now · Zamatrack

The dashboard a control room runs a shift on

Problem
Operators were reading alarms, routine site movement and devices that had gone quiet as one noisy stream.
What I built
Every site on a live map, with the work owed to someone in a panel that cannot be closed away, and three separate states for what needs action, what is routine and what has stopped reporting. I led the product decisions, the interface and the language.
The judgement call
Modernised without stopping it, and analytics show only numbers computed from real data. Invented fallbacks and always-green status pills were removed.
Result
In production, where a control room runs its shift on it, and the team works from the shared glossary written for it.
  • React
  • TypeScript
  • Leaflet
  • Jotai
  • TanStack Query
  • Playwright
2026 · Zamatrack

Asset management: from spreadsheets to a system finance can trust

Radios, cameras, vehicles and alarm hardware spread across client sites lived in spreadsheets nobody could answer questions from. Now there is a register of what the company owns, where each item is, who is responsible for it and what condition it is in. Reported faults become the same kind of job operations teams already handle, site audits lock once a manager signs, and finance sees a current value with the method behind every figure.

Shipped as five sequenced phases across the dashboard and backend, adding three product areas. My largest delivery here.

  1. Assistant finds products and builds the order
  2. Code prices VAT and delivery, checked
  3. Buyer places it after reviewing the link
2026 · Zamatrack

A checkout AI assistants can use

People are starting to shop through AI assistants. The store needed to be usable by one without handing it the buyer's money. Payment and the final decision stay with the person.

Tested end to end: an AI agent given only the task built a priced order and returned the link.

Also at Zamatrack

  • 2026

    Made a risky multi-tenant PHP backend safe to release: a release lane that shipped one change at a time with a dry run and a backup, then one route for the whole team, where a merge to main is the only way a change reaches production.

  • 2026

    Moved the dashboard onto Cloudflare with builds straight from Git, wrote the firewall rule so web traffic reaches the servers only through Cloudflare, and put mail backups on locked storage with a tested restore.

  • 2026

    Identity and compliance checks: ID verification, sanctions and PEP screening, and bank and company checks, with bundled KYC checks gated behind a lawful-basis step.

  • 2025 to 2026

    The resident app for gated estates, built for bad connections. Its access feature is built and proven on production behind a per-company switch.

After hours

Things I make in the early hours.

For me first, and for anyone they help. Same habits as the day job: a clear problem, privacy by default, and a person in charge.

Spotify Autocapture in use: the Discovery Timeline after an album ends, with Zen mode open over it showing the playing track's cover art.
Three views: the live pipeline while the source album plays, Zen mode, and the Discovery Timeline.
2026 · Personal · macOS

Spotify Autocapture

Keep the songs Autoplay finds for you.

When an album or playlist ends, Spotify's Autoplay keeps going. The best songs of the evening are ones you never chose, and by tomorrow they're gone. A Go app hears the Spotify desktop client through native macOS notifications, works out when Autoplay has taken over, waits for 30 seconds of real listening, then saves the track to a private playlist.

A terminal cockpit shows the live capture pipeline, a Review Deck for approving tracks one card at a time with undo, session stats, cover art and a full-screen Zen mode tinted from the album cover. Spotify never says “this is Autoplay”, so it's inferred, and the README says so plainly.

About 100 commits since May, with tests on the detection logic and CI.

  • Go
  • Bubble Tea
  • SQLite
  • cgo
  • Spotify Web API
Chrome Web Store · Open source

CopyPasta

A browser extension that restores copy, cut and paste on sites that block them. Off by default and switched on per site, with no clipboard reads, no network calls and no telemetry.

Android · Closed beta

WiseMind Companion

A free Android app, made in Cape Town, that keeps grounding tools, DBT skills, South African helplines and Western Cape NA meetings together on a phone. No account, and it works offline.

Open source

A crash fix in Leaflet, merged by its creator.

Our map dashboard hit a crash when stopping a popup's auto-pan removed the popup. I root-caused it upstream, added a regression test, and the fix was merged into Leaflet for its 2.0 release. Smaller docs fixes merged in WXT and BullMQ.

Also on my desk

A native macOS app for converting video, audio and images locally, with the generated commands visible and originals never overwritten.

How I work with AI

“Output that passes a schema can still be wrong, so it's checked before anything downstream relies on it.”

I measure before I trust.

Tenderly's models were chosen by a blind test against decisions I had made myself, with the pass mark agreed before the run so I couldn't tune to the answer. Every disagreement traced back to the hand-written profile of what we sell, not to the model.

Code checks the model.

Quotes are checked against the source and coverage is counted in code. That caught a length limit silently cutting long tenders short.

AI speeds up delivery. People still decide.

I use Claude Code daily inside ticketed, reviewed work with written decision records, and I built the AI skills my team uses.

Where I'm cautious.

Identity and compliance checks sit behind a lawful-basis step. Model output reaches nobody unchecked. Nothing learns from past decisions until a replay proves it helps.

15+ years, in short.

One line per role. The CV has the rest.

  1. Oct 2025 to now
    Senior Engineer · AI Engineer, ZamatrackContract, remote

    Primary author of Worxit's operations dashboard, resident app and tender tools; since August 2026 the main engineer on its PHP backend.

  2. Mar to Jul 2025
    Test Automation Consultant, Kepler + Co

    End-to-end Playwright suites and automated regression packs.

  3. 2024
    Software Product Manager, Whitehart

    Led delivery across web projects with a team of developers.

  4. 2021 to 2023
    Software Manager, Silicon Overdrive

    Led software delivery across client projects, Scrum Master, mentored junior developers.

  5. 2014 to 2021
    UX / Frontend Developer, 22seven Digital (Old Mutual)

    Product engineering, design sprints, user testing and SQL analytics on a personal finance app.

  6. 2009 to 2014
    Earlier

    Agency web development at Urbian, freelance web design, BA in Creative Brand Communications at Vega.

Hiring? Let's talk.

A short email is the best start. Tell me what you're working on and I'll tell you honestly whether I'm the right person for it. I'm happy to walk through the architecture and decisions behind any of this work.

I also help a small number of businesses adopt AI where it earns its place, using the same method. If that's you, email me too.