The problem
Ristorante Gina, a seafood restaurant, ran its service on paper: waiters wrote orders by hand, the kitchen and the bar read the same slips, and the bill was added up at the till. The owners wanted one system for the dining room, the kitchen and the manager, built so it could later serve more than one restaurant.
What I built
I built RistoFlow, a restaurant management web app, and set it up with Gina as the first restaurant.
- Floor plan — tables grouped by room, with live states (free, occupied, orders in progress, orders ready) and the number of covers set when a table opens.
- Orders from the phone — waiters build the order by category, with notes per dish. On sending, it is split automatically between kitchen and bar, so each station only sees its own work.
- Kitchen display — a screen that refreshes every 5 seconds, moves each order from sent to preparing, ready and served, highlights delays and prints a 72mm ticket, automatically if needed.
- Bills — table total with cover charge, printable pre-bill and closing. Since version 1.5.0 prices are visible only to the manager, who closes the bill, not to waiters or kitchen staff.
- Menu editor and reports — categories, prices (also per 100 g), dishes marked as sold out at once, and daily takings, covers and best-selling dishes.
- Four roles, many restaurants — platform admin, manager, waiter and kitchen. Each restaurant has its own users and data, kept separate.
- Local server package — an installer that puts the app and Gina’s real menu and tables on a PC inside the restaurant, with a daily backup script.
Built with
PHP 8 and MySQL with PDO, plain JavaScript, no external libraries. One API endpoint handles every call. Sessions with CSRF tokens and hashed passwords. Gina’s menu and wine list were loaded into 9 categories.
Why it was done this way
I kept the app free of dependencies and used simple polling instead of websockets, so it runs on ordinary shared hosting. The same choice made it easy to move it onto a local server: orders and bills keep working over the restaurant’s Wi-Fi even when the internet connection drops.


