A café’s loyalty, payroll and stock in one workspace
Fluffy is a Japanese soufflé cheesecake café in Istanbul, with branches in Taksim and Fatih. My first work for them was the website, a multilingual QR menu and a staff attendance system. Over time, most of the rest of the business moved into one workspace that I built and still look after.
This article is about why that happened, what’s inside it, and the trade-offs a café owner should know about before asking for something similar.
The problem with many small tools
A café produces numbers all day. The till exports sales. The bank sends statements. Suppliers send e-invoices. Staff check in and out. Loyalty lives on a paper card or a separate app. Each of these is fine on its own. The trouble starts when the owner asks a question that crosses two of them: what did this cake really cost us last month, or which staff hours produced which sales, or are our regulars coming back.
The brief we worked to was short. The owner needs an overview of the whole business. Staff need a simpler home with quick access to the work they’re allowed to do. And every figure on screen has to say which period it covers, which branch, and where it came from.
What’s inside
Today the workspace covers the menu, loyalty, till sales, stock and recipes, the ledger, payroll and attendance, and a customer CRM. Behind it are 126 database tables and 49 test files. That size is the honest cost of one place for everything, and it’s why the tests matter.
A few of the parts, in plain terms.
Till sales. The workspace imports the POS files from each branch. It also reads bank files, which use the Turkish number format (a dot for thousands, a comma for decimals) while the POS files don’t. It’s a small detail. Get it wrong and the totals look plausible while being wrong, which is worse than having no total.
Menu orders kept apart. Orders placed through the QR menu are a separate source from the till. They are never counted as booked POS revenue. If they were, the same coffee could be counted twice.
Stock. Purchases come in from mapped e-invoice lines, and transfers between branches are recorded. Usage is calculated from POS sales multiplied by recipes, so the system knows how much milk and cream a day of cheesecake sales should have used. Expected stock is the last count, plus purchases, plus or minus transfers, minus usage and waste. When the shelf disagrees with that number, someone has a reason to look.
Payroll. Monthly pay is worked out from check-in logs. Base pay follows the hours actually worked, and overtime only counts once it’s approved. On top of that sits a sales bonus, weighted by how many of an employee’s hours were at each branch, and a manual adjustment that has to carry a note.
Loyalty without the paper card
Loyalty is the part customers see, so it got the most care.
Each branch has a printed QR poster. A customer scans it and joins on their phone, in Turkish by default, with English and Arabic one tap away. Arabic switches the page to right-to-left. They get a private card link and the browser remembers them.
The rule I was strictest about: a public poster can never hand out purchase stamps. Joining can give one welcome stamp, if the café wants that, and it is recorded as a signup incentive, never as proof of payment. Every later stamp needs a staff member to scan the customer’s card QR and confirm the purchase. A full card becomes a reward ticket that can be redeemed once. Staff can reverse a stamp, but only with a reason, and the history keeps both entries.
Staff logins are separate from the admin, and permissions to enrol, stamp and redeem are set per person and per branch, checked on the server.
On top of the basics there are referrals (which only count after the friend’s first paid purchase), VIP tiers, challenges and promotions. Apple and Google Wallet cards are built, but they still need the issuer accounts and tests on real phones before customers can use them. An NFC tap-to-stamp stand exists as a prototype guide and drawing, with the hardware pilot still to come. I’d rather list those as pending than let a feature list imply they’re live.
Knowing who your regulars are

The CRM is built from what the café already records. A visit is a distinct day, in Istanbul time, on which the customer had a confirmed paid stamp, a paid till receipt or a menu order the admin linked to them. Welcome stamps and refunds don’t count. Two orders on one day count as one visit.
From that, the directory sorts customers into Regulars (five or more visit days), Away (gone longer than a threshold the owner sets) and No visits yet. A profile shows visit days, the last visit, paid till spend and completed menu orders, each labelled with its source. Existing customers start with email and WhatsApp permission switched off, so nobody gets a message they never agreed to.
How it runs day to day
At the counter it’s short: scan the customer’s card, confirm the purchase, add the stamp. In the back office the owner opens one workspace for sales, costs, staff and customers, by branch or combined, and each figure says where it came from.
The trade-offs
Two limits are worth saying out loud.
First, the system doesn’t claim that loyalty increased sales. Until stamps are tied to individual till receipts, that link would be a guess, and the plan says so: sales lift and customer spend stay unavailable until purchase identity exists.
Second, it doesn’t make business rules up. While building it I found that the printed campaign terms said one paid stamp per day, but the setting had no daily cap. I flagged it and left the rule unchanged until the owner chose. That’s a small thing, but it’s the kind of decision that belongs to the owner.
If you run a café or a restaurant
You don’t need all of this on day one. Most owners have one question they can’t answer today, and that’s the right place to start. Maybe it’s stock that never matches, or payroll that takes a weekend, or a stamp card nobody trusts. Build that part properly, with the data it needs, and the next part has something to stand on.
If one of those sounds familiar, you’re welcome to message me on WhatsApp with the question you can’t answer yet. Sometimes the honest answer is a better spreadsheet.
Related work: Fluffy Operations workspace



