Projects / Billing & Field Sales

Invoice Desk: GST billing and field-sales platform

A complete billing and stock system for a wholesale distributor: a web app for the office to raise GST-compliant invoices, manage stock in cases, boxes and pieces, and track payments, plus an Android app that salesmen use at shops to take orders and collect payments. Built with React, Node.js, PostgreSQL and Expo.

Web app Android app
Invoice Desk admin dashboard showing sales, collections, profit, stock value and a 30-day daily sales chart

The problem

A distributor that supplies retail shops was billing by hand and tracking stock in spreadsheets. Salesmen visiting shops phoned their orders back to the office, payments collected on the road were hard to follow up, and nobody knew the true stock or the profit per brand.

What we built

An end-to-end platform with two apps on one backend.

Web app (office and admin)

  • GST tax invoices with CGST/SGST/IGST, schemes, cash discounts, TCS and rounding, printed as a PDF that matches the company's existing invoice layout exactly
  • Stock handled the way the trade counts it: cases, boxes and pieces, with each delivery kept as its own priced lot. Sales use up the oldest stock first and carry on into the next lot when one runs out.
  • Purchases from suppliers with many products per bill, and sales returns that put stock back into the lot it came from and credit the shop's balance
  • Payment tracking per invoice, with outstanding balances for each shop
  • Review queue for orders from the field: edit, approve and bill each order, or reject it
  • Reports: sales, GST returns (HSN, B2B, B2C), margin, purchases, brand profit and loss, weekly collections and low-stock alerts with reorder suggestions, all exportable to CSV
  • Dashboard with sales trends, money due and per-salesman performance

Android app (salesmen in the field)

  • Sign-in with mobile number and a 4-digit PIN
  • Shop list with outstanding dues and route filters
  • Order taking by case, box or piece, with a live price estimate from the same pricing engine as the invoices
  • Payment collection against any unpaid bill, and a daily collections summary
  • Live stock view, pull-to-refresh, and protection against losing an unsaved order

Technical highlights

One pricing engine everywhere

Invoices, order estimates and previews all use the same engine, so the web and mobile apps always agree on prices and tax.

Safe concurrent billing

Database transactions with row locking mean two people billing at once can't sell the same stock or get the same invoice number.

Migrations on every deploy

Versioned database migrations run automatically on deploy — including a one-time fix for stock that older invoices had oversold.

Zero-setup local development

Embedded Postgres (PGlite) for local development and tests, with no database to install.

80 automated tests

The test suite runs against a real Postgres engine in memory, not mocks.

Role-based access

Admins manage everything, salesmen see only what they need, and purchase costs are never sent to the mobile app.

All projects Contact us