Encryption in transit
TLS 1.3 enforced via Caddy + Let's Encrypt; HSTS header pinned (1-year max-age, includeSubDomains, preload).
Honest disclosure of what's in production today and what's on the roadmap. No claims we can't back up.
TLS 1.3 enforced via Caddy + Let's Encrypt; HSTS header pinned (1-year max-age, includeSubDomains, preload).
Hetzner CX23 disk + libsql DB stored on encrypted volume. Stripe handles all payment-card data — we never see or store card numbers.
CA / TX / VT / OR resident contacts and EU IPs blocked entirely at the edge (Caddy MaxMind geoIP) AND at every API endpoint AND at DB ingest. Three layers of defense.
Security headers (X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy lockdown). Drizzle ORM with parameterized queries (no SQL injection vectors). Rate-limited APIs with anti-bot UA filtering.
Bcrypt password hashing via better-auth. Session tokens stored as httpOnly cookies, 30-day rolling expiry. Per-IP login attempt rate-limiting.
We'll update this page when each item lands. We won't claim certifications or controls we don't have.
We maintain an incident response plan and will notify affected users within 72 hours of a confirmed data breach, as required by applicable regulations.
Found a vulnerability? Email security@leadsapp.com. We'll acknowledge within 24 hours.