Onsite ERP

Overview
OnSite Rentals rents portable restrooms, water tankers, golf carts and site equipment from six branches across India. Before it, the work ran on Excel, email and WhatsApp. Now one system carries each order from quotation to closed job, with the stock and the money alongside it.
At a Glance
6
Branches
13
Modules
5
Roles
Apr 2026
Live Since
Key Features
Quotation to order in one screen
The salesperson picks the customer, the dates, the items and the services. Each line shows what the branch has free for those dates. The quotation prints as a proforma invoice straight away; the customer confirms it with a code, and it becomes the order.

Invoices and challans that print themselves
The proforma invoice carries the branch's own GSTIN and bank details, HSN codes, GST only when the customer is registered, the payment schedule and the terms. Delivery challans print for the outward and the return trip. Linked orders get one combined invoice with a summary page.

Two approvals, with limits the owner sets
Orders above a limit wait for the owner. Any advance waits for accounts to confirm the money has arrived. Both limits are settings, not code.

Operations never see a price
The warehouse team works a queue: accept, dispatch, deliver, bring back, check, complete. No screen, challan or notification they see carries a rupee figure.

Stock by date
Every item has four counts: in the warehouse, at a customer, in repair, written off. Bookings sit on top by date range, so the availability board shows what is free for any dates, and the same check holds the units when an order is confirmed.

Returns graded unit by unit
Each returned unit is marked excellent, repairable or unusable and moves to the matching count. The order closes when every unit that left is graded and the customer reads back a closing code.

Monthly billing for long rentals
A rental that runs for months switches to monthly billing. Each month is confirmed with the customer's code, bills onto the order, and keeps the stock booked for the next month.

Several orders, one job
Orders for the same customer can be linked into one job: one challan across them, one invoice with a summary page, and one payment allocated to the oldest order first.

Money with a paper trail
Salespeople request payments, write-offs and bill adjustments; accounts approve or reject with a reason. Customers can carry a credit limit. Every order shows what has been collected.

Reports with a chart builder
Revenue by branch, salesperson and month; utilisation per branch; fulfilment time; quality-check results; win rate on quotations. A chart builder lets the owner pick the measures and groupings, save the chart and share it with the team. Any table downloads as a spreadsheet.

A calendar of every job
Each order sits on the calendar for every day it runs, coloured by status. Click a day to see the jobs, the venues and what is going out or coming back.

Notifications that reach the phone
An approval needed, an order accepted, a delivery made, a payment recorded: each reaches the right people as a push notification on their phone. Broadcasts go to a role or a branch, and every order has its own message thread.

Installs like an app
Runs in the browser on any phone, tablet or laptop and installs to the home screen. Every screen is built to fit a phone.

Also
Monthly and yearly targets per salesperson, an activity log of every change with who made it, and vendors for outsourced items.

System Architecture
One Next.js application on Vercel with Postgres on Neon. Every action runs on the server, checks the user's role, then runs inside one database transaction, so an order write, its reservation and its stock move succeed or fail together. The database enforces the rules itself: the four stock counts must equal the units owned, statuses are checked values, money is a decimal.
Login & Access Matrix
Quotations
Orders & Approvals
Inventory + Reservations
Challans & Quality Checks
Payments & Adjustments
Clients & Vendors
Reports & Chart Builder
Activity Log
Technical Highlights
Prices are removed for operations in the data layer, on the screen, in notifications and on the printed challan; a browser test searches every server response for the hidden figures
Availability is a sweep over active reservations with the stock rows locked for the length of the transaction, so two conversions of the last units cannot both succeed
About 40 console test suites and 30 browser walks with real logins run against a development database branch; a static check refuses any server action without an access check
Moved from DynamoDB and Lambda to Postgres in 2026, rehearsed on a throwaway database branch and verified field by field before the switch
Next Step
Running an operation like this?
If you're wrestling with the same kind of complexity — multi-branch inventory, formulations, approval workflows — tell me about it. I'll respond within 24 hours with an honest assessment.
Start a conversation