// Bespoke page function BespokePage({ onNavigate }) { return (
Bespoke development

You bring the idea.
We bring it to life.

We don't write you a quote, then disappear for nine months. We build on the same platform we license — so the software is yours to extend, in-house, forever.

{/* Process */}
How it works

A four-step process. No surprises.

{[ ["Discovery", "We sit down (in person, if you're in the UK) and map your processes onto the platform's primitives. Free.", "Week 0–1"], ["Prototype", "Within two weeks you're clicking through a working version. Real datastores, real flows, real auth.", "Week 1–3"], ["Build & iterate", "Weekly demos. You watch the software take shape. Course-correct in days, not quarters.", "Week 3–10"], ["Handover", "Your team gets the keys. Full visual builder access. We're a Slack message away.", "Ongoing"], ].map(([k, v, when], i) => (
{String(i + 1).padStart(2, "0")}
{k}
{v}
{when}
))}
{/* What you get */}
What you get

Software, not a bill of materials.

{[ { t: "Production-ready software", d: "Hosted on UK infrastructure with SLAs. Or hand it to your team to host." }, { t: "Source ownership", d: "The platform is licensed, the application is yours. No lock-in." }, { t: "Direct line to engineers", d: "Real humans on Slack. No tier-1 tickets. No outsourced support desks." }, { t: "Visual edit access", d: "Your team can change forms, fields, reports — without involving us." }, { t: "Continuous updates", d: "Platform features ship monthly. You inherit them automatically." }, { t: "Compliance baked-in", d: "GDPR, audit trails, role-based access, encryption — out of the box." }, ].map(({ t, d }) => (

{t}

{d}

))}
{/* Engagements (no prices) */}
Engagements

Three ways to work together.

We scope each engagement individually. Discovery is free; we'll come back with a fixed-price proposal you can take or leave.

{/* CTA */}

Got a brief, an itch, or just an idea on a napkin?

We'll have a proper conversation, not a sales call. Free, no obligation.

); } function Engagement({ name, tag, bullets, accent, onNavigate }) { return (
{accent && Most popular}
{tag}

{name}

); } Object.assign(window, { BespokePage });