Skip to content
Sistem Kasir cover

2024 · A multi-tenant POS system for cafes — floor plan, inventory, and sales reports synced in real time via Firebase.

Sistem Kasir

Year
2024
Status
live
Makers
Rizkan Yazid
  • Rizkan Yazid
Tags
  • pos
  • saas
  • firebase
  • cafe
  • inventory

The Problem

Small cafe owners juggle paper-based orders, manual stock counts, and no visibility into which tables are occupied — a cashier taking an order has no way to know if the kitchen already closed a tab, leading to double charges and lost revenue.

The Solve

Sistem Kasir gives each cafe its own isolated tenant workspace synced over Firestore, so the owner sees live floor-plan state while the cashier processes orders and the stock staff logs inventory — all from the same web app with role-gated PIN login.

The trade-off: using anonymous Firebase Auth keeps setup near-zero but means data lives under a shared public collection path, acceptable for small single-location cafes.

Screens

App Flow

  1. 01Owner registers via SuperAdmin panel
  2. 02Tenant workspace created in Firestore with isolated collection paths
  3. 03Cashier logs in with PIN
  4. 04Routed directly to interactive floor plan view
  5. 05Cashier selects table and adds products
  6. 06Order recorded and table marked occupied in real time
  7. 07Order closed / payment taken
  8. 08Transaction saved, daily sales report updated automatically
  9. 09Stock staff logs inventory purchase
  10. 10Expense recorded against stock ledger for owner review

Under the Hood

  • React 18
  • Vite
  • Firebase Firestore
  • Firebase Auth
  • Tailwind CSS

There is no server-side row-level security; instead every tenant's data lives under its own Firestore collection using the pattern `{collection}_{tenantId}`. Simple to implement in a single-file React app, but it means Firestore rules must guard the prefix pattern — a deliberate trade-off of simplicity over strict security boundaries.

Changelog

  1. Fixed globalUsers not persisted to localStorage — cashier/staff login broke after page refresh or on a different device.

  2. Moved Firebase config to environment variables.

  3. Initial release: floor plan, product catalog, inventory, transactions, and role-based PIN login.