Quietline Acoustics · how it was made The siteIndex

Industry demonstration · 399 of the Generative Assets collection

A calculator that refuses to sell you a wall.

Quietline Acoustics is a fictional Osborne Park noise-control contractor built for one job: turning “can you soundproof this wall” into a booking, with the construction, the honest verdict and the price already on screen. The signature is the Wall — a plan-view cross-section drawn to true scale with every layer dimensioned in millimetres, and a decibel strip above it that takes the wall’s rating off the noise next door and shows you what actually arrives. When the page’s own screening says the wall doesn’t get there, the measurement is forced on and locked, and the page says why.

The single argument

Every acoustic sales page in the world quotes an Rw and stops. Rw is a laboratory single-number rating of one wall system in one test chamber with no flanking — it is not your result. So this page does three things a normal quote page won’t:

And the words “compliant”, “certified” and “guaranteed” never describe a computed verdict anywhere on the page. The Rw and Ctr figures are called what they are: indicative of the tested system, not a promise about your wall.

The model

Three integers and one comparison. No rounding anywhere, because there is nothing to round.

rating   = Rw + (source is bass ? Ctr : 0)
arriving = sourceLevel − rating
gap      = arriving − assignedLevel        (positive = over, negative = under)

Bass sources — a home gym, a band, a rooftop condenser — take the Ctr low-frequency spectrum adaptation term. Television and conversation don’t. That one branch is why a wall that fixes a neighbour’s talking does nothing at all for their drum kit, and the page says so in the FAQ.

BuildRwCtrRateDrawn stack (source → receiver)Overall
The wall you already have35−6$0/m²10 / 90 stud / 10110 mm
Insulate + a second 13 mm layer45−7$168/m²13 / 10 / 90 stud + batt / 10 / 13136 mm
Resilient channel + 2×13 + batt (rest)52−7$246/m²13 / 13 / 16 channel / 90 stud + batt / 13145 mm
Discontinuous double stud62−9$385/m²13 / 13 / 70 + batt / 25 cavity / 70 + batt / 13 / 13217 mm
190 core-filled block + furred board58−4$470/m²190 block / 22 furring / 13225 mm

The 16 mm resilient channel and the 22 mm furring channel are standard trade depths the concept did not pin; they are declared here because the drawing dimensions them on screen and an undeclared dimension would be a made-up number.

baseline build → construction $0, no attendance, no minimum
otherwise  construction = area × rate
                        + (sealing ? area × $46 : 0)
                        + (door    ? $1,450     : 0)
                        + $780 attendance, setout & make-good
           construction = max(construction, $2,400 minimum job)
total = construction + (report ? $1,250 : 0)

Sealing, the door and attendance sit inside the $2,400 minimum. The report sits outside it — it is a deliverable, not a day on site, and it is the only line you can buy on its own. Money is held in integer cents and divided by 100 once, at display; the estimator returns whole dollars in every one of the 4,800 grid cells.

Three forces, and the one that matters

ControlForced whenReason shown on the control
Perimeter isolation & sealantresilient, discontinuous or masonry buildan isolated wall that touches the structure at the edges isn’t an isolated wall
Solid-core acoustic doorany build with Rw ≥ 50a 52 wall with a hollow-core door is a 32 wall — the door becomes the path
Measurement & reportgap > 0 — imposable by BUILD, SOURCE or RECEIVERour own screening says this doesn’t get there. We’re not selling you a wall on that — we measure first

Each toggle remembers its pre-force value. The memory is cleared by any explicit change the user makes while the control is free; otherwise it survives until the lock lifts. On a partial unwind — the constraint relaxes but the remembered value is still invalid — the forced value is held, and only restored when the memory becomes valid again. The full pinned chain, driven step by step in the harness:

#BuildSourceReceiverGapReport
1resilienttelevisionbedroom−12free, OFF
2resilientgymbedroom+15FORCED ON
3insulatedgymbedroom+22FORCED ON
4insulatedtelevisionbedroom−5free again — RESTORE OFF
5insulatedgymoffice+12FORCED ON
6resilientgymoffice+5HOLD — still forced
7resilientplantoffice−22free — RESTORE OFF

Verified end to end: unwind[0…6] gap, force and effective value all asserted after driving the real chips.

The pinned refusal is the sharpest state on the page. Drive a band rehearsal into a bedroom at 35 dB(A) and every build is over — existing +36, insulated +27, resilient +20, discontinuous +12, masonry +11. So the page stops quoting and says: “no wall on this page gets a rehearsal room to 35 dB(A) in a bedroom. That job is a room within a room and a floor, and it starts with a measurement, not a quote.” The estimator still prices the construction — we’ll build it as part of a bigger scope — but the refusal is what leads.

Three places my oracle disagreed with the spec

Before trusting a single number in the brief I reimplemented the whole model from the pinned anchors in a separate script (oracle-acoustics.mjs) — 4,800 grid cells, every worked figure, every force, every reachability claim the prose makes. Seventy-eight of eighty checks reproduced the document exactly. Three things did not, and none of them were silently changed on either side: I shipped the reading that reproduces the pinned endpoints and recorded the disagreement here.

Disagreement 1 · the $0 worked figure is unreachable in its own control vector

The spec pins: “Baseline build · 18 m² · television · bedroom → $0 and the pinned bare string; with the report → exactly $1,250.” But that vector computes rating 35 → arriving 40 → gap 40 − 35 = +5, and a positive gap forces the report on and locks it. So $0 is not reachable at that vector; $1,250 is, and it is the only total that vector can produce. The two halves of the sentence contradict each other through the spec’s own force rule.

Shipped: the force wins, because the force is the site’s whole argument and the spec states it as a hard rule. Baseline · 18 m² · television · bedroom prices $1,250 with the report locked on. The $0 state is fully reachable and is asserted — it needs a receiving room the existing wall actually meets: existing · television · living room (gap exactly 0), existing · television · office (−5), existing · plant · living (−1) and existing · plant · office (−6). All four print the pinned bare string nothing quoted — this is the wall you already have. The television · living cell is a genuine exact-boundary state: arriving 40 against an assigned 40, a gap of zero, which is not positive and therefore does not force the report — the badge reads “on the level”. Both the $0 endpoint and the $1,250 endpoint the spec pins are therefore reproduced; only the coordinates the prose named for the $0 one were wrong.

Disagreement 2 · the widest wall is not 310 mm, and it isn’t the discontinuous build

The fixed-frame argument says “the thinnest drawn layer is the 10 mm board on the baseline build at 3.2 % of the widest drawn wall (310 mm discontinuous)”. Summing the spec’s own pinned layer list gives 13 + 13 + 70 + 25 + 70 + 13 + 13 = 217 mm, not 310. And with the two channel depths declared above, the masonry build is the widest at 190 + 22 + 13 = 225 mm. No reasonable channel or furring depth closes a 93 mm gap.

Shipped: the layer list, because the layers are the drawing — every band is dimensioned on screen and a made-up total would be visible. The widest wall is the masonry build at 225 mm and the thinnest layer is 10 / 225 = 4.4 % of it. That is more legible than the spec claimed, so the small-state proof holds with room to spare; the 10 mm band still docks its dimension beneath rather than inside it, at every width. Related: the concept says “a maximum of nine layers”; the pinned stacks draw at most seven bands (the discontinuous build), which is what the frame is sized for.

Disagreement 3 · the refusal is true, but it is not the only universally-failing cell

The pinned refusal — “no wall on this page gets a rehearsal room to 35 dB(A) in a bedroom” — is exactly right, and the enumeration confirms it (best case masonry, +11). But enumerating all twelve source × receiver pairs shows four more where no build on the page complies either: gym → bedroom, gym → living, band → living and band → office. The spec pins the refusal note to the band-into-bedroom states only.

Shipped: the pinned semantic exactly — the refusal note fires only on band-into-bedroom. The other four cells are not silently glossed: each still prints its honest positive gap, forces the measurement on and locks it with the same refusal reason, so the page never quotes a wall as an answer in any of them. Reporting it here rather than widening the note keeps the pinned string pinned; a future spec should either widen the trigger to “no build complies” or say explicitly that the extra note is reserved for the worst case.

Two cells the spec left open, resolved and declared

Sealing and the door on the baseline build. The baseline prices at $0 by construction, so those two toggles would silently no-op there. Per the disable-with-reason rule they are disabled on that build with “nothing is being built — sealing and a door belong to a wall we’re putting up”, and their prior values are restored on leaving it. The report stays live on the baseline, which is how you reach the exact $1,250 grid floor.

Badge line-2 build names. The spec pins only resilient channel / resilient and as built. The other three were derived to the same shape: insulated + 13 / insulated, discontinuous double stud / double stud, core-filled block / block. And there is no wording pinned for a gap of exactly zero, which is reachable; the page says on the level on the badge and “exactly on the assigned level” in the readout caption.

One deliberate deviation from the badge-text regime

This site is in the CONSTANT-frame regime, where the ≥641 px badge may carry line 1 + line 2 only. The badge here carries a third line: the screening declaration, in its pinned short form at ≤640 px and full form above. The honesty clause outranks the badge-text budget — the brief requires the declared simplification wherever the verdict appears, and the badge is where the verdict is most likely to be screenshotted. The Ctr note and the refusal note obey the regime and live on the note strip, the ledger and the plain-text mirror, never on the badge.

Palette

Argued from the materials in the wall: the pink of an insulation batt, the plaster grey of board and skim, and the violet-slate of a sound field that has no colour of its own. Every ratio below was measured from the shipped tokens in the running page — getComputedStyle on the real elements, then WCAG arithmetic — not transcribed from the brief.

#ECEAECPlaster paper. The page ground. No warm cream anywhere.
#1B181DGraphite ink. 14.68:1 on the paper, 17.57:1 on white cards.
#565060Muted ink for secondary copy. 6.47:1 on the paper.
#8E3B57Batt rose. Lines, callouts, prices, the assigned-level rule. 7.21:1 as text on a card; white on it 7.21:1.
#4F4680Slate violet. The dB bars, the sound path, the compliance margin. 8.33:1 as text on a card.
#E2DEDCPlasterboard fill. Ink labels 13.15:1.
#C9AB7ETimber stud. Ink labels 8.04:1.
#CE93A5Insulation batt. Ink labels 6.98:1.
#9AA1A6Channel steel. Ink labels 6.71:1.
#ADA9A3Core-filled block. Ink labels 7.52:1.
#F4F2F4Room air and the 25 mm cavity. Ink 15.78:1, violet 7.48:1.

Worst pair actually used anywhere on the page: 6.13:1 (Sapience band copy #DEDBEC on violet). Twenty-three measured pairs, zero below 4.5:1.

The one pair that fails, and why it is never drawn

Rose #8E3B57 on the batt fill #CE93A5 measures 2.86:1. The batt FILL is deliberately lighter than the rose ACCENT — one is a ground, the other is a line-and-text token — and they must never be swapped. So every label that sits on a scene fill is drawn in the body ink, and the rose is reserved for marks and for text on the paper or a white card. The measurement script keeps that pair in the table as a standing tripwire: if it ever stops being unused, the guide’s own numbers say so.

Held off the three AI-default palettes deliberately: no cream and no lone terracotta (a plaster-mauve ground with a rose paired to a slate violet), no near-black field with an acid accent (a light page with two argued mid-tones), and no broadsheet hairline columns (the structure is the layer stack, and there is not a single column rule on the page).

Type

The typographic moment is the rest-state margin: 12 dB at display scale with UNDER THE ASSIGNED LEVEL beneath it in tracked mono, sitting in the hero beside the Rw, the arriving level and the price. It turns violet when you’re under and rose when you’re over, and the caption changes with it — including “EXACTLY ON THE ASSIGNED LEVEL” for the one reachable zero-gap state. Ctr is printed with a real typographic minus (U+2212), not a hyphen; the first build of this page shipped hyphens and the harness caught it against the pinned string.

How the Wall is built

No library. One inline SVG, hand-assembled as a string and written in a single synchronous innerHTML pass, plus vanilla JS and CSS. Nothing is fetched but the three Google fonts.

True scale in a deliberately fixed frame

The wall band is fixed at 240 mm of true scale and the selected build is drawn centred inside it. That is the whole point of the drawing: a zoom-to-fit frame would make a 110 mm wall and a 225 mm wall look identical, which is the one thing this section must never do. Instead the five builds are directly comparable as you click across them — the baseline occupies 46 % of the band and the block wall 94 %. The decibel axis above is fixed at 0–100 dB(A) for the same reason, and the enumeration confirms every reachable state lands inside it: arriving levels span 13–71 dB(A) and the assigned levels are 35/40/45.

Units per pixel, not units per anything else

The viewBox width is chosen from the container’s measured width — VW = clamp(430, cw × 1.4, 1200) — and everything typographic is then authored in rendered pixels and multiplied by upx = VW / cw. That means an 11px label renders at 11px at 375 and at 1200, instead of shrinking to an unreadable 4px inside a fixed 1200-unit viewBox. Horizontal geometry is a fraction of VW so the drawing grows with the page; vertical geometry is in rendered pixels so the section band stays the constant height the concept argues for.

Dimensions that dock beneath

The thinnest drawn layer is 10 mm — far narrower than the two digits that dimension it — so every thickness label is placed beneath the band on a greedy multi-tier ladder with a leader tick: each label takes the highest tier where it doesn’t collide with the last label placed on that tier, up to four tiers. At 375 the discontinuous build’s three 13 mm boards spread across three tiers; at 1200 they fit on two. The harness sweeps every <text> bounding box in the SVG against every other one at 375/1000/1200 for all five builds and fails on any overlap greater than half a pixel.

Labels that know how much room they have

The strip’s row labels drop to their short form (SOURCE, ARRIVING) only when the long form would collide with the value at the right; the room names print inside the rooms only when the rooms are wide enough, and otherwise the orientation moves to a drawing note beneath the section where it always fits; and the flanking caption steps down a three-rung ladder of shorter strings rather than run under the wall it is describing. All three are measured, not breakpointed.

The badge earns its clearance

The price badge sits on the artwork at ≥641px and docks beneath it at ≤640px. The scene reserves a top band whose height is the badge’s measured getBoundingClientRect().height plus margin — never a guessed aspect ratio — and the materials key hangs off the bottom of that band, so the clearance the badge needs buys the drawing a legend instead of white space. The binding contract is asserted directly: the badge’s rectangle must not intersect the rectangle of any drawn group, tested at 375, 1000, 1200 and at DPR 2.

Motion

One rAF loop owns everything. It advances the sound-path phase (a sine whose receiving-side amplitude is the arriving level over the source level, so the wave visibly shrinks by the rating) and it drives the entrance by setting opacity attributes on the scene groups — the drawing is never assembled by deferred DOM insertion or class toggles, which is what has historically left SVG groups unpainted in headless Chrome. The delta is clamped at zero as well as capped. Entrance choreography runs on a cold-load firstDraw flag with a settle-timer backstop; subsequent state changes redraw snappy (11 ms stagger, 520 ms cap) and a resize never re-enters it — taking a clipped screenshot changes device metrics and fires resize, and that is how a previous wave photographed an empty scene while every state assert stayed green. The standing assert drives the controls, waits with nothing poking the page, and then requires every animated group opaque.

The second read

Hover any layer band and it outlines in rose and names itself above the wall. It’s the detail nobody notices on the first visit and everybody uses on the second — and it let the drawing carry six material names without printing six labels on top of the section.

The three iteration passes

Pass 1 — Craft

Pass 2 — Depth

Pass 3 — Hardening

The harness ends at 255 assertions, 0 failures: the rest state, seven pinned worked figures, the five-build refusal sweep, the seven-step partial-unwind chain, all three forces driven from each of their imposing controls, a 180-cell driven grid sweep against an independently reimplemented oracle, the rapid-fire drive, the settle-visible assert, liveness, empty and filled submits, the 375 masthead and sticky bar, three-width screenshots, DPR 2, reduced motion, and the label-collision sweep.

Conversion decisions

Local SEO we’d implement for the real business

This demonstration ships only WebPage, CreativeWork, WebSite and BreadcrumbList in its live JSON-LD — putting a fictional LocalBusiness with fictional reviews into a real search index would be dishonest markup, and the demo reviews are never marked up as structured review data. For a real client we’d ship this instead, with their own verified details:

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "@id": "https://quietlineacoustics.com.au/#business",
  "name": "Quietline Acoustics",
  "description": "Acoustic treatment and noise assessment across Perth's inner and western suburbs.",
  "url": "https://quietlineacoustics.com.au/",
  "telephone": "+61 8 XXXX XXXX",
  "priceRange": "$$",
  "image": "https://quietlineacoustics.com.au/img/party-wall-section.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Unit N, Example Street",
    "addressLocality": "Osborne Park",
    "addressRegion": "WA",
    "postalCode": "6017",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.90, "longitude": 115.82 },
  "areaServed": [
    { "@type": "City", "name": "Perth" },
    { "@type": "AdministrativeArea", "name": "City of Stirling" },
    { "@type": "AdministrativeArea", "name": "City of Subiaco" }
  ],
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:00", "closes": "16:30"
  }],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Noise control services",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Field measurement and report to ISO 16283" },
        "priceSpecification": { "@type": "PriceSpecification", "price": "1250", "priceCurrency": "AUD",
                                "valueAddedTaxIncluded": true } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Resilient channel party wall system" },
        "priceSpecification": { "@type": "UnitPriceSpecification", "price": "246", "priceCurrency": "AUD",
                                "unitCode": "MTK", "unitText": "per square metre" } }
    ]
  },
  "aggregateRating": {
    "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "38"
  },
  "review": [{
    "@type": "Review",
    "author": { "@type": "Person", "name": "A real, verified customer" },
    "datePublished": "2026-05-14",
    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
    "reviewBody": "Measured our party wall and the report is what got the builder back."
  }]
}

Every value above would come from the client’s own records: the rating and review count from their Google Business Profile, the reviews pulled from a verified feed rather than typed in, and the offer prices from the same rate table that drives the estimator — one source of truth for the page, the schema and the quote.

What would change for the real client