Skip to main content
Technical

Restaurant Management System – Case Study

Restaurant Management System

Overview

Fumari — Full-stack restaurant management system

Full-stack restaurant management system for large-scale venues (Turkish cuisine, shisha bar, cocktail lounge). Single Next.js app: staff dashboard (tables, reservations, POS till, kitchen display, staff, accounting), waiter buzzer, and public booking and table ordering with payment. Role-based access with configurable feature allocation per role.

Tech: Next.js 16, TypeScript, Prisma (PostgreSQL/SQLite), Tailwind CSS, JWT (HTTP-only cookies), Stripe / SumUp / Handepay, PWA.

  • Table management and map, sections, waiter assignment, QR table ordering
  • Reservations and online booking with minimum order
  • POS till (HMRC/personal payments), transaction manager
  • Kitchen display (real-time queue)
  • Staff management and configurable feature access per role
  • Waiter buzzer (notifications only for PIN users)
  • Double-entry accounting (chart of accounts, VAT, reports)
  • Public flows: /book, /table/[number] (order, buzzer, pay)

About this project

Fumari — Full-stack restaurant management system

A single-application restaurant management system for large-scale venues (e.g. 1000+ capacity), covering Turkish cuisine, shisha bar, and cocktail lounge. It handles tables, reservations, POS till, kitchen display, staff, double-entry accounting, customer buzzers, and online booking with table ordering and payment.


Overview

Fumari is a full-stack system built as one Next.js app: dashboard for staff, APIs for all operations, and public flows for booking and table ordering. It supports multiple entry points (main login, waiter PIN, accounting login, public booking) and configurable role-based feature access so managers can control who sees tables, till, kitchen, accounting, and more.


Problem / context

Large restaurants and multi-zone venues need a single place to manage tables, reservations, point-of-sale, kitchen orders, staff, and accounting, while also offering customers online booking and in-venue ordering (e.g. scan table QR to order, request service, pay). The goal was one unified system instead of separate tools for each function.


Solution

  • Single Next.js app: Dashboard (React, App Router) and API routes in one codebase; no separate API server.
  • Role-based access: Admin, manager, staff (main login) and waiters (PIN login). Admin can assign which features each role can use (tables, till, kitchen, orders, staff, accounting, DB Studio, transactions).
  • Multiple entry points: Main login for staff dashboard; waiter login for buzzer notifications only; accounting login (or admin via main session); public /book and /table/[tableNumber] for customers.
  • Database-driven feature allocation: Stored in DB so admins can change role permissions without code changes.

Tech stack

| Layer | Technology | |-----------|--------------------------------------------------| | Framework | Next.js 16 (App Router), React 19 | | Language | TypeScript | | Database | PostgreSQL / SQLite via Prisma | | ORM | Prisma | | Styling | Tailwind CSS | | Icons | Lucide React | | Auth | JWT (jose) in HTTP-only cookies, bcrypt | | Payments | Stripe, SumUp, Handepay (as configured) | | PWA | Installable app, manifest, offline-ready paths |


Key features

  • Table management and map — Sections (e.g. Main Hall, Shisha Lounge), table status (available, occupied, reserved, cleaning), waiter assignment, QR codes for table ordering.
  • Reservations and online booking — Staff reservations plus public /book with minimum order; booking references and table assignment.
  • POS till — Hot, soft, desserts, cocktails; cash or card; HMRC (card) vs personal (cash) payments; transaction manager with BANK/TOTAL views.
  • Kitchen display — Real-time order queue; statuses: pending, preparing, ready, served; optional kitchen login or public panel.
  • Menu management — Categories and items (name, price, availability, prep time, Turkish name); used in orders, till, and public flows.
  • Staff management — Staff list, roles, PINs; assign waiters to tables; admin-only “feature access by role” matrix saved to DB.
  • Waiter buzzer — Waiters see customer service requests (e.g. “Need service”, “Request bill”); acknowledge and view by table; waiters get only Dashboard and Buzzer (no tables/reservations/orders).
  • Double-entry accounting — Chart of accounts, bank accounts, journal entries, reconciliations; purchases, suppliers, VAT returns, tax periods; daily/weekly/monthly sales and purchase reports; company and VAT settings.
  • Public flows/book: reserve and optionally order/checkout; /table/[tableNumber]: order at table, request service (buzzer), pay via QR.

Outcomes / highlights

  • Scale — Designed for large capacity (e.g. 1000+), sections, and many concurrent users (staff dashboard, kitchen, waiters, customers).
  • Security — JWT in HTTP-only cookies, role and feature checks in middleware and API handlers, rate limiting on auth and sensitive endpoints.
  • Integrations — Stripe, SumUp, Handepay; delivery webhooks (e.g. Deliveroo, Just Eat, Uber Eats) for order sync; optional Twilio for SMS/calls.
  • PWA — Installable; manifest and service worker for offline-ready behaviour where applicable.
  • Responsive — Dashboard and public pages work across desktop and mobile for staff and customers.

Technology stack

  • Next .js
  • TypeScript
  • Prisma (PostgreSQL)
  • Tailwind CSS
  • JWT (HTTP-only cookies)
  • Stripe/Sumup/Handepay
  • PWA

Categories

management system

Completed: 2025-12-01

Links


This post was generated from our portfolio. View all projects or get in touch for a similar project.

Back to Resources