Skip to main content

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)

AreaWhatSDK
CatalogCRUD chores / bounties / activities / rewardschore / reward / activity services
Accountsinvite other accounts; add / edit / remove members; role grantsaddMember / updateMember / removeMember / setMemberRole; invites (SP2)
Economycurrency-per-token, default allocation (earn routing), house name/emojiupdateEconomyConfig, setHouseholdName
Default bucketsthe starter buckets every member begins with (was "giving destination"); mark some permanentnew — see below + Money & Envelopes
Feature flagstithe · stepBreakdown · activityGating · printableListsgetFeatureFlags / setProductFeatureFlag
Housename · emoji · address (optional, on Household) · rooms & zones (Place + floor)setHouseholdName, updateEconomyConfig(emoji), getPlaces / createPlace / updatePlace* / deletePlace
Family budgetset the household's budget (shown read-only on the Household overview)budget service (see Money doc; SDK partly stubbed)
Billingsubscription / payment for the paid tiers — only visible to ownersbilling (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 tithe flag).

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 the approveCompletion capability (authorizer.dart _helperCaps), so the chore-completion approval gate is parental OR helper, while spend-request approval, goal approval, and all Admin config stay isParental/admin-only. A helper's completion approval is stamped ResolvedBy.helperManual (a parental approver is always the stronger parentManual).
  • 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.