The platform

Everything the counter runs on.

Six modules, one Postgres ledger. Every sale, count, and payment posts double-entry journals the moment it happens, so the books are never a separate job.

06

Modules

01

Database

99.98%

Uptime

Ready

Offline

Capabilities

Five groups, one posting engine.

Each group below is a set of behaviors of the same database, not a separate product. Nothing here is an integration.

01

Point of sale

A register built for the counter: fast line entry, strict identity, and a sale that lands in the ledger the moment the drawer closes.

PIN cashiers

Cashiers sign in with a PIN, not a shared login. Every sale carries the person who rang it.

Per-terminal assignment

Staff are assigned to specific locations and terminals, so a PIN only works where it should.

Registered devices

Each terminal is activated once with a one-time code and bound to a single register.

Supervisor approvals

Overrides take a supervisor PIN and are stamped on the transaction. The cashier session never switches.

Barcode line entry

Scan to add lines. Batch and serial items route through the right prompts automatically.

Posting at the counter

Every sale writes stock movement and journal lines in one transaction. There is no end-of-day sync.

02

Inventory

Stock is a stack of dated cost layers, not a single number. Cost flows out the way it came in, and every movement is traceable.

FIFO cost layers

Every receipt opens a cost layer. Sales consume layers oldest-first, so margin is real, not averaged.

Batch and expiry lots

Lots carry batch numbers and expiry dates on the layer itself. Sell and count by lot.

Serial tracking

Serial-numbered units are tracked one by one from receipt to sale, return, or adjustment.

Stock counts with zero-fill

Count what is on the shelf. Uncounted products can be zero-filled in one step, so the count is complete.

Adjustments that post

Gains and losses from counts and corrections post their own journal entries, at layer cost.

Stock by location

Quantities, layers, and counts are kept per location, so each store sees its own shelf.

03

Accounting

Double-entry is not a report bolted on afterwards. It is the substrate: every document writes balanced journal lines the moment it posts.

Journals behind everything

Invoices, purchases, returns, payments, and adjustments all write balanced debit and credit lines.

Multi-currency with FX

Documents keep their transaction currency and rate. Realized FX gain and loss post automatically.

Payment allocation

Payments apply against open documents, and credits from returns, advances, and journals can settle them too.

Aging that ties out

A/R and A/P aging reconciles to the ledger balance, including unapplied credits, to the cent.

Statements per currency

Customer and vendor statements read straight from journal lines, in base or any transaction currency.

Printable templates

Every document type prints from an editable template: invoices, credit notes, payments, and more.

04

Multi-store

One company, one chart of accounts, many counters. Each location keeps its own numbering, stock, and staff without splitting the books.

Per-location numbering

Document numbers are allocated per location from configurable prefix sequences. No gaps, no clashes.

Stock transfers

Move stock between stores with documents that carry cost layers along, not just quantities.

Rosters per store

Terminals and cashier assignments are managed per location, so staff exist where they work.

One chart of accounts

All locations post into the same ledger. Consolidated statements need no consolidation step.

Role permissions

Access is granted per resource and action: who can post, who can void, who can backdate.

Location-aware reports

Sales, purchases, and stock reports filter by location while the ledger stays whole.

05

Reliability

The counter cannot wait for the network, and the ledger cannot tolerate races. Both constraints are designed in, not patched around.

Ordered offline replay

When the connection drops, sales queue locally and replay in order once it returns. Nothing is lost or reordered.

Offline PIN sign-in

Cashier PINs verify locally against derived, expiring verifiers. The store opens even when the internet does not.

Serialized posting

Advisory locks per company and product keep FIFO layers correct under concurrent registers.

Built for long documents

Cursor-paginated lists and line-at-a-time saves handle documents with a thousand-plus lines.

Streaming exports

Every filtered list streams to CSV with the same filters applied, however large the result.

Realtime dashboards

Sales, margin, and cash positions update live as terminals post through the day.

The trace

One sale, five consequences.

Follow a single line item through the system. Every step is the same transaction, in the same database.

01

Register

A cashier scans one item at the counter.

T-02 / qty 1 x 24.00

02

Stock layer consumed

The oldest cost layer gives up one unit.

layer #4812 / 36 -> 35 @ 9.40

03

Invoice posted

The sale becomes a numbered document.

INV-000241 / total 24.00

04

Journal lines

Balanced debits and credits, including cost.

DR cash 24.00 / CR sales 24.00 / DR cogs 9.40 / CR inventory 9.40

05

Reports

Margin and balances update in place.

margin 60.8% / live

Baseline

Included on every plan.

The ledger is not an upsell. These are floor features, present from the smallest plan up.

  • Unlimited products
  • Unlimited customers and vendors
  • Double-entry ledger on every plan
  • Offline mode with ordered replay
  • Printable document templates
  • Role-based permissions
  • CSV export on every list
  • Barcode scanning
  • Realtime dashboard
  • Email support

See what it costs.

Three plans, priced like a utility. No per-module fees.