TIPLOADSKIP BINS

How this demo
was built

Tipload Skip Bins is a fictional Bibra Lake skip hire operator — an industry demonstration of the conversion-focused landing page Sapience Analytics would build for a real waste business. The page has one job: turn "I have a pile" into a bin booked for a date.

Site 257 · Wave 20 — Industry Demos IX · skip bins · Perth

Concept

The direction is the yard at 7am: galvanised bins in ranked rows, the hook truck idling, gloves on the rail. No rubbish-pile imagery anywhere — the product being sold is the empty space after. Every price on the page is the whole price (7-day hire, delivered and picked up), and the signature Bin Picker exists to put an honest number on screen before the phone call, because in this trade the quote is the trust signal.

Palette

#EEEDE8 concrete pale

The swept yard slab — the ground everything sits on.

#26241F tyre black

Truck tyres and hook arms — structure and primary ink.

#E3A31A skip yellow

The painted bin's safety yellow. Lines, marks, fills, CTA — never body text.

#7A5708 yellow ink

Derived body-ink for yellow-family type on the pale ground (≈6.3:1) — the h1's second voice and eyebrow text.

#77868F gal blue-grey

Weathered zinc — focus rings, map water, hub caps. Lines only.

#44525A gal ink

Derived link/annotation ink where the zinc tone must carry text (≈7:1).

The spec's line/mark accents (skip yellow, gal blue-grey) both fail 4.5:1 as small text on concrete, so each got a derived ink sibling — the W2/W5 ink/line split applied at build time, not patched after.

Type

The Bin Picker

The signature is a fully procedural SVG: a hook-lift truck drawn in tyre black on the yard slab, carrying a skip whose geometry is computed from the selected size. Five size chips map to real-world dimensions at a fixed scale (1 m ≈ 56 px): the 2 m³ bin draws 51 px tall against a 1.75 m figure at 98 px, the 8 m³ at 96 px — so the person-for-scale comparison is honest, not decorative. Waste chips recolour the fill band drawn level with the rim (the level-load rule is stated on the price card), a hire stepper runs 7–21 days, and the mono price card recomputes from a single pricing object. The hook arm's path is recomputed per size so the truck actually holds the bin it's carrying, and the skip's stencil (TL-02…TL-08) tracks the size — a second-read detail beside the gloves left on the chassis rail.

The rest state is mid-demonstration per the wave rule: 4 m³, mixed C&D, 7 days, $420 showing — hard-coded into the SVG markup and reproduced identically by the JS draw function (the QA harness asserts the idempotency). Selecting a bin then "Book this bin" pre-fills size, waste, days and delivery date into the booking form: the demo interaction becomes the warm lead.

Honest disables

Clean fill disables the 6 and 8 m³ chips with the reason on the page — a big bin full of sand is over the truck's legal lift, so 4 m³ is the honest maximum. If you're on 8 m³ when you pick clean fill, the picker clamps to 4 m³ and says why. The booking form mirrors the same rule on its own selects, so neither surface can compose a dishonest order.

Pricing model

SizeGeneralGreen (−$20)Mixed C&D (+$70)Clean fill
2 m³$240$220$310$260
3 m³$295$275$365$320
4 m³$350$330$420$380
6 m³$460$440$530
8 m³$570$550$640

Shape of the model: the general matrix is pinned; green waste is a flat −$20 at every size (clean green is cheaper to tip, and the discount is the tip saving, not a percentage game); mixed C&D is a flat +$70 (sorting labour plus C&D tip fees are roughly constant per load); clean fill has its own matrix and stops at 4 m³ (legal lift). Extended hire is linear: +$10/day beyond the included 7, capped at 21 days. Every price above is the job minimum — there is no separate delivery line, which is itself a pricing statement. The $/m³ curve falls from $120 (2 m³) to $71 (8 m³) because the truck movement is the fixed cost being amortised.

Measured worked examples (from the running page, asserted against an independently reimplemented oracle): rest 4 m³ mixed = $350 + $70 = $420; cheapest output 2 m³ green = $220, equal to the services grid's "green waste from $220" floor; 8 m³ general at 14 days = $570 + 7 × $10 = $640; 4 m³ clean fill at 14 days = $450. The FAQ's two-bin claim is the same model: 2 m³ green + 2 m³ general = $460 against $530 for one 6 m³ mixed.

Trailer-load equivalence

A 6×4 box trailer has a 1.8 × 1.2 m bed; a legal level load runs about 0.3 m deep, giving ≈0.65–0.7 m³ per trip — we use 0.7 m³. Dividing each bin by 0.7 and rounding to how a person actually talks: 2 m³ ≈ 3 loads (2.86), 3 m³ ≈ 4 (4.3), 4 m³ ≈ 6 (5.7), 6 m³ ≈ 8–9 (8.6), 8 m³ ≈ 11 (11.4). The same figures appear in the picker's scale line, the FAQ and the form's size options — one source of truth, three surfaces.

Conversion decisions

Local SEO we'd implement for the real business

This demo page carries only WebPage schema declaring itself a demonstration — fictional structured data in a real index is dishonest markup. For a real operator we'd ship LocalBusiness + Review schema fed by their actual details and review stream:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "«Real Business Name» Skip Bins",
  "telephone": "«real number»",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Bibra Lake",
    "addressRegion": "WA",
    "postalCode": "6163",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -32.09, "longitude": 115.82 },
  "areaServed": "Perth metropolitan area",
  "openingHours": ["Mo-Fr 06:30-16:30", "Sa 07:00-12:00"],
  "priceRange": "$220-$640",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "«from live review feed»",
    "reviewCount": "«from live review feed»"
  },
  "review": [{
    "@type": "Review",
    "author": { "@type": "Person", "name": "«verified customer»" },
    "reviewRating": { "@type": "Rating", "ratingValue": "5" },
    "reviewBody": "«pulled from Google / Podium, with consent»"
  }]
}
</script>

Plus suburb-level service pages (skip bin hire Fremantle / Cockburn / Canning Vale…), a bin-size guide targeting "what size skip bin do I need", and Google Business Profile posts driven off the run sheet.

What would change for the real client

Iteration log

Pass 1 — Craft

Drove the full harness (39 checks: chips, stepper, both submits, FAQ, sticky bar, oracle pricing) and reviewed real screenshots at 1200×750 and 375. Found and fixed: 375 px overflow to 586 px — the form's long select options set the grid's min-content width, masked on desktop; fixed with min-width:0 on grid items and a single-column field grid under 560 px. Cropped the scene viewBox from 340 to 224 units tall — the empty sky was pushing the price card out of the 1200×750 thumbnail; after the crop the chips, stepper and the "$350 + $70" row all share the capture with the truck. Deepened the fill band (rim depth 9→12) so mixed C&D actually reads as a load, moved a background yard bin out from under the scale figure's feet, and shortened the scale-line tag that was wrapping the card.

Pass 2 — Depth

Added the settle bounce — on size change the skip drops ~7 px and lands with a slight overshoot (CSS transform on the group, which carries no transform attribute, per the W16/W17 SVG rule; suppressed under reduced motion). Added a keyboard drive to the harness: focus the 3 m³ chip, press Enter → size 3, card $460 at clean fill/21 days, matching the oracle. Cross-checked the FAQ's two-bin claim against the model ($220 + $240 = $460 vs $530 for 6 m³ mixed — holds) and confirmed the trailer-load figures agree across picker, FAQ and form options. Second-read details: gloves on the chassis rail, the TL-0x stencil tracking size, the 1.75 m figure.

Pass 3 — Hardening

Masthead at 375 screenshotted first: wordmark left, mono phone right, no wrap, no clip. Fresh-load empty submit raises validation on all 8 fields with 8 visible messages (the pre-fill masking rule — the empty probe runs on a fresh navigation). Clean-fill disable, clamp (8→4 m³) and the form-side mirror all driven and asserted. Reduced-motion load renders everything settled with $420 showing; the phone pattern compiles under the v-flag; the [hidden] guard beats an authored display rule; sticky-bar taps measure 58 px. Chanel rule: removed the second ghost yard bin crowding the truck's tail in the cropped frame. Zero console errors across five instrumented loads (desktop, fresh-submit, mobile, reduced-motion, full-page).

Final tally: 39/39 harness checks green · signature bbox top ≈125 px at 1200 wide · rest card $420 == oracle