Context. surface customer · domain arete · route /domains/arete/goals · auth signed-in · source apps/oshun/web/src/app/domains/arete/goals/page.tsx
Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; live screen-reader, touch, offline, and telemetry-delivery checks pending a manual AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md
Purpose#
Internal /domains/arete/* alternate goal-system surface. A multi-view
workspace covering SMART / OKR / WOOP / 12-week-year frameworks, plus a
hierarchy view, progress and analytics dashboards, goal detail, and a
get-unstuck wizard. Heavier and more app-like than the polished /arete/goal
"one true page" surface.
Entry points#
- Direct URL / bookmark — yes (signed-in)
- Back navigation — page passes
onBack={() => router.back()}toAreteGoalSystem; the dashboard shows the ArrowLeft button only whenonBackis provided - No link from
/aretepolished surface — verify
Layout regions#
page.tsx is a 'use client' page using useRouter(). Renders
<AreteGoalSystem onBack={() => router.back()} />. Component at
apps/oshun/web/src/components/domains/arete/AreteGoalSystem.tsx.
- Container:
min-height: 100vh; max-width: 800px; padding: tokens.spacing[4]; background: L.bg - Top bar (dashboard only): ArrowLeft button (
aria-label="Back") + h1 "Goal System" (accent color) - Dashboard
view === 'dashboard':<GoalDashboard goals={goals} onNavigate={navigate} /> - Other views routed by internal
viewstate (GoalViewunion):hierarchy→<GoalHierarchyView goals onBack={goBack} />smart_wizard→<SMARTGoalWizard onBack={goBack} />okr→<OKRFrameworkView goals onBack={goBack} />woop→<WOOPWizardView onBack={goBack} />twelve_week→<TwelveWeekYearView goals onBack={goBack} />progress→<GoalProgressView goals onBack onNavigate />analytics→<GoalAnalyticsDashboard goals analytics={sampleGoalAnalytics} onBack />detail→<GoalDetailView goal={selectedGoal} onBack onNavigate />get_unstuck→<GetUnstuckWizard goal={selectedGoal} onBack />
Constants:
CATEGORY_CONFIG: 8 categories (health / career / relationships / learning / financial / creative / spiritual / custom) with labels, colors, lucide iconsSTATUS_CONFIG: active / at_risk / completed / abandoned / pausedSMART_COLORS: specific / measurable / achievable / relevant / timeBound
States#
- Loading — N/A: client component with sync fixture
- Dashboard (default) —
view === 'dashboard'; listssampleGoals - Drill-in views — one of nine non-dashboard views; back button returns
to dashboard via
goBackcallback (setsviewto'dashboard') - Goal selection —
selectedGoalIdis set vianavigate(v, id);detailandget_unstuckviews requireselectedGoalto be defined, otherwise the view does not render - Empty goals —
sampleGoalsfrom fixture; empty array would render an empty dashboard (no empty-state copy at top level) - Error (recoverable) — relies on app-level error boundary
- Offline — purely client; identical offline
- Gated — N/A
- Standalone PWA — no shell chrome around the page
Interactions#
Top bar#
- Back button (
aria-label="Back")- Function: calls
onBackprop, which isrouter.back()from the page - Visible only when
view === 'dashboard'ANDonBackwas provided
- Function: calls
Dashboard (GoalDashboard)#
- Per-goal navigate — clicking a goal calls
onNavigate('detail', goal.id) - Framework / wizard launch buttons — verify in the inner component which buttons exist for SMART / OKR / WOOP / 12-week / hierarchy / progress / analytics
- "Get Unstuck Wizard" — for at-risk goals; the
AlertTrianglebutton shown earlier in the source ("This Goal is Stuck - Get Unstuck Wizard") callsonNavigate('get_unstuck', goal.id)
View-specific interactions (wizards, charts)#
- Per-view interactions exist (SMART step navigation, WOOP entry, OKR key-result tracking, progress ring fills, etc.) — enumerate when individually walking each view
Data & contracts#
- Reads: import-time
sampleGoals,sampleGoalAnalyticsfrom@/lib/arete/arete-simulation-data. Types from@/lib/arete/arete-types(GoalData,GoalCategory,GoalStatus,TwelveWeekYear,GoalAnalytics). No BFF. - Writes: none —
[goals]isuseStatebut never mutated in the outer component - Realtime: none
- Caching: client bundle only
- Auth/role check: app-level middleware
Cross-references#
- Domain hub:
arete.md - Polished counterpart:
arete-goal.md— the one-page goal portrait (different intent: editorial single-view vs. this multi-framework workspace) - Sibling planning surface:
domains-arete-plan-review.md - Component source:
apps/oshun/web/src/components/domains/arete/AreteGoalSystem.tsx - Simulation data:
apps/oshun/web/src/lib/arete/arete-simulation-data.ts - Types:
apps/oshun/web/src/lib/arete/arete-types.ts
Open questions / known gaps#
- No shared chrome with
/aretepolished surface — bare client page - No persistence —
useState([sampleGoals])reverts on reload - Nine subviews are rendered conditionally from a single switch — each is a sub-flow that needs its own walkthrough leaf
- Relationship between this surface and
/arete/goal(one-page goal portrait) — V1-shipping vs. internal?/arete/goalis a thin server page using Lilith design; this is a heavy client tabbed workspace. Document which is canonical for V1