Owner dashboard
Outlet readiness and operational KPIs separate sales, received cash, receivables, appointments, work orders, rentals, and expenses.
Case study · 01 / 08
One operational engine for multiple SME business models.

A multi-tenant, multi-outlet POS platform combining checkout, inventory, appointments, work orders, rentals, reporting, and platform controls in one modular architecture.
Key achievement
Designed one POS engine for nine SME business models, so no new app has to be built for each type of business.

01 · Context
Primary users
The problem
SME cashier applications are often rebuilt for every business type. Features quickly sprawl, business rules get duplicated, and data consistency across outlets becomes difficult to protect.
The approach
Dagangin uses business profiles as presets and capabilities as configuration. Retail, food service, services, wholesale, rental, and hybrid businesses continue to run on the same API and business rules.
Key numbers
02 · My role
Product Engineer · Full-stack · System Design
Technology used
Designed a multi-tenant, multi-outlet architecture with layered data isolation.
Built a capability system that drives both the interface and backend validation for each business model.
Built an Android cashier with an offline queue that prevents duplicate transactions.
Separated the platform control plane from tenant workspaces, including accounts, permissions, and audit.
03 · Highlights
Click an image to view it larger.
Swipe through them all, tap an image to enlarge it.
01 / 04
Outlet readiness and operational KPIs separate sales, received cash, receivables, appointments, work orders, rentals, and expenses.
The transaction flow adapts to active capabilities: variants, modifiers, tables, price tiers, customers, payments, and receipt printing.
Stock, transfers, counts, purchasing, and movement ledgers remain separated by tenant and location.
Reports distinguish revenue, money actually received, receivables, and unsettled payments.
04 · Challenges & decisions
01 / 03
05 · Outcome
The architecture lets the product expand across verticals without rebuilding from zero while preserving tenant, role, outlet, and audit-trail isolation.
User flow
Architecture
Clients
Admin web · Cashier PWA · Flutter Android · Platform web
Application
REST API · RBAC · tenant context · domain services · events
Data
MySQL shared tenant data · Redis queue/cache · private object storage
Runtime
Nginx · PHP-FPM · worker · scheduler · Docker Compose
Data model
Tenant
id
business_profile
capabilities
Outlet
tenant_id
name
timezone
User & Role
tenant_id
role_id
permissions
Product
tenant_id
sku
type
unit
Order
outlet_id
customer_id
status
total
Payment
order_id
method
amount
status
Stock Ledger
product_id
outlet_id
direction
qty
