Build guide · site 355 · Wave 39, Industry Demos XXVIII
A fictional registered training organisation in Belmont — first aid, CPR, childcare first aid, low-voltage rescue and mental health first aid, public sessions in a Belmont training room and on-site courses at Perth workplaces. The page has one job: a booking request with the course, the format and the participants already priced.
The audience is the office manager who needs eight staff certified before the audit, the childcare director whose team's HLTAID012 lapses in March, the electrical apprentice who needs LVR/CPR for the licence, and the parent who just wants to know what to do. Training is priced per person, so the page lets the buyer count heads and pick a format before ringing — and it makes the two commercial facts of the trade visible: on-site costs the same per person but bills eight seats, and there is no travel fee inside Perth metro. This is the wave's B2B site — light, exact, calm — and the collection's first registered-training-organisation demo.
The direction is the training room with the blinds up: clinical-white ground, navy ink, first-aid-green CTAs, AED-red linework. The signature is the Course Roster — a drawn training room seen from the back. Rows of chairs with CPR manikins on mats follow the participants stepper (drawn cap twelve; the roster tag prints the true count), a trainer kneels at the front doing compressions on a demonstration manikin, a projector screen shows the selected course's unit code in the display face, and the price sits on the sign-in sheet clipboard on the front counter. Course chips change what is on the mats and the screen; format chips swap the Belmont room (whiteboard, runway beyond the window) for a client lunchroom (noticeboard, fridge, kettle); the regional zone puts a wheatbelt horizon in the window; the weekend toggle circles SAT on the calendar; the kits toggle puts a green first-aid kit on every chair.
Every ratio below was computed by WCAG relative-luminance arithmetic from the shipped hex tokens in Pass 1 (the spec's figures were hypotheses; they landed within 0.1 of the measured values). First-aid green #1F7A4D measured 4.91:1 on the ground and 5.32:1 under white labels — clear of the 4.5 floor, so primary buttons keep the argued green and darken to the pre-minted fill #186340 (7.25:1) on hover and for selected chips; every green-coloured word uses the text-ink #155A3A (7.59:1). AED red #D6453A is 4.06:1 on the ground and is used only for lines and marks; red-coloured copy (eyebrows, notes, the badge label) uses #A32A20 (6.66:1).
Ten staff, Provide First Aid, in your lunchroom
Outfit 700 for the wordmark, headings, the display line, the badge price and the unit code on the drawn screen — a clean geometric that reads at a distance, the way a unit code on a projector should. The display moment re-words itself with the controls: One person, CPR, in our Belmont room · Twenty staff, low-voltage rescue + CPR, in your lunchroom.
Atkinson Hyperlegible 400 / 700
Atkinson Hyperlegible for everything read — argued because a safety trainer should ship the legibility-first face: body at 17px on mobile and 18px from 760px, chips, ledger, form. Its distinct zero and one keep unit codes like HLTAID011 unambiguous. Weight carries hierarchy; tracking only on the uppercase eyebrows and badge label.
<g class="cell"> placed with translate() scale() — a mat, a manikin with its red compression point, and a chair seen from behind. Rows scale 0.78 → 1.0 (wide) toward the viewer; columns converge on the row centre. Childcare adds an infant manikin per row; Provide First Aid adds a bandage to every manikin and an open AED trainer beside the demo mat; LVR swaps the demo mat for a striped insulated mat and stands a rescue crook beside it; MHFA rebuilds the cells as a circle of chairs (sorted by depth) with a standing trainer.dt = min(max(now − last, 0)/1000, .05) drives the trainer's upper body on a 1.7 Hz stroke (sharp down, slower release), the compression point's radius and a fading ring, the screen beam (0.6–0.85, never below the visibility floor), runway lights, the plane, and kettle steam. Room opacity is always 1 — the never-invisible floor is structural. Reduced motion renders one settled frame; the loop pauses on document.hidden.hidden with the [hidden]{display:none!important} guard, never the IDL property) with a CSS fade on the group and the animated attributes on child elements — state and animation on separate nodes.<style>, Google Fonts the only external request.State is one object — course, format, zone, participants, two toggles — and compute() is a pure function over it: billed seats = max(8, n) in on-site mode, else n; course line = billed × rate; +$350 when on-site regional; +$150 weekend only when on-site and the remembered toggle is on; kits = $45 × the ACTUAL count; three note flags (on-site under eight, public at eight or more, exactly twenty). render() writes the result to every surface in one pass: the display line, the badge (price, subtitle, declaration, notes with full and short forms), the ledger, the plain-text mirror list under the scene, the control states (zone fieldset hidden in public mode, weekend disabled with the on-card reason, stepper limits) and the scene (screen code, board, window view, marks, seat cells rebuilt, roster tag). Restore-vs-reset is by memory: state.zone and state.weekend are never overwritten by the format chip, so public → on-site restores both exactly. Every handler bumps a scene token before touching state; the settle timer publishes window.__firstaid.settled only for the latest token, so a rapid-fire run of clicks ends on one definite, settled state. Dual-speed redraw: 40 ms per cell (1.2 s cap) on first draw, 12 ms (480 ms cap) after.
| Course | Unit | Per person | Length |
|---|---|---|---|
| CPR | HLTAID009 | $65 | half a day |
| Provide First Aid | HLTAID011 | $135 | one day + online pre-work |
| Childcare first aid | HLTAID012 | $150 | one day + online pre-work |
| Low-voltage rescue + CPR | UETDRRF004 + HLTAID009 | $110 | most of a day |
| Mental Health First Aid | MHFA (accredited) | $290 | two days |
| Rule / add-on | Amount | Applies |
|---|---|---|
| Same rate public or on-site | — | declared on-card; on-site inside Perth metro adds no travel fee (declaration on badge, ledger and mirror) |
| On-site minimum | 8 seats billed | course line only, in on-site mode when participants < 8; NOTE "on-site we come out for eight — under eight we bill eight seats (bring the neighbours)" (short: "billed at eight seats — the on-site minimum"); at 8 exactly no note; kits multiply the ACTUAL count |
| Public suggestion | note only | public × participants ≥ 8: "eight or more — an on-site course costs the same and saves everyone the drive" (short: "eight or more — on-site costs the same"); absent at 7 and in on-site mode |
| Regional WA travel | +$350 flat | on-site zone chip; declaration "travel and a night's stay — beyond the Wheatbelt and Peel we quote it" (short: "+$350 travel & a night's stay"); zone chips hidden in public mode and RESTORED on return to on-site |
| Weekend / after-hours | +$150 flat | live on-site; DISABLED in public mode with reason "public courses run on our published calendar — book on-site for a Saturday"; unlock RESTORES the prior choice |
| Workplace first-aid kit each | +$45 × actual participants | live at every combination |
| Twenty participants | note only | "over twenty we bring a second trainer — ask us to quote the group" (short: "over twenty — second trainer, ask us to quote"); the badge still prints the 20-seat figure |
| Custom, advanced resuscitation, remote-area, refresher reminders | no number | "quoted" / "included" — grid, FAQ and fee note |
Totals are integer by construction and display to the whole dollar. The estimator's cheapest outputs equal the grid floors: CPR $65, Provide First Aid $135, Childcare $150, LVR + CPR $110, MHFA $290, on-site from $520 (eight seats × CPR).
| Scenario (full control vector set explicitly) | Spec | Measured | Also asserted |
|---|---|---|---|
| Rest: on-site · Perth metro · Provide First Aid · 10 · kits OFF · weekend OFF | $1,350 | $1,350 | display "TEN STAFF, PROVIDE FIRST AID, IN YOUR LUNCHROOM"; no notes on any surface; "no travel fee inside Perth metro" on badge, ledger, mirror; screen HLTAID011 |
| Public · CPR · 1 | $65 | $65 | weekend disabled with reason; zone fieldset hidden; grid floor |
| Public · Provide First Aid · 8 / 7 | $1,080 / $945 | $1,080 / $945 | suggestion note present at 8 on three surfaces, absent at 7 |
| On-site metro · CPR · 5 / 8 | $520 / $520 | $520 / $520 | eight-seat note at 5 (billed 8), absent at 8; roster tag "5 seats · all drawn · 8 billed" |
| On-site metro · CPR · 5 · kits ON | $745 | $745 | kits line $225 (5 × $45, never 8 × $45) |
| On-site regional · Childcare · 12 · kits ON | $2,690 | $2,690 | regional declaration on three surfaces; wheatbelt window; infants drawn per row |
| On-site metro · LVR + CPR · 10 · weekend ON | $1,250 | $1,250 | SAT circled on the calendar; crook and insulated mat drawn |
| Public · MHFA · 4 | $1,160 | $1,160 | four chairs in a circle, no manikins, standing trainer |
| Rest + kits | $1,800 | $1,800 | a kit drawn on every chair |
| Rest, weekend ON → public → on-site | $1,500 → $1,350 → $1,500 | same | public: suggestion note present, weekend disabled, memory kept; on-site: weekend RESTORED ON. Zone restore also asserted (regional → public → on-site = $1,700 again) |
| Rest, participants 20 / 19 | $2,700 / $2,565 | $2,700 / $2,565 | second-trainer note at 20 only; 12 cells drawn, tag "20 seats · 12 drawn" |
| Floors: on-site CPR 1 / public Childcare 1 / LVR 1 / MHFA 1 / PFA 1 | $520 / $150 / $110 / $290 / $135 | same | each equals its grid floor |
pattern attributes; the confirmation panel is hidden on load and on empty submit and appears only after a valid filled submit ("Thanks — we've received your request… we'd call you back the same business day").The live page carries only WebPage + BreadcrumbList JSON-LD naming it a demonstration — fictional business data in a real search index would be dishonest markup. For the real Vital Signs we would ship an EducationalOrganization entity (an RTO is an educational organisation; schema.org has no LocalBusiness training-centre subtype, so the organisation type carries the NAP, hours and reviews) plus Course items for each unit as a second block:
{
"@context": "https://schema.org",
"@type": "EducationalOrganization",
"@id": "https://vitalsignsfirstaid.example/#rto",
"name": "Vital Signs First Aid Training",
"image": "https://vitalsignsfirstaid.example/training-room.jpg",
"url": "https://vitalsignsfirstaid.example/",
"telephone": "+61 8 9000 0355",
"address": {
"@type": "PostalAddress",
"addressLocality": "Belmont",
"addressRegion": "WA",
"postalCode": "6104",
"addressCountry": "AU"
},
"geo": { "@type": "GeoCoordinates", "latitude": -31.955, "longitude": 115.925 },
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "08:00", "closes": "17:00" }
],
"areaServed": ["Perth","Belmont","Cannington","Welshpool","Midland","Joondalup","Fremantle","Rockingham"],
"aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "212" },
"review": [
{
"@type": "Review",
"author": { "@type": "Person", "name": "P. — childcare director, Cannington" },
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"reviewBody": "Fourteen educators, one Saturday, our own kindy room — every certificate in my inbox by Monday."
}
]
}
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Provide First Aid (HLTAID011)",
"description": "One-day nationally recognised first aid course with online pre-work.",
"provider": { "@id": "https://vitalsignsfirstaid.example/#rto" },
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Blended",
"location": { "@type": "Place", "name": "Belmont training room" }
},
"offers": { "@type": "Offer", "price": "135", "priceCurrency": "AUD" }
}
Alongside the markup: a Google Business Profile with the same NAP and hours, per-course landing sections with the unit codes in the headings (buyers search the code), a reviews feed synced from Google, and location copy that names the metro suburbs the on-site work actually goes to.
This is a demonstration build by Sapience Analytics. Want one pointed at your customers?
Vital Signs First Aid Training is a fictional business — a first aid training industry demonstration designed & built by Sapience Analytics, part of the Generative Assets collection. Back to the site · Index.