Skip to main content

Trust boundaries

Security measures

Transport security

HTTP security headers

Helmet is applied globally:
CSP is disabled because the React SPA loads inline scripts and styles that CSP would block. This is a known trade-off tracked in Known limitations. SameSite=None is required because the frontend (Firebase) and backend (Render) sit on different origins. See Authentication.

Input security

CORS configuration

Origins are parsed from the FRONTEND_ORIGIN environment variable: the Firebase Hosting URL in production, http://localhost:5173 in development.

Attack surface assessment

Security gaps (MFA, CSP, RLS, account lockout, and others) are tracked with priorities in Known limitations and scheduled in Future architecture.