Balaji Roofing Industries manufactures and supplies roofing sheets, PUF insulated panels and related products. Sales quotes were built by hand from a daily rate sheet, which is slow and easy to get wrong.
Version 1: a call-capture CRM
The first build captured inbound enquiry calls through Plivo, transcribed them with Sarvam, and turned them into draft quotations inside a CRM: a NestJS and PostgreSQL back end with a React, Vite, Tailwind and shadcn/ui front end, with live updates to the sales screen.
Version 1 design prototype: enquiries and today's rates (sample data)
Version 1 prototype: quote builder with call context
Version 1 prototype: GST quotation preview and sharing
Listening to the client: version 2
After using it, the client asked for a different shape: no telephony and no CRM, just a fast guided quotation flow. We kept the part that mattered, the pricing math and the quotation PDF layout, and rebuilt the app around it.
Guided quotation wizard: location, product, thickness, sizes and quantities
Pricing engine in a Supabase Edge Function, never in the browser
Quotation PDF generated server-side and shared through a signed link
Daily rate entry, plus products and locations management
Supabase Postgres with row-level security per staff user
Hosted in the client's own Supabase and Vercel accounts
Version 1 prototype: quotation list
Version 1 prototype: daily rate sheet
Tech stack
Version 1: NestJS, PostgreSQL, WebSockets, Plivo, Sarvam, React, Vite, Tailwind CSS, shadcn/ui. Version 2: Supabase (Postgres, Auth, Edge Functions, Storage) with the React front end on Vercel.
The screenshots show the version 1 design prototype with sample data; phone numbers, tax IDs and emails are blurred.
Like this project
Posted Sep 15, 2026
Quotation app for a roofing manufacturer: a pricing engine for sheets and panels, GST-ready PDF quotes and sharing, rebuilt from a call-capture CRM.