Greenlane Nutrition

Generative Assets · Industry Demos · how it was made

How the Greenlane Nutrition demo was built

Greenlane Nutrition is a fictional Victoria Park clinic of Accredited Practising Dietitians — gut health and IBS, weight and metabolic health, sports performance, pregnancy and family nutrition, in the clinic or by telehealth, with GP care-plan and NDIS billing. The page exists for one reader: the person a GP has just referred, or the runner chasing a PB, who wants to know what a program costs and what Medicare gives back before they ring. Its single job is a booking request with the program, format, focus and add-ons already priced — to the whole dollar, GST-free, rebates declared and never subtracted.

The Plan Builder

The signature element is a drawn SVG plate seen from above — the "healthy plate": half vegetables, a quarter protein, a quarter wholegrains, drawn as segments with simple food glyphs — with a ring of appointment dots around the rim over week ticks. Every control redraws the scene honestly and reprices the program from the pinned fees:

Pinned anchors (health fees, GST-free — rebates declared, never subtracted)

LineIn clinicTelehealthMultipliesNotes
Initial consult (60 min)$170$160oncealways present
Review appointment (30 min)$95$90appointments − 1 (0 / 3 / 6)Kickstart 1 + 3, Transform 1 + 6
Personalised meal plan$120$120flatlive at every combination
Pantry & supermarket session$150flatin clinic only — disabled "in person only" on telehealth, forced off, restored on chipping back
Body-composition scans$40 × appointmentsthe ACTUAL count (1 / 4 / 7)in clinic only — disabled "needs the clinic scanner", same restore rule
GP care planfee unchangedfee unchangednote: $60 × min(appointments, 5)"about $60 / $240 / $300 back across this program"; short form ≤640 px "GP care plan: about $N back from Medicare"
NDIS / private-health extrasno numberno number"NDIS participants — billed to your plan at the NDIS rate, ask us" on ledger and mirror; extras in the FAQ

Every rate is a whole dollar and every count a whole number, so no total ever needs rounding. A program, a format and a focus chip are always selected — there is no empty state, and the grid floors are the cheapest priced outputs per program (telehealth, nothing added). The restore memory for the two locked toggles is cleared by any explicit change to that toggle; because a disabled toggle cannot be changed, the memory survives until the format lock lifts — exactly the wave-wide rule.

Worked examples measured from the running page

ScenarioArithmeticTotalLine 2GP note
Rest state — Kickstart, in clinic, gut & IBS, meal plan on, scans on170 + 3 × 95 + 120 + 4 × 40$7354 appointments over 6 weeksabsent
Initial only, telehealth, nothing on (grid floor)160$160one 60-minute appointmentabsent
Initial only, in clinic170$170one 60-minute appointmentabsent
Kickstart, telehealth · Transform, telehealth160 + 270 · 160 + 540$430 · $700absent
Transform, in clinic, meal plan + pantry + scans170 + 570 + 120 + 150 + 280$1,2907 appointments over 12 weeksabsent; with the GP toggle on: "about $300 back across this program", total unchanged
Format lock drive — Kickstart, in clinic, pantry + scans → telehealth → in clinic455 + 150 + 160 → 430 → restored$765 → $430 → $765both toggles disabled with reasons, then restored
Initial only, in clinic, scans → + meal plan170 + 40 → + 120$210 → $330absent
GP note on initial only, telehealth160$160"about $60 back"
Focus neutrality from rest — every focus in turn$735 eachdeclaration on badge, ledger and mirror
Rapid-fire — in clinic, meal + scans, program initial → Transform → Kickstart → Transform in one evaluate170 + 570 + 120 + 280$1,140steam loop settles to exactly one

Every worked figure, the three grid floors ($160 / $430 / $700, equal to the services grid), the lock/restore sequence and 32 random control vectors were cross-checked against an oracle reimplemented from the anchors inside the verification harness — not from the page's own code. The final harness run: 397 assertions, all green (the index page plus this guide; the run count is printed in the pass log below).

Palette — a mint-white clinic wall, forest ink, a plum CTA

Argued from the subject: a clinical page that feels like a kitchen table. Leaf green for lines and marks only, apricot only in the drawn plate. Ratios below were computed with WCAG arithmetic from the shipped tokens in Pass 1 (role, hex and ratio from the same script row); every spec figure held.

Mint-white#F3F7F1 page ground; cards #FFFFFF, soft cards #F7FAF5
Forest#1E3528 body ink · 12.15:1 on the ground, 13.17:1 on white; map labels 9.89:1 on the river fill, 11.15:1 on land
Plum#7D2A58 CTAs, the badge price, links · white on it 8.96:1 (hover #68224A 10.96:1); as ink 8.27:1 on the ground, 8.96:1 on white
Leaf#6FA24A rules, chip outlines, the ring and its ticks, the badge's stem · 2.79:1 on the ground — lines and marks only, never text
Leaf-ink#3F6B28 leaf-coloured small copy · 5.80:1 on the ground, 6.28:1 on white, 5.96:1 on soft cards, 5.28:1 on the leaf tint
Apricot#F0B46A the plate's warm foods only (outlined in #C98A3E) · 1.69:1 — fill only, never text, never chrome
Mint text#DCEBD8 the trust strip's copy on forest · 10.61:1; footer copy #C3D3BE 8.39:1, quiet links #9FB59A 5.99:1
Medicare green#1B8A3E the GP care-plan tick on the ring — a mark under a white tick, never text

No token moved in Pass 1: the pre-minted leaf / leaf-ink pair meant the leaf was never asked to carry text, and the plum clears 8:1 everywhere it prints. The form's invalid state uses a deep rose #8E2A3A on #FBEEF1 (7.32:1) rather than the plum, so an error never reads as a call to action.

Type

$735 · Kickstart · 6 weeks · in clinic
Fraunces 600, optical size 72, SOFT 60 — a warm serif that reads like a recipe card. Headings, the display line over the plate, the card price, the ledger total, "from" prices.
An initial consult, a short program or a twelve-week change — priced to the dollar before you book.
Nunito Sans 400–700 — the workhorse: 17 px body (16 px minimum on mobile), labels, ledger, form. Eyebrows in 12.5 px caps at .14 em tracking.

The display moment is the rest-state line set over the plate — "$735 · KICKSTART · 6 WEEKS · IN CLINIC" — rebuilt from state on every change so the figure is always the live total; the separators travel with the token that follows them so a wrap never strands a middle dot at a line end.

Techniques

Conversion decisions

Local SEO we'd implement for the real business

The live page carries only WebPage, WebSite and BreadcrumbList structured data naming it a demonstration — a fictional clinic must not mark itself up as a real one. For the real client we would ship the block below. The top-level type is MedicalBusiness — the schema.org organisation subtype for a clinic (there is no Dietitian organisation type; "Dietitian" is not a type at all, and a specialty enumeration would be the wrong family), with the dietetics speciality carried by medicalSpecialty and knowsAbout. Real reviews would be pulled from Google Business Profile and marked up only with the reviewer's consent.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MedicalBusiness",
  "name": "Greenlane Nutrition",
  "description": "Accredited Practising Dietitians in Victoria Park — gut health, metabolic health, sport and pregnancy nutrition, in the clinic or by telehealth.",
  "url": "https://www.example-greenlane.com.au/",
  "telephone": "+61 8 9000 0370",
  "image": "https://www.example-greenlane.com.au/clinic.jpg",
  "priceRange": "$$",
  "medicalSpecialty": "Dietetic",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Albany Highway",
    "addressLocality": "Victoria Park",
    "addressRegion": "WA",
    "postalCode": "6100",
    "addressCountry": "AU"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": -31.976, "longitude": 115.905 },
  "areaServed": ["Victoria Park", "Carlisle", "Como", "Bentley", "Kensington", "South Perth", "Belmont", "Cannington", "Perth"],
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday"], "opens": "08:00", "closes": "18:00" },
    { "@type": "OpeningHoursSpecification", "dayOfWeek": "Friday", "opens": "08:00", "closes": "16:00" }
  ],
  "knowsAbout": ["dietetics", "irritable bowel syndrome", "low-FODMAP diet", "type 2 diabetes", "sports nutrition", "pregnancy nutrition", "NDIS dietetics", "telehealth"],
  "isAcceptingNewPatients": true,
  "availableService": [
    { "@type": "MedicalTherapy", "name": "Initial dietitian consultation (60 min)" },
    { "@type": "MedicalTherapy", "name": "Kickstart 6-week program" },
    { "@type": "MedicalTherapy", "name": "Transform 12-week program" }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Appointments and programs",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Initial consult" }, "priceSpecification": { "@type": "PriceSpecification", "price": "160", "priceCurrency": "AUD", "description": "from, telehealth; $170 in clinic; GST-free" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Kickstart 6-week program" }, "priceSpecification": { "@type": "PriceSpecification", "price": "430", "priceCurrency": "AUD", "description": "from, telehealth; GST-free" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Transform 12-week program" }, "priceSpecification": { "@type": "PriceSpecification", "price": "700", "priceCurrency": "AUD", "description": "from, telehealth; GST-free" } }
    ]
  },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "112" },
  "review": [
    {
      "@type": "Review",
      "author": { "@type": "Person", "name": "Real client, with consent" },
      "datePublished": "2026-03-02",
      "reviewRating": { "@type": "Rating", "ratingValue": "5" },
      "reviewBody": "Pulled from the live Google Business Profile feed — never hand-written."
    }
  ]
}
</script>

Alongside the schema: a Google Business Profile with the clinic pinned on the Albany Highway strip, "dietitian Victoria Park" / "IBS dietitian Perth" / "NDIS dietitian Perth" / "telehealth dietitian WA" as the page's core phrases with the suburbs above as secondary, NAP consistency across HealthEngine, Hotdoc and the Dietitians Australia "Find a Dietitian" directory, and a reviews feed that updates without anyone touching the page.

What changes for the real client

Iteration log

One composition call resolved by the builder and worth naming: the spec's "ring of appointment dots" pins four dots over six ticks and seven over twelve; the ring is drawn as a 270° arc opening at the bottom so the GP care-plan tick has a place on the ring's line without sitting on a dot, and so the last review dot never lands exactly where the initial one started.