Onsite ERP

Designed and built end to end, solo2025 — Present
6 BranchesStock by DateInvoices & ChallansRole-Based Views
The admin dashboard: revenue, orders waiting on approval and fulfilment, collection rate, outstanding by age, and the trend across branches

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

01

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.

The quotation builder: customer, event, items and services on the left, the totals updating on the right
02

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.

A proforma invoice and a delivery challan as the customer receives them: the branch's own GSTIN and bank details, HSN codes, GST, totals
03

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.

The approvals queue: orders and quotations waiting on sign-off, payment requests, write-off requests
04

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.

The operations queue: accept, dispatch, deliver, bring back, check, complete, with no prices on the screen
05

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.

The availability board for one branch and a date range: owned, rentable, booked on the busiest day, free, and the orders holding the units
06

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.

An order as operations sees it: accepted, dispatched, delivered, returned, checked, completed, and no money anywhere on the page
07

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.

The monthly billing card on a long rental: each month billed and confirmed, the next due date, and the stock still booked
08

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.

The linked-orders card: two orders for one customer combined into one job, with the whole job's value, paid and due
09

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.

One order: the money actions in the rail and the timeline of who did what and when
10

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.

Reports for the year: revenue, average order, collected, win rate, clients served, fleet in use, and the charts
11

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.

The calendar: every job on each day it runs, coloured by status, with the day's list beside it
12

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.

The notification bell open on the dashboard, with the push switch for this device
13

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.

The operations queue on a phone: to accept, to dispatch, each with the order and the venue
14

Also

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

The activity log: who changed what and when, across the whole system

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.

01

Login & Access Matrix

02

Quotations

03

Orders & Approvals

04

Inventory + Reservations

05

Challans & Quality Checks

06

Payments & Adjustments

07

Clients & Vendors

08

Reports & Chart Builder

09

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