Mirari Restaurant ERP

Overview
A restaurant runs on a dozen small ledgers: what was bought, what was thrown away, what was sold each day, who came to work, which bills are paid. Mirari kept them in notebooks, a spreadsheet and WhatsApp. This system puts them in one app that installs on the tablet at the counter, with each person seeing only the modules their job needs.
At a Glance
6
Modules
6
Roles
4
Access Levels
2026
Last Module Shipped
Key Features
Purchase orders from pending to paid
Every order to a supplier is one row: what was ordered, when it arrives, whether it has been approved, delivered and paid. The owner sees at a glance what is still owed to whom.

Stock on the shelf
Every item shows what is on the shelf, what is still to arrive, what it is worth at the last rate, and when it was last bought. Items below their reorder level are flagged on the purchases screen.

Vendors by category
Meat, dairy, vegetables, fruit, bakery. Each vendor carries a contact and a phone number, and every item in stock knows which vendor it comes from, so a reorder starts from the item.

Spoilage, logged against the item
What was thrown away, how much, and why: expired, temperature failure, pest, poor quality received. Each entry is priced at the item's rate, so the purchases screen shows what spoilage cost this month.

One sales entry a day
Dine-in food, beverage and liquor, takeaway, delivery, and the number of covers. The average spend per cover comes out of it. Other income and expenses by type go in beside it.

Profit and loss for any date range
Pick two dates and the report shows income, expense and the profit between them, day by day. The dips on the chart are the days the rent and the salaries went out.

Money in, money out
The same range as cashflow: what came in and what went out each day, and the net. Both reports export as a spreadsheet for the accountant, and sales, income and expenses import from one.

Recipes costed to the ingredient
Each recipe lists its ingredients at the rate the restaurant last paid, so the dish has a cost, a selling price and a margin. Change a supplier's rate and every dish that uses the item moves with it.

Preparing a dish checks the stock first
The chef enters how many servings. The screen shows what each ingredient needs against what is on the shelf, and refuses when something has run out. Preparing deducts the ingredients from stock.

Utility bills that post themselves
Electricity, gas, water, rent, internet, phone, waste. Recurring bills come back every month with one click. An unpaid bill past its due date shows as overdue without anyone marking it.

A bill paid in parts
A bill can be paid in two or three instalments. Every payment lands in the accounts as an expense by itself, on the day it was paid, so the month's profit never misses a bill. Reverse a payment and the expense goes with it.

Staff by department
Kitchen, service, bar, cleaning, management. Each person has a role, a joining date and the pay details, and the HR screen totals the monthly payroll.

Attendance, one record per person per day
Present, absent, leave or half day, with the hours. The register is keyed on the person and the day, so the month cannot count anyone twice.

Six roles, four levels
Admin, manager, HR, accountant, chef and purchase manager. Each role gets full, edit, view or no access to each module, and the admin can change it for one person without changing the role.

Installs like an app
Runs in the browser on a tablet or phone and installs to the home screen. On a phone the modules sit in a bar at the bottom of the screen. If the connection drops mid-form, the screen says so instead of going blank.

System Architecture
One Next.js application on Vercel with DynamoDB on AWS. Every screen action runs on the server and starts with a permission check for its module, and the pages check before they fetch, so a role without access never receives the data. Utility payments and the accounts ledger are linked both ways: reversing a payment or deleting a bill removes the expense it created.
Login & Permissions
Purchases & Inventory
Spoilage
Accounts & Reports
CSV Import & Export
Recipes
HR & Attendance
Utility Bills
Settings
Technical Highlights
Six roles by four access levels per module, with per-user overrides seeded from the role; every server action guards itself and the navigation only shows what the user can open
Attendance is keyed on employee and day, and utility bills carry a duplicate-period guard, so neither ledger can record the same thing twice
Each utility payment auto-posts a linked expense into the accounts and is reversible from either side
A progressive web app with a home-screen install; the forms catch a lost connection and tell the user instead of failing silently
Next Step
Running an operation like this?
If you're wrestling with the same kind of complexity — multi-branch inventory, formulations, approval workflows — tell me about it. I'll respond within 24 hours with an honest assessment.
Start a conversation