Back to the portfolio
Case study · Rutz Cosmetics POS

Several cosmetics shops,
run as one business.

Rutz Cosmetics has branches in Harare and Bulawayo. We built them a till and stock app that every branch shares: scan and sell, print or WhatsApp the receipt, move stock between shops, and give each member of staff only the access their job needs.

Who it's for
Rutz Cosmetics, its branches and staff
Runs on
Android phones & tablets, Windows PCs
Built with
Flutter, Firebase
Status
App built; started Sept 2026

01 — The problem

More than one shop, one set of questions.

With several branches, the questions that matter cross shop lines: what did each branch sell today, which shop is running low on a lipstick another shop has plenty of, and who changed a price. Separate books per shop can't answer them.

Rutz wanted to run all its shops as one business. They needed:

  • Fast barcode selling, with cash, card or mobile money and a receipt the customer can keep
  • Prices in US dollars or ZiG, set per shop
  • One login per person that works across every branch they're allowed into
  • Stock transfers between branches and proper stock takes
  • A record of who did what, that nobody can quietly edit
  • Selling that doesn't stop when the internet drops

02 — How we built it

The same six steps we use for every client.

Here's what each step looked like on this project.

  1. 1

    Brief

    The goal was simple to say: see what each branch sells, move stock to where it's needed, and keep every till consistent. Every screen was judged against that.

  2. 2

    Design decisions

    We built a small design system first (colours, type, buttons, cards, empty states) so every screen looks and behaves the same. We also settled how branches, staff and permissions fit together. Those choices are explained below.

  3. 3

    Clickable prototype

    We mapped the main flows (sell, take payment, check stock by branch, transfer stock) as a clickable prototype that works on a till screen, a tablet and a phone. Try it below.

  4. 4

    Build in small pieces

    Features went in one at a time: staff login and roles, the sell screen and held sales, products and categories, stock tools, expenses and suppliers, offline selling, a full desktop layout, then WhatsApp receipts, expiry tracking, CSV import and export, and phone-to-phone sync.

  5. 5

    Test and harden

    Database rules on the server check every permission, so a cashier's phone can't do what a cashier isn't allowed to. Crashes from the field are logged to a screen only we can see. A small set of automated tests covers the cart, and we checked each flow against the brief.

  6. 6

    Ship and support

    The app is built for Android, and a Windows installer puts it on the till PCs. We kept a support dashboard for ourselves, plus tools to add a branch, reset a PIN or rename a username without touching anyone's device.

03 — Try it

Click through the prototype.

This is the clickable prototype, running live on the page. It uses sample products, prices and branch figures, and it may be a step behind the real app.

  • Tap a few products, filter by Skin, Hair or Make-up, and charge the sale
  • Pick a payment method, complete the sale, then print or WhatsApp the receipt
  • Open Transfers to move lipstick from CBD to Avondale, or Dashboard to see sales by branch
Rutz Cosmetics POS

04 — Key decisions

Four choices that hold the branches together.

In plain English, without the jargon.

One login, many branches

Each person signs in with a username and PIN. If they work at more than one shop, they switch branch from a menu without signing in again. The PIN itself never leaves the device; only a scrambled version is checked.

Roles made of plain checkboxes

Every shop starts with five roles: Owner, Manager, Shopkeeper, Stock Clerk and Accountant. Each is just a list of ticked permissions, like "apply discount" or "change selling price", and the owner can edit them or make new ones.

A sale saves even with no signal

The sale and the stock it uses are saved together on the device and sent up when the connection comes back. The honest trade-off: if two offline tills sell the last unit before either syncs, the stock count needs a quick check afterwards.

An audit log nobody can edit

Product and price edits, stock adjustments, transfers, sales and refunds each write a line to the audit log, saying who did it and when. The server only accepts new lines. Not even the owner can change or delete one.

Smaller touches came from the same thinking. Stock transfers match products by barcode, so a branch that doesn't stock an item yet gets it added automatically. Stock takes list every product with the system count filled in, so staff only type the ones that are wrong. And when there's no internet at all, two phones can swap sales and stock over the shop Wi-Fi, or a hotspot one Android phone creates for the other.

05 — Tech stack

What it's made of.

App

Flutter (one codebase for Android and Windows), Provider for state

Data

Cloud Firestore with an offline cache, Firebase Storage for product photos

Accounts

Firebase Auth, with small server functions on Vercel for staff and branch admin

Hardware

Camera barcode scanning, ESC/POS Bluetooth printers on 58 mm or 80 mm paper

Sync

A small HTTP server on the host phone (Shelf) for phone-to-phone sync

Reports

Charts (fl_chart), PDF and CSV export through the phone's share menu

06 — Where it stands

Built, with room to grow.

Beyond the till, the app already covers:

  • Owner and cashier dashboards, and end-of-day cash counts that show any shortfall
  • Expenses, suppliers, restocking and promo prices
  • Batch and expiry tracking, so products near their date get noticed before they're wasted
  • Barcode label printing, refunds and a light or dark theme

The permission list already has places for customer records and supplier purchase orders. Those screens aren't built yet, and are the natural next step.

Your project

Want something like this for your business?

We follow the same steps for every client, and you see a clickable prototype before you pay for the build.

Book a free consultation → See more of our work