Admin features — feature architecture
DRAFT — design under review. Consolidates every management / CRUD surface into one parental-gated area (Profile → Admin). The rest of the app stays read/act: Today acts, Catalog browses, Household is an overview, the member profile is personal. Configuring lives here. Admin gate =
MemberKind.isParental(the same gate as spend-request / goal approvals — completion approval additionally allows a Helper; not a separate role).
The split
Today / Catalog → ACT (do chores, browse / redeem)
Household tab → OVERVIEW (member tiles + budget & goal summaries)
Member profile → PERSONAL (own wallet, goals, budget / buckets)
Profile → Admin → CONFIGURE (everything below) [isParental only]
What lives in Admin (Profile → Admin)
| Area | What | SDK |
|---|---|---|
| Catalog | CRUD chores / bounties / activities / rewards | chore / reward / activity services |
| Accounts | invite other accounts; add / edit / remove members; role grants | addMember / updateMember / removeMember / setMemberRole; invites (SP2) |
| Economy | currency-per-token, default allocation (earn routing), house name/emoji | updateEconomyConfig, setHouseholdName |
| Default buckets | the starter buckets every member begins with (was "giving destination"); mark some permanent | new — see below + Money & Envelopes |
| Feature flags | tithe · stepBreakdown · activityGating · printableLists | getFeatureFlags / setProductFeatureFlag |
| House | name · emoji · address (optional, on Household) · rooms & zones (Place + floor) | setHouseholdName, updateEconomyConfig(emoji), getPlaces / createPlace / updatePlace* / deletePlace |
| Family budget | set the household's budget (shown read-only on the Household overview) | budget service (see Money doc; SDK partly stubbed) |
| Billing | subscription / payment for the paid tiers — only visible to owners | billing (gap; ties to product tiers) |
* updatePlace is an SDK gap to fill (rename a room/zone).
Default buckets + the permanent flag
The admin defines the default buckets every new member starts with — e.g. Spend, Save (permanent), Give. The rule:
- A bucket the admin marks permanent (e.g. Savings) cannot be removed by the member.
- The member can still add / rename / delete their own non-permanent buckets (their budget — see Money & Envelopes).
- "Giving" is just a default bucket (the Give envelope); encouraging tithing =
setting a default-allocation route into it (pairs with the
titheflag).
So permanent is a per-bucket flag the admin sets on the household's default-
bucket template; it flows onto each member's starter buckets.
Billing & owners
Billing (subscription / payment for the paid tiers) appears in Admin only
for members marked owner. owner is a distinct attribute from
admin/parental: an owner controls billing; an admin controls household
config. A household can have multiple owners (co-owners share billing
control). An owner is usually also an admin, but the two marks are independent.
SDK gap: an owner flag on the member/account + the billing surface (ties to the
free/paid product tiers).
Why one Admin area
- One mental model — "to change how things work, go to Admin."
- One gate — everything here is
isParental; the read/act surfaces stay open to everyone. - Keeps Household a clean overview and the member profile a clean personal surface — no management clutter on either.
Decisions (resolved 2026-06-25)
- Admin lives under Profile — a single Admin hub with sub-pages, gated by
MemberKind.isParental. One gate, one mental model. (The Profile tab replaced the old More tab in the 2026-07-26 shell redesign; the decision predates the rename.) - Helper gets NO admin access.
MemberRole.helper(think babysitter) can only approve / deny completed jobs — nothing in Admin. Shipped: the Helper overlay holds theapproveCompletioncapability (authorizer.dart_helperCaps), so the chore-completion approval gate is parental OR helper, while spend-request approval, goal approval, and all Admin config stayisParental/admin-only. A helper's completion approval is stampedResolvedBy.helperManual(a parental approver is always the strongerparentManual). - Billing is the one owner-gated area inside Admin (see above) —
owner, multiple allowed, distinct from admin/parental.
Relationship
- Household: the read-only overview; its budget summary + goal summaries roll up data configured here.
- Money & Envelopes: default buckets, the permanent flag, and member budget CRUD.