RentonSoft POS
A restaurant point-of-sale system that runs live in two cafés and as a multi-tenant SaaS edition.
One order, many hands: waiters, kitchen, bar and cashier working from the same live state.
Problem
Restaurant service is split across tables, the counter, the kitchen, the bar and the cash desk. Every handoff needs the same order state, clear permissions and payment logic that never double-charges or loses a line — on tablets, in a hurry.
Approach
A typed monorepo: NestJS and Prisma on PostgreSQL, React and Vite on the front. Role-based realtime rooms push each change to the kitchen, bar, cashier and waiters. Payments are transactional and idempotent — split by items or evenly, discounts, manager-PIN refunds and shift reconciliation. Branding lives in settings, so one codebase serves different cafés; the SaaS edition isolates every business in its own PostgreSQL schema.
Result
In daily use at Castor Coffee and Sisa Atelier, and open to new businesses as a SaaS with a seven-day trial that turns read-only — never deleted — when it ends.
What’s inside
- Table service, counter sales and take-away in one flow
- Kitchen and bar screens with late-order warnings
- Split payments, discounts, manager-PIN refunds and Z reports
- Recipe-based stock: every sale consumes raw ingredients
- Schema-per-tenant SaaS with trials and safe suspension
Stack
Under the hood
The code layer of this project — modules and moving parts.
apps/api NestJS · Prisma · PostgreSQL 16 realtime/ Socket.IO rooms → kitchen · bar · cashier · waiters · display checks/ Check → Order → OrderItem, tax-inclusive totals payments/ split · discount · refund (idempotency keys, manager PIN) stock/ recipes (BOM) → ingredients consumed per sale tenancy/ schema-per-tenant, routed through AsyncLocalStorage apps/web React · Vite · TanStack Query · Zustand deploy Docker Compose · reverse proxy · nightly backups
Ready software
Table service, kitchen and bar screens, split payments and recipe-based stock — as SaaS or on your own server.