Security
Last updated: May 14, 2026
Security isn't a feature — it's a foundation. This page describes how we actually protect your data, not aspirations. If a statement on this page is incorrect, email security@fleqra.com and we'll fix it.
Infrastructure
- Hosted on AWS (us-east-1) — EC2, Postgres, SES, S3, behind Caddy with auto-renewing Let's Encrypt certificates
- HTTPS everywhere via TLS 1.3; HSTS preload with 1-year max-age + includeSubDomains
- Daily encrypted database backups to AWS S3 with 90-day retention, server-side encryption (AES-256), and object versioning enabled
- Live backup-recency monitoring — every health-check poll verifies the latest S3 backup is < 26 hours old; a stale snapshot flips the public status badge at fleqra.com/status before customers notice
Data encryption
- In transit: All traffic encrypted via TLS 1.3
- At rest: Database disk encrypted via AWS EBS encryption
- OAuth tokens: Encrypted with AES-256-GCM before storage
- Passwords: Hashed with bcrypt (cost factor 12, never stored in plain text)
- Payment data: Never touches our servers — handled entirely by Stripe (PCI-DSS Level 1)
Access controls
- Multi-tenant isolation at the database row level — every query is scoped to your workspace via a mandatory
agencyIdfilter, enforced by Prisma model relationships, not just the UI - Role-based permissions (Owner, Admin, Manager, Member, Viewer) with a calibrated per-action role table — destructive operations (delete campaign, delete form, delete pipeline stage) require Manager or Admin
- Session lifetime: 8-hour idle, refreshed every hour, JWT-based, signed with a server-side secret never exposed to clients
- Session revocation: all active sessions for a user can be invalidated by setting
tokensValidAfteron the server — noAUTH_SECRETrotation needed, no support-ticket loop - Email verification and password reset flows; reset tokens are SHA-256-hashed at rest and single-use
- Brute-force protection: failed sign-ins capped at 5 per 15 minutes per (email, IP)
- SSH access to production servers restricted to known IPs only
Application security
- CSRF protection on all state-changing operations
- Input validation with Zod schemas on every endpoint
- Parameterized queries via Prisma (SQL injection prevention)
- Content Security Policy + Strict-Transport-Security + X-Content-Type- Options + Referrer-Policy + Permissions-Policy on every response
- Webhook signature verification for Stripe events; replays are idempotent via a
WebhookEventdedupe table - Per-route rate limiting on authenticated APIs (Postgres-backed, 60 req/min default with per-endpoint overrides)
- Regular dependency updates and vulnerability scanning
Observability
- Structured server-side logger with automatic PII redaction (passwords, tokens, secrets stripped from log lines)
- Sentry-backed error capture for unhandled exceptions in routes, server components, and middleware
- Public, machine-readable health endpoint at /api/health reporting database, configuration, and backup status with response times
- E2E smoke tests covering the public surface (landing, pricing, status, login, health) — runnable against production at any time
Email security
- Outbound email signed with DKIM and validated against SPF / DMARC
- AWS SES configuration set with bounce and complaint handling
- Auto-suppression of bounced or complained-about addresses
- Custom MAIL FROM domain (mail-from.fleqra.com)
Compliance & portability
- GDPR Article 15 data portability: one-click export of your entire workspace (agencies, members, contacts, deals, campaigns, audit log) as a structured JSON file. Sensitive material (password hashes, OAuth access/refresh tokens) is stripped before export.
- CCPA rights respected (delete, access, do-not-sell)
- Immutable audit log: every sign-in, billing event, and admin action writes a row to
ActivityLogwith the actor, action, and timestamp — investigated through Settings → Audit log - AWS SOC 2 Type II certified infrastructure (hosting + email)
- Stripe PCI-DSS Level 1 for payment processing
Incident response
If we discover a security incident affecting your data, we will notify affected users within 72 hours of confirmation, per GDPR requirements. We maintain runbooks for common incident scenarios.
Reporting vulnerabilities
Found a security issue? Email security@fleqra.com with details and a proof-of-concept if possible. We acknowledge reports within 2 business days and credit responsible reporters publicly with their permission.
Do not publicly disclose vulnerabilities until we have had reasonable time to fix them.
Contact
Security questions: security@fleqra.com