CTO at &Dine · open to what's next
I build platforms.
And the teams that
keep shipping them.
Fourteen years in product engineering — React at Love Home Swap, tech lead at Mettrr, Vue at scale across Just Eat and Menulog. Now running technology at &Dine, where I own the architecture, the delivery and an AI-assisted engineering practice across a six-repository platform.
- 6
- repositories orchestrated as one platform
- 4
- production frontends on a single API
- 14
- years shipping product engineering
- 7
- purpose-built engineering agents in the loop
Now — &Dine, 2021 to present
Head of Technology, then CTO.
&Dine is a B2B catering platform connecting London corporates with independent food makers. I joined to run engineering and now own technology end to end — architecture, delivery, security, vendor and budget decisions, and the technical story told to the board and to enterprise procurement.
The platform is six repositories deliberately orchestrated as one: an Express and TypeScript API on MySQL, three separate frontends for customers, mobile and back office, a shared design and type package, and an end-to-end suite. One contract, one auth model, four route tiers, one set of guardrails.
Architecture
Multi-tenant platform design, an OpenAPI 3.1 contract that generates typed frontend SDKs, and an integer-pence money model enforced from the database to the display layer.
Delivery
Spec-first planning, one branch per repository, three independent review passes on every pull request, and a learning loop that writes findings back into the codebase's own instructions.
Commercial & compliance
Stripe payment and refund design, Xero as the finance system of record, EU AI Act deployer documentation and DPAs — the things that unblock enterprise customers.
Team
Hiring, mentoring and setting the bar. The guardrails are written down so a new engineer — or a new agent — inherits the context instead of rediscovering it.
The platform
What we actually built.
Not a brochure site. A payments-critical, multi-tenant ordering platform with a real ledger, real couriers and real accounting behind it.
Backend API
Express · TypeScript · Sequelize · MySQL
Four route tiers with distinct auth — public, hub users, customers, and server-to-server internal. Two signature-verified inbound webhooks mounted ahead of the JSON parser so the raw body still validates. Documented in OpenAPI 3.1 and bundled into live Swagger docs at build.
- 48 controllers
- 65 models
- 55 services
Customer site
Nuxt 4 SSR · Pinia · SCSS
The main ordering surface. Server-rendered for search, with SAML and OIDC logins brokered through WorkOS so one integration covers Okta, Entra and the rest. Checkout state is owned by the backend ledger — the frontend derives what to show and never invents it.
- Browse-first
- SEO-rendered
- Enterprise SSO
Mobile app
Nuxt 4 static · Capacitor 7 · iOS & Android
A deliberately different product on the same API and auth — a cuisine, date, time and occasion funnel rather than browse-first. Statically generated, no server on the device, wrapped with Capacitor for the App Store and Play Store.
- Funnel-first UX
- Native builds
- Safe-area native
Admin & maker hub
Nuxt 3 SPA · Vuex · Chart.js
Where operations and the independent makers run the business — menus, orders, deliveries, invoicing and reporting. Admin and maker are genuinely separate permission worlds, enforced by route guards on the server rather than hidden buttons on the client.
- Two role models
- Order lifecycle
- Product analytics
Shared package
TypeScript · SCSS tokens
Design tokens, API types and pure utilities consumed by both customer frontends. No Vue, no Nuxt, no framework lock — so one change lands in both surfaces instead of drifting apart.
- Framework-free
- Single edit, two apps
End-to-end suite
Playwright
The money paths get exercised for real: cart to payment intent to refund, across the surfaces that share the same contract.
- Cross-surface
- Checkout critical paths
The parts that were actually hard.
Payments that survive an edit
Orders change after they are paid for. The platform does refund-then-repay rather than partial refunds — full refund of the original payment, customer pays the new total — with refunds executed after the database transaction commits so a Stripe failure can never roll back a committed order. Account billing, employee top-up ledgers and premium group orders each have their own path through it.
A ledger the UI cannot lie about
Payment state lives in the backend ledger and nowhere else. Every status the API can return has an explicit, designed affordance on the frontend — including the awkward ones. Clearing state locally to make a cart editable again was the failure mode; it masked incomplete ledger rows and blocked the customer's next payment entirely.
Money, integers, all the way through
Every monetary value is an integer in pence — net, VAT, gross — from the column type to the API contract. Floats never touch it. Pounds exist only at the display layer, and in exactly one place in each analytics facade, which rejects a formatted string rather than guess at its scale.
Finance as a first-class integration
Xero is the system of record for invoicing, synced through a queued consumer rather than ad-hoc writes, so an accounting push is always deliberate and always auditable. Deliveries run through two networks — scheduled and same-day cargo bike — with signature-verified webhooks and a receipt row per event, because neither provider retries.
Integrations owned
Infrastructure
Practice
Agentic engineering, with the guardrails written down.
The interesting part is not that we use AI to write code. It is that the platform teaches itself — every review finding becomes a rule, and every rule is enforced on the next change, by agents and humans alike.
Seven agents, each with one job
Planner, developer, reviewer, code reviewer, security reviewer, retrospective and a prototyping agent that sits outside the normal flow. They are defined as version-controlled markdown, so an agent's remit is reviewed like any other change.
Spec first, always
66 written specifications. A feature starts as a spec, becomes a cross-repository plan, and is reviewed against that spec at the end — not just against code quality. The spec is the contract between intent and implementation.
Three independent review passes
Every pull request is reviewed for spec compliance, for correctness and pattern adherence, and for security — OWASP, auth boundaries, payment handling. Independent passes catch what a single reviewer, human or model, rationalises away.
A learning loop that actually closes
688 logged decisions and 83 per-pull-request review narratives. A finding does not stop at a comment: it is routed to the file that failed to communicate it — the controller's instructions, the conventions doc, the platform ruleset. The same mistake is not allowed to happen twice.
Guardrails as executable context
A single ruleset every agent must obey: money in pence, no partial refunds, never derive ledger state client-side, never write to the accounting system without approval. Constraints that used to live in someone's head now live in the repository.
AI in production, governed
Claude parses maker menus and event proposals into structured data in back-office flows — stateless, single-shot, and human-reviewed before anything is published. Documented for EU AI Act assessment as a deployer of a general-purpose model, with a sub-processor DPA and no customer data used for training. The ordering platform itself is deliberately deterministic.
A note on honesty — the &Dine ordering product itself contains no AI. Discovery, ordering and checkout are deterministic by design. The AI sits in back-office document parsing and in how the engineering team works. I would rather say that plainly than let a buzzword do the talking.
Capabilities
What I bring.
Leadership
- Engineering strategy & roadmap
- Hiring, mentoring & team design
- Board & stakeholder reporting
- Budget & vendor management
- Security, GDPR & EU AI Act compliance
- Technical due diligence
Agentic engineering
- Claude Code & subagent orchestration
- Spec-driven development
- Guardrail & context design
- Model Context Protocol (MCP)
- Automated review pipelines
- AI governance & documentation
Architecture
- Multi-tenant platform design
- OpenAPI 3.1 contract design
- Payments, ledgers & reconciliation
- Webhook & integration design
- Observability & incident response
- Domain-driven service boundaries
Languages & runtime
- TypeScript
- JavaScript (ES2023)
- Node.js
- SQL
- Python
- Bash
Frontend
- Nuxt 4 & Nuxt 3
- Vue 3
- Pinia & Vuex
- React
- SCSS & design tokens
- Capacitor (iOS/Android)
Backend & data
- Express
- Sequelize
- MySQL
- REST & OpenAPI
- Stripe
- Xero API
Cloud & delivery
- AWS (EC2, Amplify, S3, EFS, Secrets Manager)
- CloudFlare
- Docker
- GitHub Actions
- Sentry
- Mixpanel & PostHog
Quality
- Vitest
- Playwright
- Vue Test Utils
- Integration testing
- Test baselining
Track record
Fourteen years, six companies.
&Dine
CTO — previously Head of Technology
Own technology end to end for a B2B catering platform: architecture, delivery, security, compliance and the engineering team.
- Grew a single product into a six-repository platform — API, customer site, native mobile app, admin hub, shared package and end-to-end suite — on one contract and one auth model.
- Designed the payments architecture: Stripe refund-then-repay on edits, post-commit refund execution, account billing, employee top-up ledgers and group ordering.
- Made Xero the finance system of record through a queued, auditable sync rather than ad-hoc writes.
- Shipped the mobile app to iOS and Android with Capacitor, with a deliberately distinct funnel-first UX rather than a wrapped website.
- Introduced enterprise SSO via WorkOS, unblocking corporate customers with Okta and Entra.
- Built an AI-assisted engineering practice — seven specialised agents, spec-first delivery, three review passes per PR, and a learning loop with 688 logged decisions.
- Wrote the AI governance and EU AI Act deployer documentation that clears enterprise vendor assessments.
Just Eat / Menulog
Frontend Engineer — contract, then permanent
Joined on contract to build the new menu microsite into the existing platform architecture, then hired permanently.
- Built core Vue components — including the header and footer used across the platform — for a global rollout.
- Developed the Menulog theme for Australia and New Zealand in parallel on the shared codebase, with locale logic for pricing, currency, opening times and location, toggled by a single config value.
- Worked inside a large, multi-team frontend estate where a component change reached several national tenants at once.
Mettrr Technologies
Tech Lead — previously Senior Developer
First leadership role. Joined as a senior developer and moved into leading the frontend team.
- Architected and built the company's frontend from scratch in Nuxt, choosing SSR for search crawlability and building on the Vue knowledge already in the team.
- Integrated a Netlify-backed CMS so marketing could publish content and new landing pages without a developer in the loop.
- Set the frontend standards and mentored the team — the step from writing the code to being responsible for how a team writes it.
Love Home Swap
Frontend Developer
Modernised the frontend of an ageing PHP platform.
- Built a reusable React and Redux component library, distributed internally via npm.
- Replaced legacy features incrementally rather than attempting a rewrite.
- Unit tested critical paths on both client and server.
Apto Solutions
Developer — from graduate
Multi-platform delivery in an agile team, remote and on site.
- Shipped across several concurrent client projects and platforms.
- Built and released Cordova applications; set up and maintained development environments.
- Hosted weekly internal tech forums.
New Era Education
Junior Developer
First professional role — JavaScript, agile delivery and working alongside designers.
Selected freelance
- Bauce Brothers
- Migrated Squarespace to Shopify, adding analytics tracking and SEO metadata to drive conversion.
- Ideal Flatmate
- Managed an outsourced frontend team through a rebrand and built features in React and Redux in house.
Education
- BSc (Hons) Forensic Computing — 2:1
- University of the West of England
- Computer Science Foundation
- City of Bristol College
Away from the keyboard
Camping and travelling with my young family, and a fairly serious commitment to sauna, cold water and the rest of the wellbeing rabbit hole. It is where most of my better architectural decisions have actually been made.
Contact
Looking for a CTO who still
reads the diff?
I'm starting to look at what's next — technology leadership roles where the architecture, the team and the commercial reality are all genuinely mine to own. Happy to talk, whatever stage you're at.