← Back

Work

A few things I've built, at companies and on my own. Each one started with somebody's problem, so that's where each write-up starts too.

Close to ten years of React, React Native, Next.js and TypeScript, with Go and GraphQL where the backend needed it. These days I build with AI coding agents and review everything they produce.

LloydsDirect · Senior, then principal engineer · 2022 – 2024

Warehouse tools and medication recovery

Stock tools for a digital pharmacy serving NHS patients, and a recovery system that saved about £265k a month.

Stock tool screen for creating a recovered pack, with recovered quantity, expiry date, batch number and a label preview
Printed recovery labels showing medicine name, pack size, expiry date, batch number and QR codes
Recovery flow and labels from the stock tool, shown with sample data.
The problem

The warehouse ran on a React Native app and web tools that 120+ staff relied on every shift, and they'd grown inconsistent and hard to change safely.

Once I'd spent enough time on the warehouse floor, a bigger problem showed up. Part-used packs of medication were being thrown away, and that waste added up to a lot of money.

What I built

I owned the React Native warehouse app and led an 18-month rebuild of the operational tools, one workflow at a time. I introduced testing infrastructure and a shared design system, and rolled each change out with the warehouse team before full release.

I pitched medication recovery, worked with the data team to target the most expensive medicines first, and shipped it in eight weeks as the product engineer alongside a PM, a designer and a backend engineer. The app walks staff through eligibility, prep, collection and return to stock. Anything that fails a check stops rather than guessing, and batch and expiry data stay attached so a recall can still find the stock.

Outcome

Measured savings of about £265,000 a month. The rebuild ran with zero downtime for 120+ daily users, in a business serving millions of customers.

Stack
React, Next.js, React Native, TypeScript, Go, GraphQL

My own product · 2026

The Creator List

A workspace for creators in Singapore to turn messy brand briefs into confirmed deals.

thecreatorlist.asia↗
The Creator List homepage: make a living from what you create
Deal drafted from a brief, waiting for confirmation, with deliverables, fee, terms and key datesThree mobile screens: dropping in a brief, the campaigns list and the drafted deal
The live site, then the app with demo data. The brands and campaigns are made up.
The problem

Brand deals arrive as a mix of PDFs, emails and screenshots of DMs. Creators end up copying fees, deliverables and posting dates into spreadsheets by hand, and details get missed.

What I built

A drop-in flow: upload whatever the brand sent and the app reads it into one structured deal, which the creator checks beside the originals before anything goes to the client. Campaigns, clients and amounts owed all live in one place, on desktop and mobile.

For the extraction I built a synthetic test set of good and broken inputs, checked required fields in code, and used a second model to judge whether the content was right. Then I compared models on that set and picked the one that did best.

Session recordings showed where new creators were dropping off, so I rebuilt onboarding around the end goal: drop in a brief, get a completed deal, then a guided tour of it.

Outcome

Creators go from a messy inbox to a confirmed deal in one flow, and every screen is built from one set of shared components so the app stays consistent as it grows.

Stack
Next.js, React, TypeScript, Tailwind, shadcn/ui, LLM extraction with evaluation

My own product · 2026

Jack's SEO MCP

An MCP server that gives AI agents real keyword data and quality gates, so the content they write is worth publishing.

jacks-seo.com↗
Jack's SEO MCP homepage: you built the product, now get it found on Google
Article screen showing targeting data, an article preview and a quality gate score of 98 out of 100Diagram of the workflow: run the MCP in your repo, match the existing style, review the new article like a diff
The live site, an article in the dashboard, and how the workflow fits into a repo.
The problem

I kept needing the same skills to write SEO content with AI. A bare prompt gets you something generic, and the tools that do better run their own models and charge per article.

What I built

A hosted MCP endpoint your own agent calls. It stores a profile of the business, pulls keyword and Google Search Console data, hands the agent a writing brief, and runs deterministic quality gates that block a draft from publishing if it fails.

Around it sits a full SaaS: sign-up and onboarding, teams, Stripe billing, and a dashboard for articles and projects. I own all of it, from the schema and row-level security policies to Playwright end-to-end tests covering auth, teams, payments and the MCP flow.

Outcome

Live with paying users. Built and run solo since June 2026, with about 560 commits and 38 migrations so far.

Stack
Next.js 16, React 19, TypeScript, Supabase (Postgres, auth, storage), Stripe, MCP, Playwright

My own product, through We Are Heylo · Wound down

Board Paper Scraper

AI that read NHS board papers and turned them into scored, cited leads for companies selling to the NHS.

Analysis results for a sample NHS trust board paper, with a relevance score, theme analysis and evidence linked to page and section
Analysis of a sample board paper for a made-up supplier.
The problem

Every NHS trust publishes board papers, often over a hundred pages each, with budget signals and procurement plans buried inside. There are more than 300 trusts, each with its own website, so suppliers were reading them one PDF at a time.

What I built

The whole platform: sign-up, team accounts, and a background pipeline that sends each paper to Google Gemini along with the supplier's own company context and the themes they care about. It comes back as structured data: an opportunity score, the relevant sections, key people and a drafted sales pitch.

Every insight links to the exact page and section, so a buyer can check it in the original before using it. Around that sat Stripe billing with usage limits per plan, and a marketing site with generated pages for each trust and region.

Outcome

Tested with real customers and led to good conversations. The market turned out too niche, with too much compliance overhead for a self-serve product, so I wound it down. It solved the problem well enough that it led to direct work with one of those businesses.

Stack
Google Gemini API, structured AI output, background jobs, Stripe, programmatic SEO

Doccla · Senior software engineer · 2024 – 2026

Patient app and alert-triage bot

A React Native app that pairs with Bluetooth medical devices, for Europe's largest virtual hospital, plus an AI bot for the engineering team.

The patient app↗
The problem

Patients recovering at home take readings with Bluetooth medical devices, and most of them are aged 60 to 90. Readings have to arrive reliably even when the connection doesn't behave, in a regulated medical-device setting.

Separately, engineers kept interrupting other teams to ask whether a noisy alert mattered.

What I built

I owned patient-facing features from requirement to release: integrating devices through their SDKs and protocols, designing the API layers to outside services, and working with external engineering teams to get them live. I ran on-site research with patients and staff and led the rebrand of the app. It looks deliberately plain: big type, one thing per screen, nothing clever.

I pitched an alert-triage bot to the CTO and built the MVP. It watches the triage channels in Slack and explains, with references, whether an alert is known noise or a real warning and what the service does.

Outcome

The app is live with Doccla's patients. The bot reached MVP before I left, so I can't point to measured savings from it.

Stack
React Native, TypeScript, Bluetooth device SDKs, Slack, LLMs

Holland & Barrett · Software engineer · 2021 – 2022

Real-time operations dashboard

Live visibility into operations for a retailer with 1,300+ stores across 16 countries.

The problem

Operations data was spread across several sources, with no single live view of what was happening.

What I built

A real-time dashboard in Next.js, backed by a single GraphQL API that unified the data sources behind it. I also built a greenfield design system and component library for it.

Outcome

Teams got one live view of operations instead of several. This was an employer project, so I can describe it but not share screens.

Stack
Next.js, React, TypeScript, GraphQL

Available

Open to engineering roles and freelance work, remote or in Singapore. Happy to walk through any of this on a call.

Get in touch →