// Security & Compliance page function SecurityPage({ onNavigate }) { return (
Security & compliance

Built for the bar set by NHS, government & finance.

We've been hosting clinical workloads, processing payments and serving government departments since 2016. Security isn't a feature on our roadmap — it's the foundation we built the platform on.

{[ ["UK", "Data sovereignty"], ["CREST", "Pen-tested annually"], ["OWASP+", "Exceeds top-10 baseline"], ["ISO-aligned", "27001 controls mapped"], ].map(([k, v]) => (
{k}
{v.toUpperCase()}
))}
{/* Pillars */}
Five pillars

How we keep your data safe.

{[ { num: "01", t: "Application security", d: "CSRF and XSS protection in every form. Hashed passwords with bank-grade one-way algorithms. Account-lock and brute-force protection. IP-based rate limiting. SQL injection mitigation at the ORM layer.", items: ["OWASP Top 10 controls", "Parameterised queries", "Output encoding", "Content-Security-Policy headers", "HSTS + secure cookies"], }, { num: "02", t: "Identity & access", d: "Two-factor authentication out of the box (TOTP and SMS). SSO via Active Directory, Azure AD, Google Workspace and any SAML 2.0 IdP. Granular role-based access control with field-level permissions. Audit trail on every login.", items: ["2FA: TOTP & SMS", "SAML 2.0 SSO", "Azure AD / AD / Google", "Field-level RBAC", "Session timeout policies"], }, { num: "03", t: "Data protection", d: "Encryption at rest (AES-256) and in transit (TLS 1.3). UK data residency by default, EU/US on request. GDPR tooling baked in: consent ledger, configurable retention, right-to-erasure, data portability exports.", items: ["AES-256 at rest", "TLS 1.3 in transit", "UK residency default", "GDPR tooling built-in", "Configurable retention"], }, { num: "04", t: "Auditing & observability", d: "Every datastore writes a tamper-evident audit trail — who, what, when, before/after. Live security report flags weak configurations. Status panel surfaces health, performance and incident history in real time.", items: ["Immutable audit log", "Before/after snapshots", "Live security report", "Real-time status panel", "Anomaly alerting"], }, { num: "05", t: "Operational security", d: "CREST-certified penetration testing on every major release. UK-only engineering team with vetted access. Incident response runbooks, on-call rotation, and a published status history. Continuous platform updates roll out without customer downtime.", items: ["CREST pen tests", "UK-only access", "Vetted engineers", "On-call rotation", "Zero-downtime deploys"], }, ].map((p) => (
{p.num}

    {p.items.map(it => (
  • ))}
))}
{/* Compliance frameworks */}
Compliance

The frameworks we work to.

We've answered enough enterprise security questionnaires to know which controls customers ask about. Here's where we stand.

{[ ["UK GDPR & Data Protection Act 2018", "Full compliance. Consent ledger, retention policies, erasure tooling, DPIA support and Data Processor Agreements available.", "Compliant"], ["NHS Data Security & Protection Toolkit", "Submitted annually. We host clinical applications across multiple NHS Trusts under DSPT.", "Submitted annually"], ["Crown Commercial G-Cloud", "Approved supplier on the G-Cloud framework — public sector buyers can procure us via the Digital Marketplace.", "Approved supplier"], ["ISO 27001 controls", "We map to Annex A controls and can provide a control matrix on request.", "Aligned"], ["PCI-DSS (via Stripe)", "We don't store cardholder data — payments are tokenised through Stripe, who handle Level 1 compliance for us.", "SAQ-A"], ["Cyber Essentials", "Held continuously. Renewed annually with independent assessor.", "Certified"], ].map(([t, d, status]) => (

{status}

{d}

))}
{/* Subprocessors */}
Sub-processors

The trusted parties in our supply chain.

We keep this list deliberately short. Every name here has been vetted, contracted under DPA, and is subject to our ongoing security review.

{[ ["Amazon Web Services", "Compute, storage, networking", "EU-West-2 (London)"], ["Stripe", "Payment processing", "Tokenised — no PAN stored"], ["Google", "Ads, analytics, Maps API, reCAPTCHA", "Optional per application"], ].map(([k, v, where], i) => (
{String(i + 1).padStart(2, "0")}
{k}
{v}
{where}
))}
); } Object.assign(window, { SecurityPage });