TL;DR: Fabric traders run billing, stock, job work and receivables across paper bahis, WhatsApp and Excel, and calculate GST splits by hand. Bolt & Bahi puts it all in one local-first ledger that decides CGST/SGST vs IGST from the transaction, speaks ten languages including Hinglish, and ships with an optional AI assistant (ARA).

Built product · Product owner · Live demo (sample data)

Live demo · PRD · BRD · MRD · Spec · Code

The problem

Two users with different jobs: the retail counter owner who needs fast, GST-correct billing, and the wholesale distributor who sells on price slabs and MOQs and tracks credit and dispatch. Both lose money in the same places:

Evidence

How it works

flowchart LR
	A["Sale or purchase entry<br>(counter or wholesale)"] --> B{"Same state?"}
	B -->|Yes| C["CGST + SGST"]
	B -->|No| D["IGST"]
	C --> E["GST invoice"]
	D --> E
	E --> F["Stock ledger"]
	E --> G["Receivables and aging"]
	G --> H["ARA assistant<br>(optional, own key)"]
	F --> I["Local storage<br>+ JSON backup"]
	G --> I

The trader never chooses the tax split. The transaction decides it, and the invoice, stock and receivables update from the same entry.

Decisions and trade-offs

  1. Local-first, no account. A trader can bill on day one without signing up. Sync is a phase-two problem, and the schema for it is already in place.
  2. The app decides the GST split, not the trader. This is where manual invoices break, so it is removed as a decision.
  3. Bring-your-own AI key. ARA drafts reminders, summarises the day and reads a fabric photo into stock. Keeping it BYO-key makes AI optional, not a paywall.
  4. Language of the counter. Ten languages including Hinglish, because the user reads the ledger in the language they speak to customers.