Multi-Branch ERP for an F&B Business
Built for a multi-branch F&B business that also runs several side ventures. One system for point of sale, inventory, finance, HR and cross-branch reporting — delivered and live, rolling out branch by branch.
Figures shown in these screenshots are test data from the development environment, used to demonstrate the interface.
The Problem
One business, many revenue lines, zero unified system
The client runs several restaurant branches while also operating a few side businesses — migrant worker job referrals, loan referrals, and SIM card referrals — each with its own bookkeeping workflow.
What was needed: one system cashiers could use on the shop floor, while giving the owner a real-time, cross-branch financial view — with data strictly isolated between branches, yet still viewable combined by the owner.
The Approach
A custom ERP, designed from the data model up
Instead of retrofitting off-the-shelf software, we designed a multi-branch data schema from day one — every operational entity tied to a branch, with tiered access: owners see across branches, staff are scoped to their own.
Standard F&B modules (POS, inventory, production) and four referral business modules were combined into one shared financial reporting system, including automated P&L, cash flow, and business valuation reports.
System Scope
Modules built
Point of Sale
Branch selection required before checkout, so sales never log to the wrong branch.
Products & Inventory
Products, categories, raw materials, suppliers, daily production, waste log.
Finance
Operational costs, payables/receivables, fixed assets with automatic depreciation.
Automated Reports
Profit & Loss, Cash Flow, and business valuation estimates (EBITDA).
HR
Employee records, attendance, and multi-branch payroll.
4 Referral Business Units
Migrant worker jobs, loans, SIM cards and other referrals — each with its own fee and payment-status tracking.
Tiered Access
Owners see across branches with a filter; staff are scoped to their own branch.
Bilingual & Responsive UI
Indonesian/English, optimised for use on a phone on the shop floor.
System Preview
Interface snapshots
Tech Stack
Built on an edge runtime, not a typical Node server
Behind the Scenes
Technical problems we solved
Running a full Express/Prisma backend on Cloudflare Workers — an edge runtime, not a traditional Node.js server — surfaced several problems rarely covered in standard tutorials.
01 Connections hanging on the second request
A single PrismaClient instance was being reused across requests, which doesn't fit Workers' concurrency model. Fixed with a fresh client per request via AsyncLocalStorage, wrapped in a Proxy so existing controller code kept working.
02 Deployment failing over an incompatible dependency
Express silently pulled in an old iconv-lite that failed to bundle for Workers. Fixed by pinning the dependency and writing a manual JSON body parser.
03 A critical form failing with no error message
The owner's password-change form failed silently — no try/catch on the frontend, and backend validation was silently stripping fields on update. Fixed on both sides with explicit error handling.
04 Mobile layout breaking
Large numbers on the dashboard and transaction tables overlapped on small screens. Fixed systematically across roughly 15 pages with one consistent responsive pattern.
05 Infrastructure migration
Started on Render + Neon, then moved to Cloudflare Pages + Workers + Supabase — for better edge performance, lower cost, and a clean production URL with no paid custom domain required.
The Outcome
Four side businesses that ran on separate spreadsheets and a restaurant operation tracked branch-by-branch now sit in one system — POS, inventory, finance, HR and cross-branch reporting, with each branch's data isolated but visible combined to the owner.
Get In Touch
Need a system like this for your business?
We build custom systems from the data model all the way to production — starting with the process, not the feature list.