← All privacy impact assessments

PIA: A record of first uses, and a Home that knows how new you are

Status: Built — written before the code, and revised against the shipped code the same day. Both pieces of work it gates are live: the first-use record, and the welcome and hint surfaces on Home. The build followed the design with one change, and §3 says it: the tools the day-two welcome names are the ones the group's own records show it uses (a baby it tracks, a meal plan it has adopted, a game it has turned on), read from the same answer that decides what Home shows, rather than from the reader's own list of tiles — so the sentence and the screen cannot disagree. A 25 October 2026 addition (§1D) assesses tool cards on a quiet Home and a one-time tip, which read this record for the purpose §3 states; it is assessed before release. Written: 19 September 2026 · Last revised: 25 October 2026 (§1D: tool cards on a quiet Home, and a one-time Tools tip; amended the same day for one own-age read per session, Security HC2) · 10 October 2026 (§1C: a planned first-week suggestion, sent as a notification) · 29 September 2026 (short additions, §1A and §1B; §1's description of the first sitting brought up to the needs-based setup as built) Nothing here is legal advice. Children's Code citations are to the exposure draft; section numbers may move on registration (due 10 December 2026).


1. Purpose and scope

A member who joined a group this morning opens the app to a Home screen built for somebody who has used it for months: a question card, a "needs somebody" section, a brief that assumes they know what a plan is. The design makes Home quieter for a new member and teaches the app gradually, in four steps that depend on how long the member has been in this group:

During the first three days in a group, Home offers each member setup once on this device. Since 29 September 2026 that first sitting is needs-based: the member is asked "What would you like help with?", is set up for the tools they choose and no others, through each tool's own existing flow, and can go to their group after the first useful result or explore first. A joiner is first shown what the group already has. The device records that setup was shown for that member and group, so it does not keep interrupting them, and keeps a small separate record of which tools were chosen and which steps are pending, skipped or finished, so that setup can resume; both are stored on the device and are not shared with their other devices. Neither is part of the first-use record below. The design, and the record's exact contents, are assessed in our Home, widgets and setup assessment §7.

"Never used" is the part that needs a record. The app cannot honestly say "you haven't tried the photo wall yet" from what it remembers on one phone: a member who uses the photo wall every day from their other device would be told, wrongly, that they have never opened it. So the design adds one small table, private to each member, holding the first time they opened each feature — and nothing else about how they use it.

Why build this at all, in one sentence: the app should not lecture somebody about a feature they already use, and should not overwhelm somebody on their first day with surfaces they have no context for.

In scope: the first-use record (what it holds, who can read it, how long it lives); what reaches a model for the welcome and what does not; how the hint is chosen; children. Out of scope, covered elsewhere: the daily brief itself and where it is processed (the cloud-inference assessment — the welcome is a mode of the same request, and inherits its residency and spend position wholesale); the question card and "needs somebody" section, which this design only hides for a day; the motivation layer's own rules about what may never be counted (the intentions assessment), which this design applies rather than revisits.

1A. Addition, 29 September 2026: two changes that touch this record

Two changes assessed in our Home, widgets and setup assessment sit next to this record. Both are built, as described there, and neither changes the record itself.

1B. Addition, 29 September 2026: the welcome and the brief's cache

The daily brief is being redesigned, as assessed and accepted in our home brief assessment. Two consequences for this assessment; the record itself does not change.

1C. Addition, 10 October 2026: a planned first-week suggestion, sent as a notification

Planned, not built. Today everything this document describes is drawn on a screen the member has already opened: the day-0 quiet Home, the three-day welcome, the hint on days 4 to 7. The app is being changed so that, in a member's first six days in a group, it may also send them one suggestion a day — a notification they did not ask for, which opens the screen where they would act on it.

1D. Addition, 25 October 2026: tool cards on a quiet Home, and a one-time Tools tip

Assessed before release, against the build. Nothing in it reaches our servers or a model.

What it is. When a member's Home in a group is quiet — fewer than three tool sections (each widget and the photo strip count as one) — Home may show up to four cards under the heading "Start with a tool". Each card invites the member to start one of the app's own tools, in a fixed order: Meals, Routines, Photos, Mail Sifter, then Shopping. A card shows the tool's name, the same one-line description the Tools menu uses, and a verb ("Plan dinners", "Add a routine"); a ✕ beside it hides it. After the member starts a tool from one of these cards, the next time they are back on Home a small tip says where to find it next time — "Next time, open Routines from Tools, at the top left." — with a hand-drawn highlight on the Tools button for as long as the tip shows. For adults, the assistant's small waving figure sits beside the tip. All of this is drawn inside the app; none of it is ever a notification.

What it reads. What the phone already holds for Home, and one age check, for this member:

Nothing is collected, nothing is written to the first-use record or anywhere else on our servers, the only request is that one age check, nothing is counted or logged, and no AI model is involved. §9's review triggers are untouched: no column is added and no new reader of the table appears.

It fails closed. No card and no tip is shown while the member's first-use rows, their account type or their age has not been read, and no card for a tool while it is not yet known whether the group already has that tool's thing. A card about a tool somebody already uses would be the untrue sentence this record exists to prevent. The shared display's account never reaches Home, so it never sees a card or a tip.

What the phone keeps. Three short lists, each entry a person and a tool and nothing else: the cards this person started a tool from, the tips they have been shown, and the cards they hid. There is no time and no count in them, and adding the same entry twice changes nothing. They are kept on that phone only and never sent anywhere. They are deleted when the member signs out, and when another account signs in on the same phone, every entry that isn't the new account's is removed. A member with a second phone may see a card or a tip once more there; we accept that for the same reason §8 accepts it for hints. Edit Home has one row, "Tool suggestions show here while Home is quiet", with a switch that hides every card or brings hidden ones back, on that phone.

Children and 16- and 17-year-olds. A child account, and a member aged 16 or 17, sees only the Meals, Routines and Shopping cards:

A child account sees the tip without the figure, because the figure is the assistant's mark and a child account has no assistant. Why this is not a nudge: it appears only on the member's own quiet Home, inside the app; it never says what somebody hasn't done; nothing is counted, and there is no streak, score or reward; the tip follows the member's own tap and only explains where something is; every card can be hidden for good; and nothing leaves the phone. §7's rule holds: a member is only ever pointed at a tool they have.

About the reader only. No card or tip names another member or compares anybody with anybody. Whether the group has a meal plan, a routine, photos or a shopping list is something every member can already see.

Arrange by use is unchanged. Tapping a card opens the tool directly; it is not one of the four ways Arrange by use notes a use, and nothing about the cards is recorded in its record.

The ban self-assessment. Choosing what to display from account information re-runs that assessment's personal-Home section; the re-run is its §15.15. It treats the cards as a further instance of a recommender feature (a condition already treated as met), adds no logged-in feature, and leaves its open finding about under-16 accounts open. It records that the Photos card, shown to known adults only and only while a group has no photos, weakens the design argument about purpose; the founder accepted that on 25 October 2026, and the card is on.

Residual risk we accept.

1E. Addition, 8 November 2026: tips after meals and shopping actions

Approved by the founder before implementation. Twelve short tips explain the next step or result of a member's own action in Meal planner or Shopping. To avoid repeating them across phones, a separate user_guidance_seen row records the account, a closed-list tip key and the time the tip was seen. Existing members have no rows and can see each tip once. The privacy policy adds a description and change notice; the founder approved their wording on 8 November 2026. The closed keys are meals_after_adopt_v1, shopping_online_cart_v1, shopping_in_person_v1, shopping_modes_v1, shopping_staples_v1, shopping_select_v1, meals_choose_plan_v1, meals_dates_v1, meals_review_v1 meals_share_out_v1, shopping_notes_v1 and shopping_pantry_check_v1. The two shopping keys were approved on 10 November 2026, including for existing accounts. They explain product preferences, the grocery and pantry sections, and checking what is at home before sending a selection. The record is per account so it survives a second phone or reinstall; it contains no group data or free text.

Only the account owner can select or insert their rows. Clients cannot update or delete them, and no service role is granted access. Rows cascade on account deletion. Children are included under the same owner-only rule; their tips do not show an assistant figure. Where an account has no Online/In person switch, the In person tip follows its first opening of Shopping (HQ clarification, 8 November 2026). The record is a small fact about a person's use, accepted to prevent repeated explanations; a database administrator retains the ordinary direct database access described in §8. Passive viewing marks a tip only after one second on screen. Choosing “Got it” or using its anchor records an explicit dismissal immediately; leaving earlier without either action records nothing. A failed read suppresses tips rather than guessing.

2. Data involved

Kind Whose Children's? Sensitive? Free text?
user_feature_first_uses.user_id — whose record it is the member's own yes, where the member is a child account no no
user_feature_first_uses.feature — which feature, from a closed list of about a dozen names (tasks, events, chat, photos, baby tracker, meals, games, assistant, plan, mail, calendars, search) the member's own yes, where the member is a child account no — a surface name no — a CHECK constraint refuses anything outside the list
user_feature_first_uses.first_used_at — when they first opened it the member's own yes, where the member is a child account no no
Tenure — how many whole days since the member's membership of this group became active derived on the device from the membership row's start time, in the group's time zone; not stored anywhere new yes, where the member is a child no no
The welcome line the model writes about the group's own records (its events, tasks, tools) possibly — an event can be about a child, as the ordinary brief's can as the brief's the model's prose, validated before it is shown
The "shown" set — which hints this device has already displayed the device's own; never sent anywhere — no no

Strictly necessary, item by item (exposure draft s 38(2)(b)):

Not collected, and could have been. Each absence is a decision:

3. Flows and locations

Data Device Supabase (Sydney, ap-southeast-2) Our assistant server (australia-southeast1) Model provider Region
A first-use row written once, the first time a surface is opened, and never blocks the surface — a failed write is retried on the next opening, nothing else stored in plaintext under row-level security that admits only the member whose row it is never read never sent Sydney
Tenure day derived on the device from the membership row's start time, in the group's zone the membership row is already there and already the member's to read the day number (0, 1 or 2) travels with a welcome request; the start time itself does not the day number, as part of the welcome prompt Sydney
The welcome request the same horizon items the ordinary brief already sends (the group's next events, open tasks) plus the names of the tools the group already uses (the same set its Home shows; a baby it tracks, a meal plan it has adopted, a game it has turned on) — names only, none of their contents — received on the member's own session, metered to the member, the group's privacy level read fresh per request and refused for a Device-only group exactly as the brief is the prompt, on the same endpoint in the same region as the brief Sydney
The welcome line rendered in the brief's slot; validated on the device before it is shown cached in the same row the ordinary brief is cached in, readable by the group's active members — — Sydney
A feature hint chosen on the device from the first-use record and the device's own "shown" set; the sentence is one of ours, fixed per feature — never — hints are not a model surface never the phone

The lines that carry the design:

4. Legal basis and consents

No new consent purpose. The record is created by the member's own act of opening a surface; the welcome and the hint are rendered on the member's own Home screen, to the member alone; and the one thing that reaches a model — the welcome — reaches it on the same terms and under the same group-level control (the privacy level) as the brief it replaces. Nothing is bundled with any existing consent, and nothing expires, because nothing new is consented to.

Precondition, as for every collection this app adds: before the record ships, the privacy policy's list of what we hold gains a line naming it, in these words or close to them — which features of the app you have opened, and the date you first opened each, kept so that the app does not explain a feature you already use; visible only to you; deleted with your account — and the policy's version moves so the addition is dated. A record that the policy does not describe is a collection a member was not told about, whatever its size.

For a child account the record is created the same way, by the child's own use, and is held under the same rule: readable by the child alone. The child privacy policy points at the main policy's list, so the line above covers it; §7 says what the child is told on the surface itself.

5. Risks and mitigations

Risk Who is harmed Mitigation Structural or conventional? Residual
The first-use table grows into a usage profile — "opened photos 40 times, last on Tuesday" — because a count and a last-used column are the obvious next additions every member; children most, whose record outlives their interest in it The primary key is (person, feature) and the table has no other column that could carry a count or a recency; there is no UPDATE grant for any client, so a row cannot be touched after it is written Structural — a count has nowhere to live Somebody could add a column later; §9 makes that a re-assessment
Another member of the same group reads what a member has and has not used — an adult reading a child's, a co-parent reading an ex-partner's the member whose record it is Row-level security admits only the member whose user_id the row carries; no group-membership predicate anywhere on the table; the server holds no grant on it either Structural —
A hint becomes a comparison — "most of your group uses the calendar; you haven't" — which is both a nudge built on somebody else's behaviour and, in law, a report to a member about how others engage the member, and the app's own legal position under the under-16 rule Hints are sentences fixed per feature and rendered verbatim; the derivation takes the reader's own rows and the device's own shown set and nothing about anybody else; the copy is scanned by the same tests that refuse comparison, streak and score vocabulary everywhere else Conventional, test-pinned Accepted — the register is the memory
The welcome, written by a model, names a member or a child — "Sarah has added three events for you" whoever is named The roster is not sent with the welcome request, and the returned line is validated against the roster on the device before it renders; a line that names anybody is dropped for the fixed sentence Conventional (a validator), test-pinned; the absence of the roster from the request is structural to the request shape A nickname not on the roster can slip past — the same residual the beneficiary question already records
A member is told they have "never used" a feature they use daily on another phone the member, mildly — an untrue sentence on their own screen The record is server-held per person, which is the whole reason it is not device-local Structural — one record per person A member who opened a surface once by accident is treated as having used it and never gets its hint; accepted (§8)
The welcome reveals to a co-member, through the shared brief cache, that a member is new the new member, negligibly The cached line describes the group's own records, which every active member can already read, and never names the member; the person who invited them already knows they are new Conventional Accepted, stated in §8
The first-use write fails, or is slow, and the feature the member tapped waits on it the member The write is fire-and-forget and idempotent — a duplicate is a no-op, not an error — and the surface opens regardless Structural for the no-op on duplicate (the primary key); conventional for never awaiting it —
A child is hinted towards a surface a child account does not have — the assistant, the mail tool, voice the child, and the app's own promise that a child's use reaches no model The hint list is filtered on the device by the same predicate that hides those tabs, and the model never writes a welcome for a child (the brief request is refused server-side for a child account, so a child's welcome is always our fixed sentence) Conventional for the filter; structural for the server refusal —

6. Structural versus conventional

Structural: the record's shape — two-column primary key, no count, no recency, no UPDATE or DELETE for any client, so a first is written once and cannot be edited into a log; row-level security that admits only the member whose row it is, with no group predicate and no server grant; the cascade from the member's account, so deletion reaches it without a sweep; the closed feature list, enforced by a CHECK constraint mirrored in the code; the server-side refusal of the brief request (and so of the model-written welcome) for a child account and for a Device-only group; the welcome request's shape, which has no field for the roster or the first-use rows to travel in.

Conventional, each to be pinned by a test in the build: the deterministic hint choice (first feature in a fixed order with no row and no "shown" entry); the once-a-week cadence and the never-twice rule; that every hint names a control that exists on the screen it points at; the no-comparison, no-count, no-streak vocabulary of every welcome and hint sentence; the validator that drops a welcome line naming a person; the device-side filter that keeps a child's hints to the surfaces a child has; the day-0 gating of the question card and needs section; the whole-day (never timestamp) granularity of what joins the cache key.

The rule we hold ourselves to, in our own words: nothing in this app shows a member how others engaged with what they posted, and nothing in the motivation layer is counted, scored or ranked. A first-use record is about the reader alone, is shown to the reader alone, and is never aggregated. A hint may say "you haven't tried the photo wall"; it may never say "you've used 4 of 9 features", because that is a score, and it may never say how anybody else compares, because that is a report on other people.

7. Best interests of the child

A child account is a member, and gets the welcome and the hints — for the surfaces a child has.

8. Residual risk we accept

9. Review trigger

Re-read and revise this assessment before building any of:

10. Checklist against exposure draft s 38(2)

s 38(2) Requires Answered in
(a) nature, scope, context, flow and purposes of handling children's personal information §§1–3
(b) why the collection is strictly necessary §2 — per column, with the two columns that are the question and the one that is kept for access requests
(c) lawful and fair collection §4
(d) consistency with the best interests of the child §7
(e) how we comply with the Code and the Act §4 and §6
(f) risk of harm to children §5, §7

s 38(3): this assessment precedes the build. s 39: listed on the published register.

11. Sources

Primary: the Children's Online Privacy Code exposure draft, ss 10, 13, 33, 38, 39; the Online Safety (Age-Restricted Social Media Platforms) Rules 2025, s 4A (the feedback-feature limb that the no-comparison rule in §6 keeps this feature clear of).

Sibling assessments: ./cloud-inference.md (the brief's residency and spend position, which the welcome inherits); ./intentions.md (nothing in the motivation layer is counted); ./2026-09-ban-self-assessment.md §5.3 (what a feedback feature is); ./child-accounts.md (which surfaces a child account has, and the server-side refusal of the brief for a child); ./privacy-levels.md (what Device-only promises).

In repo: agent-server/src/insight/index.ts (the brief route: what the request carries, the child-account and privacy-level refusals, and the cache write the welcome shares); agent-server/src/insight/beneficiaryAsk.ts and lib/beneficiaryAsk.ts (the no-personal-name validator the welcome line copies); hooks/useDashboardInsight.ts (the cache key the tenure day joins, and the byte-identical-across-ticks rule); lib/dashboardFallbackBrief.ts (the fixed sentence the welcome falls back to); lib/groupScopedState.ts (the classification of per-person state that survives a group switch, which the first-use record and the shown set will join); supabase/migrations/20260729040000_group_invites_and_approvals.sql (the membership row's status column tenure is counted from); supabase/migrations/20260804135141_add_group_dashboard_insights.sql and supabase/migrations/20260909010328_insight_cache_member_write.sql (the group-readable brief cache, §8); components/Chat/__tests__/noFeedbackFeatures.test.ts and lib/__tests__/motivationCopy.test.ts (the vocabulary scans the hint and welcome copy will sit under); constants/legalTexts.ts (the privacy policy list that gains the line in §4); our internal engineering rules on the home brief being promoted, on the prompt and the cache key answering different questions, on nothing in the motivation layer being counted, and on the app showing nobody how others engaged with what they posted.

For §1D (25 October 2026): lib/starterCards.ts (which cards a member sees, failing closed, and the per-person markers), constants/starterCards.ts (every word the cards and the tip say), store/slices/createStarterCardsSlice.ts (the three lists, and their clearing on sign-out and on another account signing in), components/Home/StarterCards.tsx and components/Home/TrayTip.tsx (the cards and the tip), and their tests lib/__tests__/starterCards.test.ts, store/__tests__/starterCardsSlice.test.ts and components/Home/__tests__/TrayTip.test.tsx; lib/__tests__/toolUseCallSites.test.ts (still exactly four ways Arrange by use notes a use).