← Stat Notes  /  Security Overview

Security Overview

A plain-English summary of how Stat Notes protects your broadcast data, designed to answer the questions a corporate security team will actually ask. For the full security questionnaire response or a signed NDA + deeper technical detail, email [email protected].

Last updated: April 2026  ·  Owner: Colin DeFord, Founder  ·  [email protected]

1. TL;DR — what a security team cares about

AreaStatus
TransportTLS 1.3 end-to-end, browser → Cloudflare → app → database
Secrets at restAES-256-GCM, keyed by a separate Key Encryption Key (KEK) held out-of-band
SSOOIDC and SAML 2.0, per tenant, self-serve. Full protocol-level controls (PKCE, state, nonce, XML signature verification, replay prevention)
Passwordsbcrypt cost 12 — or no password at all (magic-link only); your choice
Tenant isolationEvery DB row tagged with tenant_id. Cross-tenant queries are impossible by design.
Audit logAppend-only. Every login, note send, config change, and role grant is recorded with actor, IP, and user agent.
DDoS & WAFCloudflare at the edge on every tenant subdomain
Data residencyUnited States. Single-region; no cross-border replication.
Sub-processorsCloudflare (CDN/DNS), Stripe (billing), Hostinger (email/VPS hosting). No analytics, no trackers, no data brokers.
SOC 2 / ISO 27001Not currently certified. See §12 — we are happy to complete a security questionnaire and sign a DPA.
MFADelegated to your Identity Provider via SSO (recommended). Magic-link auth has no password to phish.

2. Multi-tenant isolation

Every customer gets an isolated workspace on their own subdomain: customer.statnotes.app. Tenant isolation is enforced at three layers:

Threat modeled

We explicitly design against "a logged-in Tenant A user tries to read or write Tenant B data." The design answer is: the query layer cannot name Tenant B because the tenant ID is pinned at the middleware boundary, not supplied by the client.

3. Authentication & SSO

Three login paths, admin-configurable

SSO protocol-level controls

Every SSO implementation must pass the following controls. We enforce them in code and test each one with dedicated negative tests.

OIDC (openid-client, OIDC-certified):

SAML 2.0 (@node-saml/node-saml in strict mode):

Defense-in-depth controls beyond the protocol

4. Encryption in transit and at rest

In transit

At rest

5. Session handling

6. Network & infrastructure

7. Audit logging

Every security-relevant action is recorded to an append-only audit log with the following fields: tenant_id, actor_type (user / admin / super-admin / system), actor_id, event, metadata, ip, user_agent, and timestamp.

Recorded events (non-exhaustive)

Audit log entries are never modified or deleted in normal operation. They are visible to tenant admins in the admin page for their own tenant only. Exports can be provided to customers on request.

8. Data handling, retention, and deletion

9. Display token security (talent monitors)

Talent monitors are unauthenticated by design — the hardware is often a browser on a set TV with no keyboard, and operators cannot log in mid-broadcast. We secure them with signed display tokens instead:

10. Code quality & vulnerability management

11. Incident response & disclosure

12. Compliance posture & known gaps

Stat Notes is a deliberately small, focused vendor. We are honest about what we have and what we don't — because we would rather lose a deal than bluff a security questionnaire.

What we have

What we don't have yet

Known gaps — ask us directly

We are upfront about these because they will come up in procurement. We're happy to discuss mitigations or timelines for any customer who needs them.

If any of these are blockers for your procurement team, please reach out — most can be addressed contractually or via compensating controls, and we would rather have the conversation than lose the deal silently.

13. Contact

Security questions, vulnerability reports, DPAs, security questionnaires, or a longer technical conversation:

Email: [email protected]
Owner: Colin DeFord, Founder
Response target: within 48 hours during business days, faster for active incidents