Ironbark Farriery

Generative Assets · Industry Demos · how it was made

How the Ironbark Farriery demo was built

Ironbark Farriery is a fictional mobile farrier working the Swan Valley, the Perth hills and the southern horse country — trims, front shoes, full sets cold or hot-shod, and remedial work alongside a vet. The page exists for the Gidgegannup agistment with four horses due, the Swan Valley pony club family and the Serpentine eventer whose horse is footsore. Its single job is a booking request with the service, the horse count, the property zone and the cycle already priced — per visit, to the whole dollar, with the callout handled honestly.

The Hoof Plan

The signature is a drawn SVG forge scene in elevation: an anvil on its stump with a shoe lying on the face, a hoof in profile up on a farrier's stand at the left showing exactly what the chosen service does to it, horses standing at a rail behind, a notched rail post carrying the booking cycle, and the ute on the track for the chosen zone. Every control redraws the scene and reprices the visit from the pinned anchors.

Pinned anchors (GST inclusive, per visit, whole dollars)

ServicePer horseZoneCalloutOther
Trim only (barefoot)$65Swan Valley & Ellenbrook$0Handling +$25 a horse
Front shoes, hind trim$150Perth metro$40Horses 1–8 at the one property
Full set, cold-shod$220Hills — Gidgegannup, Chittering, Bullsbrook$60Callout waived at 3+ horses
Full set, hot-shod$280South — Serpentine, Byford, Mundijong$80Cycle 6 / 8 / 10 weeks
Remedial / glue-onquoted with your vet9 / 7 / 5 visits a year

The service rate multiplies the actual horse count; handling multiplies the same actual count; the callout is flat per visit and disappears entirely at three horses or more, whatever the zone; the cycle multiplies the whole visit into the yearly line only and never touches the visit price. Every rate is a whole dollar and every stepper grid is whole horses, so no intermediate is ever fractional — the whole-dollar display rounding never has anything to round.

The callout waiver, solved at its boundary

The exact boundary is three horses, and it is reachable on the stepper grid (whole horses, 1–8), so the semantics could be pinned at every cell rather than inferred:

StateNoteDeclarationLedger
1 horse, callout > 0"2 more horses at the same property and the $X callout is waived"absentcallout billed in full
2 horses, callout > 0"1 more horse at the same property and the $X callout is waived"absentcallout billed in full
3+ horses, callout > 0absent"callout waived — 3 or more horses at the one property"callout $0
Swan Valley, any countabsentabsent"no callout in the Swan Valley — it's home"

The short forms carried on the tag below 641 px are +<3 − n> horses waives the $<callout> callout and callout waived; the ledger and the screen-reader mirror always carry the full template. The +1 horses form at two horses is the pinned string and is shipped verbatim rather than silently pluralised, so the badge, the harness and the spec all agree on one literal.

The two quoted states

Remedial work has no number, because the honest number depends on the horse and the vet's notes. The tag prints the computable part of the visit and names the part that isn't: $90 + remedial quoted for two horses in the metro with handling on (the $40 callout plus 2 × $25). When the computable part is $0 — three horses in the metro with handling off, where the callout has already been waived — printing "$0 + remedial quoted" would be worse than useless, so the tag prints the pinned bare-quote string remedial — quoted once we've seen the horse instead. On remedial the yearly cycle line is absent and replaced by "we'll set the cycle with your vet"; the harness asserts the absence of any yearly arithmetic in the badge, the ledger and the mirror, not just the presence of the replacement.

Worked examples, measured from the running page

ScenarioArithmeticPer visitCycle line
Rest state — hot-shod, 3 horses, hills, 8 weeks3 × 280, callout waived$840about $5,880 a year at 8 weeks
Cheapest output — trim, 1 horse, Swan Valley1 × 65$65about $455 a year at 8 weeks
Trim, 1 horse, metro65 + 40$105note present
Cold-shod, 2 horses, south440 + 80$520about $3,640 a year at 8 weeks
Cold-shod, 3 horses, south660 + 0$660declaration present
Hot-shod, 4 horses, hills, handling, 6 weeks1,120 + 100$1,220about $10,980 a year at 6 weeks
Front shoes, 8 horses, Swan Valley, 10 weeks8 × 150$1,200about $6,000 a year at 10 weeks
Front shoes, 2 horses, metro, handling300 + 50 + 40$390about $2,730 a year at 8 weeks
Hot-shod, 1 horse, south, 6 weeks280 + 80$360about $3,240 a year at 6 weeks
Trim, 6 horses, hills, handling, 10 weeks390 + 150$540about $2,700 a year at 10 weeks
Remedial, 2 horses, metro, handling40 + 50 computable$90 + remedial quotedwe'll set the cycle with your vet
Remedial, 3 horses, metrocomputable $0remedial — quoted once we've seen the horsewe'll set the cycle with your vet

Every figure above, both quoted forms, the waiver boundary at 1 / 2 / 3 / 4 horses in all three charged zones, the full 1–8 stepper walk, every service × horse-count handling cell, and the rapid-fire burst were driven against an oracle reimplemented from the anchors in the verification harness, not read back from the page's own function — 578 assertions, all green in the final run. The rest-state figure measured from the running page is $840 a visit; the grid floor is $65, which is exactly the Hoof Plan's cheapest output (trim only, one horse, Swan Valley, handling off), so the services grid and the estimator cannot argue with each other.

Palette — argued from a coal forge, hoof horn, hot steel and a cold shoe

A dark charcoal ground with a horn-cream body ink, an ember that is genuinely the colour of hot steel doing the marking and glowing, and cold steel doing real work in the scene — the shoe, the nails, the anvil face, the tag. It sits near the "near-black plus one accent" default and is deliberately held off it by the second hue and by the cream, not by decoration. Every ratio below was measured with WCAG arithmetic from the shipped tokens in Pass 1 — role, hex and ratio read off the same row of the script.

Forge dark#15120F Page ground. Cards lift to #1E1A16, the footer drops to #0E0C0A.
Hoof horn#EFE6D8 Body ink. 15.09:1 on the ground, 13.98:1 on cards, 15.79:1 in the footer.
Worn horn#B9AC97 Secondary copy. 8.36:1 on the ground, 7.75:1 on cards.
Ember#E07B2C CTA fill under forge-dark labels at 6.26:1 (hover #EE8C3D, 7.51:1). As display-size text 6.26:1 on the ground, 5.80:1 on cards.
Ember ink#F0A863 The pre-minted lighter twin for small ember-coloured copy: 9.32:1 on the ground, 8.63:1 on cards, 6.39:1 on the confirmation panel.
Cold steel#8592A0 The shoe, the nails, the anvil face, the rail plate. 5.88:1 on the ground, 5.81:1 on the drawn wall — lines, marks and secondary scene labels only; body copy stays horn.
Steel band#2B333C Trust strip, confirmation panel, map suburb pins. Horn on it measures 10.34:1.
The visit tag#C6CDD5 → #9DA8B4 A steel plate that has been in the fire. Tag ink #15120F 7.73:1 at the darkest stop, scorch accent #4E2203 5.59:1, mute #262B31 5.90:1.

Two tokens were re-minted in Pass 1 after measurement rather than shipped on the spec's word — the tag's scorch accent and its mute ink both failed against the darker end of the steel gradient, and the scorch overlay itself was moved out from behind the text into the tag's bottom padding band. The measurements are in the iteration log below.

Every SVG map label and every scene label is body-ink class: horn or ember ink with a ground-coloured halo painted through paint-order: stroke, so a label crossing the ocean fill, the scarp fill or a lit floor still measures over 10:1. Cold steel never labels the map.

Type

$840 · FULL SET
Zilla Slab 700. A stamped-steel slab with real weight in the serifs — it looks like something struck into metal rather than set on paper. It carries the headings, the display line, the visit total and the tag's figure.
Four horses done in one morning at Gidgegannup, no callout because all four were here.
Work Sans 400–700. The workhorse: body copy, chips, ledger, form, every label in the drawing. Legible at 15 px in a caption chip and at 9 px on the tag, which is the actual requirement.

The typographic moment is the display line above the scene — the visit total set large in slab beside the anvil, with the scenario spelled out in caps after it: $840 · FULL SET, HOT-SHOD · 3 HORSES · 8 WEEKS. It is a real text node, not canvas paint, so it is selectable, readable by a screen reader and reachable by the collection's own sweep.

Techniques

Conversion decisions

Local SEO we'd implement for the real business

This demonstration page ships only WebPage and BreadcrumbList structured data, both declaring it a demonstration, because marking up a fictional business as a real one would pollute the index with false records. For a real farrier we would ship the schema below, wired to their Google Business Profile and their genuine reviews — that is the sales evidence without the dishonesty.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://ironbarkfarriery.com.au/#business",
  "name": "Ironbark Farriery",
  "description": "Mobile farrier serving the Swan Valley, the Perth hills and the southern horse country: trims, front shoes, full sets cold and hot-shod, and remedial work with your vet.",
  "url": "https://ironbarkfarriery.com.au/",
  "telephone": "+61 8 XXXX XXXX",
  "priceRange": "$$",
  "image": "https://ironbarkfarriery.com.au/img/forge.jpg",
  "logo": "https://ironbarkfarriery.com.au/img/logo.svg",
  "additionalType": "https://en.wikipedia.org/wiki/Farrier",
  "knowsAbout": ["Farriery", "Hoof trimming", "Hot shoeing", "Remedial shoeing", "Glue-on shoes"],
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Swan Valley",
    "addressRegion": "WA",
    "postalCode": "6069",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.80, "longitude": 116.02 },
  "areaServed": [
    { "@type": "City", "name": "Swan Valley" },
    { "@type": "City", "name": "Ellenbrook" },
    { "@type": "City", "name": "Gidgegannup" },
    { "@type": "City", "name": "Chittering" },
    { "@type": "City", "name": "Bullsbrook" },
    { "@type": "City", "name": "Serpentine" },
    { "@type": "City", "name": "Byford" },
    { "@type": "City", "name": "Mundijong" }
  ],
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Tuesday","Wednesday","Thursday","Friday"],
      "opens": "06:30", "closes": "15:30" }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Farriery services",
    "itemListElement": [
      { "@type": "Offer",
        "itemOffered": { "@type": "Service", "name": "Trim only (barefoot)" },
        "priceSpecification": { "@type": "UnitPriceSpecification",
          "price": "65.00", "priceCurrency": "AUD",
          "unitText": "per horse", "valueAddedTaxIncluded": true } },
      { "@type": "Offer",
        "itemOffered": { "@type": "Service", "name": "Front shoes, hind trim" },
        "priceSpecification": { "@type": "UnitPriceSpecification",
          "price": "150.00", "priceCurrency": "AUD",
          "unitText": "per horse", "valueAddedTaxIncluded": true } },
      { "@type": "Offer",
        "itemOffered": { "@type": "Service", "name": "Full set, cold-shod" },
        "priceSpecification": { "@type": "UnitPriceSpecification",
          "price": "220.00", "priceCurrency": "AUD",
          "unitText": "per horse", "valueAddedTaxIncluded": true } },
      { "@type": "Offer",
        "itemOffered": { "@type": "Service", "name": "Full set, hot-shod" },
        "priceSpecification": { "@type": "UnitPriceSpecification",
          "price": "280.00", "priceCurrency": "AUD",
          "unitText": "per horse", "valueAddedTaxIncluded": true } },
      { "@type": "Offer",
        "itemOffered": { "@type": "Service", "name": "Remedial and glue-on shoeing" },
        "availability": "https://schema.org/InStock" }
    ]
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "68"
  },
  "review": [
    {
      "@type": "Review",
      "author": { "@type": "Person", "name": "Robyn T." },
      "datePublished": "2026-06-14",
      "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
      "reviewBody": "Four horses done in one morning at Gidgegannup and the next visit in the diary before he left."
    }
  ]
}
</script>

Note the top-level type: schema.org has no farrier or equine-services subtype, so LocalBusiness is the correct organization type, and the trade is named through additionalType, knowsAbout and hasOfferCatalog rather than by inventing a type or borrowing VeterinaryCare, which would be a false claim about what this business does. Beyond the schema we would ship a Google Business Profile with the service-area radius rather than a street address, suburb landing pages for Gidgegannup, Ellenbrook and Serpentine, and the FAQ marked up once the answers are the client's own.

What changes for the real client

Iteration log