What we hold
- Your account: email, name, language preference, plus account state — age-confirmation timestamp, tier, AI budget settings, and the per-user key material that encrypts your diary
- Your master CV materials and past letter samples (the source of every draft)
- Your applications: postings, scores, drafts, sent versions, replies
- Your diary: a per-user log of what you’ve tried
- Your calendar events, if you connect a calendar
- Your coaching exercise output and ND-support state (mood and energy history), if you use those features
- Your contact network and inbound emails tracked for replies, if you use those features
- Voice samples and recordings, if you record them
- Any optional sensitive fields you explicitly opt in to providing
That’s the list. We don’t ingest anything beyond it.
Where it lives
Your data lives in the EEA, twice: two synchronized copies on dedicated database hosts in Norway (gigahost.no AS), with a quorum witness in the Netherlands (Leiden, operator-managed) that casts the cluster’s tie-breaking vote and holds no user data. The application servers run separately, also in Norway, and hold no database.
Losing any single host loses no data. If one database host is down, writes pause until it returns instead of running unreplicated — we’d rather delay a write than hold your data in one copy.
Storage path is EEA-only. No user data is persisted on US-based hosting or in US-based data warehouses. The application database, vector store, audit log, and backups all live within the EEA (gigahost.no Norway + operator-managed Leiden NL).
Edge / network-routing path — three anycast POPs today, one of them outside the EEA. TLS termination is performed by HAProxy on an anycast pool of three VPS nodes: Switzerland (Zürich, iFog GmbH), Norway (Trondheim, gigahost.no AS) and the United States (Houston, Texas, iFog GmbH). These nodes see in-flight traffic for the duration of a single TLS connection only; they persist no data and hold nothing at rest. The Norway leg is intra-EEA; the Swiss leg relies on the Switzerland adequacy decision (Commission Decision 2000/518/EC); the US leg is an in-transit third-country leg.
Before the managed tiers open to the public, the US POP is retired from this domain and the pool returns to EEA + Switzerland only. We are publishing the current state rather than the intended one, because a security page that describes a plan as if it were a fact is worse than no page.
Storage remains EEA-only regardless. No user data is persisted on US-based hosting or in any US data warehouse; the US node terminates TLS and forwards over IPsec to the EEA storage layer.
Sub-processors (companies whose code touches your data)
Operator-elected sub-processors (omoikane chooses these on your behalf):
- Mistral — will run the models that produce drafts on the Managed-Lite / Managed-Pro tiers when those tiers open; they are not open yet. EU-based. Anthropic Claude remains available as a user-elected BYOM choice (below), with a trained-on-data prohibition contractually in place.
- Stripe — will process payments when the paid tiers open; no payments are processed today. Ireland-based; only ever sees billing-related data, never your CVs or applications.
- Cloudflare — provides authoritative DNS for all our domains, including omoikane.coach. The customer surface is not proxied: DNS-only records point straight at our own edge. Cloudflare Turnstile also provides bot defense on selected forms.
- gigahost.no AS (Norway) — application-server and database hosting, and the Norway edge anycast VPS (Trondheim).
- iFog GmbH (Switzerland) — Switzerland edge anycast VPS (Zürich); TLS termination only, no data at rest.
- The Leiden YugabyteDB quorum witness runs on operator-managed first-party infrastructure — not a sub-processor.
User-elected sub-processors (you choose these by selecting a BYOM provider — default tier is BYOM-Free, see pricing):
- Anthropic Claude (United States), OpenAI (United States), NVIDIA NIM (United States), Mistral (European Union), DeepSeek (People’s Republic of China), Ollama Cloud (provider-stated residency), or any OpenAI-compatible custom endpoint (you set the base URL — residency is what your endpoint advertises).
When you choose BYOM, your CV / posting / coaching / draft data is sent to your chosen provider per the provider’s own privacy policy (not omoikane’s). At provider-add time we surface a clear data-residency banner so you can make an informed choice.
- No third-party analytics. No advertising platforms. No “AI training partners”. Page views are counted by our self-hosted, cookieless Umami; fonts are self-hosted; the only third-party-served asset on omoikane.coach is Cloudflare Turnstile (bot defense).
The full register, with current status of each, is at Sub-processors.
What we promise never to do
- Train any model — ours or anyone else’s — on your data
- Sell, share, or expose your data to recruiters
- Run third-party trackers, analytics, or advertising on the customer surface
- Use your data for marketing personalisation
- Use your data to evaluate other users
- Store your data outside the EEA
These commitments are in our Terms and our Privacy Policy and they’re load-bearing — if any of them ever changed, we’d lose every reason this product is worth using.
Data export and deletion
Two endpoints, accessible from your account settings:
- Export — produces a zip of everything we hold about you (JSON + uploaded files + generated PDFs + diary), downloaded immediately from settings, at most once per 24 hours. A confirmation email goes to your registered address, so an export you didn’t request never passes unnoticed.
- Delete — wipes your account, with cascade through every backing system (database + vector store + LLM trace store + object storage + audit log). Irreversible. Sent within 7 days, per GDPR.
You don’t need to ask permission, write to us, or wait for review. Settings → Account → Export / Delete.
Encryption
- At rest: backups are encrypted client-side by restic before upload — the backup store cannot read them. The private diary carries an extra layer of per-user encryption. Infrastructure secrets are encrypted with
age+sops, keys held by the operator and the operator’s password manager — not by any third party. - In transit: TLS 1.3 with modern ciphers. HSTS enabled.
- App-to-database: TLS to our distributed SQL cluster (YugabyteDB — two synchronous data replicas across the two Norway database hosts, plus a Leiden quorum witness that holds no data). Replication traffic between cluster nodes runs inside an IPsec mesh.
- Backups to off-site mirror: encrypted client-side by restic before transit; the off-site mirror never holds the key and cannot decrypt them on its own.
Audit and access
Operator access to your data and key account events are logged. Audit rows are kept for 12 months, and if you delete your account they are de-linked from your identity.
The operator (the human running this) does not access your applications or drafts unless you explicitly ask for support. Doing so generates a typed audit event you can see in your settings.
Reporting a vulnerability
If you find a security issue, please email security@omoikane.coach before disclosing publicly. We respond within 48 hours and credit responsible disclosure in the changelog.