Self-Service Ordering System

Context
In restaurants, orders often pass from hand to hand between the floor and the kitchen, causing errors and delays. The system digitizes that flow with a web-based order ticket.
It has three interfaces: customers build and send their order, the kitchen sees the order queue and marks orders as ready, and the admin manages products and categories.
Technical decisions & challenges
- 01
Mutations with Server Actions and Zod validation
Creating and completing orders and managing products are handled with Next.js Server Actions, validating every input with Zod before it reaches Prisma. No separate API was needed for write operations.
- 02
Near real-time kitchen queue
The kitchen view refreshes with SWR and periodic revalidation, a simple approach that avoids adding websockets for a single venue's order volume.
- 03
Data model with Prisma and PostgreSQL
Categories, products, orders and the order-products join table modeled in Prisma, with product images uploaded to Cloudinary and access protected by NextAuth.js.