chore: complete v1.1 milestone — Fixes & Polish

Archive v1.1 artifacts (roadmap, requirements, phases) to milestones/.
Evolve PROJECT.md with shipped requirements and new key decisions.
Reorganize ROADMAP.md with collapsed milestone groupings.
Update retrospective with v1.1 lessons.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 18:16:27 +01:00
parent 414f2b726e
commit 407fa45280
27 changed files with 201 additions and 106 deletions

View File

@@ -1,5 +1,23 @@
# Milestones
## v1.1 Fixes & Polish (Shipped: 2026-03-15)
**Phases completed:** 3 phases, 7 plans
**Timeline:** 1 day (2026-03-15)
**Codebase:** 6,134 LOC TypeScript, 65 files changed (+5,049 / -1,109)
**Key accomplishments:**
- Fixed threads table and thread creation with categoryId support, modal dialog flow
- Overhauled planning tab with educational empty state, pill tabs, and category filter
- Fixed image display bug (Zod schemas missing imageFilename — silently stripped by validator)
- Redesigned image upload as hero preview area with 4:3 placeholders on all cards
- Migrated categories from emoji to Lucide icons with 119-icon curated picker
- Built IconPicker component with search, 8 group tabs, portal popover
**Archive:** `.planning/milestones/v1.1-ROADMAP.md`, `.planning/milestones/v1.1-REQUIREMENTS.md`
---
## v1.0 MVP (Shipped: 2026-03-15)
**Phases completed:** 3 phases, 10 plans

View File

@@ -14,27 +14,23 @@ Make it effortless to manage gear and plan new purchases — see how a potential
- ✓ Gear collection with item CRUD (name, weight, price, category, notes, product link) — v1.0
- ✓ Image uploads for gear items — v1.0
- ✓ User-defined categories with emoji and automatic weight/cost totals — v1.0
- ✓ User-defined categories with automatic weight/cost totals — v1.0
- ✓ Planning threads for purchase research with candidate products — v1.0
- ✓ Thread resolution: pick a winner, it moves to collection — v1.0
- ✓ Named setups (loadouts) composed from collection items — v1.0
- ✓ Live weight and cost totals per setup — v1.0
- ✓ Dashboard home page with summary cards — v1.0
- ✓ Onboarding wizard for first-time setup — v1.0
- ✓ Thread creation with category assignment via modal dialog — v1.1
- ✓ Planning tab with educational empty state and pill tab navigation — v1.1
- ✓ Image display on item detail views and gear cards with placeholders — v1.1
- ✓ Hero image upload area with preview and click-to-upload — v1.1
- ✓ Lucide icon picker for categories (119 curated icons, 8 groups) — v1.1
- ✓ Automatic emoji-to-Lucide icon migration for existing categories — v1.1
### Active
## Current Milestone: v1.1 Fixes & Polish
**Goal:** Fix broken functionality, improve image handling UX, and replace emoji categories with icon picker.
**Target features:**
- Fix thread creation (missing database table)
- Fix image display (uploaded but not rendering)
- Redesign image upload UX (image preview with placeholder icon)
- Display images on gear cards
- Improve planning tab empty state
- Replace emoji categories with Lucide icon picker
(No active milestone — use `/gsd:new-milestone` to start next)
### Future
@@ -61,8 +57,8 @@ Make it effortless to manage gear and plan new purchases — see how a potential
## Context
Shipped v1.0 MVP with 5,742 LOC TypeScript across 114 files.
Tech stack: React 19, Hono, Drizzle ORM, SQLite, TanStack Router/Query, Tailwind CSS v4, all on Bun.
Shipped v1.1 with 6,134 LOC TypeScript.
Tech stack: React 19, Hono, Drizzle ORM, SQLite, TanStack Router/Query, Tailwind CSS v4, Lucide React, all on Bun.
Primary use case is bikepacking gear but data model is hobby-agnostic.
Replaces spreadsheet-based gear tracking workflow.
@@ -89,10 +85,13 @@ Replaces spreadsheet-based gear tracking workflow.
| Tab navigation via URL params | Shareable URLs between gear/planning | ✓ Good |
| Setup item sync: delete-all + re-insert | Simpler than diffing, atomic in transaction | ✓ Good |
| Onboarding state in SQLite settings | Source of truth in DB, not Zustand | ✓ Good |
---
| Lucide Icons for categories | Best outdoor/gear icon coverage, tree-shakeable, clean style | — Pending |
| Stay with SQLite | Single-user app, no need for Postgres complexity | ✓ Good |
| Lucide Icons for categories | Best outdoor/gear icon coverage, tree-shakeable, clean style | ✓ Good |
| categoryId on threads (NOT NULL FK) | Every thread belongs to a category | ✓ Good |
| Modal dialog for thread creation | Cleaner UX, supports category selection | ✓ Good |
| Hero image area at top of forms | Image-first UX, 4:3 aspect ratio consistent with cards | ✓ Good |
| Emoji-to-icon automatic migration | One-time schema rename + data conversion via Drizzle migration | ✓ Good |
| ALTER TABLE RENAME COLUMN for SQLite | Simpler than table recreation for column rename | ✓ Good |
---
*Last updated: 2026-03-15 after v1.1 milestone start*
*Last updated: 2026-03-15 after v1.1 milestone completion*

View File

@@ -47,6 +47,50 @@
---
## Milestone: v1.1 — Fixes & Polish
**Shipped:** 2026-03-15
**Phases:** 3 | **Plans:** 7 | **Files changed:** 65
### What Was Built
- Fixed threads table and thread creation with categoryId support and modal dialog
- Overhauled planning tab with educational empty state, pill tabs, and category filter
- Fixed image display bug (Zod schema missing imageFilename)
- Redesigned image upload as 4:3 hero preview area with placeholders on all cards
- Migrated categories from emoji to Lucide icons with 119-icon curated picker
- Built IconPicker with search, 8 group tabs, and portal popover
### What Worked
- Auto-advance pipeline (discuss → plan → execute) completed both phases end-to-end without manual intervention
- Wave-based parallel execution in Phase 6 — plans 06-02 and 06-03 ran concurrently with no conflicts
- Executor auto-fix deviations handled cascading renames gracefully (emoji→icon required touching hooks/routes beyond plan scope)
- Context discussion upfront captured clear decisions — no ambiguity during execution
- Verifier caught real issues (Zod schema root cause) and confirmed all must-haves
### What Was Inefficient
- Schema renames cascade through many files (12 in 06-01) — executors had to auto-fix downstream references not in the plan
- Some ROADMAP.md plan checkboxes remained unchecked despite plans completing (cosmetic tracking drift)
- Phase 5 executor installed inline SVGs for ImageUpload icons, then Phase 6 added lucide-react anyway — could have coordinated
### Patterns Established
- Portal-based popover pattern: reused from EmojiPicker → IconPicker (click-outside, escape, portal rendering)
- LucideIcon dynamic lookup component: `icons[name]` from lucide-react for runtime icon resolution
- Curated icon data file pattern: static data organized by groups for picker UIs
- Hero image area: full-width 4:3 preview at top of forms with placeholder/upload/preview states
### Key Lessons
1. Zod validation middleware silently strips unknown fields — always add new schema fields to Zod schemas, not just DB schema
2. Auto-fix deviations are a feature, not a bug — executors that fix cascading renames save manual replanning
3. Auto-advance pipeline works well for straightforward phases — interactive discussion ensures decisions are clear before autonomous execution
4. Parallel Wave 2 execution with no file overlap is safe and efficient
### Cost Observations
- Model mix: opus for execution, sonnet for verification/checking
- Sessions: 1 continuous auto-advance pipeline for both phases
- Notable: Full milestone (discuss + plan + execute × 2 phases) completed in a single session
---
## Cross-Milestone Trends
### Process Evolution
@@ -54,14 +98,18 @@
| Milestone | Commits | Phases | Key Change |
|-----------|---------|--------|------------|
| v1.0 | 53 | 3 | Initial build, coarse granularity, TDD backend |
| v1.1 | ~30 | 3 | Auto-advance pipeline, parallel wave execution, auto-fix deviations |
### Cumulative Quality
| Milestone | LOC | Files | Tests |
|-----------|-----|-------|-------|
| v1.0 | 5,742 | 114 | Service + route integration |
| v1.1 | 6,134 | ~130 | Service + route integration (updated for icon schema) |
### Top Lessons (Verified Across Milestones)
1. Coarse phases with TDD backend → smooth frontend integration
2. Service DI pattern enables fast, reliable testing without mocks
3. Always update Zod schemas alongside DB schema — middleware silently strips unvalidated fields
4. Auto-advance pipeline (discuss → plan → execute) works well for clear-scope phases

View File

@@ -3,7 +3,7 @@
## Milestones
-**v1.0 MVP** -- Phases 1-3 (shipped 2026-03-15)
- **v1.1 Fixes & Polish** -- Phases 4-6 (in progress)
- **v1.1 Fixes & Polish** -- Phases 4-6 (shipped 2026-03-15)
## Phases
@@ -16,70 +16,22 @@
</details>
### v1.1 Fixes & Polish (In Progress)
<details>
<summary>v1.1 Fixes & Polish (Phases 4-6) -- SHIPPED 2026-03-15</summary>
**Milestone Goal:** Fix broken functionality, improve image handling UX, and replace emoji categories with Lucide icon picker.
- [x] Phase 4: Database & Planning Fixes (2/2 plans) -- completed 2026-03-15
- [x] Phase 5: Image Handling (2/2 plans) -- completed 2026-03-15
- [x] Phase 6: Category Icons (3/3 plans) -- completed 2026-03-15
- [ ] **Phase 4: Database & Planning Fixes** - Fix threads table and planning thread creation, polish empty states
- [x] **Phase 5: Image Handling** - Fix image display and redesign upload UX with previews (completed 2026-03-15)
- [ ] **Phase 6: Category Icons** - Replace emoji categories with Lucide icon picker
## Phase Details
### Phase 4: Database & Planning Fixes
**Goal**: Users can create and manage planning threads without errors
**Depends on**: Phase 3 (v1.0 complete)
**Requirements**: DB-01, PLAN-01, PLAN-02
**Success Criteria** (what must be TRUE):
1. Running database schema push creates the threads table (and any other missing tables) without errors
2. User can create a new planning thread from the planning tab and it appears in the thread list
3. User sees a clear, polished empty state with a call-to-action when no planning threads exist
**Plans**: 2 plans
Plans:
- [x] 04-01-PLAN.md — Database schema fix and backend thread API with categoryId
- [ ] 04-02-PLAN.md — Frontend planning tab overhaul (modal, empty state, pill tabs, category filter)
### Phase 5: Image Handling
**Goal**: Users can see and manage gear images throughout the app
**Depends on**: Phase 4
**Requirements**: IMG-01, IMG-02, IMG-03, IMG-04
**Success Criteria** (what must be TRUE):
1. User can see previously uploaded images displayed correctly on item detail views
2. Gear collection cards show item images (or a placeholder when no image exists)
3. Item form displays an image preview area at the top with a placeholder icon when no image is set
4. User can upload an image by clicking the placeholder area, and the preview updates immediately
**Plans**: 2 plans
Plans:
- [ ] 05-01-PLAN.md — Fix image display bug and redesign ImageUpload as hero preview area
- [ ] 05-02-PLAN.md — Add card image placeholders and setup thumbnails
### Phase 6: Category Icons
**Goal**: Categories use clean Lucide icons instead of emoji
**Depends on**: Phase 4
**Requirements**: CAT-01, CAT-02, CAT-03
**Success Criteria** (what must be TRUE):
1. User can browse and select a Lucide icon from a picker when creating or editing a category
2. Category icons render as Lucide icons everywhere they appear (cards, headers, lists, dashboard)
3. Existing emoji-based categories display as equivalent Lucide icons without manual user intervention
**Plans**: 3 plans
Plans:
- [ ] 06-01-PLAN.md — Backend schema migration (emoji to icon), install lucide-react, create icon data and LucideIcon component
- [ ] 06-02-PLAN.md — Build IconPicker component, update category create/edit components
- [ ] 06-03-PLAN.md — Update all display components to Lucide icons, delete old emoji code
</details>
## Progress
**Execution Order:**
Phases execute in numeric order: 4 -> 5 -> 6
| Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|--------|-----------|
| 1. Foundation and Collection | v1.0 | 4/4 | Complete | 2026-03-14 |
| 2. Planning Threads | v1.0 | 3/3 | Complete | 2026-03-15 |
| 3. Setups and Dashboard | v1.0 | 3/3 | Complete | 2026-03-15 |
| 4. Database & Planning Fixes | v1.1 | 1/2 | In progress | - |
| 5. Image Handling | 2/2 | Complete | 2026-03-15 | - |
| 6. Category Icons | v1.1 | 0/3 | Not started | - |
| 4. Database & Planning Fixes | v1.1 | 2/2 | Complete | 2026-03-15 |
| 5. Image Handling | v1.1 | 2/2 | Complete | 2026-03-15 |
| 6. Category Icons | v1.1 | 3/3 | Complete | 2026-03-15 |

View File

@@ -2,10 +2,10 @@
gsd_state_version: 1.0
milestone: v1.1
milestone_name: Fixes & Polish
status: completed
stopped_at: Completed 06-03 display component icon migration
last_updated: "2026-03-15T17:04:22.268Z"
last_activity: 2026-03-15 -- Completed 06-03 display component icon migration
status: shipped
stopped_at: v1.1 milestone completed and archived
last_updated: "2026-03-15T17:15:00.000Z"
last_activity: 2026-03-15 -- Shipped v1.1 Fixes & Polish milestone
progress:
total_phases: 3
completed_phases: 3
@@ -21,35 +21,21 @@ progress:
See: .planning/PROJECT.md (updated 2026-03-15)
**Core value:** Make it effortless to manage gear and plan new purchases -- see how a potential buy affects your total setup weight and cost before committing.
**Current focus:** Phase 6 - Category Icons
**Current focus:** Planning next milestone
## Current Position
Phase: 6 of 6 (Category Icons)
Plan: 3 of 3 in current phase
Status: Complete
Last activity: 2026-03-15 -- Completed 06-03 display component icon migration
Milestone: v1.1 Fixes & Polish -- SHIPPED
All phases complete. No active milestone.
Last activity: 2026-03-15 -- Shipped v1.1
Progress: [██████████] 100% (v1.1 phases)
Progress: [██████████] 100% (v1.1 shipped)
## Accumulated Context
### Decisions
- Stay with SQLite -- single-user app, Postgres adds unnecessary complexity
- Lucide Icons for category icons -- best outdoor/gear coverage
- categoryId on threads is NOT NULL with FK to categories -- every thread belongs to a category
- [Phase 04]: Modal dialog for thread creation instead of inline form -- cleaner UX, supports category selection
- [Phase 04]: Educational empty state with numbered workflow steps -- helps new users understand planning flow
- [Phase 04]: Pill tab segment control for Active/Resolved -- replaces checkbox, more intuitive
- [Phase 05]: Image bug root cause: Zod schemas missing imageFilename -- validator silently stripped it from payloads
- [Phase 05]: Inline SVGs instead of lucide-react -- only 3 icons needed, avoids dependency
- [Phase 05]: Setup detail page only uses ItemCard grid -- no separate thumbnail component needed
- [Phase 06]: ALTER TABLE RENAME COLUMN for SQLite migration instead of table recreation
- [Phase 06]: Applied migration via Bun SQLite API since drizzle-kit requires interactive input
- [Phase 06]: 119 curated Lucide icons across 8 groups for gear coverage
- [Phase 06]: Native HTML select cannot render React components -- category selects show name only
- [Phase 06]: iconData.ts renamed to iconData.tsx -- contains JSX, required for production build
(Full decision log archived in PROJECT.md Key Decisions table)
### Pending Todos
@@ -57,12 +43,10 @@ Progress: [██████████] 100% (v1.1 phases)
### Blockers/Concerns
- `threads` table missing from database (schema exists, never pushed) -- Phase 4
- ~~Images upload but don't display in UI -- Phase 5~~ FIXED in 05-01
- ~~Category emoji system being replaced with Lucide icons -- Phase 6~~ COMPLETE
None active.
## Session Continuity
Last session: 2026-03-15T16:59:16.000Z
Stopped at: Completed 06-03 display component icon migration
Resume file: .planning/phases/06-category-icons/06-03-SUMMARY.md
Last session: 2026-03-15T17:15:00.000Z
Stopped at: v1.1 milestone completed and archived
Resume file: None

View File

@@ -1,3 +1,12 @@
# Requirements Archive: v1.1 Fixes & Polish
**Archived:** 2026-03-15
**Status:** SHIPPED
For current requirements, see `.planning/REQUIREMENTS.md`.
---
# Requirements: GearBox
**Defined:** 2026-03-15

View File

@@ -0,0 +1,85 @@
# Roadmap: GearBox
## Milestones
-**v1.0 MVP** -- Phases 1-3 (shipped 2026-03-15)
- **v1.1 Fixes & Polish** -- Phases 4-6 (in progress)
## Phases
<details>
<summary>v1.0 MVP (Phases 1-3) -- SHIPPED 2026-03-15</summary>
- [x] Phase 1: Foundation and Collection (4/4 plans) -- completed 2026-03-14
- [x] Phase 2: Planning Threads (3/3 plans) -- completed 2026-03-15
- [x] Phase 3: Setups and Dashboard (3/3 plans) -- completed 2026-03-15
</details>
### v1.1 Fixes & Polish (In Progress)
**Milestone Goal:** Fix broken functionality, improve image handling UX, and replace emoji categories with Lucide icon picker.
- [ ] **Phase 4: Database & Planning Fixes** - Fix threads table and planning thread creation, polish empty states
- [x] **Phase 5: Image Handling** - Fix image display and redesign upload UX with previews (completed 2026-03-15)
- [ ] **Phase 6: Category Icons** - Replace emoji categories with Lucide icon picker
## Phase Details
### Phase 4: Database & Planning Fixes
**Goal**: Users can create and manage planning threads without errors
**Depends on**: Phase 3 (v1.0 complete)
**Requirements**: DB-01, PLAN-01, PLAN-02
**Success Criteria** (what must be TRUE):
1. Running database schema push creates the threads table (and any other missing tables) without errors
2. User can create a new planning thread from the planning tab and it appears in the thread list
3. User sees a clear, polished empty state with a call-to-action when no planning threads exist
**Plans**: 2 plans
Plans:
- [x] 04-01-PLAN.md — Database schema fix and backend thread API with categoryId
- [ ] 04-02-PLAN.md — Frontend planning tab overhaul (modal, empty state, pill tabs, category filter)
### Phase 5: Image Handling
**Goal**: Users can see and manage gear images throughout the app
**Depends on**: Phase 4
**Requirements**: IMG-01, IMG-02, IMG-03, IMG-04
**Success Criteria** (what must be TRUE):
1. User can see previously uploaded images displayed correctly on item detail views
2. Gear collection cards show item images (or a placeholder when no image exists)
3. Item form displays an image preview area at the top with a placeholder icon when no image is set
4. User can upload an image by clicking the placeholder area, and the preview updates immediately
**Plans**: 2 plans
Plans:
- [ ] 05-01-PLAN.md — Fix image display bug and redesign ImageUpload as hero preview area
- [ ] 05-02-PLAN.md — Add card image placeholders and setup thumbnails
### Phase 6: Category Icons
**Goal**: Categories use clean Lucide icons instead of emoji
**Depends on**: Phase 4
**Requirements**: CAT-01, CAT-02, CAT-03
**Success Criteria** (what must be TRUE):
1. User can browse and select a Lucide icon from a picker when creating or editing a category
2. Category icons render as Lucide icons everywhere they appear (cards, headers, lists, dashboard)
3. Existing emoji-based categories display as equivalent Lucide icons without manual user intervention
**Plans**: 3 plans
Plans:
- [ ] 06-01-PLAN.md — Backend schema migration (emoji to icon), install lucide-react, create icon data and LucideIcon component
- [ ] 06-02-PLAN.md — Build IconPicker component, update category create/edit components
- [ ] 06-03-PLAN.md — Update all display components to Lucide icons, delete old emoji code
## Progress
**Execution Order:**
Phases execute in numeric order: 4 -> 5 -> 6
| Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|--------|-----------|
| 1. Foundation and Collection | v1.0 | 4/4 | Complete | 2026-03-14 |
| 2. Planning Threads | v1.0 | 3/3 | Complete | 2026-03-15 |
| 3. Setups and Dashboard | v1.0 | 3/3 | Complete | 2026-03-15 |
| 4. Database & Planning Fixes | v1.1 | 1/2 | In progress | - |
| 5. Image Handling | 2/2 | Complete | 2026-03-15 | - |
| 6. Category Icons | v1.1 | 0/3 | Not started | - |