04 — Information Architecture (Parents Module)
- 1. Two zones
- 2. Route table (module-owned; extends
00-shared/05 §4) - 3. Screen hierarchy
- 4. Modal hierarchy (module)
- 5. Screen relationships
- 6. Nested nav
- 7. Quick actions / FAB / context menus
- 8. Deep links (proposed routing table)
- 9. Accessibility of IA
- 10. Peripheral: which nav elements are Parents-owned
Where Parents screens live in the shell (00-shared/05). Two zones: the admin guardians workspace (CRUD + linking) and the parent self-service zone (
(forward-looking)— no "my profile/children" endpoints exist today, see 01_Product_Overview.md OQ-1). All routes derive fromparent.controller.ts(parent.controller.ts:22-60) and the shared shell.
1. Two zones
AppShell (authed)
├─ ADMIN WORKSPACE (role: org_admin / admission staff)
│ /parents parents list (paginated)
│ /parents/:id parent detail (+ linked children)
│ /parents/new create parent profile
│ /parents/:id/edit edit parent profile
│ (sheet) link guardian POST /parents/link/:studentId
│ (dialog) unlink guardian DELETE /parents/link/:linkId
│
└─ PARENT SELF-SERVICE (role: parent — (forward-looking))
/my/children my children + child switcher
/my/profile my guardian profile (edit)
- Admin workspace routes are gated by intended
parent.read/create/update/delete/linkpermissions(planned)(04-Modules/Parents.md:64-70) — not seeded today (permissions.constants.ts); server is JWT-only (parent.controller.ts:23). - Parent self-service zone is reachable for the
parentrole only (role.schema.ts:50-56); requires the(forward-looking)my-profile endpoint.
2. Route table (module-owned; extends 00-shared/05 §4)
| Route | Screen | Auth | Source API |
|---|---|---|---|
/parents | Parents list | JWT (+ parent.read planned) | GET /parents |
/parents/new | Create parent form | JWT (+ parent.create planned) | POST /parents |
/parents/:id | Parent detail + linked children | JWT (+ parent.read planned) | GET /parents/:id, GET /parents/:id/students |
/parents/:id/edit | Edit parent form | JWT (+ parent.update planned) | PATCH /parents/:id |
/parents/link (sheet) | Link guardian ↔ student | JWT (+ parent.link planned) | POST /parents/link/:studentId |
| — (dialog) | Unlink guardian | JWT (+ parent.link planned) | DELETE /parents/link/:linkId |
/my/children | My children + switcher (forward-looking) | parent role | (planned) |
/my/profile | My guardian profile (forward-looking) | parent role | GET/PATCH /parents/:id |
3. Screen hierarchy
- Parents list is the admin hub: →
/parents/new, →/parents/:id(detail) →/parents/:id/edit, detail → link sheet (per child) / unlink dialog. - Student detail (Students module) cross-links to guardians via
GET /parents/link/student/:studentId(parent.controller.ts:53-57) — guardian list embedded in the student screen. - Parent zone:
/my/childrenis the hub; child switcher swaps context;/my/profileis a subpage.
flowchart TD
PL[/parents/] --> PN[/parents/new/]
PL --> PD[/parents/:id/]
PD --> PE[/parents/:id/edit/]
PD --> LS[(link sheet)] --> POST1[POST /parents/link/:studentId]
PD --> UD[(unlink dialog)] --> DEL[DELETE /parents/link/:linkId]
SD[/students/:id/] --> SL[(guardians via GET /parents/link/student/:studentId)]
MC[/my/children/ (forward-looking)/] --> CS[(child switcher)]
MC --> MP[/my/profile/ (forward-looking)/]
4. Modal hierarchy (module)
Following 00-shared/05 §5:
- Snackbar — "Guardian linked", "Link removed", "Profile updated".
- Bottom sheet — link guardian (relationship + flags ≤ 6 controls), student picker.
- Dialog — unlink confirm (destructive-ish), "already linked" warning, primary switch confirm.
- Full-screen page — create/edit parent form (> 3 fields → page,
00-shared/05 §5). - Loader — skeleton on lists; CTA spinner on mutations.
5. Screen relationships
- List → Detail → Edit; Edit returns → Detail (refresh via re-fetch — no cache for
detail,
00-shared/06 §3.3). - Detail → linked children → per-child guardian menu (unlink, set primary via delete+recreate — OQ-4).
- Student detail ↔ parent detail bidirectional navigation.
- Unlink from either side refreshes the other (shared
ParentsCubitcache invalidation).
6. Nested nav
- Tablet/desktop ≥ 840 dp: master-detail —
/parentslist left, detail right (00-shared/05 §3); phone pushes. - Parent zone:
/my/childrensingle pane with switcher bar (no master-detail).
7. Quick actions / FAB / context menus
- Parents list FAB "Add guardian" (extended) →
/parents/new. - Parent row
AppMenu: Edit, Open; linked-child rowAppMenu: Unlink, Set primary. - Student detail: "Add guardian" tonal button → link sheet.
- Keyboard (desktop):
Non/parents= new;Esccloses sheets/dialogs (00-shared/08 §2).
8. Deep links (proposed routing table)
| Pattern | Target | Note |
|---|---|---|
studylyon://parents/:id | Parent detail | admin |
studylyon://students/:id | Student detail | parent: only if linked (forward-looking) |
studylyon://my/children | My children | parent role |
9. Accessibility of IA
- One
headlineMediumper screen; forms ordered identity → role → flags; focus begins at first field (09_Accessibility_Baseline.md §11). - Link sheet: single semantics group per guardian row.
10. Peripheral: which nav elements are Parents-owned
- Admin: the
/parentsworkspace only. Parent:/my/children+/my/profile— both must register in the shared shell's role-gated destination map (00-shared/05 §2) and be hidden + unroutable for other roles (00-shared/05 §1).