CURRENTLINE

Build guide · Industry demo 322

How Currentline Auto Electrics was made

Currentline is a fictional Wangara auto electrical workshop — the customer is a ute or 4WD owner fitting out for touring season, or anyone whose car drains flat overnight for no reason. The page has one job: a booking with the installs already chosen and priced. It is the wave's dark site: the workshop bench at 9pm, drawn instead of photographed.

The signature — the Circuit Map

A dual-cab ute in side profile, drawn in SVG with its wiring loom visible from the battery node. Five install chips (dual battery, light bar, trailer wiring, reverse camera, UHF) each light their own circuit trace and draw their hardware — the second battery with its isolator, the bar on the bull bar, the 7-pin plug hanging at the towbar, the camera feeding a mirror monitor, the coax running up the A-pillar to the aerial. A signal-amber current pulse travels every selected circuit on a loop, and the running total lives on a battery-gauge badge on the ute's tray — the price is part of the scene, not a ledger below it.

Implementation: each circuit's path is defined once in <defs> and reused three times via <use> — an alloy base trace (the loom at rest), an amber lit overlay, and a travelling pulse. The pulse is a dash segment about 14% of the path length whose stroke-dashoffset is driven by a requestAnimationFrame loop with the delta clamped at zero and capped at 50 ms, paused when the tab hides. The lit overlay holds opacity 0.75 — a never-invisible floor above 0.55, so the signature reads alive at any thumbnail capture instant with no phase arithmetic. The entrance draws each circuit in by dashoffset (stroke hidden until drawn length > 0), staggered 180 ms per circuit; every later state change fades in 250 ms instead — the dual-speed redraw. Every chip handler bumps an animation token before the state swap, and the pulse loop reads a working set rebuilt synchronously on each render, so rapid-fire clicking can never leave a stale closure animating dead geometry. Hardware groups toggle by the hidden attribute (SVG groups have no .hidden IDL property), backed by a [hidden]{display:none !important} guard.

Second reads: the drain-check multimeter shows 12.4 V resting — select the dual-battery system and it reads 14.4 V, because now something's charging. The battery-gauge badge fills one charge bar per selected install. Hovering an unselected chip ghost-lights its circuit at 0.28 opacity, previewing where the loom would run.

The pricing model

Total = sum of selected installs + diagnostic − credit + mobile call-out. The diagnostic credit is the commercial heart: the $120 drain check is charged alone, but the moment at least one install joins it, the $120 is credited against the work — shown as a note and a price change together. The services grid floor ("diagnostics $120 — credited when we do the repair") equals the map's cheapest priced output. Full rewires carry no number by design: "quoted after we've had the dash apart — old looms keep their secrets until then."

AnchorPriceDriven & measured on the page
Dual-battery system (AGM, DC-DC, tray & isolator)$780Rest state: dual battery + light bar = $1,120 · all five installs = $2,090 · trailer alone = $260 · camera + UHF = $710 · rest + mobile = $1,210
Driving light bar fit-up (your lights, our loom)$340
Trailer wiring, 7-pin flat$260
Reverse camera & mirror monitor$420
UHF radio install, aerial tuned$290
Battery & drain diagnostic$120Alone: $120, no note. With any install: −$120 credit, note shown ("saves $120"). Diagnostic + trailer = $260 with the note.
Mobile service, metro+$90Live in every state; never changes any install price.
Rewires, restorations, deep fault-chasingno numberDesigned price-less state, stated on-card and in the ledger fine print.

Every figure above was driven in headless Chrome and checked against an independently reimplemented oracle (the arithmetic re-derived from the spec in the harness, not read from the page's own function). All anchors are integers, so totals are integer-safe by construction.

Palette — measured, not assumed

Argued from the dark bench, the multimeter and the loom. The spec's contrast figures were hypotheses; these are the WCAG ratios measured from the shipped tokens.

Bitumen blue #161A20

Page ground — the bench at 9pm. Panels lift to #1D232C, wells drop to #10141A.

Panel white #E9EBEE

Body ink. Measured 14.62:1 on the ground, 13.23:1 on panels (spec hypothesis ≈14:1 — confirmed).

Signal amber #E8A13D

CTAs, the current pulse, links. 7.98:1 on the ground, 7.22:1 on panels; button labels (#161A20 on amber) 7.98:1. Chrome and marks only — never small text on light panels.

Loom alloy #7C8DA3

The ute linework, circuit traces at rest, callouts. 5.15:1 on the ground, 5.45:1 in the scene well — lines and marks, not body text.

Muted ink #A8B2BF

Secondary text, minted per the ink/line split. 8.14:1 on the ground, 7.36:1 on panels — comfortably past 4.5:1.

Type

Chakra Petch 600 for display — its squared, instrument-cluster geometry is the same drawing language as a dash readout, which is why the total on the tray badge is set in it, huge, like a charge gauge. IBM Plex Sans carries body copy: engineered, legible at 16px on a phone, and its tabular numerals keep the ledger honest-looking. The typographic bravery moment is the badge: $2,090 rendered as if the ute itself is reporting its own state of charge.

Iteration log

Pass 1 — Craft

Measured every contrast pair with real WCAG arithmetic (figures above) — both spec hypotheses held, no token changes needed. Code re-read caught a mangled ternary building the credit ledger row (operator precedence would have rendered false as the credit amount) — rewrote the row template. Screenshot review at native resolution found: the AUX BATTERY · DC-DC callout clipped behind the cab rear (moved from x=626 to x=700), the MONITOR label sitting on the roofline (moved below the monitor, inside the glass), and the light-bar switch stub ending at nothing (drew the dash switch it feeds). At 375px "THE CIRCUIT MAP" card title wrapped to three lines — the card head now stacks below 560px with the title on one line. On the service-area map, the Malaga label crowded the workshop-ring caption; moved south-east where it actually sits anyway.

Pass 2 — Depth

Added the hover ghost-preview: an unselected chip lights its circuit at 0.28 opacity on mouseenter, so you see where the loom would run before you commit — removed again on click or leave, and irrelevant to the reduced-motion path since it's a static opacity. Staggered the entrance draw-in 180 ms per circuit so the loom appears to be traced by hand rather than switched on. Confirmed the second reads (multimeter 12.4 → 14.4 V with the dual battery in; badge charge bars = install count). Drove every worked example headlessly against the independent oracle: $1,120 rest, $2,090 all five, $260 trailer, $710 camera+UHF, $120 diagnostic-alone with no note, $260 diagnostic+trailer with the credit note, $1,210 rest+mobile — all exact.

Pass 3 — Hardening

375px: no horizontal overflow, masthead checked by comparing the wordmark's right edge against the call link's left edge explicitly, sticky call/book bar asserted fixed with a ≥44px tel target in the bottom 140px, h1 + primary CTA + trust signal all inside the first viewport. Reduced motion: no travelling pulse, no draw-in, circuits render lit and settled. Rapid-fire drive: two volleys of nine unsettled clicks each — the in-handler token invalidation held, end states matched the oracle, zero console errors. Empty submit leaves the confirmation panel hidden with invalid fields flagged; a filled submit (clicking button[type=submit] specifically) shows the panel with the estimate echoed. Chanel rule: removed two decorative ground dashes flanking the scene — the single ground line was already doing the work. Final copy read done; 60/60 harness asserts green.

Conversion decisions

Local SEO we'd implement for the real business

This demo ships only WebPage/CreativeWork/BreadcrumbList structured data, because fictional business schema in a real search index is dishonest markup. For the real Currentline, we'd ship AutoRepair — the LocalBusiness-family subtype that covers auto electrical work — with real NAP, hours, geo and a live reviews feed:

{
  "@context": "https://schema.org",
  "@type": "AutoRepair",
  "name": "Currentline Auto Electrics",
  "description": "Auto electrical workshop in Wangara — dual-battery systems,
    driving lights, trailer wiring, battery and drain diagnostics.",
  "url": "https://currentlineautoelectrics.com.au",
  "telephone": "+61-8-XXXX-XXXX",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "(real unit and street)",
    "addressLocality": "Wangara",
    "addressRegion": "WA",
    "postalCode": "6065",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.79, "longitude": 115.83 },
  "areaServed": "Perth metropolitan area",
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "07:00", "closes": "17:00" },
    { "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday", "opens": "08:00", "closes": "12:00" }
  ],
  "priceRange": "$$",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "(from the live reviews feed)",
    "reviewCount": "(from the live reviews feed)"
  },
  "review": [{
    "@type": "Review",
    "reviewRating": { "@type": "Rating", "ratingValue": "5" },
    "author": { "@type": "Person", "name": "(real customer)" },
    "reviewBody": "(their words, pulled from Google Business Profile)"
  }]
}

Plus a Google Business Profile tuned for "auto electrician Wangara" / "dual battery install Perth", service pages per install type, and review capture wired into the job-completion flow.

What would change for the real client

← Back to the site · Generative Assets index