About me

Senior Full-stack Developer & AI product builder  · 

20+ years shipping software  ·  UK

I'm Tomi Doherty — a Wiltshire / Somerset -based software engineer with over 20 years of experience building web and mobile products. My background spans the full stack, but right now my focus is on AI-integrated applications: products where the AI isn't a gimmick, but the thing that makes it genuinely useful.

I've shipped two live AI products independently from the ground up. Before going independent, I spent 8 years as a Software Engineer at Hargreaves Lansdown, building customer portals in PHP, React, Node.js backends, automated report generation systems, and modernising legacy API infrastructure. Before that, roles at T-Mobile, agency work in Bristol,

My broader stack covers PHP / Laravel, React, TypeScript, Node.js, React Native, Python, and Linux DevOps on Docker. I hold a BSc (Hons) in Software Development from the University of Bolton, and I'm currently open to senior full-stack and AI-focused roles in the UK as well as freelance and contract engagements.

Live project

MixGenius

AI cocktail recommendation app. Tell it your mood or a flavour — it generates personalised recipes using a Python AI layer on top of a PHP / Laravel backend, with a React Native app on iOS and Android.

PHP / Laravel Python React Native AI API TypeScript
mixgenius.app

Live project

Screenchat

Real-time movie chat platform with AI film critic personas powered by the Anthropic Claude API. Uses a RAG pipeline, Socket.IO, Docker, MariaDB, Redis, and a React Native frontend — built end to end.

Anthropic API Node.js Socket.IO React Native TypeScript
screenchat.net

Situation

Screenchat, my real-time movie chat platform, has a React-based website frontend alongside its Node.js/MariaDB backend. The website relied on REST-style API calls that returned fixed, often bloated payloads — including nested data like room details, message history, and movie metadata the frontend frequently didn't need in full — increasing payload size and slowing page load and interaction times.

Task

I needed to let the web frontend request exactly the data it needed for a given view, cutting down on over-fetching without maintaining a growing sprawl of bespoke REST endpoints for every use case.

Action

I introduced GraphQL across both sides of the web stack:

  • Built a GraphQL layer on the Node.js server, defining schemas and resolvers for core entities (rooms, messages, movies, users) so the frontend could query precisely the fields it needed in a single request.
  • Integrated a GraphQL client into the React website frontend, replacing multiple fixed REST calls with targeted queries shaped to each page's actual data requirements.
  • Structured resolvers to avoid the classic N+1 query problem, keeping backend performance consistent even as query flexibility increased.

Result

API responses shrank significantly by eliminating unused fields and redundant nested data, reducing payload size and improving page load times on the website. The change also reduced backend maintenance overhead, since new frontend data needs could be met by adjusting queries rather than building new REST endpoints.

Available for UK roles & freelance — remote or commutable locations.