Generative Assets · Industry demo 228 · Real estate

How the Beaufort & Grand demo was made

A window card for an agency that doesn't exist — and a conversion page for every agency that does.

Concept

Beaufort & Grand Property Co. is a fictional two-director real estate agency for Mount Lawley and its five neighbouring suburbs, aimed at owners of character homes weighing a sale and landlords tired of their property manager. The page has one job: book a free appraisal. The art direction is editorial heritage — the confidence of a beautifully typeset agency window card: limestone, iron lacework, one red SOLD dot — premium but local, never franchise-glossy.

Palette

Limestone#EFEBE3 ground — the stone under half of Mount Lawley
Iron-lace charcoal#252A30 structure & primary ink — the verandah ironwork
SOLD red#C03A2E line/mark only — the sold sticker, band markers
Sold ink#9E2F25 derived body-ink wherever red must carry text
Verdigris#47705F federation trim green — marks, focus rings
Verdigris ink#35594B derived link/text green that clears 4.5:1 on limestone

Per the collection's ink/line rule, the two bright accents (SOLD red, verdigris) are reserved for marks — dots, rules, the price band, the lacework frieze — and each has a darker derived ink for any text duty. Body copy runs in charcoal and a softened #575D66.

Type

Libre Caslon Display carries the headlines — window-card serif authority, set at natural weight and generous size rather than bold. Libre Caslon Text (italic) appears only where a serif moment earns it: review quotes, the price lines on service cards, the h1's italic turn. Figtree does everything functional — UI, labels, forms, body — because an appraisal form is a tool, not a poem.

Signature — the Streetscape Appraisal Explorer

Six suburb chips, four property-type chips and a bedroom stepper drive a procedural SVG streetscape: a federation front with tuck-pointing and iron lacework for a character home, a parapet townhouse, a deco apartment block, a wide-fronted villa. Each facade is a <g> in one SVG, toggled by attribute — never the .hidden IDL property, which silently no-ops on SVG elements — with a [hidden]{display:none !important} guard. Facade strokes carry pathLength="1" so a single dash-offset animation redraws any facade in about a second regardless of path length; fills fade in behind the linework. Bedroom count adds real geometry: extra sash windows, an upper floor, a rear wing, a carport.

Beside the scene, a price-band gauge renders an example median band and days-on-market for the selection, computed from a small data table (base band per suburb×type at a reference bedroom count, ±12% per bedroom, rounded to $5k) — every card wears the honesty banner: "example figures for demonstration — a real appraisal uses live comparable sales." The band also derives a guide selling cost at the page's own 2.2% incl GST commission, so the signature and the services grid can never argue with each other. "Use this scenario" pre-fills the appraisal form, scrolls to it, and — the second-read detail — flips the streetscape's agency board from FOR SALE to a red SOLD dot. Live state is exposed on window.__realestate for QA.

Techniques

Conversion decisions

Local SEO we'd implement for the real business

This demo page ships only WebPage schema naming it a demonstration — fictional business data has no place in a real search index. For a real agency we would ship LocalBusiness (RealEstateAgent) markup like this, fed by their true NAP, licence number and live review stream:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "RealEstateAgent",
  "name": "Beaufort & Grand Property Co.",
  "telephone": "+61 8 XXXX XXXX",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "XXX Beaufort Street",
    "addressLocality": "Mount Lawley",
    "addressRegion": "WA",
    "postalCode": "6050",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.93, "longitude": 115.87 },
  "areaServed": ["Mount Lawley","Inglewood","Maylands",
                 "Bayswater","Bedford","North Perth"],
  "openingHours": ["Mo-Fr 08:00-18:00","Sa 08:00-16:00"],
  "priceRange": "Commission from 2.2% incl GST",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "132"
  }
}
</script>

Plus per-review Review markup streamed from their verified Google Reviews profile, suburb landing pages keyed to the six service areas, and Google Business Profile alignment on NAP and hours.

What would change for the real client

Iteration log

Pass 1 — Craft

Drove the whole page headless (29 asserts) and reviewed 1440px and 375px screenshots by eye. The screenshots caught what the asserts couldn't: anchor sections tucked under the sticky header on in-page navigation (fixed with scroll-margin-top on every [id]); a stray asterisk in the map's "Maylands" label; the eyebrow's red dash floating mid-list when the suburb line wrapped (pinned to the first line); and the confirmation opening "Thanks—" twice in a row (body recast around the callback number). Verified the rest state renders Mount Lawley character 3-bed at $1.18M–$1.42M with the probe matching the DOM figure exactly.

Pass 2 — Depth

Added the second-read detail: the streetscape's agency board flips FOR SALE → SOLD with a red dot the moment a scenario is carried into the form (asserted via window.__realestate.boardSold and computed display), and the caption's sold dot pulses once whenever the band updates. Drove known scenarios and hand-checked the arithmetic: Bayswater townhouse at 4 beds must be $760k–$885k (680/790 × 1.12, rounded to $5k) — measured exactly that; apartment selection clamps 4 beds back to 3. Reviewed the villa and apartment facades on screenshot — then did map label surgery: "OUR OFFICE" centred beneath its dot, "BEAUFORT ST" moved off the dashed route line.

Pass 3 — Hardening

Chanel rule: removed the sale board's decorative rule — it read as noise at card size. Honest-numbers sweep caught the FAQ quoting an "18–38 day" range while the data table actually spans 18–28 days; fixed the copy to match the measured data. Re-ran the full suite: 375px shows zero horizontal overflow and no element boxes outside the viewport, the sticky bar's tap targets measure 48px, empty submit raises all four validation errors, filled submit renders the confirmation in the collection's lexicon, reduced-motion renders every facade at dash-offset 0 with hero opacity 1, and both viewports log zero console errors. Positive phone sweep: every (08) 9xxx number on both pages uses the reserved 9000 exchange.