Zenpixl
Back to case studies
CASE STUDY · RESTAURANT SaaS / HOSPITALITY5 min read

How we built Cozira, a multi-tenant platform for running restaurant cash, stock, and staff

Cozira gives restaurant owners one place for daily cash-ups, inventory, rotas, tips and payroll — replacing spreadsheets and paper sheets across every site they run.

Visit the live site
cozira.co.uk
Restaurant SaaS live website
Industry
Restaurant & Hospitality
Market
United Kingdom
My Role
Lead Engineer & Architect
Platform
Web portal + Staff mobile app
THE PROBLEM

Restaurant operations were scattered across spreadsheets and paper

Multi-site restaurant owners were running the money side of their business on end-of-day paper sheets, spreadsheets, and a handful of disconnected tools. Cash-ups were counted by hand and checked late, stock counts lived in separate files, and staff hours, tips and payroll were reconciled manually at the end of every pay period.

The result was slow visibility, avoidable variances, and a lot of owner time spent chasing numbers instead of running the restaurant. Cozira set out to put cash, inventory and HR in one platform, with permissions that fit how real restaurant teams work.

→Owners with several restaurants needed one view across all sites
→Cash-ups needed a draft-to-published workflow with live variance checks
→Managers and staff needed access limited to their own restaurant and role
→Tips had to be split fairly and traceably, then fed into payroll
→Different customers needed different plans and modules
THE SOLUTION

One multi-tenant platform with modular plans and granular permissions

We built Cozira as a multi-tenant SaaS with a Laravel API at its core and three front ends on top: a public marketing site, an internal admin panel for the Cozira team, and the owner and staff portal where the daily work happens.

The product is modular. The Core plan covers daily cash management; the Pro plan adds inventory and HR. Owners manage several restaurants from one login, while staff see only the restaurant and features their role allows.

Cash module — daily cash-up sheets (draft to published), deposits, PDQ terminals, and delivery provider takings
Inventory module — items, categories, recipes, stock counts (draft, published, locked), and waste logging
HR and payroll — onboarding, rota planning, time and attendance, payslips
Tronc (tips) — pooled tips allocated by method, finalised and paid out as a distinct pay element
Role-based access control with 55 granular permissions, scoped per restaurant
Stripe subscriptions with per-restaurant billing
Staff clock-in and clock-out mobile app (Expo) with personal and shared-kiosk modes
TECHNICAL HIGHLIGHTS

Why we built it this way

01

Shared database with restaurant-level scoping

Tenancy is enforced through a shared PostgreSQL database with global scopes keyed on the restaurant. This keeps migrations and reporting simple while ensuring one restaurant can never read another’s data, and it let owners with multiple sites move between them without separate logins.

02

Request, Service, Action layering in Laravel

Controllers stay thin. Validation lives in Form Requests, business rules in service classes, and complex multi-step operations such as publishing a cash sheet or allocating a tronc pool in dedicated actions. This made the cash, inventory and HR rules testable and kept the codebase manageable as modules were added.

03

Permissions that mirror real restaurant roles

Using Spatie Permission with teams enabled, each restaurant defines its own roles from a fixed set of permissions such as publishing cash sheets or logging waste. Owners bypass checks, staff are limited to their site, and the UI only shows what a user can actually do.

04

Tips are written down when allocated, not recalculated

The tronc module follows a strict collected, allocated, paid-out state machine. The split is stored the moment it is allocated, so what the manager reviewed is exactly what gets paid, and it can be audited later without re-running any formula.

05

A separate, Bearer-only API for the staff app

The mobile clock-in app uses its own API contract rather than sharing the browser cookie flow. That kept the web portal’s httpOnly-cookie security intact while giving the Expo app a clean token-based integration, with both personal-phone and shared-tablet kiosk modes.

THE RESULTS

Live, growing, and trusted

Cash, inventory, HR and tips managed in a single platform
Owners can run multiple restaurants from one login
Live variance checks on cash sheets before they are published
Per-restaurant roles and permissions keep staff access tight
Modular plans with Stripe billing let customers start small and upgrade
Staff clock-in app extends the platform onto the restaurant floor
TECH STACK
LaravelPHP 8.3PostgreSQLRedisNext.jsReactTypeScriptTailwind CSSTurborepoExpo (React Native)StripeAWS SESAWS S3JWT AuthSpatie Permission
“Zenpixl built the entire Cozira platform — cash reconciliation, staff scheduling, inventory, and HMRC-ready payroll in one system for UK restaurants. Exactly what we envisioned and more. One of the best software partnerships we have had.”
A
Asif Piracha
Director, PAS Accountants / Cozira

Running a multi-site business on spreadsheets?

We build multi-tenant platforms with the permissions, billing and reporting real operations teams need. Let’s talk.

Discuss your project