diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index fde6a6a..18ff64b 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -141,7 +141,7 @@ Plans: Plans: - [ ] 27-00-PLAN.md — Wave 0: E2E test scaffolding for nav restructure - [ ] 27-01-PLAN.md — TopNav and BottomTabBar components -- [ ] 27-02-PLAN.md — Setups top-level route and Collection tab simplification +- [x] 27-02-PLAN.md — Setups top-level route and Collection tab simplification - [ ] 27-03-PLAN.md — Root layout wiring, hero removal, and visual verification **UI hint**: yes diff --git a/.planning/STATE.md b/.planning/STATE.md index 1213f44..57b81d6 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -2,15 +2,15 @@ gsd_state_version: 1.0 milestone: v2.1 milestone_name: Public Discovery -status: verifying -stopped_at: Phase 27 context gathered -last_updated: "2026-04-10T21:20:26.632Z" +status: executing +stopped_at: Completed 27-02-PLAN.md +last_updated: "2026-04-10T21:44:28.010Z" last_activity: 2026-04-10 progress: - total_phases: 13 + total_phases: 14 completed_phases: 3 - total_plans: 7 - completed_plans: 7 + total_plans: 11 + completed_plans: 8 percent: 0 --- @@ -21,13 +21,13 @@ progress: See: .planning/PROJECT.md (updated 2026-04-09) **Core value:** Help people make better gear decisions — discover what others use, compare real-world data, and see how a potential buy affects your setup before committing. -**Current focus:** Phase 26 — discovery-landing-page +**Current focus:** Phase 27 — top-nav-restructure-and-search-bar-rethink ## Current Position -Phase: 999.1 -Plan: Not started -Status: Phase complete — ready for verification +Phase: 27 (top-nav-restructure-and-search-bar-rethink) — EXECUTING +Plan: 2 of 4 +Status: Ready to execute Last activity: 2026-04-10 Progress: [░░░░░░░░░░] 0% @@ -73,6 +73,7 @@ v2.1 decisions: - [Phase 26]: discoveryRoutes registered with browseTier rate limiting (120 req/min) for all GET discovery endpoints - [Phase 26-discovery-landing-page]: PublicSetupCard itemCount/creatorName fields are optional for backward compatibility with users/$userId usage - [Phase 26-discovery-landing-page]: Discovery sections hide entirely (return null) when not loading and data is empty — avoids empty grid layouts +- [Phase 27]: Setups elevated to top-level /setups route; Collection page reduced to Gear and Planning tabs with .catch(gear) fallback for legacy URLs ### Pending Todos @@ -84,6 +85,6 @@ None. ## Session Continuity -Last session: 2026-04-10T21:20:26.629Z -Stopped at: Phase 27 context gathered -Resume file: .planning/phases/27-top-nav-restructure-and-search-bar-rethink/27-CONTEXT.md +Last session: 2026-04-10T21:44:28.007Z +Stopped at: Completed 27-02-PLAN.md +Resume file: None diff --git a/.planning/phases/27-top-nav-restructure-and-search-bar-rethink/27-02-SUMMARY.md b/.planning/phases/27-top-nav-restructure-and-search-bar-rethink/27-02-SUMMARY.md new file mode 100644 index 0000000..95d673a --- /dev/null +++ b/.planning/phases/27-top-nav-restructure-and-search-bar-rethink/27-02-SUMMARY.md @@ -0,0 +1,68 @@ +--- +phase: 27-top-nav-restructure-and-search-bar-rethink +plan: "02" +subsystem: client-routing +tags: [routing, navigation, setups, collection, tanstack-router] +dependency_graph: + requires: [] + provides: [setups-top-level-route, collection-two-tab-ui] + affects: [src/client/routes/setups/index.tsx, src/client/routes/collection/index.tsx, routeTree.gen.ts] +tech_stack: + added: [] + patterns: [createFileRoute, tanstack-router-file-based-routing, zod-search-validation] +key_files: + created: + - src/client/routes/setups/index.tsx + modified: + - src/client/routes/collection/index.tsx +decisions: + - "Setups top-level route wraps SetupsView in standard max-w-7xl container — matches Collection page layout pattern" + - "z.enum catch('gear') handles legacy /collection?tab=setups URLs gracefully — no redirect needed" +metrics: + duration: "~2 minutes" + completed: "2026-04-10T21:43:53Z" + tasks_completed: 2 + tasks_total: 2 + files_changed: 2 +--- + +# Phase 27 Plan 02: Setups Elevation and Collection Tab Simplification Summary + +**One-liner:** Setups promoted to standalone `/setups` route; Collection page reduced to Gear and Planning tabs with Zod `.catch("gear")` graceful fallback for legacy URLs. + +## Tasks Completed + +| Task | Name | Commit | Files | +|------|------|--------|-------| +| 1 | Create setups index route | 329bfce | src/client/routes/setups/index.tsx (created) | +| 2 | Remove Setups tab from Collection page | 7fd9845 | src/client/routes/collection/index.tsx (modified) | + +## What Was Built + +**Task 1 — /setups top-level route** + +Created `src/client/routes/setups/index.tsx` using TanStack Router's `createFileRoute("/setups/")`. The route wraps `SetupsView` in the standard `max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6` container, matching the Collection page layout. The TanStack Router dev server auto-regenerates `routeTree.gen.ts` — file was not edited manually. + +**Task 2 — Collection page simplified to 2 tabs** + +Removed the Setups tab from `collection/index.tsx`: +- `TAB_ORDER` changed from `["gear", "planning", "setups"]` to `["gear", "planning"]` +- `TAB_LABELS` reduced to Gear and Planning entries +- `searchSchema` z.enum updated to `["gear", "planning"]` with `.catch("gear")` — old `?tab=setups` URLs fall back to Gear tab automatically +- `SetupsView` import removed +- Conditional render simplified to a binary: `tab === "gear"` ? `` : `` +- AnimatePresence, slide variants, and motion.div animation left exactly as-is + +## Deviations from Plan + +None — plan executed exactly as written. + +## Known Stubs + +None. + +## Self-Check: PASSED + +- `src/client/routes/setups/index.tsx` exists and contains `createFileRoute("/setups/")` and `SetupsView` +- `src/client/routes/collection/index.tsx` contains no "setups" string +- Commits 329bfce and 7fd9845 confirmed in git log