Customer app
Mobile-first, like a modern food-ordering app
- Map of the five nearest open vans
- Menu, cart and checkout
- Live status timeline and 15-minute ring
- Change or cancel within 10 minutes
- Rate your orders, as in 2021
- Community board and ratings
INFO30005 University of Melbourne 2021, revived 2026
Snacks in a Van is the food-ordering app our team built for a 2021 web-technologies brief: find the nearest roving snack van, order ahead and pick it up, while the crew inside runs a live order board. It is back as a full-stack Next.js app with a real database and a free, key-less map.
One click, no sign-up. Tip: open the customer and vendor demos in two tabs and watch an order move between them.
Watch the guided tour: three short videosHow it works
Share your location or drop a pin. Open vans are ranked by distance and the five closest are highlighted, exactly as the 2021 controller did it.
Pick from the eight-item menu and place your order. You have ten minutes to change your mind or cancel.
Every order carries a 15-minute promise. If the van runs late, the order is flagged for the late-order discount.
Two portals
Mobile-first, like a modern food-ordering app
Dense and efficient, made for a tablet on the counter
The coursework
The brief imagined a business of roving vans selling coffee and snacks, and asked each team to build its web app across four milestones: a customer app to find a van, order and track it, and a vendor app to run the van and work through orders, all backed by a database and authentication, with extra credit for things like maps and ratings.
Our five-person team delivered both portals in Express, Handlebars and MongoDB, plus three bonus features: the nearest-van map, a community blog and order ratings. The revival keeps the original rules (the ranking maths, the 10-minute change window, the 15-minute promise and the order states) and ports them to TypeScript with tests that run the 2021 code side by side.
About this project
University of Melbourne · Semester 1, 2021 · Group 4399, tutorial T03.
Sunchuangyu (Rin) Huangrevival
Vendor app design, customer ordering, outstanding-orders list, customer & vendor login, the map (nearest van) and blog bonus features, vendor CSS. Led the 2026 revival.
Bin Liang
Database schema design, snack details, marking orders fulfilled, order details, completed orders, the rating bonus feature.
Declan Gannon
Customer app foundations, menu styling, customer profile, vendor order search, the project report and test suites.
Khin Liew
Customer app foundations and mock-up annotations, starting an order, vendor outstanding orders, history and order details.
Wei (Eric) Zhao
Customer design polish, van status, multi-snack orders, cart features and CSS, password hashing, Passport strategies and route guards.
| Layer | 2021 | 2026 |
|---|---|---|
| Web framework | Express 4 + Handlebars views | Next.js 16 App Router: Server Components, Server Actions, Route Handlers |
| Database | MongoDB Atlas + Mongoose (now gone) | SQLite / libSQL (Turso in production) + Drizzle ORM, seeded demo data |
| Auth | Passport-local + express-session | bcrypt + signed httpOnly session cookies (jose), one per portal |
| Maps & places | Google Maps JS API + OpenCage | MapLibre GL + OpenFreeMap tiles + Photon geocoding, no API keys |
| Styling | Hand-written CSS per page | Tailwind CSS v4 + shadcn/ui, light and dark themes |
| Live updates | Full page reload every 60 s | Polling Route Handlers every 3–4 s with SWR |
| Testing | Jest + Supertest | Vitest unit and parity tests run against the original JavaScript |
| Hosting | Heroku | Vercel |
Academic integrity. The original 2021 submission is preserved unchanged in the repository's coursework folder for reference, apart from redacted secrets. The assignment brief and course materials are not reproduced here; the description above is a paraphrase.
The vans around Melbourne Uni are open. Jump in as a customer or behind the counter.