Selected work

Bespoke work completed

Sports analytics platform

Scout

A football analytics tool that pulls fixtures, results and standings from two external providers, runs them through an expected goals model, and surfaces one considered call per match with the full reasoning attached. It is built to help someone judge a decision for themselves, not to hand them a tip and hope.

66 API endpoints
55,000 lines of backend
Two data providers

What went into it

  • An expected goals model with separate home and away scoring profiles, opponent quality and strength of schedule adjustment, and season aware form decay
  • Model goals cross checked against real shot based xG in a blend, a built in reality check that discounts lucky finishing
  • Squad level adjustments that read each side's injuries and transfers in and out, and move the projection by named player
  • A backtesting harness that replays the exact production model against completed seasons, tracking accuracy separately by confidence tier
  • An installable progressive web app with a service worker, so it keeps working on a bad connection

The hard part

Every number a visitor sees is the end of a long chain, and the model refuses to hide it. The xG breakdown opens the whole calculation: base averages, the schedule adjustment, the real xG blend, the raw formula, every multiplier down to individual squad changes, and the final figure. Making that legible without dumbing it down, while the data behind it arrives late, inconsistently and occasionally wrong, was most of the work.

  • Top Picks: the strongest call across every competition, each with expected goals, odds, value and a confidence read.

  • The full model, opened up: base averages, schedule and blend adjustments, every multiplier down to individual squad changes, and the final xG. Nothing hidden.

  • Every published pick is graded automatically, with the win rate tracked separately for each confidence tier.

  • The form table: points, goals split home and away, last five results, schedule difficulty and scoring streak, over rolling windows.

Coaching platform

Coached by Big D

A complete platform for an online physique coach: a client portal for check-ins, plans, blood work and progress, and a coach console that runs the whole business. The centrepiece is a projection model that learns how each individual client actually responds and forecasts where their weight is heading.

23 data models
Client portal + coach console
Per client trained projection model

What went into it

  • A weekly check-in flow capturing weight, training, recovery and nutrition, with voice notes transcribed and summarised
  • A projection model that forecasts weight under full, partial and current effort, with a confidence band that widens as certainty drops
  • A per client layer that learns where each metric's neutral sits and how hard it hits that client, using a ridge regression pulled toward the coach's own settings
  • Blood work upload with markers transcribed from the report and tracked across panels
  • Email configured directly to and from the site, handling incoming enquiries and outgoing client reminders without a third party inbox
  • A coach console with a single needs attention queue, client management, scheduling, payments and a rewards system

The hard part

Two hard problems ran side by side. One was making the whole path, from a stranger's first enquiry to a signed client checking in to the coach responding, run smoothly enough that nothing falls through: every reply, reminder and review sits in one place and chases itself. The other was the model. Tailoring a projection to each client's own recorded numbers, while staying honest about how little it knows early on, meant a model that defers to the coach until the client's own data earns the right to overrule it.

  • The client side: a portal where each person sees their check-ins, plans, sessions, progress and reward points in one place.

  • A single needs attention queue pulls together everything waiting on the coach, from unanswered check-ins to overdue payments.

  • The trained per client model, and how much it has learned so far. It reports the evidence behind every number rather than inventing confidence.

  • The projection: where this client's weight is heading under full, three quarter and half effort, with each check-in metric's effect on the rate broken out below.

Fire compliance platform

Titan Fire Compliance

A fire damper servicing contractor asked for a website. What they got runs the business. At the front of it sits a bespoke pricing model, built from their own rates and the site conditions that actually move a price, so a building manager has a costed range in a minute instead of waiting a week for somebody to come and look. Behind it, a staff system carrying enquiries, quotes, jobs, asset registers and reports end to end, and a client portal where the building owner approves the work and reads the paperwork.

Bespoke pricing model
Client, staff and admin in one
Damper level asset registers

What went into it

  • A pricing model built from their own rate card, costing a job from the damper count and the conditions on site, and showing how access and working height compound rather than hiding them in one figure. Nobody else in this trade quotes without a visit first
  • One route from any starting point: an enquiry, an email or an estimate becomes a client, a quote, a job and a report without anything being typed twice
  • Asset registers held per building rather than per visit, so a damper carries its own history and this year's inspection knows what last year found
  • Schematic floor plans with every damper pinned where it physically is, and a pin opens that unit's full record, its type, size, result, defect and remedial, without leaving the drawing
  • Reports, certificates and quotations generated as PDFs from the register itself, with revisions and an audit trail behind each issue
  • A client portal where the building owner tracks jobs, approves visits and quotes, reads every report for their buildings, and answers back, all of it in the application rather than in an inbox
  • A dashboard that lists what is actually waiting on somebody, prices not sent, dates not agreed, findings with no remedial job raised, rather than counting how much there is

The hard part

Knowing nothing about the industry. Fire damper compliance has its own standards, its own paperwork and its own way of working, and none of it is written down where a developer would look. Most of this project was learning the process end to end, from a survey through to a signed off certificate, well enough to see where it actually goes wrong: work recorded per visit instead of per damper, findings that never turn into a job, and a client who has to ask for the report they paid for. The software follows the trade rather than the other way round, and getting to the point of knowing the difference took longer than building it.

  • The pricing model, put on the front of the site. A costed range in a minute, itemised against their own rates, with access and working height shown compounding rather than buried in one number.

  • Raising a job takes three answers. The building it names is what gives the job its register and its drawings, so the work arrives knowing what is already there.

  • Every damper pinned where it actually is. A pin opens that unit's record, type, size, result, defect and remedial, without leaving the drawing, and the same plan prints into the report.

  • The dashboard answers what is waiting on you rather than how much there is: a price sent and not answered, buildings waiting on a reply, enquiries nobody has come back to.

Want something like this?

Tell me what you are trying to build. I will tell you honestly whether it is a week of work or three months.

Get in touch