Case study / Spray Foam Insulation · Alberta Code Authority

NFW Sprayfoam & Insulation.

Rebuilt a Wix insulation site into a 102-URL Alberta platform — seven cited building-code pages and a data layer that refuses to publish an unconfirmed claim.

Sector
Spray Foam Insulation
Year
2026
Stack
Next.js 16
Status
Active
NFW Sprayfoam & Insulation — cover screen

fig. 01 — Homepage — the envelope is what's costing you

What the build
actually covers.

Live URLs
102
Per the live sitemap, 2026-10-05
Communities with their own data
32
StatCan housing + ECCC climate normals, each sourced
Cited code pages
7
NBC(AE) 2023, NECB 2020, CAN/ULC and STANDATA

Measurement window pending — see §08 for the 30/60/90 reporting plan.

What the project
needed to do.

NFW Sprayfoam & Insulation is Northern Foamworks Ltd., a family-run spray foam contractor working out of Red Deer and Blackfalds in Central Alberta. The business had traded since 2016 on a Wix site; it now runs on a 102-URL Next.js 16 platform at nfwfoam.com. Underneath it: 32 Central Alberta communities, each carrying its own Statistics Canada housing data and Environment Canada climate normals with the source and retrieval date attached. On top of it: seven technical pages that answer Alberta code questions with the clause numbers written out, in a market where the most-quoted air-barrier figure is Ontario's.

NFW had the reputation and almost no surface area: trading since 2016, 5.0 across 26 Google reviews, and a Wix site that could not carry a technical argument. The growth the owner wanted — high-end residential, commercial and industrial — turned out to have no measurable paid-search volume at all, which meant those buyers were arriving by referral, specification and tender. For them a website is not a capture mechanism, it is a due-diligence document. Meanwhile the Central Alberta market had shifted from new construction to retrofit: building-permit value down while permit counts rose, industrial vacancy near four percent. Owners were improving what they already had.

The build cannot publish a warranty, a price, a certification or an address, because none of those has been confirmed — omission is the default, not an editWhat moved the needle

What it looks like,
on screen.

Homepage — the envelope is what's costing you
fig. 02 — Homepage — the envelope is what's costing you
Services — 21 insulation services, shot on NFW's own jobs
fig. 03 — Services — 21 insulation services, shot on NFW's own jobs
Service areas — all 32 Central Alberta communities
fig. 04 — Service areas — all 32 Central Alberta communities
Red Deer — the town's own census and climate record
fig. 05 — Red Deer — the town's own census and climate record
Alberta code library — the clause numbers written out
fig. 06 — Alberta code library — the clause numbers written out
The Field Guide — 27 posts with faceted search
fig. 07 — The Field Guide — 27 posts with faceted search
On mobile — the homepage as a homeowner first sees it
fig. 08 — On mobile — the homepage as a homeowner first sees it
On mobile — how an attic gets scoped, above the sticky call bar
fig. 09 — On mobile — how an attic gets scoped, above the sticky call bar

The deliverables,
line by line.

A 102-URL Next.js 16 platform live at nfwfoam.com since October 2026. Underneath it, 21 service pages and 32 Central Alberta city pages, each town carrying its own Statistics Canada housing record and Environment Canada climate normals with the table, Product ID and retrieval date attached — and an honest note naming the borrowed weather station where a town has none. On top of it, the thing the market was missing: seven technical pages that answer Alberta code questions with the clause numbers written out, plus a rebate page that states which programmes have closed. Around all of it, a 53-field owner-confirmation layer that renders nothing until a fact is confirmed, a full Wix URL preservation and 301 map, tested lead attribution, and 29 automated checkers — fifteen on every build.

  • 102 live URLs on the sitemap — verified 2026-10-05 (replacing a Wix site)
  • 21 service pages and 32 Central Alberta city pages, cross-linked rather than multiplied into a city × service grid — the matrix pattern was deliberately not used here
  • Per-town data with its provenance attached — Statistics Canada housing age, dwelling type and income by table and Product ID, Environment Canada 1991–2020 climate normals by station climate ID, each with its retrieval date
  • Honest proxy disclosure in the data layer — most Central Alberta towns have no weather station of their own, so each page names the station its heating-degree-day figure was borrowed from and how far away it is
  • Seven cited Alberta code pages — prescriptive RSI minimums under NBC(AE) 2023 §9.36, the CAN/ULC-S741 air-barrier route, closed-cell vapour-barrier thickness, STANDATA 23-BCV-017 on unvented roofs, winter application limits, and the farm-building exemption
  • A rebate page whose value is the negative answer — every programme carries a status and a date-checked label, and none is described as something the reader qualifies for
  • 27-post field guide with faceted search over topic, service, city and season, built on a MiniSearch index generated at build time
  • Canadian build throughout — en-CA, CAD, America/Edmonton, metric units, Canadian spelling, and postal FSAs rather than ZIP codes
  • Every old Wix URL preserved — the previous site captured in full before cutover, then 42 post slugs and 13 pages 301'd to their new homes
  • Lead attribution as a tested module rather than a tag — the CDS Attribution Standard with unit tests and a build gate that fails the deploy if the contract breaks
  • Turnstile, server-side verification and rate limiting on the quote form; Resend for delivery; GTM and GA4 with Consent Mode v2 defaulting to denied
  • 29 automated checkers in the repo, 15 of them running on every build — page uniqueness, internal links, crawl depth, asset paths, sitemap reachability, and a gate that fails the build if any previous client's identity survives the fork
  • Two checkers that exist because the obvious check passed when it should not have — one normalises the town name away before comparing pages, the other recomputes every ranking claim against the data rather than trusting the copy
  • Live Google rating rendered from one source of truth (5.0 across 26 reviews) and treated as a floor, never rounded up

How the build
earns the call.

The technical library is the strategy. Alberta's most-repeated spray-foam air-barrier figure is actually Ontario's, so a page that cites CAN/ULC-S741 correctly is a page worth linking to — which is how a business wins a segment that does not search. Underneath it, the city pages are differentiated by data rather than by wording: a checker normalises the town name away and then asserts the pages still differ, because an earlier similarity check had passed while most pages were byte-identical once the name was removed. A separate gate recomputes every ranking claim against the data layer. Conversion is phone-first, with a sticky call bar on mobile and a Turnstile-gated quote form.

Gives a referral-driven contractor a document that survives due diligence: an Alberta code library with the clauses attached, per-town figures that can be re-checked against Statistics Canada and Environment Canada, and a rating presented as a floor rather than rounded up. The restraint is the deliverable — fifty-three facts about the business are typed as owner-confirmable, two are confirmed, and the site publishes none of the other fifty-one. Launched October 2026, so there are no performance figures to report yet; measurement is live and the attribution ledger has been recording from the first day.

A contractor's website usually fails in the direction of saying too much — a warranty nobody wrote down, a certification nobody checked, a rating rounded up a tenth. NFW's is built the other way. Fifty-three facts about the business are typed into the codebase as owner-confirmable fields, and until a field is confirmed it renders nothing at all. The site says less than its competitors, and every word of it can be checked.Studio rationale
Stack
Next.js 16, React 19, TypeScript, Tailwind, Vercel, Resend, Cloudflare Turnstile, Zod + React Hook Form, MiniSearch, MDX, GTM + GA4 with Consent Mode v2, Statistics Canada + Environment Canada data layers, hand-built JSON-LD graph, CDS Attribution Standard, 29 repo checkers
Hosting
Vercel
Launched
2026
Status
Active

Metrics, captured
at 30 / 60 / 90 days.

Tracking dashboard captures GSC + GA4 at 30 / 60 / 90 days. Report publishes here on day 90 — view tracking spec

Call (251) 370-0292Start a project