Help centre Families Coaches Support

Littles Baby Tracker

Help for families and coaches

Site Tools


technical:features:23_practice_settings_and_team_labels

23 — Practice settings and team labels

Technical reference. For task-based help, see the corresponding user guide.
Documentation status: reviewed against implementation · Reviewed: 2026-07-21 · Primary users: coach, practice owner and organization administrator · Surfaces: coach portal, mobile web and platform API

Purpose

Practice settings give a coach a consistent public identity and give the practice an internal vocabulary for organizing families. A team label can represent a coach, pod or internal case owner, but it is deliberately not an authorization role and never changes which families a coach can access.

User outcomes

Persona Outcome
Coach Updates their own display name and profile image.
Practice owner Updates the organization/practice name shown across coach experiences.
Active coach member Creates a shared organization list of team labels and assigns one saved label to an eligible family.
Coach reviewing a roster Filters and scans families by team label without changing access.

Entry points

Surface Entry point What is available
Coach portal Account Coach name, practice name, profile image and team-label editor.
Coach portal Families Label filter and per-family label selection.
Mobile web Coach side menu → account/team labels Shared label editor and explanation of label semantics.
Mobile web Coach dashboard/family picker Label badges, filtering and per-family selection.

Functional flow

1. Update coach and practice identity

  1. The coach edits their name and, where authorized, the practice name.
  2. Both fields are required by the coach-portal form after trimming.
  3. A new profile image is prepared at a maximum side of 512 px and approximately 0.8 quality, uploaded through a 15-minute signed URL, and then referenced by its object path.
  4. Removing the image sends a null profile asset reference. Saving returns a fresh session so the shell can update immediately.
  5. Any authenticated user may update their own name/profile reference. A business-name change additionally requires a coach who is an active owner of the organization.

2. Maintain the shared label vocabulary

  1. Labels are stored on one active organization and are shared by its coach workspace.
  2. Whitespace is trimmed and internal runs of whitespace are collapsed.
  3. A label must contain 1–40 characters. An organization may retain at most 25 labels.
  4. Duplicate comparison is case-insensitive; the first canonical spelling is retained.
  5. Coaches can add, inline-rename and remove labels. A rename request includes an explicit old-to-new mapping so existing assignments follow the rename transactionally.
  6. Removing a label clears that label from every assignment in the same organization.

3. Assign and filter families

  1. A coach selects either one of the saved labels or No label for a family.
  2. The server accepts only a canonical label already saved by the assignment's organization.
  3. Assignment requires the coach's own active, non-past family assignment, active organization membership, an organization that still permits coach access, an active coach subscription and current support access.
  4. The returned family record replaces the local roster item. Portal and mobile filters then operate on the label value.

Validation and user-visible states

State Behaviour
Labels loading Editors and family selectors wait for the organization label response.
Empty vocabulary The UI invites the coach to add a label; family selectors have no label choices.
Duplicate or blank label The normalized duplicate is ignored or the form asks for a non-empty value.
More than 25 / over 40 characters Save is rejected with the shared validation limit.
Rename Assigned families move to the replacement label in the same write.
Remove Assigned families become unlabeled; no family access is revoked.
Ineligible family Label mutation is denied and the existing roster state remains.
Profile upload failure The profile write is not completed with the failed new object; the coach can retry.

Platform API contract

Method and route Purpose
PATCH /auth/profile Update actor name/profile asset; coach owners may also update businessName.
GET /coach/organization/case-owner-labels Read normalized labels for the coach's eligible organization.
PUT /coach/organization/case-owner-labels Replace the label list and optionally propagate renames.
PATCH /coach/families/:familyId/case-owner-label Assign a saved label or null to the coach's active family assignment.
POST /files/signed-upload-url Authorize the profile-image upload; see Feature 30.

Authorization, scope and privacy

  • Label-list access requires a coach with an active coach, owner or organizationAdmin membership in a non-suspended, non-archived organization.
  • A family label lives on the coach–family assignment, not the family account. Other organizations do not inherit it.
  • A label is internal operational metadata. Family screens do not use it as a family-visible role or access rule.
  • Family access, subscription and support-period checks remain server-side; a label never broadens them.
  • Profile-image object access is separately authorized and short-lived.
Important: Team labels organize a roster only. They do not create accounts, split a practice into security partitions, hide families from another otherwise-authorized coach, or grant permissions.

Acceptance checklist

  1. [ ] Coach name and owner-authorized practice name persist and refresh the session.
  2. [ ] Profile upload/remove presents a stable preview and recoverable error state.
  3. [ ] Label input trims/collapses whitespace, prevents case-insensitive duplicates, and enforces 25 × 40 limits.
  4. [ ] Rename propagates to assignments and removal clears obsolete assignments.
  5. [ ] Only a saved organization label or null can be assigned.
  6. [ ] Portal and mobile badges/filters reflect the updated family returned by the API.
  7. [ ] Tests prove that labels do not affect family authorization.

Source evidence

  • Coach portal: admin-web/src/routes/AccountPanel.tsx, admin-web/src/routes/FamiliesPanel.tsx
  • Mobile web: mobile-web/src/components/CoachSideMenu.tsx, CoachFamilyPicker.tsx, mobile-web/src/routes/CoachDashboard.tsx
  • Platform: platform/packages/shared/src/coach.ts, platform/apps/api/src/routes/coach-routes.ts, platform/apps/api/src/services/family-service.ts, platform/apps/api/src/services/prisma-invite-flow-service.ts, platform/apps/api/src/services/auth-service.ts