For procurement reviewers
Security model, plainly stated.
Everything below is the live state of the production deployment at hippocrateslog.com. Reach out for SOC 2 Type II evidence, audit-log samples, or a tabletop DR walkthrough.
Data classification
HippoHandover stores small operational identifiers — a coded name, age, sex, location, attending, diagnosis, plan. Free-text fields are user-controlled. The application never asks for legal name, MRN, PHIN, address, or DOB. We treat the entire database as PHI-equivalent: branch-scoped access on every query, audit log on every read, encryption at rest.
Identity & access
- Bcrypt password hashing (cost 12) on every account.
- HTTPS-only with HSTS preload, X-Frame-Options DENY, Cross-Origin-Opener-Policy, full Content-Security-Policy.
- Session cookies are HttpOnly, Secure, SameSite=Lax, 8-hour rolling timeout. Per-device session list with self-serve revoke at
/account. - Optional TOTP MFA (otplib v13) per user.
- Branch-scoped RBAC enforced on every API route. Patients are visible only to users with an active membership in the patient’s specialty branch + site combination.
- Account deletion + data export endpoints (GDPR/PHIA Article 15/17 equivalents).
Encryption
- In transit: TLS 1.3 via Vercel edge. HSTS max-age 2 years, includeSubDomains, preload.
- At rest: AES-256 on Supabase (Postgres) volumes by default; encrypted off-site backups.
- Patient photos are stored in-database (BYTEA), 1.5 MB cap, content-type-whitelisted, never on a public CDN URL.
- Reset / invite tokens stored as SHA-256 hashes; raw token only ever returned once.
Audit logging
An AuditLog row is written for every patient view, edit, archive, restore, handover generation, handover acknowledgment, role change, invite create/revoke, account delete, and login event. Each row records actor id, actor name, action, entity type, entity id, IP-derived rate-limit fingerprint, device coarse fingerprint, structured metadata, and UTC timestamp. Retention is unbounded by default; admins can apply institutional retention via a scheduled purge.
Operational metrics
- RTO (recovery time objective): < 60 minutes for a full service-restore from backup, ≤ 5 minutes for a redeploy of a known-good build.
- RPO (recovery point objective): ≤ 5 minutes against the Supabase point-in-time recovery (PITR) window; ≤ 24 hours against off-site daily backups.
- Uptime SLO: 99.5% rolling 30-day window, with a public live dashboard at /status.
- Incident communication: status-page banner + email to all institution admins within 30 minutes of a P1.
Sub-processors
- Vercel — application hosting + edge runtime. Region: iad1 (US East). SOC 2 Type II.
- Supabase — Postgres + realtime broadcast + storage. Region selectable per project. SOC 2 Type II.
- Resend — transactional email delivery (password resets, onboarding, invites). SOC 2 Type II.
- Groq — AI inference for the optional handover-AI feature. Disabled by default; admin must set
AI_EXTERNAL_PROVIDER_APPROVED=trueper institution policy. We never send PHI fields directly without first asking.
No third-party analytics, no advertising trackers, no marketing pixels. Browser console + Vercel runtime logs are the only telemetry sinks.
Privacy controls
- No PHI in URLs, page titles, browser notifications, OG previews, or analytics.
- Cookie consent banner with privacy-preserving defaults; we decline opt-in cookies on the user’s behalf.
- Versioned policy attestation: every “I accept” recorded with timestamp + policy version hash.
- Account deletion + data export endpoints publicly documented at /account.
Contact
Procurement and security questions: karimsidhom@outlook.com. Live status: /status. Public policies: /privacy · /terms · /aup · /data-processing.
This page is the living reference. Last regenerated by deploy on 2026-05-16.