Security
Security practices
Last updated: 2026-04-20
[DRAFT — PENDING LEGAL REVIEW]
This page summarizes how QuillMD is built and operated. It's a transparent operational statement, not a marketing claim. If you need a signed SOC 2, ISO 27001, or HITRUST report, see "Certifications" below.
Application
- Auth via NextAuth (Auth.js v5) with JWT sessions, bcrypt-12 password hashing, 5-attempt lockout with 15-minute cooldown.
- Single-session enforcement: a new login revokes prior sessionTokens so stolen JWTs stop resolving.
- Every API route validates session + per-record ownership before serving data; cross-user access returns 404 to prevent ID enumeration.
- Structured input validation via Zod on every request that accepts user data.
- File uploads are size-capped (500 MB audio, 50 MB dictation) and MIME-validated before being streamed to object storage.
Infrastructure
- All services run in Docker containers on a dedicated VPS. No shared-tenant compute.
- Postgres (with pgvector for embedding workloads), Redis (BullMQ broker), and MinIO (S3-compatible object storage) are bound to localhost on the VPS. Public traffic enters only through Caddy.
- Caddy serves as the public edge; TLS is handled by Let's Encrypt with auto-renewal once a domain is configured.
- Secrets live in a root-owned
.envfile on the VPS only;.env*is gitignored.
Data handling
- TLS 1.2+ for every outbound call to AI providers, email, and the browser.
- At-rest encryption inherits from the VPS provider's disk encryption.
- A PHI scrubber (
redactPhi) masks emails, phone numbers, and SSNs in error logs and Sentry events. Free-text fields above a length threshold collapse to length markers. - Audio retention defaults to 90 days; transcripts retain for 7 years per HIPAA.
Operations
- Secrets rotated quarterly (JWT, AI provider keys) per our internal rotation runbook.
- Every deploy is preceded by a pg_dump backup; rollback path is documented.
- Production error surfacing via Sentry on the CRM app; transcribe-md Sentry integration is in progress (tracked in the T-M15 audit).
- Vulnerability disclosure: email
security@ashtechgroup.com. We aim to acknowledge within 48 hours. Please do not open GitHub issues for security reports.
Certifications
QuillMD does not currently hold a SOC 2, ISO 27001, or HITRUST certification. Our launch target is SOC 2 Type 2 readiness within 12 months of general availability. Our HIPAA posture is covered by BAAs and operational controls rather than third-party audit today.
Known gaps (transparent)
We publish pre-launch audit findings. See our internal docs/T-M15-AUDIT-REPORT.md (available on request for prospects under NDA) for the current queue of hardening work.
Contact
Security: security@ashtechgroup.com.