Skip to content
All products

Multi-branch point of sale · Live

Counterbase

“When the internet drops at one branch, selling stops, receipts stall, and the day's numbers go dark.”

Counterbase keeps every counter selling offline and reconciles everything with the cloud when the connection returns. Offline-first point of sale for multi-branch retail.

Counterbase

Nairobi CBD branch (sample data)

Items

Current sale

Tap items to start a sale.

Recent sales

All sales synced

  • #10413 itemsKES 590Synced
  • #10401 itemKES 340Synced

Try it: switch to offline, ring up a sale, then reconnect.

An illustration of Counterbase's offline-first selling. Not connected to a backend; the items and sales are sample data.

Who it is for

Retailers running several branches or counters: supermarkets, hardware stores, pharmacies, and wholesale shops where a dead till means lost sales.

  • Shops that lose selling hours whenever connectivity drops
  • Owners who want stock and takings for every branch in one place
  • Teams that need cashier, supervisor, and owner controls to differ
  • Businesses taking M-Pesa, card, and tourist payments at the counter

What is inside

Every module below exists in the product today. This is the checklist with receipts.

  • Offline selling

    Cashiers keep ringing up sales with no internet. Each sale is stored on the device and queued for the cloud.

  • Background sync with conflict handling

    A queue replays sales, refunds, and stock movements to the cloud. A conflict resolver reconciles edits made on different devices while offline.

  • Catalog and pricing

    Products with categories, pricing tiers, and branch-level price overrides, so one item can carry different prices per branch.

  • Inventory, transfers, and stocktakes

    Per-branch stock with batches and movements, inter-branch transfers, stock requests between branches, and counted stocktakes.

  • Payments

    M-Pesa (Daraja), PesaPal, Jenga, and NFC tourist payments recorded against sales with their own transaction records.

  • Customers and receivables

    Customer accounts with receivables, payments against what is owed, and shareable statements.

  • Cash discipline

    Branch cash settings, a cash ledger, reconciliation, and a daily close so drawers can be checked against the day's sales.

  • Purchasing and suppliers

    Supplier invoices, supplier payments, and landed-cost tracking for imported stock.

  • Expenses and finance

    Expenses with line items and cash-flow views alongside sales, so the branch position is in one system.

  • Reporting and statements

    Sales reports, accountability alerts, and customer statements across branches.

  • Promotions and referrals

    Coupons and promo codes with redemption tracking, plus a customer referral program.

  • Subscriptions and licensing

    A SaaS admin handles plans, billing, invoices, and device activation per organization.

How Counterbase fits together

  1. Counter app (Android)

    Sells offline against a local store on the device. Sales, refunds, and stock moves queue locally.

    Attached: Payments at the counter: M-Pesa (Daraja), PesaPal, Jenga, NFC

  2. Sync on reconnect

    The queue replays to the cloud in the background. A conflict resolver reconciles edits made on different devices.

  3. Cloud API (NestJS)

    Checks roles and permissions, applies pricing and stock rules, records receipts and audit events.

    Attached: Owner's web admin for reports and settings

  4. PostgreSQL

    One record per organization: tenants, branches, devices, users, stock, and sales.

The counter keeps selling against a local store; queued work reconciles with one cloud record per organization.

Roles and permissions

  • CashierSells at the counter and issues receipts
  • SupervisorDay-to-day branch oversight
  • ManagerCatalog, stock, and reporting for the branch
  • AdminUsers, roles, settings, and approvals
  • Custom rolesEach organization can define its own roles from permission keys

Permissions are enforced in the API, not only in the app. Every role is a set of permission keys, and an admin can grant or deny individual keys per user as overrides. Legacy cashier, supervisor, manager, and admin accounts map onto the same key system.

Tech

Flutter, Riverpod, SQLite (Drift), NestJS, PostgreSQL, Prisma, Redis, Vercel

Deployment

  • The counter app runs on Android and is built and released through GitHub Actions.
  • The API runs on Vercel with PostgreSQL and Redis.
  • A web-based store management system gives owners a desktop view of products, stock, and transactions.
  • Each customer onboards as its own tenant with branches, devices, and users.

Status and availability

Current status: Live

  • Live and in active release. The Android app is at version 1.0.84+2127 with a dated changelog of fixes.
  • Offered as a subscription; the SaaS admin handles plans and device activation.
  • Price: ask us.

See Counterbase against your own problem.

Tell us about your counters or your WhatsApp sales, and we will show you exactly what the product does for them, and what it does not do yet.

Evidence note

Checked October 2026 in the Counterbase repository: 99 database models (grep -c "^model " backend/prisma/schema.prisma), 40 backend modules (ls backend/src), 58 backend test files (find backend/src -name "*.spec.ts"), 72 Flutter test suites (find mobile/test -name "*_test.dart"), and 28 feature areas in the app (ls mobile/lib/features). App version from mobile/pubspec.yaml; roles and per-user overrides from backend/src/permissions/permissions.service.ts; payments models from backend/prisma/schema.prisma (MpesaTransaction, PesapalTransaction, TouristTapTransaction).