Allin — internal
Enter the password to continue.
Allin — Data, CRM & Comms

Allin — data, CRM & comms

Everything touching Segment → Amplitude / Customer.io / Meta, plus RevenueCat and Anthropic as data processors: what's actually confirmed working today, and what still needs sorting — sorted by how much it actually matters, not by when it was found.

How to read this: Each item below is either something already true and verified (green, top section) or something that needs a decision or an action (High/Medium/Low). "High" means: a real legal exposure or a silently-broken mechanism right now. "Low" means: genuinely fine to leave for later, no live risk in the meantime.

Already confirmed done

Amplitude no longer receives your email — the Segment mapping that sent it as a User Property was removed and re-verified directly against the app's analytics code, not just the config screen. Live since 2026-08-16.
Customer.io is live and working — site ID + track API key confirmed by a real API call (workspace 216147, EU region).
Segment plan tier confirmed — Free tier, 101 of 1,000 monthly tracked users used (Aug 5–Sep 5 window). Not urgent, but worth a periodic glance so a second overage doesn't sever analytics + lifecycle email at once.
Apple's DPA is already covered — governed by the Apple Developer Program License Agreement, already accepted. Nothing to do here.
Meta advertising is properly gated — only fires if both Apple's own "Allow Tracking?" prompt (ATT) and the app's own advertising-consent toggle are on.
Subscriptions are trackeduser_entitlements table live, linked to RevenueCat via revenuecat_app_user_id, updated by the RevenueCat webhook.
Confirmed, not assumed: no email/name/account id is sent to Anthropic — checked the exact code that builds every request to Anthropic (classify-affect, classify-crisis, recommend-plan) — only check-in/intake free text goes across, nothing identifying.

High priority

real exposure or a silently broken mechanism

Consent wasn't actually being recorded anywhere — now built

Every "record_consent_granted" call was silently failing
Claude built it, Marie deploys
What was actually happening
The app calls a Supabase function called record_consent_granted every time someone completes the consent screen, and again reads/writes when someone changes a toggle in Settings → Privacy. That function did not exist anywhere in the backend — not in a migration, not deployed. The call is wrapped in a silent try?, so it failed with zero error and nobody would have noticed. There was no durable, provable record anywhere that a person had ever consented to anything, and no record of anyone withdrawing consent in Settings either.
Why it matters
GDPR Article 7(1) requires being able to demonstrate that someone consented — not just that the app currently behaves as if they did. The actual protection (not sending analytics/ads events if someone said no) is enforced separately, client-side, so that part was fine — this gap was specifically about having no audit trail to prove it.
What was built
A user_consents table (one row per grant/withdrawal: user id, which consent, on/off, timestamp, copy version) plus the record_consent_granted function the app already calls, plus a second function for single-toggle changes from Settings. iOS wired to call both.
Status
Built and committed — backend branch feat/gdpr-consent-record, iOS on the release branch. Not yet deployed/pushed.
Your call

Anthropic DPA — not signed

Newest-discovered processor, handles special-category text
Marie — active request, not a click-through
What's open
Anthropic processes real check-in and plan-intake text (memory, belief, trigger, reflection) to classify emotion/crisis risk and compose plans. Their standard terms say this isn't used to train models, but a formal signed agreement confirming that isn't in place yet. Unlike some processors, this likely needs an actual support/Console request, not just accepting a checkbox.
Who
Marie — I can't execute this, it's a real external ask.

Supabase DPA — not confirmed

The primary database, holding everything directly
Marie
What's open
Supabase hosts every table Allin has, including all the special-category check-in/plan text, directly and unencrypted. Of all 8 processors on the checklist, this one holds the most, so an unconfirmed DPA here is the highest-blast-radius gap even though Supabase is infrastructure, not a "third party" in the way Segment/Amplitude feel.
Who
Marie — check Supabase's DPA acceptance/terms directly in their dashboard or with support.

recommend-plan: tracked code doesn't match what's actually live

A real redeploy risk, not just messy git history
Marie + Claude — reconcile before next push
What's actually happening
The version of recommend-plan tracked on main is FTS-only (no Anthropic call) — but the function actually running in production uses a Claude/Anthropic composition path. Whoever pushes main next, for an unrelated reason, would silently redeploy the stale FTS-only version over the correct live one, undetected, per CI's normal path-based deploy trigger.
Who
Needs the real live source pulled and reconciled with the tracked repo before any further backend push — flagging again since it's still unresolved and it's exactly the kind of thing that gets silently broken by an unrelated commit.

delete-user-data function — built, not deployed

Until it's live, account deletion doesn't reach Amplitude/Customer.io
Marie — explicit go to deploy
What's open
The function that fans erasure out to Amplitude + Customer.io (in addition to the existing Supabase-side delete_user()) is written, committed, and confirmed to have the 4 secrets it needs already live. It's just never been deployed. Until it is, someone deleting their account today only has their Supabase data removed — Amplitude/Customer.io still hold whatever they had.
Who
Needs your explicit go to actually deploy — this touches live infrastructure, so it's not something to bundle into "build everything."

Medium priority

real, but not urgent

Amplitude DPA — unconfirmed

Risk just went down, not away
Marie
Was "medium-high" on the original checklist specifically because of the email it used to receive — now that's fixed, the data flowing there is lower-sensitivity, but a signed DPA is still required regardless of how sensitive the data is. Worth confirming, not urgent.

Customer.io DPA — unconfirmed

EU-region workspace may not even need a transfer mechanism
Marie
Workspace 216147 is EU-region, so the usual cross-border-transfer concern may not apply at all — but that needs explicit confirmation rather than assuming, since "probably fine" isn't the same as verified.

RevenueCat API key needs regenerating

Legacy format, incompatible with the current API
Marie
The current secret key is legacy-format and doesn't work against RevenueCat's v2 API — needed for any direct entitlement/subscription auditing. Generate a new v2 secret key in the RevenueCat dashboard when convenient; not urgent since the webhook-based sync into user_entitlements already works independently of this.

Segment access token/source id — still missing

Blocks Segment-side erasure specifically; already deprioritized once
Dead end, per your earlier call
Amplitude/Customer.io erasure work independently of this and don't need it. This only affects deleting a person's raw record inside Segment itself, and there's no accessible UI path to get these credentials in this workspace. Restating its real priority (medium, not high) rather than re-opening it — you already called this one.

Low priority

genuinely fine to leave for now

Meta DPA — unconfirmed

Lowest-sensitivity data of any processor here
Marie, whenever
Only device/advertiser id ever reaches Meta, and only when both ATT and the advertising toggle are on. No special-category data involved.

RevenueCat DPA — unconfirmed

Contract-necessity basis, not consent
Marie, whenever
Purchases require processing subscription data as a matter of fulfilling the contract — no special-category data, lowest legal exposure of the group.

Cross-references: the fuller GDPR picture (pseudonymization, encryption, consent screen copy) lives on the GDPR & onboarding wiki. The DPA checklist itself is ~/Documents/allin-gdpr/DPA_CHECKLIST.md.