Security & Data Practices
What we encrypt, what we never share, what we'd tell you in a breach.
Most security pages are written by lawyers and read like furniture. Ours is written by the people who built the system. If a coach in your audience asks "what happens to my client data," this is the answer to forward.
Subprocessors — every place your data touches
The complete list. If we ever add or remove one, this page updates and we send a notice email to all coaches.
Stripe (Payments)
PCI-DSS Level 1SOC 1, SOC 2 Type IIUSA
Handles all card data, recurring billing, payouts. We never see card numbers. Stripe privacy policy →
Neon (Postgres database)
SOC 2 Type IIAES-256 at restAWS us-east-2
All coach + client data lives here, encrypted at rest. Point-in-time restore available for last 7 days. Neon privacy policy →
Anthropic (Claude API for AI plan generation)
SOC 2 Type IINo training on your dataUSA
Powers AI plan generation, AI meal scan, AI rest-day messaging. We send minimum context. Anthropic privacy policy →
Netlify (Hosting + Edge functions)
SOC 2 Type IIDDoS protectionGlobal CDN
Hosts the static site + Netlify Functions for our API endpoints. Netlify privacy policy →
Brevo (Transactional + lifecycle email)
GDPR-compliantEU + USA
Sends welcome emails, billing notifications, lifecycle messages. Recipient email addresses only — no client training data ever sent. Brevo privacy policy →
What we do NOT collect
- Client cards or bank details — those go directly to Stripe, never to us.
- Browsing behavior or fingerprinting — no third-party analytics, no fingerprinting, no advertising trackers anywhere on this site. Aggregate traffic counts come from Netlify's server-side analytics (parsed from server logs, no client cookies, never leaves Netlify).
- Cross-site tracking — no Meta Pixel, no Google Analytics, no LinkedIn Insight, no retargeting cookies. Zero third-party tracker requests fire on page load. Verifiable in your browser's Network tab.
- Biometric or facial data — progress photos are stored as files, not analyzed for identity.
- Health information beyond what coaches log — we don't pull from Apple Health, Whoop, etc. unless the coach explicitly turns on those integrations (v0.3 roadmap).
The honest gaps
Things we don't have yet, by category, with timeline:
- 2FA on coach login — currently password-only with bcrypt hashing. TOTP-based 2FA ships v0.2 (Q3 2026).
- SOC 2 audit — not pursuing for v0.1. Cost is $30-100K and only relevant for enterprise sales. Will pursue in v0.4 if/when we go upmarket.
- HIPAA compliance — not pursuing yet. Most coaches don't need it. Required only for clinical PT/RD use cases — those land in v0.3 with a separate compliance audit.
- Single-tenant isolation — v0.1 isolates per coach by application logic, not Postgres RLS. Multi-trainer Studio tier introduces RLS in v0.2.
- Independent penetration test — internal security review only on v0.1. External pentest scheduled for v0.2 launch.
Reporting a vulnerability
If you find a security issue, email security@vantagedigital.dev directly. We respond within 24 hours, ship fixes for critical issues within 48 hours, and credit the reporter publicly (or anonymously, your call) on a vulnerability disclosure page once the fix ships.
We don't run a paid bounty program at v0.1, but we send a thank-you box of nice merch for verified valid reports. The bounty program lands in v0.3.
This page is the contract
Anything stated here is binding. If we change a practice, this page updates within 7 days and active coaches get an email. The version history of this page is visible in our public Git repo at github.com//vantage-digital — you can see every revision.
The honest threat model
You can't hide JavaScript from someone who installs your PWA. Cadence is a web app — the source is visible to anyone who opens DevTools, and the marketing site source is on GitHub publicly. Trying to obfuscate code is security theater. The right defense is "even with full source-code visibility, an attacker can't do anything harmful." That's how we build.
Specifically:
- No secrets in client code. No API keys, service tokens, or credentials are present in the JS that ships to your browser. AI-generation prompts, business logic, and integration credentials all live server-side in Netlify Functions.
- Server-side authorization on every API call. A coach cannot read another coach's data even if they discover the API endpoint URL. Tenant ID is read from the authenticated session, never from request parameters.
- Database row-level security. Neon Postgres enforces
WHERE tenant_id = current_authenticated_user on every table query, so even a misbehaving Function cannot leak across tenants.
- Security headers on every response: HSTS (HTTPS-only for 1 year), Content-Security-Policy (blocks unsanctioned scripts), X-Frame-Options DENY (no clickjacking), Permissions-Policy (disables unneeded browser features), Referrer-Policy (no leakage to third parties).
The full internal threat model is documented in marketing/security-threat-model.md. Eleven distinct threats catalogued (T1–T11), each with shipped mitigations and open todos. Studio reviews this quarterly.
Vulnerability disclosure (RFC 9116)
If you've found a vulnerability, please report it to security@vantagedigital.app. The full disclosure policy lives at /.well-known/security.txt (RFC 9116-compliant).
We commit to:
- Acknowledge your report within 72 business hours.
- Provide a status update within 7 business days.
- Coordinate disclosure timing with you — typically a 90-day window before public discussion.
- Credit you publicly on this page (in the acknowledgments section below) if you wish, or maintain your anonymity.
- Not pursue legal action against good-faith researchers operating within our published guidelines.
Out of scope: social engineering, physical attacks, denial-of-service testing, third-party sub-processor vulnerabilities (report directly to them), self-XSS, missing best-practice headers without demonstrable impact.
Acknowledgments
Researchers who have responsibly disclosed vulnerabilities to us appear here, with their consent. The list is currently empty because Cadence is in v0.1 and no vulnerabilities have been responsibly disclosed yet. If that changes, this section updates within 30 days of remediation.