Files
GearBox/.planning/phases/27-top-nav-restructure-and-search-bar-rethink/27-02-SUMMARY.md

2.8 KiB

phase, plan, subsystem, tags, dependency_graph, tech_stack, key_files, decisions, metrics
phase plan subsystem tags dependency_graph tech_stack key_files decisions metrics
27-top-nav-restructure-and-search-bar-rethink 02 client-routing
routing
navigation
setups
collection
tanstack-router
requires provides affects
setups-top-level-route
collection-two-tab-ui
src/client/routes/setups/index.tsx
src/client/routes/collection/index.tsx
routeTree.gen.ts
added patterns
createFileRoute
tanstack-router-file-based-routing
zod-search-validation
created modified
src/client/routes/setups/index.tsx
src/client/routes/collection/index.tsx
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
duration completed tasks_completed tasks_total files_changed
~2 minutes 2026-04-10T21:43:53Z 2 2 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" ? <CollectionView /> : <PlanningView />
  • 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