// Home page function HomePage({ onNavigate, openCaseStudy }) { return (
{/* Hero */}
UK-built · Since 2014 · NHS & government trusted

Bespoke software,
built right.

We design, build and ship custom business software on our own development platform — so you get production-ready software in weeks, not quarters.

{/* Trusted by — logo wall */}
TRUSTED BY UK ORGANISATIONS { e.preventDefault(); onNavigate("about"); }} className="btn-link">All clients
{TRUST_LOGOS.map((l) => (
))}
{/* Two paths */}
How we help

Two paths. One platform.

Whether you have a vision and need a partner to build it, or a team that wants to build it themselves — we have you covered.

onNavigate("bespoke")} accent /> onNavigate("platform")} />
{/* Apple-style anatomy section */} {/* Use cases — buyer-language entry points */} {/* Comparison */}
Why ActiveManage

We replaced the framework, the database tier, and the boilerplate.

Compare against how everyone else still builds software in 2026.

The old way Manual development
Recommended The AM way ActiveManage
{[ ["clock", "Time to market", "9–18 months", "2–8 weeks"], ["wrench", "Maintenance burden", "Falls on your team", "Included in the platform"], ["shield", "Security posture", "Do-it-yourself", "OWASP+, CREST-tested"], ["server", "Hosting & scaling", "Provision it yourself", "UK-sovereign, one click"], ["key", "Knowledge lock-in", "High — walks out the door", "Visual, kept in-house"], ["refresh", "Update cadence", "Whenever you can", "Continuous, inherited"], ["coins", "Cost over 5 years", "£££", "£"], ].map(([icon, metric, oldv, newv], i) => (
{metric}
{oldv}
{newv}
))}
{/* Apple-style interactive builder */} {/* AI onboarding */} {/* Integrated ITSM — support built into every app */} {/* Case studies — hidden
Selected work

Case studies.

openCaseStudy("oneportal")} accent /> openCaseStudy("halliday")} />
openCaseStudy("compliantepc")} /> openCaseStudy("leaphub")} />
*/} {/* Testimonials */}
What clients say

Taken at their word.

We don't do case-study theatre. These are the people who use the software every day.

“They understood safeguarding better than vendors who'd been in education for a decade. Schools actually enjoy using it.”
OP
Founder
ONEPORTAL
“Every piece of kit is accounted for — for the first time in the company's history. The engineers took to it in a fortnight.”
HL
Operations Director
HALLIDAY LIGHTING
“Invoicing that used to eat evenings now happens on its own. The system pays for itself monthly.”
CE
Director
COMPLIANT EPC
{/* Big CTA */}
Ready when you are

Stop rebuilding
foundations. Start shipping.

Talk to us about replacing your stack of frameworks, plug-ins and consultancies with one platform.

); } function Stat({ n, l }) { const [txt, setTxt] = React.useState(n); const ref = React.useRef(null); React.useEffect(() => { const m = n.match(/^([^0-9]*)([\d.,]+)(.*)$/); if (!m || !ref.current) return; const target = parseFloat(m[2].replace(/,/g, "")); const decimals = (m[2].split(".")[1] || "").length; const io = new IntersectionObserver(([e]) => { if (!e.isIntersecting) return; io.disconnect(); const t0 = performance.now(); const tick = (t) => { const p = Math.min(1, (t - t0) / 1300); const eased = 1 - Math.pow(1 - p, 3); setTxt(m[1] + (target * eased).toLocaleString("en-GB", { minimumFractionDigits: decimals, maximumFractionDigits: decimals, useGrouping: false }) + m[3]); if (p < 1) requestAnimationFrame(tick); }; requestAnimationFrame(tick); }, { threshold: 0.6 }); io.observe(ref.current); return () => io.disconnect(); }, []); return (
{txt}
{l}
); } function PathCard({ num, tag, title, copy, cta, onClick, accent }) { return ( ); } function CmpIcon({ name }) { const p = { clock: <>, wrench: , shield: , server: <>, key: <>, refresh: <>, coins: <>, }[name] || ; return {p}; } function Check() { return ; } function Cross() { return ; } function CaseCard({ slug, client, title, tags, metric, accent, onClick }) { const logo = slug && CLIENT_LOGOS[slug]; // Per-card colour — gives the case-study row visual variety in light mode const tints = { oneportal: { bg: "linear-gradient(135deg, oklch(0.55 0.18 264), oklch(0.42 0.2 280))", ink: "#fff", pat: "#fff" }, halliday: { bg: "linear-gradient(135deg, oklch(0.32 0.04 260), oklch(0.2 0.03 260))", ink: "#fff", pat: "var(--accent-4)" }, compliantepc: { bg: "linear-gradient(135deg, oklch(0.62 0.18 145), oklch(0.5 0.16 155))", ink: "#fff", pat: "#fff" }, leaphub: { bg: "linear-gradient(135deg, oklch(0.65 0.21 28), oklch(0.5 0.2 18))", ink: "#fff", pat: "#fff" }, }; const tint = (slug && tints[slug]) || { bg: accent ? "var(--accent)" : "var(--bg-sunken)", ink: accent ? "var(--accent-ink)" : "var(--fg)", pat: "currentColor" }; return ( ); } Object.assign(window, { HomePage });