Beans n Beats
An order and pickup queue for a charity coffee booth. We made it for the pitch of an event expecting over 40,000 visitors.
The staff screens need a login, so the demo video shows more.

- Status
- Built for the pitch
- When
- Oct to Nov 2026
- Role
- Ready board, pickup scanner and day reset
- Team
- Five people
- Made with
- Next.js, React, TypeScript, Supabase, IndexedDB
What it is
Beans n Beats runs a charity coffee booth at a year-end event at Marina Bay Sands. We were a team of five, and we made its order system for the event’s pitch.
The way it works is pretty simple. The counter staff key in an order and show the guest a QR code. The baristas move the order from queued to ready, and the guest can follow their drink on their own phone without installing an app or making an account. There is also a public board that shows which pickup numbers are ready. If the Wi-Fi drops, it keeps working and catches up later.
My part
I set up the project scaffold, and I was one of the two people who reviewed and merged pull requests. The parts I was responsible for were the ready board, the pickup scanner, the reset between event days, and the rules on how we handle guests’ personal data. I also edited the demo video. My teammates made the barista queue, guest tracking, menu controls, sales report and offline sync.
Most of the code was written by AI coding agents working from the specs we wrote, and a person reviewed every change.
Limits
- We made it for a pitch and it has not run at a live event, so there are no usage numbers to show.
Decisions
These go from the first to the latest. For each one, what I saw and what I did about it.
Five of us, plus a few AI coding agents, were all about to work in the same repository.
We went with one branch per feature, and nothing gets into main without a review and passing checks
Payment was going to happen on the organiser's own till and not in our app.
We dropped the payment step. Staff take payment, press Submit, and the order goes to the baristas
You could still order a drink that had already sold out.
Stock is now checked on every item, and Submit is disabled if anything is unavailable
Two of our features each needed a staff login.
We made one staff session on the server that every staff page uses
We knew a manual Start new day button would get forgotten, and it would miss any screen that was offline at midnight.
A new day now starts by itself at midnight, Singapore time
The organisers asked for a pickup scanner, and we were expecting the Wi-Fi in the hall to be patchy.
The QR code guests use to track their order is also the pickup code, and the scanner works offline
When we ran through all our tests, we realised there was no way to cancel an order.
We added Cancel with a confirmation. Cancelled orders stay in the export but not in the totals