AGENCY
ZGRZ Agency

Canteen portal with daily menus and QR tickets for pickup

We launched a managed system where an administrator builds the daily menu, visitors place pre-orders on the website and receive a QR ticket, and staff hand out meals through a fast code check in the back office.

 

Internal System
Booking Platform
MVP development
B2B
FoodTech
Directus CMS
Workflow Automation
Back-Office Development
Admin Panel

About the Project

A web solution for the canteen of a sports center, combining a public-facing ordering flow with an internal back office for content and meal operations. A visitor picks dishes from the daily menu, confirms the order, and receives a QR ticket. A canteen employee scans the code in the admin panel, sees the order contents and redemption status, and then hands out the meal.

 

About Customer

The client is a large training center for athletes and a venue for major sporting events, operating as a full-cycle campus — training infrastructure, educational spaces, accommodation, catering, recovery, and medical and paramedical support all in one place. The setup lets athletes and teams attend camps, training sessions, and events with minimal logistical friction. The center serves a very high annual user volume, works with national and international sports organizations, and regularly hosts elite camps and events.

 

QR ticket for pickup 

 

The ticket had to be easy to verify, resistant to screenshot reuse, and unambiguously marked as redeemed after use.

 

Daily menu updates 

 

The administrator had to update dishes, stock limits, and availability for different visitor groups in minutes — without breaking the ordering logic.

 

Pickup during peak hours 

 

Ticket scanning and verification had to be fast, require minimal clicks, and surface a clear result for the staff member at the counter.

 

Roles and permissions 

 

Not every team member needs access to content or menu editing. Some only need scanner mode, so the access boundaries had to be drawn cleanly.

 

Repeated use 

 

The system had to catch repeated attempts to reuse a ticket and make it obvious to staff that the ticket had already been redeemed.

 

AI support 

 

AI had to help staff and administrators with checks and hints — but never make a final decision without a human in the loop.

 

Proposed Solution

We designed the solution as a public ordering client, Directus as the back office, a Node.js API for the ticket lifecycle, and a dedicated scanner module embedded inside the admin panel.

 

Directus as the single back office for content and food operations 

 

We modeled the data structure for site pages, the daily menu, dishes, availability restrictions, and orders. The administrator runs everything through one interface, with role-based access tuned to each job function.

 

Node.js API for orders and the ticket lifecycle 

 

We implemented the server-side logic for order creation, ticket generation, status verification, and redemption. Validations went in to block empty tickets or invalid dish combinations before they ever reach the kitchen.

 

QR ticket as a protected token with a controlled status 

 

Each ticket is a signed token linked to the order record, validated by the server. After scanning, the system immediately reflects the current status — new, used, expired, or invalid.

 

Scanner inside Directus as a dedicated extension 

 

The Scanning screen lives inside the admin panel: camera access, QR reading, the order card, the ticket status, and a single redemption action. Staff see exactly what they need to hand out the meal — nothing more.

 

AI hints for staff during scanning 

 

AI runs as a hint layer with strict authority limits. It analyzes order context and flags risky situations — repeated use, unusual combinations, common input mistakes, or conflicts with daily menu rules. For the operator, it appears as a short prompt next to the status, helping them decide faster.

 

AI quality control for menu administrators 

 

The same AI layer assists during menu editing. It surfaces missing allergens, weight, or category fields, duplicate names, illogical pricing, and availability mismatches across visitor groups. The result is fewer downstream errors at the moment of meal handout.

 

We started by defining the real canteen operations — who builds the menu, who takes orders, who hands meals out, the most common reasons queues form, and the points where staff make mistakes most often. We captured the rules that previously lived only in the heads of a few experienced people: when pre-orders close, what to do if a dish runs out, how to handle guests with different access rights, how meal pickup gets recorded, who's allowed to change the menu. The output was a clean menu of the day → order → ticket → handout flow with explicit control points that later became statuses and roles.

 

Node.js
TypeScript
Directus CMS
PostgreSQL

+1 Resource

Results

After launch, the client got a managed catering system with a clean meal-handout flow and minimal manual work around it.

 

Up to 900 pre-orders per day

handled by the system on a typical day

5–12 seconds

for staff to hand out a single order

Zero repeated meal handouts

on a re-scanned ticket

3 access roles

menu admin, canteen manager, scanner operator — each sees only what they need

Up to 60 items in the daily menu

can be added by the administrator without chaos

Up to 2 minutes

to update the menu for the day

Up to 10,000 tickets

scanned per month

100% of scans stored in the log

as events — who scanned, what the result was, when

20–40% fewer menu errors

caused by human factors

Get in Touch

Or send us a message and we'll get back to you within 15 minutes during business hours

Enter your name

Enter your email

Enter your message

Andrii Trubai

Andrii Trubai

CEO | Head of WebDev department

More Success Stories