A technical breakdown of shipping QuickQuote—the invoice app contractors actually want to use.
In 2026, electricians in the UK are still writing quotes on the back of envelopes. Plumbers are texting invoice PDFs to clients from vans. HVAC engineers are emailing spreadsheets and hoping clients click the payment link before the WiFi cuts out.
We built QuickQuote in two days to fix this.
This is the story of how a small team at The BizLaunch Ltd shipped a production-ready contractor quoting tool using Next.js, Supabase, Stripe, and Resend—and what we learned along the way.
The Problem: Friction at Every Step
Contractors aren't slow to adopt technology. They're fast to abandon it when it doesn't fit their workflow.
The pain points were clear:
- Quotes look unprofessional. Handwritten or auto-generated PDFs don't inspire confidence. Clients delay approval.
- Payment is friction. A quote email without a direct payment link means clients have to chase invoices, send bank transfers, or use Paypal at 2% fees.
- Admin is torture. Excel spreadsheets, manual VAT calculations, no visibility into which quotes turned into revenue.
- Mobile is afterthought. Contractors are on job sites, not at desks. Forms need to work on phones with patchy 4G.
We set out to compress the entire quote-to-payment flow into something that takes 3 minutes on a phone.
The Tech Stack Decision
Why Next.js 16.2.1 + App Router?
We needed full-stack capabilities without context-switching. Next.js with the App Router gave us:
- Server components for data fetching (no N+1 queries)
- API routes for webhook handling (Stripe, Resend)
- Built-in image optimization (contractors upload job photos)
- Deployment to Vercel with zero configuration
TypeScript was non-negotiable—quotes involve money, and runtime errors are expensive.
Why Supabase?
Postgres + Auth + RLS (Row Level Security) in one service meant we could build multi-tenant isolation in 30 minutes instead of days.
Supabase's RLS policies mean a contractor can never query another contractor's quotes, even if they somehow bypass the frontend. That's security by default.
Why Stripe + Resend?
Stripe's inline price_data lets us generate quote-specific checkout sessions without pre-creating products. Resend's transactional email API lets us send "Approve & Pay" emails from a custom domain in ~200ms with no SMTP configuration.
Building the Quote Wizard
The core flow is simple:
- Client Info — Name, email, address
- Job Details — Type of work, location, notes
- Line Items — Materials + labor, auto-VAT at 20%
- Review & Send — Send to client with unique approval link
Mobile-first design means buttons are fat (48px tap targets), spacing is generous, and we hide the navigation sidebar on screens under 768px.
The Database Challenge: RLS Policies
Every contractor has sensitive data—client names, quote amounts, payment details. Supabase RLS does this at the database level, ensuring a contractor can never read quotes from another contractor. Even if someone bypasses the frontend, Postgres enforces the policies. No quote leaks.
Syncing Auth to Profile: Database Triggers
When a contractor signs up via Supabase Auth, a Postgres trigger automatically creates their profile row with name, company, and subscription tier. No race conditions. No data inconsistency.
Stripe Checkout: Flexible Pricing
Stripe's price_data lets us generate checkout sessions on the fly with quote-specific amounts. The client gets a unique checkout session URL sent via email. When they click "Approve & Pay", they're taken directly to Stripe's hosted checkout.
48 Hours to Production
Hour 1-4: Database schema, Supabase auth, RLS policies
Hour 5-12: Next.js wizard component, mobile styling, form validation
Hour 13-20: Stripe integration, webhook endpoint, Resend email templates
Hour 21-32: Dashboard, quote history, PDF export
Hour 33-40: Testing, edge cases (VAT rounding, timezone handling), deployment
Hour 41-48: Launch, first customer signup, first paid quote sent
We deployed to Vercel. Cloudflare handled DNS. Supabase hosted the database.
What We Learned
- Constraints drive innovation. 48 hours meant we shipped features that mattered and skipped everything else.
- Database-level security isn't optional. RLS saved us from shipping insecure code.
- Webhooks are synchronous problems. The real challenge wasn't receiving webhooks—it was atomically updating the database and sending emails without double-charging.
- Mobile-first isn't a design choice, it's a requirement. Contractors aren't using iPads at desks.
- Indie teams move fast because we have to. We shipped and iterated.
What's Next
QuickQuote launched with:
- Solo plan: 49 GBP/month (unlimited quotes, 1 user)
- Team plan: 99 GBP/month (unlimited quotes, up to 5 users)
- 14-day free trial: No card required
Try It Free
If you're a UK contractor and you're still writing quotes by hand, you're leaving money on the table.
Start your 14-day free trial at quickquote.tblsoftwares.com
No credit card required. No commitment. Just faster quotes and faster payments.
Built by The BizLaunch Ltd, a small team shipping tools for contractors.
The differentiator isn't the technology. It's the problem you solve and the speed you solve it at. Ship fast. Listen to users. Iterate. Repeat.
Top comments (0)