Wamemba meLegal

How we keep ourselves accountable

Record of processing activities

Version 1.0In effect from 15 October 2026See every change

This is the record of processing activities of The Doxa Way Ltd for Wamemba me: the app, the site wamemba.me and the legal site insight.wamemba.me. It follows the ICO documentation guidance:

  • ICO, Documentation: https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/accountability-and-governance/documentation/

Doxa, the company's other service, has its own record in the doxa-app repository. The two services share no database, account system, analytics project or error-monitoring organisation.

This record describes the state on its effective date: the code on main, the production Supabase project xvjeflaaddtwyqrqzfck and the live settings read on 2026-10-14. Each activity is marked live or coming (designed in specs/wamemba-v1/README.md, not built). The vendor facts come from the sub-processor register, register/subprocessors.json. This document is not legal advice. A qualified lawyer has not reviewed it.

Why Wamemba me keeps this record. The Article 30(5) exemption for organisations with fewer than 250 staff does not apply: the processing is not occasional, and it is about children.

1. Controller details

ItemValue
ControllerThe Doxa Way Ltd, trading as Wamemba me
Company number16744139 (England and Wales)
Registered office108 Kings Road, New Haw, Addlestone, KT15 3BH, United Kingdom
Contacthello@wamemba.me (forwarded by Namecheap; read by the privacy lead)
Director and privacy leadGarth Hilton Watson. Not a Data Protection Officer (section 2.3)
Supervisory authorityThe Information Commission (the regulator was the Information Commissioner's Office until 30 September 2026, when the Data (Use and Access) Act 2025 ss.118-119 transferred its functions; SI 2026/1015). Called "the regulator" or "ICO" (its website) in these documents
ICO data protection feeOne registration covers the company, so it covers Wamemba me and Doxa. Unverified: whether The Doxa Way Ltd's registration is complete (Doxa's record, 2026-10-08, said it was pending). Action L1
Scale on the effective dateThe app is in internal TestFlight testing. Production holds no family accounts (the S2 smoke-test accounts were deleted, docs/decisions/2026-10-14-s2-live-on-prod.md) and 3 waitlist rows

2. Controller decisions

2.1 Controller, not processor, for the family's content

The Doxa Way Ltd decides why and how the sayings are processed (the product design, the vendors, the retention rules), so it is the controller. A parent's own use is household activity and outside the UK GDPR (Article 2(2)(c)), but Recital 18 says a provider of the means for household activity is still bound. So Wamemba me owes the duties of a controller to the parent, to the child, and to anyone named in a saying.

2.2 EU representative: not appointed yet (open)

EU GDPR Article 27 needs a representative in the EU if the company offers goods or services to people in the EU (Article 3(2)(a)). The spec (§4.2) sets prices that the stores scale to every country, which would make the app available in EU storefronts. Default: before the app is offered in any EU or EEA storefront, either appoint an EU representative or exclude those storefronts at launch. This is a money and market decision for Garth (action L2) and a question in the solicitor brief.

2.3 No Data Protection Officer

Article 37(1) does not apply: the company is not a public body; its core activity is not large-scale regular and systematic monitoring (analytics are ancillary and opt-in in the UK and EU); and it does not process special category data on a large scale (a voice clip played back is not biometric data, DPIA section 4.3). Review trigger: 50,000 families, a child-facing feature, or any processing of voice for identification.

3. How to read section 4

  • Lawful basis cites UK GDPR Article 6(1). For the parent: contract, 6(1)(b). For the child and anyone else named in a saying, who are not party to the contract: legitimate interests, 6(1)(f), with the assessment in lawful-basis-and-retention.md section 1.2.
  • Transfers name the safeguard for a restricted transfer out of the UK (see tra-international-transfers.md). "UK Ext" means the UK Extension to the EU-US Data Privacy Framework; "SCCs + UK Addendum" means the 2021 EU Standard Contractual Clauses with the ICO International Data Transfer Addendum; "adequacy" means UK adequacy regulations (the EU and EEA are adequate for the UK).
  • Retention is detailed in lawful-basis-and-retention.md section 2.
  • Security refers to section 6.

4. Processing activities

PA1. Accounts and sign-in (live)

FieldEntry
PurposeMake a private account on first launch; let the parent back it up and sign back in; keep accounts secure
Lawful basisContract, 6(1)(b). Rate limits and security logs: legitimate interests, 6(1)(f)
Data subjectsParents and other adult users
Data categoriesSupabase user id (random UUID), created and last-sign-in times, anonymous flag; with Apple: Apple's subject identifier and the email Apple gives (can be a Hide My Email relay); with email: the email address; IP address and user agent in auth logs. No name is requested from Apple
RecipientsSupabase (processor); Apple for Sign in with Apple (independent controller); Supabase's own email service sends the email confirmation link (no custom SMTP is configured, read 2026-10-14)
TransfersSupabase: stored in London (AWS eu-west-2); Supabase Inc. (US) support access under SCCs + UK Addendum. Apple: Apple's terms
RetentionWhile the account exists. Never-subscribed anonymous accounts: 90 days after last open (coming, S4). Auth logs: per Supabase plan (Pro: 7 days)
SecuritySection 6; session in the iOS keychain / Android Keystore (AFTER_FIRST_UNLOCK); anonymous sign-ins limited to 30 an hour per IP

PA2. Children (live)

FieldEntry
PurposeSay whose saying it is; work out each child's exact age at the time of a saying
Lawful basisLegitimate interests, 6(1)(f): the parent's interest in keeping their child's words, and Wamemba me's in providing the service the parent asked for. LIA: lawful-basis-and-retention.md 1.2
Data subjectsChildren of the parent's family (spec audience: 2 to 8 years old)
Data categoriesFirst name; birthday (optional). No surname, photo, school or location is asked for
RecipientsSupabase
TransfersAs PA1
RetentionUntil the parent deletes the child or the account (a child with sayings must have them removed first; a whole family deletes cleanly)
SecuritySection 6; RLS: members of the family only; viewers read, never write

PA3. Sayings, made-up words and their meanings (live)

FieldEntry
PurposeKeep the funny things and made-up words a family's children say; each child's word dictionary
Lawful basisParent: contract, 6(1)(b). Child and other named speakers: legitimate interests, 6(1)(f)
Data subjectsChildren; the parent; other people a parent names as a speaker ("Dad", "the bus driver")
Data categoriesSaying kind, context line, date said, lines with speaker (child id or a free-text name) and text, made-up word flag; the private meaning of a word (word_meanings, parents only); created-by user id
DictationOn the device only: iOS expo-speech-recognition with on-device recognition required (a patch refuses to start when on-device recognition is unavailable); Android 13+ createOnDeviceSpeechRecognizer. No audio leaves the phone, and the dictation audio is not kept. Older devices and non-English iPhones type instead
RecipientsSupabase. A copy is kept on the parent's phone (AsyncStorage, per account) until synced and after
TransfersAs PA1
RetentionUntil the parent deletes the saying, the child or the account; backups 7 days
SecuritySection 6; save_saying() runs as the caller (security invoker), so every write passes RLS; meanings in their own table so a viewer's read of lines can never include them

PA4. Children's voice clips (coming, S3)

FieldEntry
PurposeLet a parent attach a short recording of the child saying it again, to play back to the family and on shared links
Lawful basisParent: contract, 6(1)(b). Child: legitimate interests, 6(1)(f), with the higher bar recorded in the DPIA (R3)
Art. 9Not special category: the clip is stored and played back, never processed to identify anyone (DPIA 4.3). Re-assess if any voice feature beyond playback is proposed
Data categoriesAudio file (clip_path), the saying it belongs to
RecipientsSupabase Storage (private bucket, signed URLs); people the parent shares with
RetentionWith the saying
SecurityPrivate bucket, signed URLs with a short life, RLS on the path
FieldEntry
PurposeTurn a saying into a card or a private link (wamemba.me/s/<token>) that relatives open in a browser
Lawful basisContract, 6(1)(b), on the parent's instruction; child: legitimate interests, 6(1)(f)
Data subjectsChildren; speakers; viewers of a link (IP in logs)
Data categoriesContext, lines with speakers' first names, each child speaker's age (never birthday, surname or meaning), clip URL; token, revoked_at; viewer IP and user agent in server logs
RecipientsAnyone with the link; Vercel (page hosting); the platforms the parent shares to (WhatsApp, Instagram, Messages: independent controllers for what the parent sends)
RetentionUntil the parent revokes the link or deletes the saying or account. A card image already sent is outside our control
SecurityUnguessable token; security-definer read function that checks revoked_at and returns only the fields above; caching and rate limits (spec §10 lesson 6)

PA6. Family circle: partners, grandparent viewers, weekly email (coming, S6)

FieldEntry
PurposeInvite a partner (full access) and grandparents (read only); send a weekly "new sayings" email
Lawful basisPartner and viewers: contract with the inviting parent and with each invitee who accepts, 6(1)(b). Weekly email: the viewer's request (contract) with one-tap unsubscribe
Data categoriesInvitee name or label, email address, role, invitation status
RecipientsSupabase; Resend (email, coming, not used yet)
RetentionWhile the membership exists; invitation emails deleted when declined or expired (rule to be set in S6)

PA7. Subscriptions, trials and gifts (coming, S4 and S6)

FieldEntry
PurposeSell subscriptions through the App Store and Google Play; trials; restore purchases; grandparent gifts
Lawful basisContract, 6(1)(b); tax records: legal obligation, 6(1)(c)
Data categoriesRevenueCat app user id (= Supabase user id), product, store, period, status, transaction ids, ownership type (PURCHASED or FAMILY_SHARED), transfer events. No card data: Apple and Google are the merchants of record
RecipientsRevenueCat (processor, coming); Apple and Google (independent controllers for the purchase)
TransfersRevenueCat: US (see TRA)
RetentionSubscription rows while the account exists; transaction records 6 years (HMRC)

PA8. Notifications (coming, S4 and S8)

FieldEntry
PurposeTrial reminder on day 5; "On this day"; the 7-day notice before an unused account is removed
Lawful basisContract, 6(1)(b); the parent allows notifications in the operating system
Data categoriesPush token, notification type, send time. Lock-screen text never quotes a saying (rule from Doxa's PR #3086)
RecipientsExpo push service, Apple APNs, Google FCM
RetentionToken while the account exists and the token is valid (dead tokens removed, spec §10 lesson 9)

PA9. Crash reports (live)

FieldEntry
PurposeFind and fix faults
Lawful basisLegitimate interests, 6(1)(f)
Data categoriesError, stack trace, release, device model, OS version, Supabase user id, scrubbed breadcrumbs (no console lines; taps recorded as "touch" only); performance traces (20% sample in production). sendDefaultPii off; no screenshots, view hierarchy or replay
RecipientsSentry (Functional Software, Inc.), organisation wamemba-me in the EU data region
TransfersStored in the EU (adequacy). Remote access by a US company: see TRA
RetentionSentry plan default (register)

PA10. Product analytics (live)

FieldEntry
PurposeLearn whether the app works for families (activation, capture speed) without reading content
Lawful basisUK, EU, EEA, CH: consent, 6(1)(a), and PECR regulation 6 for the device identifier. Elsewhere: legitimate interests, 6(1)(f), with an opt-out
Data categoriesThe events declared in app/src/lib/analytics.ts (app opened, account created, signed in, linked, saying saved with method, kind and milliseconds, checked with counts, deleted, child added with has_birthday, dictation unavailable or failed with a fixed reason); app lifecycle events; device and app properties the SDK adds; Supabase user id as distinct id. sanitise() drops any value that isn't a number, boolean or fixed word. No session recording. IP anonymised in the project (unverified in the PostHog project settings for this record; action L6)
RecipientsPostHog (EU Cloud, Frankfurt), its own organisation "Wamemba me"
Consent mechanismapp/src/lib/privacy.ts: default off in the UK, EEA and CH, and when the region is unknown. The consent screen arrives in S4; until then those devices send nothing. Gap: no opt-out switch elsewhere yet (action L7)
RetentionTarget 12 months (privacy policy); unverified whether the plan allows it (register)
FieldEntry
PurposeTell people about Wamemba me; keep a waitlist; publish the legal documents and their history
Lawful basisWaitlist: consent, 6(1)(a). Server logs: legitimate interests, 6(1)(f)
Data categoriesWaitlist: email (lower case), source tag, created_at, confirmed_at (unused: no confirmation email is sent yet). Server logs: IP, user agent, URL, time
RecipientsVercel (hosting); Supabase (join_waitlist(); anon can execute only that function, which returns nothing)
CookiesNone. No analytics, no third-party scripts or fonts (checked 2026-10-14: no set-cookie, no external resources)
RetentionWaitlist: until unsubscribe or request, and at most 12 months after launch (action L8, manual)

PA12. Support and privacy requests (live)

FieldEntry
PurposeAnswer messages; handle data subject requests and complaints
Lawful basisLegitimate interests, 6(1)(f); legal obligation, 6(1)(c), for rights requests
Data categoriesEmail address, message content, account id where given
RecipientsNamecheap (email forwarding of hello@wamemba.me); the destination mailbox (unverified: which mailbox the forward goes to; action L9)
Retention2 years after the last message; request log 6 years (dsar-procedure.md)

PA13. Account deletion, export and clean-up (coming, S4)

FieldEntry
PurposeIn-app account deletion (App Store 5.1.1(v)); export at any time (spec §3 rule 3); removal of never-subscribed anonymous accounts after 90 days without an open
Lawful basisLegal obligation, 6(1)(c) (rights requests); contract; storage limitation principle
StatusNot built. Until then: by email, by hand (dsar-procedure.md). The clean-up has a prerequisite: the "gone" screen needs a carry-over before it is switched on (docs/decisions/2026-10-14-session-for-deleted-account.md)

PA14. Creator and press outreach (live, small)

FieldEntry
PurposeOffer parent creators the app and ask about posts; pitch press (spec §7)
Lawful basisLegitimate interests, 6(1)(f); PECR: business contacts or public creator contact addresses only
Data categoriesName or handle, public contact address, platform, outreach notes, their reply
RecipientsThe company's mailbox and outreach document
Retention12 months after the last contact; immediately on request (suppression entry kept)

PA15. Engineering operations (live)

FieldEntry
PurposeBuild and run the service: migrations, smoke tests, incident checks
Lawful basisLegitimate interests, 6(1)(f)
Data categoriesProduction database reads through the Supabase Management API (aggregate and schema queries; smoke-test rows)
RecipientsAnthropic (Claude Code sessions run by the company). Gap: which commercial terms cover these sessions (register; action L10). Rule meanwhile: no reads of family content in operations sessions unless a parent asked for help, and then only that family
RetentionSession transcripts per the vendor's terms

5. Rights handling

dsar-procedure.md. Breaches: breach-response.md.

6. Security measures (Article 32)

MeasureState
Encryption in transitTLS on every connection (HSTS on wamemba.me)
Encryption at restSupabase (AWS) disk encryption
Access control in the databaseRLS on every public table; deny by default; anon has no table access; anon EXECUTE revoked except join_waitlist(); one pgTAP file per table run as anon, owner, viewer and another family's member on prod's exact Postgres image on every PR (gate.yml db job)
Change controlEvery change through branch → PR → the recursive quality gate (.claude/skills/quality-gate/SKILL.md); critical tier for database, auth, export and delete, sharing and money
SecretsKeychain and EAS sensitive variables; no service keys in the app
On the phoneSession tokens in the keychain; sayings in the app sandbox (AsyncStorage, not encrypted beyond the OS's file protection: DPIA R7)
Telemetry minimisationSentry scrubbing and no screenshots; analytics sanitise(); tests guard both
BackupsSupabase daily physical backups, kept 7 days; no point-in-time recovery (read 2026-10-14)
PeopleOne director; engineering by agents under Garth's account, through the gate

7. Open items

IDItemOwner
L1Confirm The Doxa Way Ltd's ICO registration is complete, and that its description covers Wamemba meGarth
L2EU storefronts: appoint an EU representative or exclude EU/EEA at launchGarth
L3Sentry: accept the DPA for organisation wamemba-me (per-organisation acceptance)system (browser), Garth if a signature is needed
L4PostHog: execute the DPA for organisation "Wamemba me"system (browser), Garth if a signature is needed
L5Solicitor opinion: COPPA and UK GDPR (spec §9), terms, trademark (solicitor-brief.md)Garth
L6Confirm PostHog project settings: discard IP, no recordings, retentionsystem
L7Analytics consent and opt-out screen in onboarding and Settings (S4), before public releasesystem
L8Waitlist deletion 12 months after launchsystem
L9Record where hello@wamemba.me forwards; add privacy@wamemba.mesystem (at the Namecheap session)
L10Claude Code for operations: confirm commercial terms (no training) for the account usedGarth
L11In-app delete and export before the first public store release (App Store 5.1.1(v); spec §3 rule 3)system

8. Review

Every 6 months, and whenever a slice in spec §6 lands, a vendor changes, or a "coming" activity goes live. Next review: 2027-04-15.