Skip to content

Projects

Selected work

Each entry records the problem, the decisions that mattered, and the measurable outcome. Filter by discipline below.

AI Training2026

AI agents that answer customer reviews

Led end-to-end development of review-response agents on OpenAI and Claude, with tool integrations and memory for autonomous operation — and a prompt framework that cut model cost 18%.

  • 18% reduction in model cost with no loss of response quality
  • Tool integrations and memory for autonomous, multi-step operation
PythonNode.jsOpenAIClaude
Backend2025

Holding 99.9% sync uptime across three review platforms

Resilient integrations with Google Business Profile, Yelp and Facebook Reviews — webhook-driven where the platform allows it, scheduled where it doesn't, reconciled either way.

  • 99.9% data-sync uptime across three third-party platforms
  • Webhook and scheduled paths reconciled against one another
PythonNode.jsRESTGraphQL
CMS2024

Headless WordPress that editors kept using

A multi-locale marketing site moved onto a Next.js frontend with WordPress as the editing layer — including the preview and publishing pieces that headless builds usually drop.

  • Content modelled as typed fields rather than HTML blobs
  • Live preview restored, so editors could see drafts before publishing
WordPressPHPNext.jsTypeScript
Frontend2022

Dashboards that made AI output reviewable

React and Next.js dashboards surfacing AI metrics and generated responses for client decision-making — increasing engagement 28% by making the model's work inspectable rather than opaque.

  • 28% increase in client engagement with the platform
  • AI-generated responses reviewable and editable before publishing
ReactNext.jsTypeScriptData visualisation
AI Training2025

Retrieval that stopped the model inventing facts

A RAG layer over each business's own details, so generated responses referenced things that were actually true — and said nothing when the source material didn't cover it.

  • Business facts retrieved per response instead of stuffed into every prompt
  • Retrieval scoped per location, so no account could cite another's details
PythonVector databasesRAGOpenAI
Frontend2025

A review queue that made AI output safe to publish

The interface where humans approve, edit or reject AI-generated responses before they go out under a client's name — built so the checking is faster than writing the reply yourself.

  • Approve, edit or reject in a single keystroke
  • Drafts held in review until a person releases them
ReactNext.jsTypeScriptOptimistic UI
Backend2023

Cutting release cycles 40% with containerised delivery

Dockerised CI/CD onto Kubernetes for cloud-native Python and Node services, plus a data-model redesign that doubled pipeline throughput for AI processing.

  • 40% faster release cycles
  • 2× data throughput after the pipeline and schema redesign
PythonNode.jsDockerKubernetes
AI Training2023

Sentiment analysis that survived contact with real reviews

A pipeline turning raw review text from several platforms into reputation insights — and the calibration work needed before anyone would act on the numbers.

  • Multi-platform review text normalised into one analysable shape
  • Model output calibrated against human labels before it was trusted
PythonSQLNoSQLData pipelines
CMS2023

A Shopify storefront the merchandising team could run

Rebuilding a bloated theme around a constrained set of sections — so campaigns ship without a developer, and the storefront stops being slow because of apps nobody uses.

  • Merchandising composes and ships pages without a deploy
  • Section schemas make an unusable layout impossible to build
ShopifyLiquidJavaScriptSection schemas
CMS2022

Migrating a decade of pages into a real content model

Turning years of free-form HTML into validated structured fields, without losing a single URL — and rehearsing the whole migration against production data before cutover.

  • Every legacy URL preserved or redirected, verified before cutover
  • Free-form HTML converted into typed, validated fields
WordPressPHPNode.jsPostgreSQL
Backend2021

Getting to 99.95% by making failure visible

Instrumenting a multi-service SaaS platform so problems announced themselves instead of being reported by customers — and the incident process that turned alerts into fixes.

  • 99.95% uptime sustained across the platform
  • Detection moved from customer reports to automated alerts
Node.jsPythonStructured loggingMetrics
Backend2020

Consistent auth across a dozen microservices

Replacing per-service authentication with one issued-token model — so that adding a service no longer meant reimplementing authorisation and hoping it matched.

  • One token model across every service
  • Authorisation decisions moved out of per-service code
Node.jsPythonOAuth2JWT
Frontend2020

Dashboards that told the team what was breaking

Internal system-health and analytics screens over a multi-service SaaS platform — built so an on-call engineer could tell in one glance which service was at fault.

  • One screen answering "is anything wrong right now?"
  • Service-level drilldown from every aggregate
ReactNode.jsSQLNoSQL