Techoship

Retail · own product · 2026

Offline-First POS & ERP

A configurable point-of-sale and ERP platform that ships as a pharmacy system, a restaurant terminal or a school fee manager — all from one Flutter codebase, on the shop's desktop and on a phone in the aisle.

  • Flutter
  • Dart
  • Mobile App Development
  • Desktop Application
  • SQLite
Offline-First POS & ERP — Retail · own product

A configurable point-of-sale and ERP platform that ships as a pharmacy system, a restaurant terminal or a school fee manager — all from one Flutter codebase, on the shop's desktop and on a phone in the aisle. Built for markets where the internet drops daily. There is no sync layer to fail: the device's own database is the source of truth. Credit selling (udhaar) is core, with a full customer ledger, and receipts print in Urdu or English on Bluetooth thermal printers. 21 industry modules over 52 shared domains. 389 screens. A 210-table offline schema. Windows, macOS, Android and iOS.

Offline-First POS & ERP — The problem

The problem

Small businesses in Pakistan and comparable markets are sold POS software designed for somewhere else. It assumes reliable internet, treats credit selling as an edge case, prints only in English, and hands a pharmacy the same screens as a restaurant.

Three things decide whether it survives contact with a real shop. Billing has to work with no connection, because a POS that stalls mid-sale gets uninstalled that week. Credit selling — udhaar — has to be first-class, because that's how a large share of transactions actually settle. And each trade genuinely needs different things: batch and expiry for a pharmacy, tables and kitchen tickets for a restaurant, students and fee cycles for a school.

Offline-First POS & ERP — Not a till with extra fields

Not a till with extra fields

Each industry module is a complete operational system, not a re-labelled product list:

• School — students, classes, timetable, attendance, exams and results, fee structures, challans, collection, defaulter tracking (28 screens) • Livestock — herd and sheds, animal profiles, breeding and lineage, feed management, feed-conversion analytics, milk and weight reports (29 screens) • Crop farm — plots, seasons, planting calendar, harvest entry, dealer ledgers and payments, contracts, input cost against crop profit (28 screens) • Commission agent — mandi rates and trends, lots, auction summaries, cold storage, settlements, buyer credit (19 screens) • Restaurant — tables, reservations, kitchen order tickets, modifiers, bill splitting, turnover, waiter performance (17 screens)

Plus wholesale, trading, processing, rental, appointments, service and repair, subscriptions, custom orders, udhaar and seven more.

Offline-First POS & ERP — Architecture

Architecture

One Flutter codebase compiling to Windows, macOS, Android and iOS.

Strict unidirectional flow: UI emits events to BLoCs, BLoCs call repositories, and repositories are the only code that touches the database. 60 BLoCs, 81 repositories, Drift over SQLite.

Four-layer package structure — core/ holds 52 always-included domains, features/ holds 61 feature modules, modules/ holds the 21 industry modules, addons/ holds optional extras like accounting, loyalty, multi-branch, SMS and WhatsApp. A pharmacy build contains no restaurant code, so each delivered build stays small and industry logic never leaks into the core.

Scale: 263,000 lines of hand-written Dart across 1,036 files, 389 screens, 210 database tables.

The hardest problems

Financial integrity with no server to arbitrate. Every amount is stored as an integer in the smallest currency unit, never floating point. Rounding drift in a system whose entire job is telling an owner what they're owed doesn't produce a bug report — it produces a business that stops trusting its own books. The relational schema enforces referential integrity across the sale → inventory → customer ledger → tax → shift → payment graph inside a single transaction.

Twenty-one industries without conditionals spreading through shared code. Solved by composition rather than branching. Industry modules are separate packages assembled per customer, so adding a vertical is a configuration exercise rather than a fork.

Hardware, without a vendor abstraction to lean on. Receipt printing goes through a driver factory that selects by platform — Bluetooth thermal on Android and iOS, PDF elsewhere. Failed print jobs persist to disk and retry, so a jammed printer never loses a receipt. Barcode scanning uses the camera on mobile and keyboard-wedge detection on desktop, buffering rapid keystrokes inside a 100 ms window terminated by Enter, which is how real retail scanners behave.

Offline-First POS & ERP — Offline is not a mode, it is the architecture

Offline is not a mode, it is the architecture

There is no sync layer in this product. Not a disabled one, not a queued one — none. The device's database is the system of record, which is why billing, printing and reporting behave identically whether the connection is up or has been gone for three days.

That also means the shop's numbers never leave the shop.

Credit is core rather than an add-on, because in these markets a large share of the till settles later. Every customer has a ledger. Families group together so a household's spending is one number. Recovery lists rank who to chase first, and the system tracks payment patterns and credit utilisation rather than just a balance.

Ration packages — sold weekly or monthly on credit — are a first-class object, because that is how these shops actually sell.

Offline-First POS & ERP — Also delivered

Also delivered

Five permission roles with custom role creation, approval workflows, audit trail, Excel import for products, customers and opening stock, PDF and Excel export, backup and restore, a setup wizard covering business profile, currency, tax, database location and printer pairing, remote configuration, and licensing with device fingerprinting.

Urdu and English throughout the interface and on printed receipts. Rendering Urdu correctly on thermal hardware is an awkward problem and a common failure point in localised POS software.

Result

Deployed to paying business customers as branded per-industry builds across Windows, macOS, Android and iOS. The configurable-module approach changed the economics of serving a new business type from "new project" to "new configuration".

This is a commercial product, so the source is private — happy to walk through the architecture, the schema design or the offline-first decisions on a call.