Kerbside Pressure Co.
Generative Assets · Industry demo 265 · How it was made

A driveway that cleans itself in front of you.

Kerbside Pressure Co. is a fictional Wangara pressure-cleaning and sealing business — a single conversion-focused landing page showing what Sapience Analytics would build for a real operator in this trade. The page has one job: turn "how much to clean my driveway?" into a quote request, using the trade's own best asset — the before/after — as a live, priced demonstration.

Palette — argued from the job at noon

Every colour comes from the mid-job scene: the clean half, the dirty half, the water, and the moss that loses.

Rinsed concrete#F0EEE9 — the ground; the clean half, still damp.
Grime umber#57503F — structure & primary ink; a decade of dust, moss and bore stain.
Jet blue#2380C2 — line/mark only; the water doing the work: wand arc, fills, CTA.
Jet ink#1B67A0 — derived; jet blue fails 4.5:1 as text on the ground, so buttons and links carry this deeper cut.
Moss soft#7A8B54 — secondary marks; what grows in the shade and loses.
Moss ink#4E5C33 — derived body-safe moss for active chips, focus rings and notes (the W5 ink/line split).

Type

Familjen Grotesk carries the display voice — a confident, round-cornered grotesque that reads like well-kept equipment rather than a corporate serif. Public Sans does the body and UI work: plain, legible, government-grade honest. Sometype Mono owns every number — m², rates, prices — so the pricing always reads as measurement, not marketing.

The signature — the Clean Reveal

A procedural SVG driveway drawn in perspective from the kerb. Surface chips (plain concrete / brick pavers / limestone / exposed aggregate / house soft-wash), a 20–200 m² area stepper and a seal toggle drive both the rendering and an honest price card in mono.

Implementation: the driveway is a clipped trapezoid; each surface's texture is generated into it with a seeded PRNG (mulberry32) — broom lines and control joints for concrete, running-bond joint lines for pavers, soft block courses for limestone, ~430 perspective-scaled pebbles for aggregate. A grime layer (umber wash, tyre shadows, moss speckles at the shaded edges, iron bore-stain blooms) sits above the clean texture, clipped by a rectangle whose edge is the wash boundary. A rAF loop sweeps the boundary up the driveway over 40 seconds — foam line, chemistry dwell band, oscillating wand, spray fan, droplets and gutter run-off all track it — then holds fully clean for 2 s and fades the grime back in over the top stretch, reading as the crew moving on to the next dirty run. The clean fraction never drops below 40% at any instant (visible clean = 1 − (1−p)·grimeOpacity), so the before/after contrast survives any capture time; the rest state parks the wipe at 60% clean. Reduced motion renders that settled frame with no loop.

Pressure honesty in the rendering: selecting limestone swaps the narrow jet wedge for a wide, translucent soft-wash fan and says why on-card. Selecting house soft-wash moves the wand to the render facade, sweeps a soft fan across a grime veil there, parks the area stepper and seal toggle with on-page reasons, and prices "from $450".

Pricing model — shape and derivations

JobMeterPinned minimum
Plain concrete$4.50/m²$180
Exposed aggregate$4.50/m² (inherits the concrete meter — stated on-card)$180
Brick pavers (clean + re-sand)$8/m²$320
Limestone soft-wash$6/m²$240
Penetrating seal+$7/m²none — it rides on a job that already carries a minimum
House soft-washby storeys & reachfrom $450

Conversion decisions

Local SEO we'd implement for the real business

This demo ships only a WebPage schema naming itself a demonstration — fictional structured data in a real index would be dishonest markup. For a real client we'd ship LocalBusiness + Review schema like this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Kerbside Pressure Co.",
  "description": "Pressure cleaning & sealing for driveways, pavers,
    limestone and house washes across the Perth metro.",
  "telephone": "+61-8-9000-0265",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Wangara",
    "addressRegion": "WA",
    "postalCode": "6065",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.79, "longitude": 115.83 },
  "areaServed": ["Wangara","Wanneroo","Joondalup","Landsdale","Perth"],
  "openingHours": "Mo-Sa 07:00-17:00",
  "priceRange": "$180–$2,000",
  "aggregateRating": {
    "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "187"
  },
  "review": [{
    "@type": "Review",
    "author": { "@type": "Person", "name": "…real customer…" },
    "reviewRating": { "@type": "Rating", "ratingValue": "5" },
    "reviewBody": "…pulled from the live review feed…"
  }]
}
</script>

What would change for the real client

Iteration log

Pass 1 — Craft

Drove the whole page headless (92 asserts): fresh-load empty submit raised all four validation errors; eight oracle scenarios (including all three minimum clamps and both seal cases) matched the displayed card to the dollar; the house-wash disable path, prefill handoff, filled-submit confirmation, FAQ accordion, sticky bar and reduced-motion settled frame all passed. Then the real screenshots caught what the asserts couldn't: a stray empty <span> accidentally nested in an FAQ summary; the mobile hero's call button wrapping mid-phone-number at 375px (fixed with nowrap + row wrapping); and the Scarborough map label floating detached from its dot (re-anchored below-left). Confirmed the 375px masthead first — wordmark and phone number fit on one row with clearance.

Pass 2 — Depth

The spray fan measured only ~20px tall in the capture — barely a mark at the boundary — so the wedge was extended past the wash edge and brightened, with a chemistry-dwell band (dark translucent stroke) ahead of the foam as a second-read detail. Gutter run-off became an animated dashed flow that only runs while the wand runs. Added a 180ms eased count-up on the price total (tabular numerals; the state probe always carries the final figure instantly, and reduced motion skips the tween). Screenshot-reviewed every mode: limestone's wide soft fan + on-card reason, house mode's facade veil sweep with parked controls, pavers' running bond under the $480 + $420 = $900 card, aggregate's pebble field at $270 + $420 = $690.

Pass 3 — Hardening

Re-ran the full 92-assert suite green after all edits, with zero console errors end-to-end. Verified: no horizontal overflow at 375px; h1 + CTA (≥44px) + trust signal above the fold; sticky call bar fixed in the bottom band with ≥44px targets; the signature's bounding box intersecting the first 750px at 1200 wide; clean fraction sampled across the loop never below 0.40 and sitting at ~0.7 at the 7-second thumbnail settle (contrast visible both sides of the wash edge); reduced-motion serving a static 60%-clean frame with the $270 card. Honesty sweeps: every (08) 9xxx number on the 9000 exchange, WebPage-only JSON-LD, colophon present. Chanel rule: deleted the dimension line's arrowheads and stem — the m² pill says it alone.

Techniques