Offline-first · React Native POS

The point of sale
that needs
zero bars.

PocketPOS rings up sales, tracks stock, and prints receipts entirely offline. SQLite is the only source of truth. No backend, no outage can close the shop.

v1.0.0·Android · Expo·MIT
PocketPOS new bill screen
Runs on nothing but the phone.Transactional checkout·Native receipts·On-device analytics·Versioned backup
Spec sheet#PPOS-1.0.0
BACKENDS REQUIRED00
SOURCE OF TRUTHSQLITE
RECEIPT WIDTHS58/80mm
PAYMENT MODES04
WORKS OFFLINE100%

Everything a counter needs.
None of the cloud it doesn’t.

SEC · BILLING

Checkout that can’t oversell.

Integer-paise currency math, stock-validated checkout, fixed or percentage discounts, and four payment modes. Every sale writes the invoice, item snapshots, and stock deductions in one atomic transaction, and voids restore stock the same way.

  • Sequential invoices
  • Cash · UPI · Card · Other
  • Auditable voids
PocketPOS new bill screen
SEC · ANALYTICS

Your day, computed on-device.

Today, 7-day, and 30-day sales dashboards with native charts, top products, payment totals, and low-stock summaries. Every number is queried straight from local SQLite. No network, no waiting.

  • Sales trend
  • Top products
  • Payment split
PocketPOS offline sales dashboard
SEC · INVENTORY

Stock that stays honest.

Create and edit products, set opening stock, make manual adjustments, and enable or disable lines. Low-stock filters warn you early, and every movement lands in an auditable history you can trace.

  • Opening + adjustments
  • Low-stock warnings
  • Movement audit trail
PocketPOS inventory catalogue
SEC · RELIABILITY

Nothing gets lost.

Checkout, voiding, and stock adjustments are atomic. Data leaves and returns through versioned JSON backup and atomic restore, and versioned migrations run incrementally, so a new APK upgrades the schema without touching your records.

  • Versioned backup
  • Atomic restore
  • Safe migrations
PocketPOS portable data backup controls
Architecture

Five layers, one direction.

Data flows one way. Screens never issue SQL. Repositories own it, and transaction-oriented services coordinate anything that spans multiple entities. The result is a codebase you can reason about line by line.

Migrations are versioned and incremental, so installing a newer build upgrades the schema in place while your data stays put.

Expo Router01
Feature Screens02
Services03
Repositories04
SQLite05
How it was built

Owned end to end.
Built with AI.

PocketPOS was shipped with an AI-native, spec-driven workflow. I owned the architecture and product decisions; OpenAI Codex and GPT-5.5 Sol paired on implementation and test scaffolding inside a tight loop: spec, plan, build, verify, repeated until it held.

01 · SPEC
Written first

Each feature started as a spec with clear boundaries before a line of code was written.

02 · PAIR
Codex · GPT-5.5 Sol

The AI pair generated implementations and tests; I reviewed, corrected, and set the architecture.

03 · VERIFY
Vitest + typecheck

Currency, stock, and migration logic ship with unit tests. Nothing lands unverified.

Built with
ExpoReact NativeTypeScriptExpo RouterSQLiteZodReact Hook FormZustandVitestpnpm