Security

Security at ComplianceKit

This page explains the operational security posture behind the product, including auth, boundaries, payments, crawler safety, logging, and incident response.

Effective Launch versionLast updated Current release

At a glance

Narrow public surface, controlled private data

Security relies on server-side authorization, workspace separation, and limited data exposure rather than broad public access.

Public boundary

Only published legal pages are public. Workspace data stays private.

Payment boundary

Stripe handles payment details; webhooks unlock access only after verification.

Contact

Support channel in the app footer

Section

Security overview

ComplianceKit separates private workspace data from public legal pages. Security is based on authentication, server-side authorization, workspace boundaries, payment-provider boundaries, and limited data exposure.

No security program can promise absolute protection, but the product is designed to keep the public surface narrow and the private surface controlled.

Section

Data boundaries

  • Private audits, reports, and drafts remain in the workspace.
  • Public legal pages only show documents the user publishes.
  • Source audit IDs, recommendation IDs, and private evidence should not appear on public pages.
  • Published pages are public by design and may be visible to anyone with the URL.

Section

Authentication and access control

Access control is enforced with Supabase auth, session cookies, workspace membership checks, and server-side authorization.

  • Server-side checks gate report unlocks and document generation.
  • Workspace-scoped tables should rely on RLS and server checks together.
  • Service-role access should remain server-only.
  • Protected actions should fail closed rather than assume client state is trustworthy.

Section

Payments

Stripe handles payment details. ComplianceKit stores checkout and payment references, status, and entitlement state.

  • We do not store full card numbers.
  • Webhook signature verification is required before entitlements change.
  • Duplicate or repeated webhook events should be handled idempotently.
  • Unlocks should not activate until payment confirmation is verified.

Section

Crawler safety

The crawler is intentionally limited and conservative.

  • It is intended for public URLs only.
  • It blocks localhost, private, and internal network targets.
  • It limits redirects, timeouts, response size, and page count.
  • It does not require credentials.
  • It does not intentionally persist raw full HTML by default.
  • It stores only safe evidence snippets and metadata needed for the report.

Section

Data storage and retention

Operational data lives in Supabase-backed tables, document version history, and lifecycle metadata needed to power the app.

  • Document versions should remain append-only.
  • Audit lifecycle data should preserve what happened during scans and retries.
  • Logs and backups may retain some data for a limited time.
  • Users can request deletion through the contact channels listed below, subject to legal and operational limits.

Section

Analytics and logging

Analytics are optional and should stay narrow.

  • PostHog is optional and should be a no-op when not configured.
  • Analytics should avoid raw document bodies and private audit content.
  • Logs are used for reliability, debugging, security, and abuse prevention.
  • When analytics are not configured, tracking should not expose data elsewhere.

Section

Secrets and infrastructure

Secrets should stay in server-side environment variables and out of the client bundle. Stripe and Supabase secret keys must only be used in server-only code.

If an exposed secret is discovered before production release, it should be rotated before the app is considered ready for launch.

Section

Vulnerability disclosure

If you believe you found a vulnerability, contact us through the support channel in the app footer.

  • Do not access, delete, or modify data that is not yours.
  • Do not run destructive tests.
  • Give us reasonable time to investigate before public disclosure.
  • No bug bounty is implied unless we explicitly announce one.

Section

Incident response

If we identify a security incident, our response is to investigate, contain, remediate, and, where required, notify affected users or regulators.

We also use incidents to improve controls and reduce the chance of repeat issues.

Section

Security limitations

  • No system is perfectly secure.
  • Users are responsible for protecting their own account credentials.
  • Generated documents must be reviewed before use or publication.
  • Public documents are public by design and should be published carefully.