CODENAME: RIVERFISH · PHASE 0 · BRAND TBD

All of your shop,
on one ledger.

Project River Fish is a suite of business apps for retail and trade shops — the counter, stock, purchasing, customer accounts, invoicing, tax, people, and the rest — every one of them writing to one append-only ledger that keeps working when the internet does not. The counter is ringing up real sales in a pilot shop today. The other apps are arriving on the same foundation, one at a time, and each says on this page exactly how far along it is.

fig. 01 — river fish, sampled at 9px

0.00

Float drift — money is integer minor units

100%

Sales that complete offline

0

Conflicts when branches re-sync

2×

Native clients, one sync contract

The apps

One app for one need. One platform for all of them.

Start with the counter. Add stock when you want to know what is on the shelf, purchasing when you want to know what it cost, khata when customers buy on account. Every app you add reads the same catalogue and writes the same ledger, so nothing is exported, re-keyed or reconciled between them.

1 in a pilot shop13 in build34 coming

Sell

  • Point of Sale

    In pilot

    A keyboard-first counter for a busy trade shop: scan, price by the pack, print, all with the network down.

  • Customers & Khata

    In build

    Every customer’s account — what they owe, what they paid, and how old the balance is.

  • Returns & Exchanges

    In build

    A return against the original bill, at the tax and discount it was actually sold at.

  • Sales & Quotations

    Coming

    Quote a job, hold the prices, and turn it into a bill when the customer says yes.

  • Subscriptions

    Coming

    Recurring bills for the customer who is supplied on a monthly account.

  • Rental

    Coming

    Hire out tools and equipment against a deposit, with returns tracked like stock.

Finance

  • Invoicing

    In build

    Tax invoices that say what they are — and claim nothing the shop cannot back.

  • Tax & Filing

    In build

    Input and output tax by rate, per period, from figures frozen on each line when it was posted.

  • Accounting

    Coming

    A chart of accounts over a ledger that already never rewrites a posted row.

  • Expenses

    Coming

    Rent, electricity, wages — recorded against the month they belong to, not the day they were paid.

  • Spreadsheet & BI

    Coming

    Pivot the ledger without exporting it, and keep the figures live.

  • Documents

    Coming

    Supplier bills, warranties and photos, filed against the record they belong to.

  • Sign

    Coming

    Sign a quotation or a delivery note on the tablet and keep the signed copy with it.

Supply chain

  • Inventory

    In build

    Stock derived from movements, in base units, across every branch — never a column somebody can overwrite.

  • Purchase

    In build

    Supplier bills with freight and duty landed onto each item’s cost, at the pack size that supplier ships.

  • Suppliers & Payables

    In build

    What is owed to whom, paid against which bill, and what is still open.

  • Barcode Labels

    In build

    A label designer at true size, batch sheets, and one barcode per pack unit.

  • Manufacturing

    Coming

    Cut, mix or assemble stock into a new item and cost it from the parts.

  • Quality

    Coming

    Inspect what arrives before it goes on the shelf, and record what was sent back.

  • Maintenance

    Coming

    Equipment, service dates, and who fixed what.

People

  • Staff & Roles

    In build

    Who works where, with which role at which branch — and an audit trail of who changed it.

  • Attendance & Time Off

    Coming

    Shifts worked and leave taken, by branch.

  • Payroll

    Coming

    Wages computed from attendance and paid out as an expense the ledger already knows about.

  • Recruitment

    Coming

    Openings, applicants, and the interview that decided it.

  • Appraisals

    Coming

    Reviews on a schedule, with the sales figures already to hand.

  • Vehicles

    Coming

    The delivery van: fuel, service, and which deliveries it made.

Reach

  • WhatsApp

    Coming

    Receipts, reminders and statements sent where customers already are.

  • SMS

    Coming

    A balance reminder or a ready-for-collection message, from the ledger, not from a phone.

  • Loyalty & Promotions

    Coming

    Points, bundles and seasonal prices that the counter applies without anyone remembering them.

  • Website

    Coming

    A page for the shop — hours, location and the catalogue — in both languages.

  • Online Store

    Coming

    Sell from the same catalogue and the same stock as the counter.

  • Email Marketing

    Coming

    A monthly note to customers who asked for one.

  • Live Chat

    Coming

    A question on the shop’s page, answered from the counter.

  • Surveys

    Coming

    Ask a customer how it went, once, after the bill.

Services

  • Field Service

    Coming

    Fitting and repair jobs out of the shop, billed from the same catalogue.

  • Projects

    Coming

    Job work for the contractor who buys from you — materials, labour, and what is left to bill.

  • Helpdesk

    Coming

    Complaints and warranty claims, tracked to a resolution against the bill they came from.

  • Appointments

    Coming

    A delivery slot or a site visit, booked against a calendar the shop can see.

  • Timesheets

    Coming

    Hours against a job, so labour is billed as carefully as materials.

  • Planning

    Coming

    Who is on which counter, which day.

Insight & productivity

  • Dashboard

    In build

    Today across every branch, low stock, and the ops the server could not fold — on the server, in the shop’s own day.

  • Reports

    In build

    Sales, purchases, profit and loss, ageing and tax — exported to Excel as numbers, not text.

  • Import

    In build

    Excel in, a full diff shown before anything is saved.

  • AI

    In build

    Ask the ledger a question in your own language; get a figure with its rows cited.

  • Discuss

    Coming

    Messages between branches, attached to the bill they are about.

  • Knowledge

    Coming

    The shop’s own notes — how to price a cut length, whom to call for a part.

  • Devices

    Coming

    Scales, label printers and customer displays on the counter.

  • Phone

    Coming

    A call from a customer opens their account before you pick up.

“In pilot” means running on real sales in a real shop. “In build” means code and tests, no shop yet. “Coming” means a name and a sentence. This list is the plan, and more apps will be added to it as they are named.

The platform

Every app, one ledger.

The apps differ on the screen and agree underneath. Each one appends operations to the same log, reads the same catalogue and stock, and syncs through the same contract — so an app added next year does not need last year’s data moved into it.

  1. 01

    Stock is a sum, never a cell

    Every movement of inventory or money appends an immutable row. On-hand stock is the sum of those movements — there is no mutable column to corrupt, so “−22.5 PAIR” can never happen silently again.

  2. 02

    Offline is the default

    The counter completes sales with the network down. Operations queue in a local outbox and sync later — idempotent and commutative, so two branches re-joining after an outage converge with no conflict resolution at all.

  3. 03

    Nothing posted is ever rewritten

    A void is a reversing entry, not a delete. A corrected cost is an adjustment row, not an edit. History stays auditable because the only way to change it is to append to it — which is what makes a figure worth citing.

First fish · counter POS

The counter, at legacy speed.

Keyboard-first with the F-key map the staff already know, a scan field that never loses focus, and sync state always visible. Dense on purpose — matched to a twelve-hour shift, not a demo.

RIVER FISH POSSaleF1PurchaseF3PaymentsF4ReportsF6Synced18:42

Total sales

Rs 77,850.45

▲ 12.4% vs last Saturday

Sale bills

68

Rs 1,144.86 average bill

Purchases

Rs 7,000.00

Rs 3,500.00 freight allocated

Net sales · last 7 daysMainRavi Road

Counter dashboard · all-branches roll-up — the thing the legacy box cannot do

For developers

A native API, not an afterthought.

Every mutation is an operation in an append-only log, keyed by a client-generated ULID — replay it twice, it applies once. Device identity is a first-class credential: pairing, seat metering, remote revoke.

The same /v1 and /sync contract drives the web PWA, the Kotlin Android client, and whatever ships next — held together by shared conformance fixtures, not shared code.

POST /v1/sync
{
  "deviceId": "dev_01J9K3…",
  "ops": [ {
    "opId":      "01JD8FZK7Q…",   // ULID — the idempotency key
    "type":      "sale.create",
    "branchId":  "br_ravi_road",
    "clientSeq": 4182,
    "payload":   { "totalPaisa": 7785045, "lines": […] }
  } ]
}

→ 200 { "applied": 1, "duplicates": 0, "cursor": "…" }

Native AI

Every answer cites its rows.

An AI that reads your shop is only worth having if you can check it. Most cannot be checked: they answer from a database of mutable cells, where last month’s figure has already been overwritten by this month’s correction and nothing records that it happened.

Because River Fish never rewrites a posted row, every figure has a provenance — the exact movements it was summed from, and the operations that created them. An answer arrives with that range attached, so checking it is reading a report, not taking a guess on trust.

Grounded, not guessed

Ask in Urdu or English, typed or spoken, from any counter or the owner’s phone. The answer carries the movement range behind it — tap it and you are looking at the rows themselves.

  1. کل راوی روڈ کی نیٹ سیل کتنی تھی؟

    Rs 44,150.00

    Ravi Road · Fri 21 Aug · 31 bills

    grounded → stock_movements 18,204–18,412

  2. Which glue lines have not moved in 60 days?

    Rs 92,400

    14 items, tied up · all branches · 22 Jun – 22 Aug

    grounded → 0 movements against 14 item ids

What it is not allowed to do

  • It writes through the same operation log as a person, so every action it takes is in the audit trail under its own identity.
  • It holds no authority of its own: it is bound by the same per-branch role and permissions as the user who asked.
  • Anything that moves stock or money is queued as a draft and waits for an owner to approve it.
  • A question it cannot ground in rows is answered with “I cannot tell you from the ledger”, not with a number.

One platform

Not a marketplace. One product.

A shop that runs on five tools re-keys the same item five times and reconciles the differences at month end. Here there is one catalogue, one customer list, one stock figure and one ledger, and every app is a different screen onto them.

One catalogue

Enter an item once

The counter, the purchase bill, the label sheet and the online store read the same item, the same units and the same prices per unit.

One ledger

Nothing is reconciled

A sale, a purchase, a return and a stock count are all rows in one append-only log. There are no two systems to disagree.

One sign-in

Roles per branch

One account, one role at each branch, one audit trail — the same across every app, set in one place.

Add when needed

Start with the counter

Every app is there from the first day and switched on when the shop wants it. Nothing is migrated in later.

Built for every counter

Specifics, not features.

Multi-branch

Every counter, one view

Branch-level tills and stock with an all-branches roll-up. Role per user, per branch.

Tax

Full tax engine in V1

GST, VAT or sales tax — codes on documents, input and output reports, landed cost that knows whether you are registered.

Languages

Multi-language, day one

UI, master data and printed bills in your language — LTR and RTL alike; per-user screen language, per-tenant print language.

Units

Sells rod by the gram

Multi-unit items, per-supplier pack sizes, weight goods with nominal piece factors. Prices are stored per unit, never multiplied out.

Barcodes

Label studio

WYSIWYG label designer at true scale, batch sheets, a barcode per pack unit.

Import

3,284 items, dry-run first

Excel import with column mapping and a reviewable diff before anything commits.

Pricing

One price. Every app.

River Fish is being built inside a real, working shop — the pilot sets the bar for speed, density and correctness before a single subscription is sold, and the number lands with the public release. The shape of it is already decided.