LEGAL · SECURITY
How we protect it.
Encryption at rest, least-privilege, and human review.
LAST UPDATED · 2026-04-18
We handle birth data that — while not legally classified as "sensitive personal data" in most jurisdictions — is genuinely personal. This page documents exactly how we protect it, in specifics, not vague claims.
Transport
- All site traffic on TLS 1.3 end-to-end. Certificates issued by trusted authorities (Let's Encrypt and Cloudflare) and auto-renewed.
- HSTS enabled with
max-age=31536000; includeSubDomains. Once your browser talks to us once, it refuses to downgrade to HTTP. - All traffic between our application and database is authenticated and encrypted in transit with TLS.
Storage & encryption
- Account passwords hashed with a modern memory-hard algorithm (handled by better-auth), not stored in plaintext or reversible form.
- Birth time — the most sensitive field — held in a database with server-side-only access, never exposed to the internet.
- Session tokens stored as HttpOnly, Secure, SameSite=Lax cookies. Not readable by JavaScript.
- Daily backups replicated off-site, retained 14 days on-site; snapshots cycle out within 2 years, verifiable via our rotation policy.
Infrastructure
- Application hosted on Vercel (SOC 2 Type 2, CCPA/GDPR compliant), in the United States.
- Customer data is stored in an isolated, firewalled database that only our application can reach, over an authenticated and encrypted connection.
- Cloudflare sits in front of every domain — DDoS protection, bot management, WAF rules for known attack patterns.
- Payment processing end-to-end through Stripe — we never see or store card numbers.
Application security
- Security headers on every response: CSP, X-Content-Type-Options, X-Frame-Options: DENY, Referrer-Policy: strict-origin-when-cross-origin, HSTS.
- Database access only via parameterized queries through drizzle-orm. No string-concatenated SQL, anywhere.
- All user input validated at the API boundary with Zod schemas before it touches application logic.
- Dependencies scanned on every deploy. CVE advisories trigger automated PR bumps within 24 hours.
Access control
- Session-based authentication via better-auth. Sessions expire after 7 days of inactivity; renew on each request.
- Password reset flow with single-use tokens that expire in 30 minutes.
- Two-factor authentication (TOTP, no SMS) is available. Enable it under Settings → Security; single-use backup codes are issued at setup.
- Internal team access to production data is role-restricted and logged.
Data protection
- Minimal data collection — we store only what readings require.
- Deletion is honoured within 7 days in production databases, 30 days in logs/analytics, 2 years in backup snapshots. See Privacy Policy.
- Your birth data and readings are never used to train any AI model — ours or a third party's.
- GDPR and CCPA rights honoured; contact us for access, correction, deletion, or portability.
Monitoring & incident response
- Automated monitoring checks core services every 5 minutes and alerts our on-call team to any disruption immediately.
- Daily automated database integrity checks before each backup.
- Confirmed security incidents trigger user notification within 72 hours, in line with GDPR Art. 33.
Responsible disclosure
Found a vulnerability? Please report it privately — don't exploit, don't publicly disclose until we've had a reasonable window to patch. We do not run a paid bounty program yet, but we do credit researchers in release notes with your permission.
Contact: support@zodiacs.ai, subject line [SECURITY]. We respond within 72 hours.
✦
QUESTIONS · SUPPORT@ZODIACS.AI