Haven Docs

Data handling

A complete inventory of every external service Haven contacts, what is sent, and why.

The short version: Haven contains no analytics, no crash reporting, no advertising, no attribution and no remote configuration. Every network call in the app belongs to one of the five entries below.

Every external call#

1. Blocklist distribution — Haven's own endpoint#

WhenRoughly every twelve hours in the background, and when the user taps "sync now"
SentOnly the blocklist version number currently applied. Nothing else
ReceivedA signed, versioned rule delta
Contains noHostnames visited, account, device identifier, installed apps, IP-derived profile

The endpoint is never told what the user browses, so it cannot learn it. See Blocklist distribution.

2. Account-created email — Haven's own endpoint#

WhenOnce, when an account is created
SentThe email address, and the name if one is known
ReceivedAn acknowledgement

Fire-and-forget: every failure is swallowed, because the account exists regardless. The address leaves the device for this single purpose.

The message itself is delivered by a third-party transactional email provider on the backend's side, never from the device.

3. Accounts backend (Supabase) — only if the user creates an account#

OperationSent
Sign upEmail, password, and the separate marketing-consent choice
Sign inEmail and password, or a Google ID token
Session refreshThe refresh token
Password resetThe email address
Password changeThe current and new password, via a re-authentication
Profile updateChosen language and notification preference
Read entitlementsThe access token only
Claim daily streakThe access token only
Sync cosmetic unlocksThe access token only
Delete accountThe access token only

Every call is scoped to the caller by the token, server-side. Row-level security means a user can only ever read or write their own row.

A user who never creates an account never contacts this backend at all, and loses none of the gambling protection.

4. Subscriptions (RevenueCat) — only if a subscription is configured and used#

WhenApp start, purchase, restore, and on renewal or expiry events
SentThe account identifier (so the payment webhook can map a purchase to the right account), and the purchase and receipt data the billing SDK handles
ReceivedThe current entitlement state

Purchases reach Haven's backend through a server-to-server webhook, never from the device. See Accounts and entitlements.

5. Google sign-in — only if the user chooses it#

WhenThe user taps "continue with Google"
SentA standard Google sign-in through the system account picker
Also fetchedGoogle's public signing keys, so the returned token can be verified on the device before it is trusted

6. DNS resolution — the upstream resolver#

Allowed hostnames are forwarded to a public resolver. This has its own page, because it is the largest flow in the app: DNS resolution.

What never leaves the device#

DataWhere it lives
Browsing historyNot collected at all. Only blocked hostnames are logged, locally
The block logOn-device database
Page text read during a content scanHeld in memory during the scan, then discarded. Never stored, never transmitted
Address-bar textCompared on-device, then dropped
The list of installed appsOn-device only
App-check results and released appsOn-device only
Personal filters and learned sitesOn-device only
The accountability partner's name and emailOn-device only
Accountability event historyOn-device only
Financial pause log and guarded app listOn-device only
Budget, balance and expense entriesOn-device only
PINOnly as a salted hash, on-device
Sam's treats, growth and equipped cosmeticsOn-device only

allowBackup is false, so Android's own backup does not carry this off the device either.

Accountability emails#

Partner invitations and event notifications are composed on the device and handed to the user's own email app. They are sent from the user's own account and never touch Haven's servers. The partner's address is never uploaded.

Third parties named in the privacy policy#

Google (sign-in and Play billing), RevenueCat (subscription management), Supabase (accounts and progression) and the transactional email provider used for account emails. Each is linked to its own privacy policy from the published policy.

Deletion#

The user wants toRoute
Delete on-device dataUninstall Haven, or clear individual items in the app
Delete the account and its server-side dataIn the app, or from the account-deletion page on the public site if the app is no longer installed, or by contacting the address in the privacy policy

Deleting the account does not turn protection off.

Design position#

Every one of the reliability compromises in this app points the same way. Accountability emails go through the user's mail app rather than a server, which is less reliable but means Haven holds no list of who its users are accountable to. The blocklist endpoint is told only a version number, which rules out server-side personalisation but also rules out a browsing profile. Page text is discarded rather than uploaded for classification, which caps how clever the detection can get.

For an app whose users are, by definition, in a vulnerable position, holding less data is worth more than being cleverer.