👑 Admin / Owner
Your name shows as the default server in the header whenever no staff member is checked in.
Stock is shared automatically — selling loose pieces reduces the pack/box count too.
Enter their name and the code from their M-Pesa SMS once they've paid — neither is required to complete settlement.
The offer price applies automatically at the till while it's running, then the item quietly goes back to its normal price on its own \u2014 no need to remember to switch it off.
No staff set up yet — add one in ⚙️ Settings.
💡 Click a matching product from the results to push it to the cart.
| Item Name | Qty | Unit Price | Total | |
|---|---|---|---|---|
| Cart is empty — search for a product to begin. | ||||
Auto-filled if you send the prompt above and the customer confirms it. If they paid you directly without a prompt, you can enter their name and the code from their M-Pesa SMS instead — but neither is required to complete the sale.
No payment is collected now. A bill will be printed with your payment details, and the sale will move to the 🧾 Bills tab until you settle payment.
Items with 3 or fewer units remaining are highlighted in red and listed under 🔔 alerts. Change this in ⚙️ Settings.
| Image | Code | Item Name | Price (KES) | Wholesale (KES) | Unit | Qty Remaining | Location | VAT | Expiry Date | Status | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| No items in inventory yet. Add products from the "Add New Items" tab. | |||||||||||
Services are charged per use (e.g. printing per page) and don't track stock or need a code. A service can also be "made from ingredients" (e.g. a burger made from minced meat) — give it a recipe and stock/cost are calculated automatically from the ingredients.
| Service Name | Price (KES) | Wholesale/Cost (KES) | Charged Per | Recipe | Available | |
|---|---|---|---|---|---|---|
| No services added yet. Add one from the "Add New Items" tab. | ||||||
Choose a photo already saved on this computer.
Sales checked out as "Bill" (pay later) live here until settled — they don't count in Daily Sales yet. Once you click Settle Payment and complete it, the sale moves to Daily Sales dated the day payment was actually made.
| Billed On | Customer | Items | Total (KES) | |
|---|---|---|---|---|
| No unsettled bills right now. | ||||
Generate a barcode for something that doesn't already have one printed on it — e.g. a bag you've weighed out yourself. Label it with what it represents, then print it and stick it on. Later, when adding that item in 📦 Add New Items, type this same code into the Item Code field so scanning it rings it up correctly.
| Preview | Code | Represents | Created | |
|---|---|---|---|---|
| No barcodes generated yet. | ||||
| Time | Server | Items Purchased | Payment | Payer | M-Pesa Code | Sale Total (KES) | |
|---|---|---|---|---|---|---|---|
| No sales recorded for this date. | |||||||
Calculated from historical transactional checkout data logs.
Profit = Retail Price − Wholesale Price, based on each item's wholesale price at the time it was sold. Add wholesale prices to your products in Inventory / Add New Items for this to be accurate. Gross Profit also deducts the day's logged 💸 Expenses.
| Item | Qty Sold | Revenue (KES) | Cost (KES) | Profit (KES) |
|---|---|---|---|---|
| No sales recorded for this date. | ||||
Log day-to-day costs like food, transport, rent, and stock deliveries. Restocking from the 📥 Restock tab logs its own expense here automatically.
| Time | Category | Description | Amount (KES) | |
|---|---|---|---|---|
| No expenses recorded for this date. | ||||
Received a delivery from a supplier (e.g. EABL)? List everything they brought — new items or top-ups to what you already stock — and confirm once. Stock is added, prices are updated, and the total cost is logged as an expense automatically.
| Item Name | Unit | Qty Received | Cost Price/Unit | Sell Price/Unit | Line Total |
|---|
See who's currently serving, review each staff member's roles, lock their account for a day off, and check how many days and hours they've worked. To invite a new staff member, use ⚙️ Settings → Staff Accounts.
No staff added yet — invite one from ⚙️ Settings → Staff Accounts.
Your name shows as the default server in the header whenever no staff member is checked in.
Prices already include VAT. Every item is assigned a bracket when it's added (Inventory tab lets you change it any time) — receipts always show the tax breakdown, computed per item.
Alert when quantity remaining is at or below:
Alert when an item's expiry date is within:
daysHow fractional amounts (kg, litres, metres, etc.) are shown across the app — e.g. Inventory, Sales Counter, and receipts.
Shown on printed bills for customers who pay later — e.g. your Paybill/Till number and phone number. One line per detail.
Extra lines printed at the bottom of every receipt and bill — e.g. "Terms and conditions apply" or "Goods once sold are not refundable." One line per statement.
Works with whichever printer mode is selected below. With "System print dialog", the dialog still opens once \u2014 this just removes the extra "Print Out" tap. For it to be fully silent too, launch Chrome with the --kiosk-printing flag (desktop only). With Bluetooth/USB, it prints straight away with no dialog at all.
No pairing needed here — nearly all barcode scanners (USB or Bluetooth) act as a keyboard: they "type" the code and press Enter automatically. Just plug it in (or pair it as a Bluetooth keyboard in your device's Bluetooth settings), then scan.
Waiting for a scan...
Cash drawers plug into the receipt printer itself (an RJ11/RJ12 port on the back), not into the computer directly — the printer sends it the "kick open" signal. So this only works with the Bluetooth or USB printer modes above, which give raw access to the printer; "System print dialog" mode can't trigger it.
Checking configuration...
Set up ONE of the two options below for this shop. If both are filled in, Paystack is used unless you force Daraja at the bottom. Keys are saved for this shop only and are never shown back once saved.
Simplest option — one secret key, no Safaricom app needed.
Direct integration with your own Daraja app and Paybill / Till Number.
Force a specific provider (only matters if both are filled in):
Check any tab to require the management password before it can be opened. The Sales Counter can never be locked. Whenever a staff member is checked in as "serving," every other tab is locked automatically regardless of these checkboxes — these settings only apply when no one is checked in.
Require the management password to remove an item from the sales cart.
Invite staff to create their own login. Pick which tabs they're allowed to use below — everything else stays invisible to them. Once set up, copy their personal 🔗 link and send it to them — opening it asks only for their PIN, no shop password needed. Manage roles, attendance, and lock a day off for anyone already added in the 👥 Staff tab.
No staff added yet.