Last updated: 25 August 2026
This page describes how ErdiKnows is built and operated — in plain technical language, not contract wording. The same measures appear in Annex 1 of the Data Processing Agreement for customers who process personal data through the product.
We run no servers of our own. The database and authentication layer live on Supabase in the EU (Frankfurt) region. The application is hosted on Vercel; production traffic is served over TLS. Data at rest is encrypted by the database provider. Physical access to hardware is handled by those providers in certified data centres.
Development and production are separate environments. Outbound calls to third-party APIs you connect use TLS only.
API keys for connected services (Stripe, GitHub, App Store Connect, and similar) are stored with AES-256-GCM. The encryption key lives outside the database; the encrypted column is not readable through database grants.
Project API tokens are stored only as SHA-256 hashes, never in clear text. We cannot recover a token after creation — only verify incoming requests against the hash.
Inbound webhook secrets are encrypted per endpoint, the same way as connector keys.
There is no password. Sign-in works through one-time links sent to your email address. We store no password and never see one.
After sign-in, a session cookie keeps you logged in. Sessions expire after 30 days, or after 14 days without use; refresh tokens rotate on use.
When someone signs in from a device we have not seen before, we email you. For that we set a cookie with a random value and store a SHA-256 hash of it together with your user ID — not the cookie itself in our database, and not the IP address. We store browser and OS name plus a coarse country/city estimate from our hosting provider so you can spot an unfamiliar sign-in.
Data is separated at the database layer with row level security (RLS). Every row belongs to a project; authenticated users can only read and write their own projects.
The public ingest API runs with elevated rights but resolves the target project solely from the token you send and writes only there. Subscription rows follow the same project boundary.
Admin functions require two checks: the UI shows admin entries only to admins, and routes are verified again on the server.
Webhooks from GitHub, Sentry, Vercel, Netlify, RevenueCat, and similar providers are rejected unless the signature matches. Verification depends on the provider — including HMAC-SHA256, HMAC-SHA1, JWT (HS256), and Svix. Each endpoint has its own secret, stored encrypted.
Sandbox and test-mode subscription events are discarded and not written to production tables.
No SDK in your apps. We do not embed tracking in your product. No session recording, no heatmaps, no cookies for visitor counting on the public site, no IP storage for that measurement. Error tracking has personal-data collection off by default, but a report can still contain data from the failed request. We don't sell your data, don't use it for advertising, and don't train AI models on it.
You send events and metrics through the API or connectors you configure. We do not embed tracking code in your product or app. An optional one-line snippet for your own marketing site is available only if you choose web visitor attribution — it is not installed by default and does not go in the product. Public-site visit counts on erdiknows.com use no cookies and no persistent identifiers; IP addresses are not stored for that measurement. Sentry is configured with personal data collection off by default and no session replay — though an error report can still contain data that was part of the failed request.
We use a small set of providers to run the service. Each has a data processing agreement. The current list — provider, purpose, processing location and transfer mechanism — is published at erdiknows.com/subprocessors. That list forms part of the Data Processing Agreement (section 8).
Services you connect yourself — Stripe, RevenueCat, Apple, GitHub, and others — are your providers, not ours. We call their APIs with credentials you store in ErdiKnows.
In the app under Settings → Your data you can export everything as JSON and delete your account. Deletion removes projects, events, metrics, notes, tokens, and connections immediately. Export is available while your account exists. Backups rotate on the provider's schedule, at the latest 30 days after deletion.
For subscriber rows your connectors imported, you can erase an individual provider identifier with DELETE /api/v1/subscribers/[app_user_id] using the project API token. That removes subscriber rows only — not tickets, separately submitted events, aggregated metrics, or Sentry error reports.
Retention during an active account: subscription rows with no payment history are removed after 180 days; dimension breakdowns after 90 days. Raw product-usage entries (which parts of Erdi you opened) are kept 90 days, then aggregated. See the Privacy Policy for the full table.
If you find a vulnerability or other security problem, write to legal@52n34s.com — the same address listed in our security.txt file (RFC 9116).
We send an acknowledgment of receipt within a few business days and will tell you what we find. Please treat your report as confidential until we have fixed the issue or agreed otherwise — do not publicly disclose before we have had a reasonable chance to address it.
Include enough detail to reproduce the issue. Do not access other users' data or disrupt the service.
We do not run a paid bug bounty programme and we do not promise a specific timeline for remediation.