Build guide · Generative Assets · Industry Demos XXV
Northline Strata Management — how this demo was built
A strata-management landing page for Perth's northern suburbs, with one job: a proposal request that already carries the scheme's type, size and service level, priced.
Concept
Northline is a fictional Joondalup strata manager pitched at three people: the council chair fed up with a manager who doesn't answer, the developer handing over a new scheme, and the owner who ended up doing it all. It's a B2B page — calmer than the trade demos, still one CTA. The direction is a well-run lobby at 8am: pale-concrete ground, midnight-navy ink, verdigris-teal action, brushed-steel linework. The signature is the Scheme Ledger: an isometric block-plan of the scheme beside a levy notice that prices itself as you describe the scheme.
Palette — measured, not assumed
#F3F5F8 · page ground#1B2433 · body ink, 14.3:1 on the ground#1F7A6E · CTAs (white on teal 5.2:1), links (4.7:1)#9AA6B8 · lot outlines, hatching, rules — lines only (2.3:1)#176154 · button hover, lit lot shadow face (white 7.3:1)#145448 · eyebrows, links, prices — 8.0:1 on the ground#5A6779 · captions, small copy — 5.3:1 on the ground, 5.8:1 on white#8FCBBF · lit roof/ledge tint on the plan (marks only)The spec's contrast figures were hypotheses; these are WCAG-arithmetic measurements from the shipped tokens. Base teal cleared 4.5:1 for both button labels and links, so the pre-minted pair (#176154 / #145448) is used for hover and for accent-coloured type rather than as a remedy. Steel is never a text colour — small steel-coloured copy uses steel-ink. Body text on the navy proposal band is #C9D2DE (10.2:1); the stamp and lot fills carry the argued teal as marks.
Type
Sora 700 for display — a plan-drawing geometric with a manager's clarity; it sets the wordmark, headings, the huge lot count and the badge figure. Inter for everything a council member has to read: body at 16.5px, the ledger at 13px with tabular numerals so the levy notice's right column lines up like a real one. The display moment is the lot count set huge and in words — "SIXTEEN LOTS, ONE PHONE NUMBER" — with the number word swapping live from the stepper (four → forty-eight, all in words).
The Scheme Ledger
Techniques
- Isometric plan, procedural SVG. A tiny projection helper (
x−yacross,(x+y)/2 − zdown) draws boxes as three polygons — top, right face, left face — from world coordinates. Villas are boxes with a drawn hip roof, in paired rows facing a shared drive (blocks of up to sixteen; bigger schemes stack a second and third drive behind). Apartments are one building shell with the lots as window/balcony panels on the front face and drawn floor lines; low-rise gets a stairwell, mid-rise a lift overrun on the roof and a hatched pool deck with a teal water plane. Common property (drive, bin store, letterbox bank, pool deck) uses a steel diagonal hatch pattern whose period is rescaled per redraw so it reads the same at any zoom. The scene is fitted to the viewBox from its geometry bounding box; labels are added afterwards in world units so they stay ~10.5px regardless of scale. - Lots light one by one. Each lot is a
<g class="lot">; a token-guarded timer stack adds.litwith a CSS fill transition. Dual speed: 42 ms per lot (1.5 s cap) on the first draw, 12 ms (≈480 ms cap) after any control. Every handler bumps the token before the state swap, so a rapid-fire click run never lets a stale timer light the wrong plan. Fills live in CSS classes only — no presentation attributes on the same elements. - The levy notice is HTML beside the plan (a real notice is a document, so it's set as one): dashed rules, tabular ledger, the includes line, and the price badge on the header carrying two lines — the annual figure and, only when a one-off is on, "+ $X one-off". Under 480px the badge drops to a tight variant so it never covers the plan.
- The "MANAGED" stamp presses onto the notice on a 3.4 s loop driven by rAF with the delta clamped at zero and capped at 50 ms: a 0.38 s eased press from scale 1.32/opacity 0.55 to 1/1, a 2 s hold, a 0.5 s lift back to 1.12/0.55, a short pause. Opacity never drops below 0.55 so the thumbnail always shows a stamp; reduced motion renders it pressed and still, and the loop pauses on
document.hidden. - Signature → form handoff. Scheme type, lots, add-ons and the estimate pre-fill the proposal message until the visitor edits it.
Pricing model (per lot, per year, GST inclusive)
| Line | Rate | Rule |
|---|---|---|
| Villas & townhouses (survey-strata) | $260 / lot / yr | Management fee = billed lots × rate. Billed lots = max(actual, 6): a 4-lot scheme prints "billed at the 6-lot minimum"; at 6 lots no note. The minimum applies to the management line only. |
| Low-rise apartments (walk-up) | $320 / lot / yr | |
| Mid-rise apartments (lift & pool) | $380 / lot / yr | |
| After-hours emergency line | +$8 / lot / yr | × actual lots, never the billed minimum (4 lots = $32). |
| 10-year maintenance plan | +$1,100 one-off | Locked ON at ≥10 lots (WA Strata Titles Act). Live below 10, default off. Stepping back under 10 restores the owner's prior choice. |
| Building insurance valuation | +$550 one-off | Live at every combination. |
| Extra meetings, by-law reviews, disputes | — | Priced by the hourly schedule in the agreement — no figure printed (a designed price-less line, shown wherever the total is). |
Worked examples — measured from the running page against an independent oracle
| Scenario | Annual | One-off | Notes |
|---|---|---|---|
| Rest: low-rise, 16 lots, plan (locked), emergency on | $5,248 | $1,100 | 16×320 + 16×8; badge shows both lines |
| Mid-rise, 24 lots, emergency + valuation | $9,312 | $1,650 | 9,120 + 192; 1,100 + 550 |
| Villas, 8 lots, nothing on | $2,080 | — | badge line 2 absent; plan live → step to 10 locks ON ($2,600 + $1,100) → back to 8 restores OFF |
| Villas, 4 lots | $1,560 | — | billed at 6 + note; 6 lots = $1,560, no note; + emergency at 4 lots = $1,592 |
| Grid floor | $1,560 | — | "villa schemes from $1,560 a year ($260 a lot, 6-lot minimum)" |
The verification harness sets the full control vector for every scenario, then sweeps every scheme × {4, 6, 8, 10, 12, 24, 48} lots × every toggle state (168 cells) against the oracle, plus stepper bounds, keyboard radio navigation, a rapid-fire 24-click drive with no settle, the stamp's opacity floor, and the settled lit-lot count. 250+ asserts, zero spec corrections — every worked figure landed exactly.
Conversion decisions
- Above the fold at 375: name, "Strata management for Perth's northern suburbs — the scheme runs, you don't have to", the proposal button, the call button, and three trust chips (SCA member, audited trust account, since 2015). The masthead carries the phone; the mobile sticky bar carries call + proposal.
- The estimator sits directly under the hero so the plan and the price badge share the 1200×750 thumbnail with the headline — the commercial argument in one capture.
- Form fields: name, phone, scheme suburb, role (owner / council chair or member / developer — the three people the page is for), and a scheme-details textarea pre-filled from the ledger. Front-end validation with per-field messages and
aria-invalid; the designed confirmation panel is hidden on load and on an empty submit and appears only after a valid submit — no fake network round-trip. A "What happens next" card beside the form answers the B2B objection: how long, what we read, when the council votes. - Honest lines: the 6-lot minimum, the Act's ten-lot plan rule, and the hourly schedule are stated on the ledger and repeated in the grid and FAQ. The plan toggle explains why it's locked rather than silently disabling.
- Reviews are demo copy attributed to roles and suburbs, never named people; the FAQ answers the five questions councils actually ask (what a manager does, changing managers, who holds the money, the 10-year plan, how levies are set).
Local SEO we'd implement for the real business
The demo page ships only WebPage/WebSite/BreadcrumbList schema naming it a demonstration — fictional business data must not enter a real index. For a real strata firm we'd ship ProfessionalService (the exact schema.org organisation subtype for a management firm — not bare LocalBusiness, and not a specialty enumeration) with genuine NAP, hours, area served, the offer catalogue and real, consented reviews:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Northline Strata Management",
"url": "https://www.example-strata.com.au/",
"telephone": "+61 8 9000 0338",
"email": "hello@example-strata.com.au",
"address": {
"@type": "PostalAddress",
"streetAddress": "[real street address]",
"addressLocality": "Joondalup",
"addressRegion": "WA",
"postalCode": "6027",
"addressCountry": "AU"
},
"geo": { "@type": "GeoCoordinates", "latitude": -31.745, "longitude": 115.766 },
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:30", "closes": "17:00"
}],
"areaServed": ["Joondalup","Currambine","Clarkson","Butler","Alkimos","Kingsley","Hillarys","Wanneroo","Perth"],
"priceRange": "$$",
"memberOf": { "@type": "Organization", "name": "Strata Community Association (WA)" },
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Strata management services",
"itemListElement": [
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Villa & townhouse scheme management" }, "priceSpecification": { "@type": "UnitPriceSpecification", "price": "260", "priceCurrency": "AUD", "unitText": "per lot per year" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Low-rise apartment scheme management" }, "priceSpecification": { "@type": "UnitPriceSpecification", "price": "320", "priceCurrency": "AUD", "unitText": "per lot per year" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "10-year maintenance plan" }, "price": "1100", "priceCurrency": "AUD" }
]
},
"aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "[real count]" },
"review": [{
"@type": "Review",
"author": { "@type": "Person", "name": "[real, consented reviewer]" },
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"reviewBody": "[real review text]"
}]
}
</script>
Alongside: a Google Business Profile at the real office, suburb-level service pages for the corridor (Joondalup, Clarkson, Alkimos), the "changing strata managers in WA" explainer as a ranking page, and FAQPage markup on the real FAQ.
What changes for the real client
- Their fee schedule replaces the demo anchors — the ledger model is a five-line function; the honesty rules (minimums stated in lots, the Act's ten-lot plan, no number on hourly work) stay.
- Owner portal & trust accounting: the proposal form posts to their CRM and the portal's lead endpoint — StrataMax, PropertyIQ or Urbanise depending on the platform they run — with Xero for the management company's own books. The estimate travels with the lead.
- Reviews feed from Google with consent; the trust strip carries the real SCA membership number, PI certificate and audit statement.
- Their photos of managed schemes can sit behind the plan; the procedural plan stays as the interactive piece.
- Handover pack download (a PDF of "how to change managers") gated behind the same form — a warm B2B lead magnet.
Iteration log
Pass 1 — Craft
- The first render fitted the plan to its bounding box including the world-unit text labels (default 16-unit glyphs), which shrank the scheme to a thumbnail with all labels piled at the centre. Fit now uses geometry only; labels are appended after the transform at 10.5 px-equivalent world size.
- The levy notice's header rules (
.n-head b/span {display:block}) leaked into the price badge's<b>/<span>and stacked "$5,248 / a year / + / $1,100 / one-off" on five lines. Scoped the title styles to.n-title; badge reads two lines as specified. - Badge moved from absolute-over-the-header (it covered the notice title in the narrow desktop column) into the header row as a flex item, with a 1.5° tilt so it reads as a sticker on the notice, and the notice title shortened to "Levy notice · Proposal · Northline Strata, Joondalup".
- Hero tightened (h1 max 2.3rem, wider sub measure) so the plan and badge sit inside the first 750px at 1200 — measured: SVG top and badge top both under 750.
- Contrast measured for every token pair (table above); base teal cleared 4.5:1 for buttons and links, so the pre-minted pair is used for hover/accent type only.
Pass 2 — Depth
- Villas at 40–48 lots drew as two 24-unit rows — a thin sliver with the entry labels colliding. Rewrote the villa layout as blocks of up to sixteen (two rows of eight facing a shared drive), extra blocks stacking behind with a tree between; the "shared drive" label moved to the drive mouth, letterboxes and bin store to the entry end.
- Added the second-read detail: at eight lots the stepper note says "Two more lots and the 10-year plan becomes a legal requirement" — and at ten the toggle locks with the Act quoted; stepping back restores whatever the owner had chosen (both restore directions asserted).
- Scheme chips gained arrow-key radio navigation; the toggle switch tracks got a proper 44×26 thumb; the lot count in words swaps as a live region.
- Stamp copy tightened to fit inside the inner ring ("MANAGED / NORTHLINE · WA"), and the low-rise letterbox label moved off the letterbox box.
Pass 3 — Hardening
- 375 masthead checked first: wordmark right edge vs the call link's left edge, no collision; the "Strata Management" descriptor hides under 640px. Above the fold at 375: eyebrow, h1, sub, both CTAs and the trust chips.
- Label-collision sweep at native resolution: the stamp sat over the notice's "Total" and includes lines in the stacked mobile layout — the includes paragraph now reserves a 92 px right gutter and the stamp lives in that corner at every width. The badge is asserted not to overlap the plan SVG at 375 (tight variant under 480px).
- 375 controls: the add-on rows squeezed their labels into a four-word column beside a nowrap price; under 560px the price now drops beneath the label (switch · label · price on two rows), and the low-rise "letterboxes" label that clipped at the plan's left edge was re-anchored to the right of its box.
- Reduced motion: lots render lit immediately, the stamp is pressed and still, entrance transitions off; asserted under an emulated media feature. Stamp loop clamps
dtat zero and 50 ms and pauses when hidden. - Rapid-fire drive (24 dispatched clicks in one evaluate, three rounds) settles to a plan whose lit count equals the state's lot count and whose figure matches the oracle — the handler-side token bump holds.
- No
backdrop-filteranywhere; header, sticky bar and cards are solid. Guide tables sit in.table-scroll; both pages measured at 375 with no horizontal overflow; one h1 each; zero console errors on both. - Chanel rule: removed a hint "ridge" polygon on the villa roofs that was drawing a stray zero-area shape, and cut the notice's phone/address block from the header (it's in the footer NAP) so the header holds only title + badge.