Full-stack production platform
Ace Plumbing Specialist
aceplumbing.sgLive / In progress
A production full-stack web platform that runs an entire plumbing business. It pairs a marketing/booking website with two secure internal portals (an owner admin back-office and a plumber field app) covering the full lifecycle from lead capture to jobs, quotations, invoicing, e-signed service chits, expense claims, commissions, and bookkeeping. Built on Next.js (App Router) and Supabase, with server-side PDF generation, digital signatures, and Singapore PayNow QR payments.
Public site
- Marketing pages with 9 service pages, residential/commercial sections, testimonials, trust badges, guarantees, and an editable FAQ
- SEO built in: sitemap, robots, PWA manifest, per-page Open Graph images, JSON-LD structured data, plus Google Reviews and Google Ads/analytics integration
Booking & leads
- Zod-validated appointment booking with daily booking limits
- Enquiries saved to Supabase
- Automatic customer + business emails via Resend
Owner admin portal
- Dashboard with charts; requests → jobs workflow
- Quotations & invoices (auto-numbered); service chits
- Expense claims with categories and image uploads; commission settlements
- Cash ledger, transactions and monthly statements; customers
- A blog/post CMS; user management; and an audit log of admin actions
Plumber field portal
- A separate secure login giving plumbers their assigned jobs, documents, expense claims, earnings, PayNow QR generation, and account settings
Documents & signing
- Server-side PDF generation (Puppeteer + headless Chromium) for quotations, invoices and service chits
- Tokenized public links for customers to view and digitally sign documents (signature pad), with dedicated print/PDF routes
Payments & finance
- Singapore PayNow QR codes
- Bookkeeping across cash, transactions, claims and commissions, rolled up into monthly statements
Security & quality
- Supabase Auth for the admin, plus a separate plumber auth (OTP sessions, hashed secrets, timing-safe comparisons)
- Middleware-gated routes
- A Vitest suite covering core business logic
~300 source files · 3 portals · 9 service types · 15 database tables · 24 test suites
Built with
- Next.js 16 (App Router)
- React 19
- TypeScript (strict)
- Tailwind CSS v4
- shadcn / Base UI
- React Hook Form + Zod
- Supabase (Postgres + Auth)
- Resend
- Puppeteer (PDF)
- signature_pad
- Vitest
- Vercel