Inspiration
[Your moment: a lunch rush at a hawker centre, a paper number, a name shouted into the crowd, a group that gave up and left.] Most queue apps ask every guest to download something. I wanted the whole front of house — queue, table, kitchen, till — to run from a QR code and the phone people already hold, in the languages Malaysians actually use.
What it does
- Guests scan a QR, pick their party size and get a ticket with their live place in line and wait time. They can preorder while waiting, get a push or email when their table is ready, and order with friends from one shared cart, each from their own phone. A menu assistant answers "what's good?" and "is this peanut-free?" — and never guesses an allergen.
- Front of house gets a host stand that suggests which party goes to which table, with reasons (including merging and splitting tables), a kitchen display, and a full POS: splits, promo codes, loyalty points, multi-tender payments, refunds and cash drawer shifts.
- Owners paste their menu and describe their floor; AI drafts the menu with allergens and the table plan for review. A dashboard covers every branch, with reports, loyalty campaigns and staff roles that limit what each person can see.
- AI agents can find restaurants, read menus, join queues and book through an MCP server.
- Everything is in English and 中文: screens, emails and AI-translated menus where the owner's edit always wins.
How we built it
One Cloudflare Worker over D1, built with the Void framework and React. Every command is one atomic database batch over an append-only event log, so 300 people joining at once still get gap-free, duplicate-free numbers. Pricing, bill splitting, table assignment and wait-time estimates live in a Rust core compiled to WebAssembly, so the phone and the till compute the same bill. Claude powers the assistant, onboarding and translation, with a deterministic fallback so the AI is never on the critical path. Cloudflare Queues handle campaign fan-out, Email Sending handles receipts, and Workers AI translates menus. GitHub Actions on Blacksmith runners test and deploy every push.
Challenges
- The Cloudflare account already hosted an older app named "beautifood". The first deploy tried to migrate its live database, so I renamed every resource and added a CI guard that refuses to touch anything that isn't ours.
- Email setup failed in CI because the Cloudflare CLI insisted on an OS keyring the runners didn't have.
- Fair table assignment: suggesting merges and splits without letting any party be skipped forever.
- [Anything that was hard for you personally.]
What I learned
[In your words — for example: designing for traffic surges with atomic batches instead of locks, what it takes to make every screen and email bilingual, or delegating a build to an AI agent and checking its work through tests.]
Proof it works
56 end-to-end tests run on every push. 11 persona walkthroughs — guest, diner group, host, kitchen, cashier, owner, marketing, booking, kiosk, AI agent — were filmed by the tests themselves, and each video exists only because every assertion in it passed.
Built With
- anthropic
- better-auth
- claude
- cloudflare-d1
- cloudflare-email
- cloudflare-queues
- cloudflare-workers
- drizzle
- github-actions
- mcp
- playwright
- react
- remotion
- rust
- typescript
- vitest
- void
- webassembly
- workers-ai
Log in or sign up for Devpost to join the conversation.