Generative Assets · Wave 13 — Industry Demos II · Site 224

How Cadence Physiotherapy was made

A conversion-focused landing page for a fictional Applecross physio clinic — clinical warmth in porcelain and teal, with a tappable where-does-it-hurt body map doing the selling.

Concept

Cadence Physiotherapy is a fictional musculoskeletal & sports physio clinic in Applecross, WA. The audience is a person in pain — a runner with a stubborn achilles, a desk worker with a locked neck, a post-op knee — who wants a plan, not a lecture. The page has one job: book an initial consult. Everything on it (the body map, the honest fee anchors, the “typical course” counts) exists to lower the anxiety between “it hurts” and “I booked”.

Palette — argued from the treatment room

Warm porcelain#F8F4F0

The ground. Clinical calm with skin-warmth — a treatment room, not a hospital corridor.

Deep teal#173F43

Structure and primary ink. Scrubs-adjacent authority; ~10.9:1 on porcelain, so all body copy sits in it.

Tendon apricot#E08A3C

LINE/MARK only — anatomy strokes, hotspot dots, the card's spine. Never small text on porcelain; where an apricot-family label is needed, the derived ink #9A520F carries it.

Rehab sky#7FB6BD

Secondary — focus rings, river water, the hero pulse trace. Its text-safe derivative #2E6E76 handles links.

The ink/line split (LEARNINGS W2/W5) is applied twice: apricot → #9A520F for eyebrows, sky → #2E6E76 for links. Both derivatives clear 4.5:1 on porcelain; the bright originals only ever draw lines.

Type

Gabarito (display, 700–800) — rounded terminals with real confidence; it reads approachable without drifting into toy-like, which is exactly a good physio's bedside manner. Hanken Grotesk (body, 400–700) — a quiet workhorse with slightly humanist proportions that keeps long condition descriptions comfortable at 17px. Scale is deliberate: 54/38/28/19/17/14.5 with tight display leading (1.12) and relaxed body (1.6).

Techniques — the body map

Every visual is procedural. The figure is a single hand-drawn SVG half-silhouette (four stroked cubic-bézier paths: head, arm, torso-to-foot outline, inner leg) mirrored with <use transform="translate(300,0) scale(-1,1)"> — symmetry for free, half the coordinates to maintain. Front/back is a detail-layer swap (clavicle hints vs spine + scapulae), not a second figure.

The six tappable regions are real HTML <button>s absolutely positioned over the SVG in percentage space — they scale with the figure and stay honest 44×44px targets at 375px, with visible focus states and aria-pressed. Selecting a region toggles its anatomy group: each group's strokes carry pathLength="100" so one dasharray rule draws every path — vertebral stacks, the humeral head, the patella — with a staggered dashoffset transition. Reduced motion removes the dasharray entirely: anatomy renders complete and settled, no draw-on. The condition card swaps from a data object (three plain-language possibilities, first-session description, typical course, prices) and “Book this” pre-fills the enquiry form's region select — the W12 calculator→form handoff, applied to anatomy.

Rest state (for the 7s thumbnail settle and for anyone arriving cold): shoulder selected, rotator-cuff linework drawn, card showing. The figure also breathes — a 7.5s scale oscillation of ~1%, the page's second-read detail and its whole thesis: calmer than a hospital.

Elsewhere: the service-area map is drawn SVG (Melville Water, the Canning, a dashed 10-minute radius), the hero carries one quiet pulse-trace, and the state probe window.__physio exposes region / side / card / form status for QA.

Conversion decisions

Local SEO we'd implement for the real business

This demo page deliberately ships only WebPage schema naming it a demonstration — fictional LocalBusiness/Review markup in a real index is dishonest. For a real clinic we would ship:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": ["MedicalBusiness", "Physiotherapy", "LocalBusiness"],
  "name": "Cadence Physiotherapy",
  "url": "https://cadencephysio.com.au",
  "telephone": "+61 8 XXXX XXXX",
  "image": "https://cadencephysio.com.au/clinic.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Suite X / XX Example Rd",
    "addressLocality": "Applecross",
    "addressRegion": "WA",
    "postalCode": "6153",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -32.01, "longitude": 115.83 },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "07:00", "closes": "19:00"
  }],
  "priceRange": "$$",
  "areaServed": ["Applecross","Mount Pleasant","Ardross","Booragoon","Como","South Perth"],
  "medicalSpecialty": "https://schema.org/Physiotherapy",
  "aggregateRating": {                  // fed from the live Google profile, never hand-written
    "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "187"
  }
}
</script>

Plus: Google Business Profile with treatment categories, suburb-level service pages (physio Applecross / Mount Pleasant / Booragoon), FAQ schema on the questions above, and review markup generated from the clinic's real Google reviews feed.

What would change for the real client

DemoProduction
Enquiry form confirms locallyBooks straight into the diary via Cliniko or Nookal APIs, or embeds HotDoc/Cliniko bookings so patients pick a real slot; SMS confirmation + reminder sequence
Demo review cardsLive Google reviews feed, marked up as real Review schema
Fee table maintained in HTMLFees synced from practice-management billing items; HICAPS/Medicare EPC item numbers (500/505) surfaced where relevant
Procedural SVG figure & mapStays — it outperforms stock photos of smiling strangers — joined by the clinic's real rooms and practitioner AHPRA numbers
Single landing pageSuburb + condition pages for local SEO, practitioner bios, new-patient forms pre-filled from the enquiry

Iteration log

Pass 1 — Craft

Drove the full suite headless (38 checks: every region tapped front and back with card + probe asserts, front/back toggle, empty and filled form submits, FAQ, sticky bar, reduced motion) and took real screenshots at 1440 and 375. Two genuine defects: (1) the back-view detail layer never appeared — SVG <g> has no .hidden property, so the JS toggle was setting a dead expando; switched to attribute toggling (the W10 [hidden] guard now actually bites). (2) The screenshot — not the DOM asserts — showed the condition list shattered: term and description landing in separate grid cells. Rebuilt the list items as flowed inline text with an absolute-positioned marker dot. Also nudged the map's radius caption off the Ardross label and deleted a stray empty <text> node in the map SVG.

Pass 2 — Depth

Enriched the signature: added the per-region typical course line (3–5 sessions for acute necks through 8–12 weeks for tendons) — each figure cross-checked against the FAQ's “usually 3–6 for most soft-tissue” so the page never argues with itself. Added the breathing figure (7.5s, ~1% scale — the second-read detail) and a slow pulse on the selected hotspot ring to invite the next tap. Re-ran the full 38-check suite green, including the card-vs-grid price-string equality and the six-distinct-cards assert; re-screenshotted and confirmed the list layout fix and the fold: h1 at 241px, $135 CTA at 455px, first trust chip at 559px — all inside a 667px viewport.

Pass 3 — Hardening

Chanel rule: removed the hero's second (apricot) pulse trace — one trace reads calm, two read busy. Re-verified the settled reduced-motion path (anatomy dasharray removed, offset 0, hero opacity 1), 375px scrollWidth 375 with the wordmark fully in-viewport, all six hotspots measured at exactly 44×44, sticky bar fixed with a ≥44px tel target in the bottom 140px, and zero console errors on both pages. Final copy read killed a duplicated “initial consult” echo in the booking aside. Guide numbers re-read against shipped code before commit (W8 guide-drift rule).

← Back to the site Collection index

Cadence Physiotherapy is a fictional business — an allied health industry demonstration designed & built by Sapience Analytics, part of the Generative Assets collection.