Encryption
Every PHI field, every transmission.
Encryption is the load-bearing primitive. We don't make it configurable.
- AES-256-GCM at rest on every PHI field
- TLS 1.2+ in transit · TLS 1.3 preferred
- API keys hashed with SHA-256 · never plaintext
- PGP-wrapped SFTP with key-based authentication
- Per-tenant data encryption keys · KMS-managed
Access controls
Authorization at every layer.
Authorization checks run at the application layer AND at the database layer. Belt-and-suspenders on every PHI read.
- Role-based access control (RBAC) for dashboard users
- API key authentication with per-client rate limiting
- Row-level security (RLS) at the Postgres layer
- MFA required for administrative access
- Impersonation gating with 15-minute countdown + reason gate
Audit + observability
Tamper-evident, not just append-only.
Hash-chained audit log captures every admin action and every PHI access. Cryptographic chain — modifying a row breaks the chain forensically.
- Hash-chained audit log (migration 0012)
- Per-PHI-access audit emit · cryptographically chained
- Sentry-integrated structured logging
- Per-tenant impersonation_sessions table with 15-min TTL
- AI anomaly alerter on rejection-rate spike + novel reason codes
Infrastructure
Hosted on SOC 2 Type II infrastructure.
Vercel for the application layer, Neon Postgres for storage, Upstash Redis for distributed rate-limiting. No PHI ever lands in edge caches or CDN layers.
- Vercel · SOC 2 Type II certified
- Neon Postgres · automated backups + PITR
- Upstash Redis · distributed rate-limiting (no PHI)
- PHI explicitly excluded from edge cache layer
- SFTP host allowlist enforced before any transmission
Incident response
Detection + breach notification + retention.
Detection running every 5 minutes. Breach notification ready under HIPAA's 60-day window. Retention policies operator-configurable per tenant.
- Automated breach detection · 5-minute cadence
- 60-day breach notification plan · HIPAA-compliant
- Per-tenant retention policy with automated purge
- Incident severity gates triggered on real-data presence
- Runbook: docs/ops/anomaly-alerts-runbook.md
Software supply chain
Dependency hygiene + audit posture.
Dependency upgrades sequenced through a documented deferral policy. CI gates on `npm audit --audit-level=high`. Moderate-tier deferrals tracked publicly.
- CI fails on any high-severity npm audit finding
- Deferral docs published in `docs/security/`
- TypeScript strict mode + ESLint custom rules
- Cross-product `@velora/audit` shared utility package
- Migration 0055 dropped legacy audit_log orphan (Path A)