Page loadedSkip to main content

Anxiang

Table ordering, a live kitchen display, menu and inventory management, bill settlement and thermal receipt printing for a café (岸香咖啡). Built alone and deployed as a system service behind Nginx TLS.

  • Full-stack
  • Real-time
  • Hardware integration

The problem

A small restaurant needs ordering, kitchen, cashier and back office to agree with each other in real time, without a vendor system and its monthly fee.

How it works

  • Customers order from their table with customisable specs such as temperature, size, sugar and toppings. The kitchen sees orders arrive over WebSocket and moves them through their statuses.
  • Five roles (admin, manager, cashier, waiter and kitchen) with granular permissions, using JWT access and refresh tokens, so each person only sees what they need.
  • ESC/POS support prints kitchen tickets and receipts on thermal printers.
  • An admin dashboard manages menu, categories, pricing, availability, bills and inventory. Schema changes go through Alembic migrations, and SQLite runs in WAL mode.
  • Server state lives in React Query and client state in a small context store. The interface is Chinese first, with optional English dish names.

Built with

  • React
  • TypeScript
  • FastAPI
  • SQLAlchemy
  • SQLite
  • WebSocket
  • Docker
  • Nginx