Trust & security
Last updated September 21, 2026
This page lists what Heard does to protect your kitchen’s data. Every item is marked in place, partial, or not yet, and in-place items say where the evidence is. We hold no third-party certification; we publish what we actually do and will pursue SOC 2 when a customer contract requires it.
Heard’s source code is private. Where the evidence is a file or workflow in the repository we name it, and we will walk your IT team through it on request.
Data isolation
Each kitchen’s data is isolated at the database
In placeEvery tenant table is protected by Postgres Row Level Security, so a query can only see the organization the signed-in user belongs to.
Evidence: Nightly tenant-isolation test suite against a non-production copy of the schema (.github/workflows/tenant-isolation.yml, 08:00 UTC)
Least-privilege roles
In placeAdmin, chef, cook and server roles. Admins can narrow what each role may do; a server sees the menu and 86 board and nothing else.
Evidence: Settings → Team → Permissions in the app
Change history
PartialPrep list edits keep a full history with who changed what. Analytics-warehouse access is audit-logged. There is no org-wide admin activity log yet.
Evidence: Prep History in the app; BigQuery audit logs enabled 2026-08-22
Infrastructure
Encrypted in transit and at rest
In placeTLS on every origin with certificates managed by Vercel. The database and file storage are encrypted at rest by Supabase.
Evidence: Supabase security overview
Browser hardening headers
In placeHSTS preload, a Content Security Policy that forbids framing, nosniff, and a strict referrer policy on both the app and this site. The app’s CSP is nonce-based with violation reporting.
Evidence: Independent scan of app.heardapp.kitchen
Data residency
PartialThe application and database run in US regions of Vercel and Supabase; internal analytics live in Google Cloud (Toronto). The region of a few monitoring and content vendors is still being confirmed, so we do not yet claim a single residency for every vendor.
Evidence: Region column in docs/legal/subprocessors.md
Application
Card data never touches Heard
In placeBilling runs on Stripe-hosted Checkout and Customer Portal. We store a customer id, never a card number.
Evidence: Stripe row on the subprocessor list
Your kitchen’s data does not train AI models
In placeRoux sends questions and the relevant recipes to the OpenAI API, which does not train on API traffic by default.
Evidence: OpenAI: how API data is used
Error monitoring without personal data
In placeSentry runs with default PII collection off and a scrubber that removes email addresses and reduces user context to an opaque id.
Evidence: sendDefaultPii: false + beforeSend scrub (src/lib/sentry-scrub.ts)
Dependency vulnerability scanning
In placeProduction dependencies are audited weekly at moderate severity and above; Dependabot opens update PRs weekly.
Evidence: .github/workflows/security.yml (Mondays 09:00 UTC) and .github/dependabot.yml
Recurring internal security audits
In placeDated code and security audits are kept in the repo with findings and fixes; the database advisor baseline is recorded and re-checked.
Evidence: docs/audits/ (latest 2026-09-02; security-specific 2026-08-20) and docs/security/2026-08-19-supabase-advisor-baseline.md
Deferred risks are written down
In placeFindings we chose not to fix before a release are recorded with the owner, the impact and what would reopen them, not silently dropped.
Evidence: docs/security/accepted-risks.md
Third-party penetration test
Not yetNot done. Trigger: the first customer contract that requires one.
Privacy & your rights
Self-serve data export
In placeAny staff member can download everything tied to them as a file from Settings → Privacy.
Evidence: Privacy policy, “Your rights”
Self-serve account deletion
In placeRequest deletion in Settings. Login and personal details are removed; the kitchen’s operational history stays but is no longer tied to a name.
Evidence: Privacy policy, “Your rights”
Access, portability and erasure requests
In placeA written runbook covers requests that arrive by email rather than through the app.
Evidence: docs/legal/dsar-runbook.md
Trackers stay off until you opt in
In placeAnalytics and advertising scripts load only after consent. Each consent decision is logged and kept for 24 months.
Evidence: Cookies & subprocessors (consent gating); retention table in docs/PRIVACY.md (24-month consent log)
Vendors
Published subprocessor list
In placeEvery provider that processes customer data, what it receives, and which ones your kitchen supplies itself.
Evidence: Cookies & subprocessors
Data processing agreements with vendors
PartialStatus is shown per vendor below. None has been confirmed and dated yet; most are self-serve acceptances in the vendor’s dashboard.
Monitoring & incidents
Uptime monitoring
In placeSynthetic checks hit the production app every 10 minutes and alert the operator on failure.
Evidence: Checkly checks declared in __checks__/ (app repo)
Public changelog
In placeEvery production release is published with what changed.
Evidence: Changelog
Incident response
PartialIncidents are handled from a runbook and written up afterwards. There is no signed incident-response policy document yet.
SOC 2 / ISO 27001
Not yetNo third-party certification. Trigger: a customer contract that requires it.
Disclosure
Vulnerability disclosure
In placeEmail admin@heardapp.kitchen with SECURITY in the subject. Acknowledgement within 48 hours, a status update at least weekly, and a target of 7 days to fix high-severity issues.
Evidence: security.txt
Documents
Subprocessors
Providers that process data to run Heard, and whether a data processing agreement is in place with each.
| Provider | Purpose | DPA |
|---|---|---|
| Supabase | Database, login, storage, realtime | Pending |
| Vercel | Hosting + cookieless analytics | Pending |
| OpenAI | Roux AI — answers from your kitchen’s data (not used to train models) | Pending |
| Stripe | Subscription billing. Card details are entered on Stripe’s own checkout — we never see or store them. | Pending |
| Resend | Account email — sign-up confirmations, password resets, invites | Pending |
| PostHog | Roux answer-quality monitoring. Receives the question asked and Roux’s answer, tied to an account id rather than your name. | Pending |
| Sentry | Error monitoring. Configured without IP addresses, cookies, or request bodies, and email addresses are scrubbed. | Pending |
| Twilio | SMS notifications. Your kitchen supplies its own Twilio account — we hold none. | Pending |
| Slack | 86 alerts, shift notes, and nightly reviews posted to your workspace. Your kitchen supplies its own webhook. | Pending |
| Apple / Google / Mozilla | Web push delivery. The payload is encrypted end to end, so they relay text they cannot read. | Pending |
| Google Firebase | Push delivery to the iOS and Android apps. Unlike web push, the notification title and body are readable by Google. | Pending |
| Checkly | Uptime checks against public pages. No personal data. | Pending |
| Sanity | Food Bible and announcement content. Editorial only — no personal data, fetched server-side. | Pending |
Contact
Security questions or a vulnerability to report: admin@heardapp.kitchen with SECURITY in the subject.
© 2026 Heard. Made for dinner service.