case study
migration
HireBest: Off Bubble and Into Production in Seven Months
My Role
Timeline
4,163 commits. Live customers. Seven months. Here's what made it work.
HireBest is a hiring platform built on one idea. Before you interview anyone, define what success in the job looks like. They call it the Cipher: a charge, the outcomes under it, the deliverables under those, and the efforts that produce them. Every interview, every rating and every bit of AI in the product hangs off it.
It started on Bubble. That worked for a while. Then the customers got bigger, the security questions got harder, and the AI features needed a proper backend. The consulting team behind HireBest also wanted to run their executive assessment work on the same core.
So we rebuilt it. Next.js, Supabase, AWS. The first commit was on 10 March 2026. Today it's on version 1.242.0, and the live customers came across from Bubble with their full history.
Here are the seven things I'd point to.
1. Seven months, start to production
The numbers, as of mid-October: 4,163 commits. 447 database migrations. About 700 test files. 98 written specifications.
The team behind that is small. Claude Code writes most of the code. I make the decisions it works inside.
2. Write the spec first. Then let the machine build.
Every feature starts as a written spec. There are 98 of them now. Each feature also gets a mockup, and the mockup gets approved before anyone builds anything.
Then Claude Code builds against the spec. When the build changes the plan, the spec gets updated in the same change. The spec stays the truth.
When code is cheap, the expensive mistake is building the wrong thing. I've written about that in The Math Has Changed. HireBest is where I proved it to myself.
3. AI in the middle of the product
The Cipher is where the AI earns its keep. It drafts ciphers. It briefs interviewers before a call. It sorts interview quotes against the cipher. It summarises the evidence when it's time to decide.
All of it runs on Claude through AWS Bedrock, inside the same AWS account as the app. No router in the middle.
Every AI response has to match a strict schema before a screen sees it. Models drift. You ask for a list and get a string. If that reaches a React component, the page crashes. So there's a boundary that checks the shape, repairs the known drifts, and logs every repair. More on that in Your LLM's JSON Schema Is Already a TypeScript Type.
Moving to a new model is a runbook. Probe the model, run the regression, then move the prompts. Nobody flips a model in production on a hunch.
4. Henry fixes himself
I've talked before about robots fixing the small stuff. Henry is the HireBest version.
Henry watches staging and production for errors and logs each one in a ledger. Every night he works through the safe ones on staging, checks his own fix, and opens a pull request. Every morning we get an email: what he fixed, what he held back, and what needs a person.
Henry doesn't make judgement calls. Anything that needs one comes to us. That's the deal, and it's why we trust him with the rest.
5. Two businesses, one platform
HireBest runs hiring for its customers. The same people also run executive assessments, organisational assessments and 360 reviews for consulting clients.
At first those lived side by side. Hires in one data model, consulting projects in another. Every permission rule existed twice. Every screen had to know which world it was in.
So we merged them. Everything is now an engagement. A hire is an engagement. An executive assessment is an engagement. One set of rules, one set of permission checks.
It was a scary change on a live system. The production cut-over took 13 minutes.
6. Live interview transcription
Interviews happen on Microsoft Teams. HireBest records the call and streams the transcript to the interviewer's screen as people talk.
The interview screen shows the plan, the time spent on each part of the candidate's career, and whether you're on pace or behind. If the connection drops, it keeps going.
After the call, the transcript goes to the AI that sorts what was said against the cipher. The interviewer gets evidence, not a pile of notes.
7. AWS, built for the strictest security reviews
HireBest runs on AWS. Containers on ECS Fargate, secrets in Parameter Store, daily backups to a second region, and alarms that mean something.
Security lives in the database, not only in the app. Every table has row-level security, so one customer can't read another customer's data, even if the app code has a bug. Confidential searches stay hidden from most admins. Accounts have two-step sign-in. Platform staff work through a separate admin console with an audit log.
The app ships as one container image. The same image runs in every environment, configured at run time. That was deliberate. Some of the buyers HireBest wants to win need software that runs on their own infrastructure, or in AWS GovCloud. Bubble can't do that. This was built so it can.
"But AI wrote the code. Who's in control?"
Same answer as always. I make every architectural decision. Every policy, standard and convention is written down, in the specs and in the instructions the agents read at the start of every session.
The machine works inside those decisions. It doesn't make them.
The short version
- Write the spec before the code. Cheap code makes bad plans expensive.
- Put a schema between the AI and the screen.
- Let a robot fix the small stuff overnight. Keep the judgement for people.
- One data model beats two, even when the cut-over scares you.
- Stream the interview, then let the AI sort the evidence.
- Put security in the database, where an app bug can't skip it.
- Ship one container, so the platform can go where the customer needs it.
See the product at hirebest.ai. More on how we run production with a tiny team: Reliability With a Team of Two.