Security

How the platform protects your data

A candid inventory of what's actually shipped, including the gaps we haven't closed yet. We'd rather be specific than wave around “enterprise-grade” copy.

Last updated: June 2026
Identity and Access

Authentication, approval, and webhook integrity

Authentication: Clerk (SOC 2 Type II provider)

SHIPPED

Google OAuth and email/password login. MFA support, password policy enforcement, brute-force throttling, and session management are all owned by Clerk. We never see a password.

Approval gate

SHIPPED

Self-signups land in a pending state and cannot reach the platform until a super-admin approves them. A stray Google account cannot auto-provision itself in.

Webhook integrity

SHIPPED

Clerk and Inngest webhooks are signature-verified (svix / HMAC) before any database write.

Authorization and Multi-Tenant Isolation

Role model, scoped queries, and cross-agency rejection

Three-tier role model

SHIPPED

super_admin (Soundcheck staff), admin (agency operator), user (agency seat-holder). Roles are enforced server-side. Client-side checks are UI sugar only.

Scoped queries by default

SHIPPED

Every database read for a tenant resource flows through a single helper that filters by agency and assignment. No raw queries bypass it.

Layout-level gates

SHIPPED

Direct URLs to super-admin or admin-only routes are gated at the layout layer.

Cross-agency rejection

SHIPPED

Server actions validate that every resource belongs to the operator's own agency before mutating.

Soft delete

SHIPPED

Tenant resources carry a deleted-at flag. Queries always filter on it. Accidental deletes are recoverable.

Data Isolation Between Operators

Schema-layer silo and contractual commitments

Schema-layer silo

SHIPPED

Every tenant table carries an agency_id foreign key.

Contractual commitments (Trial Tier Terms, section 7.3)

ACTIVE
  • No operator's confidential information used to develop competing products.
  • Aggregated learnings anonymized to a non-identifiable level.
  • Internal admin access limited to necessary personnel, bound by written confidentiality.
  • Internal admin-access logs maintained and producible on request.
Incognito Mode

Per-project lockdown for regulated industries

Finance, healthcare, defense. An operator-flippable toggle that locks super-admins out of project content at the server level.

What gets locked

SHIPPED

Super-admins cannot open project detail, dashboard, reports, personas, share links, bot conversations, or file downloads. Server-side enforcement.

What stays visible

BY DESIGN

Project existence, owning agency, product type, status, and aggregate token counts (for billing only).

Toggle control

SHIPPED

Only the project owner or admin of the owning agency can toggle. Super-admins cannot disable it.

Strategic project inheritance

SHIPPED

GoGlobal and Scale engagements inherit Incognito from their parent research project.

Audit trail

SHIPPED

Every flip is recorded with actor and timestamp.

Limitation (we are being honest)

Automated workers (research generation, dashboard distillation) still run inside the project. Data never reaches a human at Soundcheck while the flag is on. It only reaches Anthropic's API under their no-training agreement.

Transport, Storage, and Secrets

Encryption in transit and at rest, key management

TLS in transit

ACTIVE

All traffic over Vercel TLS 1.2+. Database connections use Neon TLS. File uploads via signed HTTPS URLs.

At-rest encryption

ACTIVE

Neon Postgres AES-256. Vercel Blob encrypts at rest.

Secrets management

ACTIVE

All API keys in Vercel environment variables. Nothing committed to source. .env.local gitignored.

Anthropic API key isolation

ACTIVE

Server-side only. Every Claude call runs in Inngest functions or server actions. The key is never reachable from the browser.

File Uploads and Parsing

Direct-to-blob, server-side parsing, validation

Direct-to-Blob uploads

SHIPPED

Via short-lived signed URLs. The platform never proxies bytes through application servers.

Server-side parsing

SHIPPED

PDFs, DOCX, XLSX, PPTX, and images are parsed server-side. Raw binaries stay in Blob storage.

Mime and size validation

SHIPPED

Validated at both upload time and parse time.

Public Sharing (Branded Dashboards)

Non-guessable URLs, password gates, instant disable

Non-guessable URLs

SHIPPED

12-character random slug, 71 bits of entropy.

Optional password gate

SHIPPED

Per-share bcrypt(12)-hashed password with HMAC-signed cookie session.

Disable on demand

SHIPPED

Returns 404 immediately. Slug stays bound for re-enable.

No platform chrome on shared views

BY DESIGN

Shared dashboards show no Soundcheck navigation or branding.

Incognito Mode beats sharing

BY DESIGN

Public share still works for end-clients. The lockout is for Soundcheck staff only.

Telegram Bot Integration

Session binding, signature verification, audit log

Per-conversation session binding

SHIPPED

Each session is bound to one share slug and one Telegram user ID.

Webhook signature verification

SHIPPED

403 on unsigned requests.

Operator-only audit log

SHIPPED

Every message is persisted and visible via the Bot Conversations panel.

Deep-link gating

SHIPPED

Bot deep-link only minted with an active monthly subscription or admin access.

Same data boundary

BY DESIGN

No cross-project access.

AI Handling

Model training, synthetic personas, context isolation, anonymization

This is usually the first thing enterprise buyers ask about.

No model training on prompts

ACTIVE

Anthropic's API agreement does not use prompt/response content for training.

Synthetic personas

BY DESIGN

Constructs grounded in research, not real identifiable persons.

Per-engagement context isolation

SHIPPED

Each Claude call is scoped to one project. No cross-tenant pooling.

Anonymized engagement pool (Stage 1, platform-only)

SHIPPED
  • Categorical tags only (archetype, friction, concept-pattern, score band).
  • No client names, brand names, or verbatim quotes.
  • Origin hash: SHA-256 with environment-protected salt (computationally one-way).
  • k-anonymity >= 5 enforced at every aggregate query layer.
  • Quarterly re-identification audit cron.
  • Operator opt-out at agency and per-engagement level.
  • Incognito Mode projects excluded automatically.

Stage 2 (cross-operator benchmarks) and Stage 3 (external reports) are NOT live.

Billing Integrity

Snapshot model, audit logs, frozen pricing, no PCI scope

Snapshot model

SHIPPED

Every project snapshots its tier and rate at creation. Changes never retroactively re-bill.

Tier change audit log

SHIPPED

Actor, timestamp, prior/new tier, and reason recorded on every change.

Frozen Reference Pricelist for Founding Cohort

ACTIVE

Future MSRP hikes never retro-price Founding Cohort operators.

Month-by-month billing

SHIPPED

Once a billing month is closed, line items are frozen and uneditable.

Incognito Mode and billing

BY DESIGN

Rollups use metadata-only joins. Billing never opens locked project content.

No payment data on the platform

BY DESIGN

Operators are billed off-platform via wire/ACH. No credit cards, no Stripe, no PCI scope.

Legal Record-Keeping

T&C acceptance, versioning, admissibility, export

Per-user T&C acceptance

SHIPPED

Captures timestamp, IP, user-agent, and exact version accepted.

Version re-prompt

SHIPPED

Users are re-prompted on new T&C versions automatically.

Admissibility framework

ACTIVE

Florida Uniform Electronic Transaction Act and federal E-SIGN Act.

Litigation export

SHIPPED

Printable per-user record with CSV export.

What We Haven't Done Yet

The gaps, listed plainly

This is usually where vendor security pages go quiet. We would rather list it.

No SOC 2 / ISO 27001 attestation of our own. Clerk, Vercel, Neon, and Anthropic are SOC 2 certified. Our platform layer is not certified. On the roadmap, but not signed-and-attested today.
No third-party penetration test conducted to date.
No bug bounty program.
No platform-wide rate limiting beyond Vercel's edge protections.
2FA supported by Clerk but not enforced by default. Easy to flip per-agency on request.
No custom Content Security Policy headers beyond Next.js defaults.
No formal GDPR data-processing agreement template published yet. Trial Terms section 3.4 reduces GDPR surface. DPA template is a near-term to-do.
Reporting a Security Issue

How to reach us

Email info@soundcheckinsights.com with the subject line “Security report”.

Security reports are prioritized above everything else. Acknowledged within one business day.

Legal questions: valter@soundcheckinsights.com

Questions about our security posture?

Talk to Sales →