Appearance
0033 — Platform Foundation UI & View Inventory ​
Status: Accepted
Date: 2026-06-22
ADO work item: AB#3074 (Platform Epic); feature created under Epic AB#3074
Deciders: Kristopher Turner (platform owner)
Amends: ADR 0031 — resolves the three flagged responsive-layout ambiguities.
Cross-references: ADR 0021, ADR 0030, ADR 0031, ADR 0032
Context ​
The platform build (AB#3074) requires a complete, authoritative enumeration of every view in the platform foundation before any view is built. Without a canonical inventory:
- Mockups drift: screens are created ad-hoc with no agreed naming convention, making the Claude Design project (
7d1ebc96-b054-48c3-913e-733a17622948) hard to navigate. - ADO coverage is incomplete: there is no guarantee that every view has a work item with acceptance criteria.
- Code coverage is incomplete: routes and pages may be added or omitted inconsistently.
- Feature ADRs (0010–0020) do not record their view sets — when those features are built there is no convention for documenting and tracking their screens.
Additionally, ADR 0031 flagged three responsive-layout values as "proposals, owner sign-off required": desktop breakpoint (1024px), desktop nav pattern (left sidebar 220px), and max content width (860px). These are already implemented in apps/web/src/components/AppLayout.tsx and match the existing packages/ui/design-system/screens/web/*.html mockups. This ADR formally ratifies them.
Decision ​
The platform foundation has ≈35 canonical views. Each view must be (a) designed as a responsive HTML mockup encoding all three web viewports, (b) registered as DesignSync cards in the Claude Design project with the full naming convention defined below, (c) tracked as one ADO User Story with clear acceptance criteria under the appropriate platform feature, and (d) backed by a web route + React page component. Nothing in the platform foundation is shipped without all four artifacts present.
Native app views (iPhone, iPad, Android) reuse the same view list and acceptance criteria, but are designed and built in separate passes with their own mockups, cards, and ADO items.
The three responsive-layout values from ADR 0031 are hereby ratified: desktop breakpoint 1024px, desktop nav pattern left sidebar 220px, max content width 860px. These are locked decisions.
Responsive layout model (ratified from ADR 0031) ​
| Breakpoint | Viewport | Primary nav | Content constraint |
|---|---|---|---|
| Phone | < 640 px | Fixed bottom tab bar (5 tabs) | Single column, full width, 80 px bottom padding |
| Tablet | 640–1023 px | Fixed bottom tab bar (5 tabs) | Single column, max 640 px centered |
| Desktop | ≥ 1024 px | Fixed left sidebar (220 px) | Fluid column, max 860 px centered, no bottom bar |
The five primary tab/sidebar destinations remain as defined in packages/ui/design-system/components/tab-bar.html: Home · Watch & Listen · Calendar · Messages · Me — in that order. Additional destinations added by the feature registry (ADR 0030) appear after Me.
DesignSync card naming convention ​
Every card registered in the Claude Design project must identify the screen, role variant (if role-specific), platform, and viewport in the format:
<Screen> — <Variant/Role> · <Platform> · <Viewport>| Token | Values |
|---|---|
| Screen | Human-readable screen name, e.g. "Members — Detail (Adult)" |
| Variant/Role | Omit for all-roles screens. Add "(Admin)", "(Minister)", "(Kid)", "(Self)", etc. when role or subject differs |
| Platform | "Web", "iPhone App", "iPad App", "Android App" |
| Viewport | "Desktop", "Tablet", "Phone" (web only; native apps omit viewport) |
Examples:
Members — Detail (Adult) · Web · PhoneMembers — Manage (Admin) · Web · DesktopProfile — Edit · Web · TabletMembers — Detail (Adult) · iPhone AppAdmin — Approval Queue · Web · Desktop
Re-register all existing 48 cards under this scheme.
Design-system screens folder convention ​
Mockup HTML files live under packages/ui/design-system/screens/ in platform-specific subfolders:
| Subfolder | Contents |
|---|---|
screens/web/ | Responsive HTML mockups for the web browser client (all 3 viewports: Desktop, Tablet, Phone) |
screens/mobile/ | Native HTML mockups for iPhone + Android app — reserved; placeholder files only until the native app phases begin |
screens/tablet/ | Native HTML mockups for iPad app — reserved; placeholder files only until the native app phase begins |
components/ | Shared component snippet cards (tab bar, buttons, empty state, etc.) — used across all platforms |
All "Mockup file" references in this ADR and in docs/internal/design/platform-ui-view-inventory.md use the screens/web/<file>.html path for the current platform-foundation (web) phase.
Feature ADR view convention ​
Every feature ADR (0010–0020 and any future feature ADR) must include a "Views" section. For features not yet built the section reads:
markdown
## Views
**Status: TBA** — view set will be defined when this feature enters active development.
The view inventory ADR (0033) and feature's ADO epic/feature items will be updated at that time.When the feature is built: fill in the view table (screen name, route, role, mockup file, ADO story).
Canonical view inventory — platform foundation (web) ​
Scope: platform foundation only. Feature portals (calendar, listen, groups, marketplace, homeschool, etc.) are out of scope until their delivery phase.
Auth & onboarding ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| A1 | Landing / public home | / | public | screens/web/landing.html | story under AB#3090 |
| A2 | Sign-in | /sign-in | public | screens/web/sign-in.html (exists) | story under AB#3085 |
| A3 | Request access (sign-up step 1) | /sign-up | public | screens/web/sign-up-request.html | story under AB#3086 |
| A4 | Create account (sign-up step 2) | /sign-up/account | public | screens/web/sign-up-account.html | story under AB#3086 |
| A5 | Account pending approval | /pending | public | screens/web/account-pending.html | story under AB#3086 |
| A6 | Sign-out confirmation | (modal/flow) | all | screens/web/sign-out.html | story under AB#3090 |
Shell & home ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| S1 | App shell / navigation chrome | — | all | components/tab-bar.html (exists) | story under AB#3090 |
| S2 | Home (feature-icon grid, registry-gated) | /app/home | all | screens/web/home.html (rework) | story under AB#3692 |
| S3 | Messages inbox shell | /app/messages | all | screens/web/messages.html | story under AB#3090 |
Profile / Me ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| P1 | Profile (Me) — own profile hub | /app/profile | self | screens/web/profile.html (cleanup) | story under AB#3086 |
| P2 | Edit own profile | /app/profile/edit | self | screens/web/profile-edit.html | story under AB#3086 |
| P3 | Privacy & visibility | /app/profile/privacy | self | screens/web/profile-privacy.html | story under AB#3086 |
| P4 | Notification preferences | /app/profile/notifications | self | screens/web/profile-notifications.html | story under AB#3086 |
| P5 | About & Help | /app/about | all | screens/web/about-help.html | story under AB#3086 |
| P6 | Portal links (RBAC-gated; admin/minister only) | profile + sidebar | admin, ministry_leader | rendered in P1 + S1 (no separate mockup) | task under P1 + S1 stories |
Family ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| F1 | Family management | /app/family | family head | screens/web/family.html (exists) | story under AB#3086 |
| F2 | Add spouse | /app/family/add-spouse | family head | screens/web/family-add-spouse.html (exists) | story under AB#3086 |
| F3 | Add child | /app/family/add-child | family head | screens/web/family-add-child.html | story under AB#3086 |
Members ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| M1 | Members directory (last-name sort, family-grouped, search) | /app/members | all | screens/web/members.html (rework) | story under members feature |
| M2 | Member detail — adult | /app/members/:id | all | screens/web/member-detail-adult.html | story = AB#3693 (re-scoped) |
| M3 | Member detail — kid (birthday only) | /app/members/:id (kid account) | all | screens/web/member-detail-kid.html | task under AB#3693 |
| M4 | Member manage — admin | /app/members/:id/manage | admin | screens/web/member-manage-admin.html | task under AB#3693 |
| M5 | Member manage — minister | /app/members/:id/manage | ministry_leader | screens/web/member-manage-minister.html | task under AB#3693 |
| M6 | Export members to Excel/CSV | (action) | admin | ROADMAP — no mockup now | roadmap story, Priority 4 |
Admin portal ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| AD1 | Admin portal hub | /app/admin | admin | screens/web/admin.html (exists) | story under AB#3166 |
| AD2 | Approval queue | /app/admin/approvals | admin | screens/web/admin-approval-queue.html (exists) | story under AB#3166 |
| AD3 | Role assignment | /app/admin/roles | admin | screens/web/admin-role-assignment.html (exists) | story under AB#3166 |
| AD4 | Content oversight | /app/admin/content | admin | screens/web/admin-content-oversight.html (exists) | story under AB#3166 |
| AD5 | Audit log | /app/admin/audit-log | admin | screens/web/admin-audit-log.html (exists) | story under AB#3166 |
Minister portal ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| MN1 | Minister portal hub | /app/minister | ministry_leader | screens/web/minister-portal.html (exists) | story under AB#3166 |
| MN2 | Minister oversight (pastoral approvals/care) | /app/minister/oversight | ministry_leader | screens/web/minister-oversight.html | story under AB#3166 |
System / utility ​
| ID | View | Route | Roles | Mockup file | ADO |
|---|---|---|---|---|---|
| U1 | Not found / disabled-route (404) | * | all | screens/web/system-404.html | story under new feature |
| U2 | Access denied (403) | — | all | screens/web/system-403.html | story under new feature |
| U3 | Empty-state pattern | — | all | components/empty-state.html | task under AB#3237 |
| U4 | Loading / skeleton pattern | — | all | components/loading.html | task under AB#3237 |
| U5 | Error boundary ("something went wrong") | — | all | screens/web/system-error.html | story under new feature |
Totals (web): ~35 views. ~100 DesignSync cards (≈33 screen mockups × 3 viewports, plus a few component cards). Existing mockups on disk: 16 (several reworked; see §Consequences).
Native app views (iPhone, iPad, Android) ​
Native platforms reuse the same view list (A1–U5) with identical functionality requirements. They are designed and built in separate passes — not in the platform-foundation phase:
- iPhone app: separate mockup pass after web foundation is done (ADR 0009, Epic AB#3077).
- iPad app: companion to iPhone, same Epic.
- Android app: separate delivery phase (ADR 0014, Epic AB#3139).
Each native-app view gets its own ADO User Story and DesignSync cards with the convention: <Screen> · iPhone App, <Screen> · iPad App, <Screen> · Android App (no viewport suffix — native apps are single-viewport by platform).
Alternatives considered ​
| Option | Pros | Cons | Why not chosen |
|---|---|---|---|
| Full view inventory + one story per view (chosen) | Every view is accounted for, documented, and trackable; nothing shipped without four artifacts | Upfront cataloging effort | — chosen |
| Ad-hoc screen creation (status quo) | Start immediately | Inevitable gaps; no consistent naming; ADO coverage unverifiable | Created inconsistencies that triggered this ADR; rejected |
| One story per feature area (not per view) | Fewer stories | Cannot track individual view completion; acceptance criteria are too coarse to verify | Granularity too low; rejected |
| Separate ADR per feature's views | Full per-feature decision detail | Proliferates ADRs; platform-foundation views have no natural feature home | Convention "Views: TBA" in each feature ADR achieves the same without extra ADRs; rejected |
Consequences ​
Positive ​
- Every platform-foundation view has a mockup, DesignSync card, ADO story, and route — nothing is shipped without all four artifacts.
- The naming convention makes the Claude Design project navigable for the owner across platforms and viewports.
- Feature ADRs gain a "Views" section as a living record of that feature's screen set.
- The three responsive ambiguities from ADR 0031 are resolved;
AppLayout.tsxand all mockups can be locked to these values.
Negative / trade-offs ​
- ≈35 ADO stories to create (beyond those already existing); significant one-time ADO authoring effort required before the build phase.
- Some existing mockups require rework (member-detail screens, profile cleanup, home rework).
- Re-registration of ~48 existing DesignSync cards under the new naming convention.
Mockup rework required by this ADR and ADR 0032 ​
| Current file | Action | Reason |
|---|---|---|
screens/web/member-detail-member-view.html | Rename → screens/web/member-detail-adult.html; align fields to corrected model | ADR 0032 revision |
screens/web/member-detail-minister-view.html | Rewrite — same detail + Manage button (not inline pastoral fields) | ADR 0032 revision |
screens/web/member-detail-admin-view.html | Rewrite — same detail + Manage button (not inline edit) | ADR 0032 revision |
screens/web/profile.html | Remove "Bible Study" and "Homeschool Co-op" feature tags | Platform-only scope |
screens/web/home.html | Rework to feature-icon grid (registry-driven); remove hardcoded event/content list | ADR 0030 |
screens/web/members.html | Verify last-name alpha order + family grouping are explicit | M1 |
New files to create under screens/web/: landing.html, sign-up-request.html, sign-up-account.html, account-pending.html, sign-out.html, messages.html, profile-edit.html, profile-privacy.html, profile-notifications.html, about-help.html, family-add-child.html, member-detail-kid.html, member-manage-admin.html, member-manage-minister.html, minister-oversight.html, system-404.html, system-403.html, system-error.html. Also needed under components/: empty-state.html, loading.html.
References ​
- ADR 0021 — Admin & Ministry Portal — admin/minister portal capability areas; amended to reference Manage screens (member-manage-admin, member-manage-minister)
- ADR 0030 — Progressive feature enablement — feature registry drives Home icon grid (S2) and nav additions
- ADR 0031 — Code-first design workflow and cross-platform delivery — responsive layout model (amended by this ADR: ambiguities resolved)
- ADR 0032 — Member Directory field visibility and RBAC — corrected member-detail model (Manage-button; kid-birthday-only)
- Design doc — Platform UI view inventory — full per-view spec matrix
- packages/ui/design-system/README.md — card naming convention, sync workflow
- ADO: Epic AB#3074 (Platform build); feature created under AB#3074