SnafuPrototype
Every guest accounted for.
When a cancelled flight strands guests overnight, Snafu plans their ride to the airport. A coordinator approves it, and if a vehicle drops out, the places that still work are kept.
MexicoFrom personal experience
Ceiba hotel36 guests
Ceiba minibus20 guests
Laguna accessible shuttle16 guests, 2 wheelchair users
Reserve lift shuttle16 guests, 2 wheelchair users
- My part

- As a TUI destination representative I handled transfers for arriving guests, including cancellations and wheelchair arrangements, and they rarely went to plan. Snafu is built around that work. I set its direction and judged each version; Codex built it.
- What
- Transfer recovery for a travel coordinator
- Built with
- Codex, Python, FastAPI, TypeScript, Google OR-Tools, Supabase, Railway, OpenRouter
- Note
- Fictional guests, suppliers and prices. No real bookings.
A rebooking notice moves 36 guests to Ceiba hotel for the night. None of them has a ride to the airport, and 2 are wheelchair users.
At Ceiba hotel
36 guests, no ride booked
What the AI reads
The rebooking notice arrives as ordinary text. GPT-4.1 mini, reached through OpenRouter, reads it for what the plan depends on: how many guests, how many are wheelchair users, and when their new flight leaves. Every value comes with the words it was taken from.
Finding the guests without a ride is a separate fixed rule, not AI, and a coordinator confirms the counts before anything is planned. In another saved reading, a supplier mentioned a 12-seat minibus but not how many guests. The model left both counts empty, did not take 12 as the number of guests, and asked how many guests needed transport and how many needed wheelchair-accessible transport.
In a check on fifty fictional supplier messages, with the right answers written before the first reading, 39 of 50 readings had both counts exactly right. The report, PDF
The rebooking notice
Fictional ground-handler rebooking notice. The flight has been cancelled. 36 passengers, including 2 wheelchair users, will stay at Ceiba overnight hotel. Their replacement flight departs Cancún on 2026-10-04 at 11:00 local time. This notice covers the Ceiba group only.
What the AI read
- Guests
- 36
- Wheelchair users
- 2
- New flight
- 4 October, 11:00
What a fixed check found
All 36 guests on the matching rebooking list have no transfer to the airport booked.
What a person approves
The coordinator confirms the counts and when the guests must reach the airport. Google OR-Tools then finds the cheapest set of vehicles that seats all 36, carries both wheelchair users and arrives by 09:00 within MXN 18,000, or says that no such plan exists.
Nothing is reserved until the coordinator approves, and the approval belongs to that exact plan. When the Laguna shuttle cancels, the 20 places on the Ceiba minibus are kept, and the new plan, MXN 16,000, needs a fresh approval.
| Offer | Seats | Wheelchair | Arrives | MXN | In the plan |
|---|---|---|---|---|---|
| Ceiba minibus | 20 | 0 | 08:00 | 6,200 | 20 guests, both plans |
| Laguna accessible shuttle | 16 | 2 | 08:15 | 7,600 | 16 guests, until cancelled |
| Caribe accessible coach | 50 | 2 | 08:35 | 17,200 | Fits, costs more |
| Reserve lift shuttle | 16 | 2 | 08:40 | 9,800 | 16 guests, the new plan |
| Premium lift coach | 40 | 4 | 08:25 | 21,000 | Over the budget |
| Later airport coach | 48 | 2 | 09:20 | 8,000 | Too late |
Inside the desk
The coordinator works on one screen: the notice with the AI’s reading, the plan with each vehicle’s arrival and price, the approval, and the guest manifest filling as places are reserved.

How it’s built
Approved work goes into a queue in the database, and a separate worker carries it out, so a crash or a restart does not lose it. If a supplier accepts a reservation but its reply is lost, Snafu checks the saved receipt before trying again, and the guests are not booked twice. A test stops the worker just after a reservation is saved, and another worker finishes the job without a duplicate.
| Part | Tool | What it does | Status |
|---|---|---|---|
| Planning | Google OR-Tools, Python | Finds the cheapest plan that meets seats, wheelchair places, deadline and budget, or reports none. | Built |
| Approval and the queue | FastAPI, PostgreSQL | Ties each approval to one plan version. A worker carries out the reservations and survives a restart. | Built |
| Suppliers | Simulated | Reserve and release places. Saved receipts stop a second booking. | Built (simulated) |
| Accounts and data | Supabase | Database, sign-in and access rules that keep each company’s records apart. | Built |
| Coordinator’s desk | TypeScript | The case, the plan, the approval and the saved history in one place. | Built |
| Reading messages | OpenRouter, GPT-4.1 mini | Real readings saved with their quotes: three supplier messages and the Mexico notice. Capped at USD 1. | Pilot |
| Finding missing transfers | Python | A fixed rule flags guests moved overnight with no ride to the airport. | Built (local only) |
| Reviewed counts into planning | FastAPI, OR-Tools | A person’s confirmed or corrected counts feed the plan. | Built (local only) |
| Hosting | Railway | The API, the worker and the visitor desk run on Railway, with a USD 15 monthly spending limit. | Live |
| Checking the readings | Ragas 0.4.3 | Fifty fictional messages with their answers fixed first: 39 of 50 readings exactly right. Ragas faithfulness 0.819, which cannot see a missing count or a wrong number taken from the message. | Run (4 October) |
About the demo
The Mexico case is fictional, and no real transport is booked. The AI reading on this page is a saved result, not a new call each time. The demo also holds a cancelled airport coach in Palma and a message with missing details.