frunt turns a restaurant's own documentsinto answers and training its staff actually use.
- Where
- A web app for managers. A staff app on the App Store and Google Play. Answers on WhatsApp.
- Role
- Solo. Product, design, code, and running it.
- Started
- 1 May 2026 · live since 1 June 2026

01What I made
A manager uploads what the restaurant already has: the allergen matrix, the SOPs, the staff handbook. frunt reads them and turns them into short courses on staff phones. Staff ask questions in plain words and get an answer that names the document it came from. If the documents don't cover it, frunt says so instead of guessing.
02Why
I worked behind the bar before I built this.The knowledge was there. Nobody could use it.
At Coppa Club and the Red Cross in Reigate, training ran on hope: hope your staff already knew the answer. When they didn't, finding it meant flipping through spec sheets, or asking a manager, who then answered the same questions again next shift.
The training courses were third-party compliance modules. Staff hated them, and I didn't think they helped with the actual work. They ticked a box. Everything a restaurant knows was written down somewhere, but it was broken up, hard to find and hard to use.
I wanted training that actually trains, built from the restaurant's own rules, and answers staff can find in seconds. I built frunt to be a real business for MGKCodes, not a demo.
03What I aimed for
Answers staff can trust. Every answer comes from the restaurant's own documents and says which one. If the documents don't say, frunt says so. A confident wrong answer about an allergen is worse than no answer.
Training about this restaurant. Courses built from its own rules, not a generic module.
04Timeline
- A demo, called Mise, to show restaurants the idea
- Decided to build the real product. Wrote 12 decision records before any code
- Renamed frunt after a UK trademark search. First commit
- Working end to end: upload a document, ask, get a cited answer
- Live at frunthospitality.com
- Staff app on the App Store
- Staff app on Google Play
- First paying venue
- Found three silent failures. Every job now reports that it ran (2 Aug)
- Refocused: the answers are the product
- Answers on WhatsApp
- Instagram studio live
- Answers cite only the documents they used
- Built a fixed test for the answers. Its first run found a safety gap, fixed the same day
05Challenges and decisions
Each card: what happened, the options, what I chose, how it turned out. Dated, with the decision record it was written in.
The core: does it actually work?
15 – 18 May 2026 · ADR 0001 · 0008- What happened
- A restaurant's knowledge lives in PDFs, photos of laminated sheets, spreadsheets and paper. None of it is written for searching.
- What I chose
- Claude reads every document, photos included, so there's one engine instead of an OCR tool plus a model (Tesseract, Textract and Mistral OCR were the alternatives). Documents are split into passages and stored with their meaning in Postgres (pgvector), every restaurant in one database, kept apart by row-level security; a database schema per restaurant would mean every change runs once per customer.
- How it turned out
- Upload, ask, cited answer worked end to end on 18 May, three days after the first commit. Staff could ask and train on their phones four weeks after it.
"I'm proudest that the base product works. Not a technical feature: the goal I set out to achieve."
Allergen answers can't be wrong
10 June 2026 · ADR 0046- What happened
- Allergen questions were answered like any other: search the documents, let the model phrase the answer. A confident "the brownie is nut-free" when the matrix says otherwise is a safety incident.
- The options
- A second AI to check the first. Refuse every allergen question. Or a plain-code check.
- What I chose
- Allergen facts come from the database, read straight from the allergen matrix the manager confirmed, never from the model. A plain-code check reads every answer that names an allergen: it either adds the verified facts or replaces the whole answer with a refusal that points to the matrix.
- Why not a second AI
- "A checker sharing the generator's model shares its blind spots." The cases the first model gets wrong are the ones a second model gets wrong too.
- How it turned out
- The model phrases the answer; it is never the source of an allergen fact.
Nothing reported its own absence
29 July – 2 Aug 2026 · ADR 0074- What happened
- I came back from six weeks away and found three things that had broken quietly. A one-letter typo in a setting name meant payment updates had never reached the database since launch. Scheduled jobs added after 1 June had never run once, because the job service had stopped syncing. Nothing had errored. Nothing had said anything.
- What I chose
- Every scheduled job now records a run every time, even when there's nothing to do, and a weekly email says green or red.
- The rule
- "Nothing to do" has to look different from "did not run".
The answers are the product
24 Aug 2026 · ADR 0076- What happened
- frunt drifted. I'd built outward from the answers into a rota and team briefs, and by summer the manager dashboard opened on "Build next week's rota", with the answers third in the menu. Every step made sense on its own.
- The options
- Delete the rota and briefs. Rename the product to something that explains itself. Turn it into an open-ended assistant.
- What I chose
- Freeze the rota and briefs (switched off, not deleted) and put the answers first. And a third test that every new feature must pass: do the restaurant's own documents make a hard job easy? The rota fails it: it never touches a document.
- How it turned out
- It shipped the same day: the rota and briefs switched off by default, and the website leading with the answers. The manager home became one screen on 28 Aug.
"Selling the product became confusing because it was third in the list of features when you open the app."
Citations that tell the truth
September 2026 · ADR 0084- What happened
- Three things found by testing frunt the way a venue would:
- Over-citing. "What are the Christmas hours?" cited seven documents, none of which answered it. Answers now cite only the documents they used. (Live, 28 Sep.)
- Lost pages. A 40-page handbook silently lost pages 19 to 40, because text extraction for long PDFs had never been built. Now it has. (Live, 23 Sep.)
- A planted mistake. In a dry run on the live app, I planted a wrong cooking temperature in a test document. frunt quoted it back, with a citation. A citation proves where an answer came from, not that the document is right. So frunt's document checks are an aid, and the manager stays responsible for what their documents say. (Written as ADR 0084 on 24 Sep.)
My own test found a safety gap
6 Oct 2026 · ADR 0088 · 0046- What happened
- I built a fixed test for frunt's answers: 38 questions asked of a restaurant I invented, marked by code, not by a model. Its first run failed three of the eight safety questions. Asked about a dish missing from the allergen matrix, frunt marked the model's guesses as verified instead of refusing.
- What I chose
- Fix the rule, not the wording. The list of every dish with a given allergen now only answers questions that ask for a list. A question about one dish the matrix doesn't have gets no facts, so frunt refuses it. Fixed and re-tested the same day.
- The test now
- 31 of 32 scored answers right, safety floor 8 of 8, on a fixed set of 38 questions marked by code (7 October 2026).
06Where it landed
Live: the manager web app, the staff app on the App Store and Google Play, answers on WhatsApp, the website with its UK-law guides, and the Instagram studio. Internal tools: the admin console, outreach and analytics.
First paying venue: 14 June 2026.
Both app stores four weeks after the first commit.
- 86
- decision records
- 142
- API routes
- 73
- database migrations
- 72
- test files
Counted from frunt's code on 8 October 2026, commit ace0233.
07How I build it with AI
Claude writes most of the code. I decide what gets built and I check what comes out:
- Decide first. A decision record before the code, from day one: 12 of them before the first commit. Why this, what else I considered, what would change my mind.
- Review every change before it merges.
- Tests and a gate. The release script refuses to promote anything to production unless CI passed on that exact commit. GitHub's branch protection costs extra on a private org repo, so I built the check myself (ADR 0064).
- Run it and look. Scripts check the real screens in a browser, and dry runs on the live app use planted mistakes and a sealed answer key.
- Measure the answers. 31 of 32 scored answers right, safety floor 8 of 8, on a fixed set of 38 questions marked by code (7 October 2026).
08What I learnt
Know what the product is. frunt's core worked by 18 May. Then I built outward, and by August the thing restaurants came for was third in the menu. Building the rota and briefs did show me what mattered. Next time I'd name the core first and test each feature with real venues before building the next one. My first venue taught me the same thing from the other side: setup is the hard part, signing up isn't the same as using it, and the pitch needs to be one thing.
Write decisions down. A record of why, written before the code, keeps a project on track, and keeps AI-written code honest.
Make failures loud. If silence can mean "fine" or "broken", it will mean broken for weeks.
Don't let AI check AI. Where an answer must be right, check it with plain code that refuses.