● refactoringbuildingsamridhlimbu.com/projects/king-glazing · v0.1
King Double Glazing
● live · freelanceRebrand and full rebuild from The Glass Discounters to King Double Glazing. Conversion-first architecture built around a self-serve Instant Estimate Tool — price before contact details, not after. Desktop Lighthouse: Performance 99 · SEO 100 · Best Practices 100.

kingdoubleglazing.com.au — homepage
Context
Freelance technical lead, Apr–May 2026. King Double Glazing is a Melbourne retrofit double glazing business — they upgrade existing window frames with insulated glass units rather than replacing the whole window. The brief was a full rebrand from The Glass Discounters plus a new site. The actual deliverable is a conversion funnel built around one insight: show the price before asking for the phone number.
Timeline
Apr 2026
Engagement starts — rebrand evaluation
Client had an existing site under "The Glass Discounters" brand. Lighthouse: Performance 57 mobile, LCP 13.1s. Brief: new brand (King Double Glazing), new site, new positioning — full restart.
Apr 2026
Stack decision: Next.js 16 from scratch
Next.js 16 + Tailwind v4 + Neon + Drizzle + Resend. Full control over the Instant Estimate Tool UX and CMS integration. No WordPress, no page builder.
Apr 2026
Funnel pivot — 27 routes → 5 pages
Original plan was a 27-route SEO content cluster with suburb pages and a blog. Mid-project pivot to a tight 5-page conversion funnel with the Instant Estimate Tool as the primary CTA. SEO infrastructure preserved for future expansion.
May 2026
TinaCMS integration + launch
Content migrated to TinaCMS (git-based JSON). Visual editor live via Tina Cloud. Full ecosystem handed to client. Lighthouse: Performance 99 · SEO 100 · Best Practices 100 on desktop.
Key technical decisions
01next.js 16 › wordpress
WordPress couldn't support the Instant Estimate Tool UX without heavy plugin stacks. Next.js 16 App Router gave full control over the multi-step calculator, server actions for lead capture, and zero plugin bloat dragging down Core Web Vitals.
02price-first estimate tool › contact-first quote form
Standard trades sites gate the price behind a callback. The Instant Estimate Tool shows a price range before asking for contact details — qualify first, capture second. Filters tyre-kickers before they reach the owner's phone.
035-page conversion funnel › 27-route seo cluster
The SEO content plan was killed mid-build. The client needed leads in 30 days, not 6 months. A tight funnel pointing every visitor to the estimate tool converts faster. The SEO infrastructure (schema, sitemap, suburb template) is preserved for when the time is right.
04tinacms (git-based) › sanity cms
TinaCMS stores content as JSON files committed to the git repo — no external CDN, no separate database. Visual editor via Tina Cloud. Content is version-controlled with code. Simpler handoff for a non-technical client.
05resend + token confirmation › smtp / contact form plugin
Two-step quote confirmation: customer receives a link, clicks to confirm, then KDG gets the lead notification. Filters junk submissions before they reach the owner. DKIM/SPF/DMARC configured from day one.
Instant estimate tool — token confirmation flow
kairos/scheduler.pypy
1// server action — quote submission + token confirmation
2export async function submitQuote(data: QuoteInput) {
3 const token = crypto.randomUUID()
4 await db.insert(quotes).values({ ...data, status: 'pending', confirmToken: token })
5 await resend.emails.send({
6 to: data.email,
7 react: ,
8 })
9 // KDG only notified after customer confirms — filters junk
10}
The multi-step calculator produces a price range in under 60 seconds. On submit, the customer receives a confirmation link — KDG only gets the lead notification after they click it. Junk submissions are filtered at the email layer before they reach the owner's inbox.
Stack
FrontendNext.js 16 · Tailwind v4 · TinaCMS
BackendNeon · Drizzle · Resend
InfraVercel