Custom payroll system for F&B outlets
Three companies, one login. A payroll system that gets Singapore statutory right where the off-the-shelf tools get expensive or vague — CPF across age and wage bands, SDL, the self-help groups, foreign worker levy — handles hourly part-timers and Work Permit staff, and files a byte-exact CPF EZPay submission per entity. Every figure on screen is clickable, and shows you the formula that produced it.
- Services
- Custom App Build · IT Modernisation
- Engagement
- In build · 2026
- Where it stands
- Phase 1 live (entities, people). CPF engine and EZPay filing in build.
A small F&B group running several Singapore entities: an admin company, a cafe outlet, and a third business coming online. Staff are hired under one entity today and move to another as each opens — which, in Singapore, is not an internal transfer at all. It is legally a new employment: new contract, CPF filed under a different submission number, a separate IR8A at year-end.
The workforce is mixed in exactly the way that breaks payroll tools: salaried admin staff who aren't on any roster, outlet staff who are, and hourly part-timers — plus Singaporeans on full CPF alongside Malaysians on Work Permits, who pay no CPF but attract a foreign worker levy instead.
Singapore statutory payroll is a minefield of edge cases
CPF rates change at 55, 60, 65 and 70 — and the new rate starts the month after the birthday, not on it. Below $750 a month, part-timers fall into wage bands where the employee share phases in. The Ordinary Wage ceiling moved to $8,000 in January 2026. Get the rounding wrong by a cent and the CPF file won't reconcile. Miss SDL on your Work Permit staff — a common slip — and you're under-declaring.
Every payroll product is built for an HR department
We looked hard at the incumbents. They're built around approval chains, permission matrices and dashboards — the furniture of an HR team. This business has one admin and a small crew of outlet staff on their phones. Most of the product is overhead you pay for and navigate around.
Nobody can see how the number was reached
The deepest problem with payroll software is that it hands you a figure and asks for trust. When you can't see the working, you can't check it — and CPF underpayment draws late interest and MOM's attention.
Payroll isn't hard because the arithmetic is hard. It's hard because the rules move, and you can't see the working.
Build the smallest system that gets the statutory maths exactly right, and make every number it produces explain itself.
Model the transfer honestly
We separated the person from the job. An employee is a person; an employment is that person's assignment to one entity, with start and end dates. Moving someone to the new outlet closes one employment and opens another — so CPF automatically files under the right submission number from that month, the year-end forms split correctly per entity, and the history stays intact.
Version the rates, never hard-code them
Every rate — CPF by age and wage band, SDL, the self-help groups, the levy — lives in a table keyed by effective date. The 2026 changes are in; the announced 2027 changes will slot in beside them. The engine reads the table for the month it's computing. Rates change every year in Singapore; a system that hard-codes them is a system that quietly goes wrong.
Make the payroll engine a pure calculation
The part that computes money does nothing else — no database writes, no side effects. That makes it exhaustively testable, and it's where the test coverage goes. Before it runs the business, it has to agree with the CPF Board's own contribution calculator, to the dollar, across every awkward case: band transitions, the annual wage ceiling, sub-$750 part-timers.
Show the working — on every figure
The signature of the system. Any computed amount on screen can be clicked, and it opens to show the formula with the real inputs: "OW $3,200 × 17% = $544.00 (employer), age band ≤55, rate table Jan 2026." It turns an opaque payslip into something an owner can audit in ten seconds — and it doubles as the tool for checking the system against a manual run.
Produce the file the government actually wants
There is no CPF submission API. The real deliverable is a byte-exact fixed-width file that CPF EZPay will accept — one per entity, per month — plus itemised payslips that satisfy the Employment Act and a bank file for paying everyone. So we build the generator and a validator that checks the output against the published spec before it ever reaches the portal.
Where it stands, and what it does:
- One login across all three companies, with an entity switcher — because filing under the wrong entity is the most expensive mistake a multi-company payroll tool can let you make.
- People and employments live: staff, entities, outlets, and clean entity-to-entity transfers.
- A statutory engine covering CPF age and wage bands, SDL (including Work Permit staff), the self-help groups, and foreign worker levy as an employer cost.
- Payroll review built around exceptions, not rows — it surfaces what changed and what looks wrong, rather than asking you to read every line.
- Next: the CPF EZPay file generator and its validator, then itemised payslips and the bank payment file.
If you run a cafe, a bakery or a couple of outlets, your payroll is genuinely harder than a 200-person office's. Hourly part-timers, staff across more than one company, a mix of citizens and Work Permit holders — that's the exact combination that pushes you into the expensive tier of every payroll product, or into a spreadsheet you're quietly afraid of.
The alternative isn't a bigger product. It's a smaller one that knows your rules cold, shows you its working, and files what the government asks for. That is what we're building here — for our own group first, which is the only honest way to sell it to yours.
Sounds like your business?
Tell us what you're dealing with — a similar problem, a different one, or an idea of your own. It takes a minute, and it goes straight to Gordon.
More work

Xero + InvoiceNow integration

PSLE AI oral practice app
