FreeBill was built to solve a specific problem: Indian GST invoicing for freelancers and small businesses who don't need a full accounting suite like QuickBooks. It launched in 2022 and currently processes invoices for over 200 active businesses.
The Context
Most invoicing tools are built for accountants — not for the freelancer or independent business owner who needs to send three invoices a week without reading a help article first. QuickBooks is overkill. Generic invoice generators have no business logic. The gap was a tool that understood Indian GST structure, generated professional PDFs, tracked payment status, and required zero training to use on day one.
The Approach
Built the entire UX around a single insight: the user should never have to think about where to click next. One action per screen. The invoice creation flow is four steps — client, items, GST, send. The PDF generation runs server-side with Puppeteer to ensure pixel-perfect output regardless of the user's device or browser. Payment tracking integrates with Razorpay webhooks for automatic status updates — no manual 'mark as paid' required.
Correct GST calculation without rounding errors.
GST calculation across different slab rates (0%, 5%, 12%, 18%, 28%) with inter-state vs intra-state IGST/CGST/SGST split — implemented correctly in the invoice total and the PDF without any rounding errors. Took three days of edge case testing with real invoices.
200+ active businesses using FreeBill within the first six months of launch. Zero support tickets about the invoice flow. One support ticket ever — a PDF rendering issue on a specific Chrome version, fixed in 4 hours.
Engagement Meta
Technology Context
Quick Navigation
FRONTEND
API LAYER
SERVICES
DATABASE
INFRA
Architectural Decisions
Why this specific stack was chosen over standard defaults for this build.
Don't build before validating the GST logic.
Indian GST across slabs and inter/intra-state is the hardest part of any billing tool — not the UI. Get that right before writing a single invoice component.
Server-side PDF is not optional at this standard.
Client-side PDF libraries produce inconsistent output across browsers and OS configurations. If the invoice is a legal document, the PDF must be identical every time — Puppeteer server-side is the only reliable path.
Webhook-first payment status is non-negotiable.
Relying on redirect success pages for payment confirmation misses failures, timeouts, and network drops. Razorpay webhooks as the source of truth means zero missed payments.
The Final Result
200+ active businesses using FreeBill within the first six months of launch. Zero support tickets about the invoice flow. One support ticket ever — a PDF rendering issue on a specific Chrome version, fixed in 4 hours.
Don't build before validating the GST logic.
Indian GST across slabs and inter/intra-state is the hardest part of any billing tool — not the UI. Get that right before writing a single invoice component.
Server-side PDF is not optional at this standard.
Client-side PDF libraries produce inconsistent output across browsers and OS configurations. If the invoice is a legal document, the PDF must be identical every time — Puppeteer server-side is the only reliable path.
Webhook-first payment status is non-negotiable.
Relying on redirect success pages for payment confirmation misses failures, timeouts, and network drops. Razorpay webhooks as the source of truth means zero missed payments.