Skip to content
Paradigm

Security

Security pages usually mean "trust us." This one means "check the file." Every claim below links to the code, the test, or the scan that backs it up, plus a section on what we don't have yet. If you can't verify a claim on a vendor's security page, that's the page you should trust less, not more.

Live scores (verified 2026-07-11)

Run live against this site on 2026-07-11, mobile emulation, simulated throttling. Raw report: docs/audits/LIGHTHOUSE_2026-07-11.json . We'll re-run and re-publish quarterly, or after any change that could plausibly move the numbers.

Tenant isolation

The customer portal uses a two-gate model for what a user can see, and it's a pure function, not a pile of scattered if checks: visibleAppIds() in src/lib/access.ts (portal-shell repo). An app shows up for a customer-role user only if both gates pass:

Losing either gate hides the app. Staff accounts bypass both by design (they need to see everything to run support); internal accounts only ever see internal-category apps, full stop. 19 of 19 tests pass against this logic ( src/lib/access.test.ts). And it's not just the UI trusting itself: every admin server action in src/app/admin/actions.ts calls a requireStaff() check independently, in the function body, not just at the page-layout level. That closes the classic Next.js hole where a server action gets called directly, skipping whatever gate the page around it had.

Auth and SSO

Cross-app SSO into the portal's tiles runs on signed JWTs, not shared cookies or a homegrown token scheme.

Data hygiene

What we don't have yet

This is the part most vendor security pages skip, and it's the part worth reading first if you're deciding whether to trust the rest of it.

Report a vulnerability

Found something? Email [email protected] directly. Don't open a public GitHub issue for it.