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 ff82fb0c8e
27 changed files with 201 additions and 106 deletions

View File

@@ -1,5 +1,23 @@
# Milestones # 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) ## v1.0 MVP (Shipped: 2026-03-15)
**Phases completed:** 3 phases, 10 plans **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 - ✓ Gear collection with item CRUD (name, weight, price, category, notes, product link) — v1.0
- ✓ Image uploads for gear items — 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 - ✓ Planning threads for purchase research with candidate products — v1.0
- ✓ Thread resolution: pick a winner, it moves to collection — v1.0 - ✓ Thread resolution: pick a winner, it moves to collection — v1.0
- ✓ Named setups (loadouts) composed from collection items — v1.0 - ✓ Named setups (loadouts) composed from collection items — v1.0
- ✓ Live weight and cost totals per setup — v1.0 - ✓ Live weight and cost totals per setup — v1.0
- ✓ Dashboard home page with summary cards — v1.0 - ✓ Dashboard home page with summary cards — v1.0
- ✓ Onboarding wizard for first-time setup — 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 ### Active
## Current Milestone: v1.1 Fixes & Polish (No active milestone — use `/gsd:new-milestone` to start next)
**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
### Future ### Future
@@ -61,8 +57,8 @@ Make it effortless to manage gear and plan new purchases — see how a potential
## Context ## Context
Shipped v1.0 MVP with 5,742 LOC TypeScript across 114 files. Shipped v1.1 with 6,134 LOC TypeScript.
Tech stack: React 19, Hono, Drizzle ORM, SQLite, TanStack Router/Query, Tailwind CSS v4, all on Bun. 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. Primary use case is bikepacking gear but data model is hobby-agnostic.
Replaces spreadsheet-based gear tracking workflow. 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 | | 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 | | 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 | | 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 | | 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 ## Cross-Milestone Trends
### Process Evolution ### Process Evolution
@@ -54,14 +98,18 @@
| Milestone | Commits | Phases | Key Change | | Milestone | Commits | Phases | Key Change |
|-----------|---------|--------|------------| |-----------|---------|--------|------------|
| v1.0 | 53 | 3 | Initial build, coarse granularity, TDD backend | | 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 ### Cumulative Quality
| Milestone | LOC | Files | Tests | | Milestone | LOC | Files | Tests |
|-----------|-----|-------|-------| |-----------|-----|-------|-------|
| v1.0 | 5,742 | 114 | Service + route integration | | 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) ### Top Lessons (Verified Across Milestones)
1. Coarse phases with TDD backend → smooth frontend integration 1. Coarse phases with TDD backend → smooth frontend integration
2. Service DI pattern enables fast, reliable testing without mocks 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 ## Milestones
-**v1.0 MVP** -- Phases 1-3 (shipped 2026-03-15) -**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 ## Phases
@@ -16,70 +16,22 @@
</details> </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 </details>
- [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 ## Progress
**Execution Order:**
Phases execute in numeric order: 4 -> 5 -> 6
| Phase | Milestone | Plans Complete | Status | Completed | | Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|--------|-----------| |-------|-----------|----------------|--------|-----------|
| 1. Foundation and Collection | v1.0 | 4/4 | Complete | 2026-03-14 | | 1. Foundation and Collection | v1.0 | 4/4 | Complete | 2026-03-14 |
| 2. Planning Threads | v1.0 | 3/3 | Complete | 2026-03-15 | | 2. Planning Threads | v1.0 | 3/3 | Complete | 2026-03-15 |
| 3. Setups and Dashboard | 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 | - | | 4. Database & Planning Fixes | v1.1 | 2/2 | Complete | 2026-03-15 |
| 5. Image Handling | 2/2 | Complete | 2026-03-15 | - | | 5. Image Handling | v1.1 | 2/2 | Complete | 2026-03-15 |
| 6. Category Icons | v1.1 | 0/3 | Not started | - | | 6. Category Icons | v1.1 | 3/3 | Complete | 2026-03-15 |

View File

@@ -2,10 +2,10 @@
gsd_state_version: 1.0 gsd_state_version: 1.0
milestone: v1.1 milestone: v1.1
milestone_name: Fixes & Polish milestone_name: Fixes & Polish
status: completed status: shipped
stopped_at: Completed 06-03 display component icon migration stopped_at: v1.1 milestone completed and archived
last_updated: "2026-03-15T17:04:22.268Z" last_updated: "2026-03-15T17:15:00.000Z"
last_activity: 2026-03-15 -- Completed 06-03 display component icon migration last_activity: 2026-03-15 -- Shipped v1.1 Fixes & Polish milestone
progress: progress:
total_phases: 3 total_phases: 3
completed_phases: 3 completed_phases: 3
@@ -21,35 +21,21 @@ progress:
See: .planning/PROJECT.md (updated 2026-03-15) 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. **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 ## Current Position
Phase: 6 of 6 (Category Icons) Milestone: v1.1 Fixes & Polish -- SHIPPED
Plan: 3 of 3 in current phase All phases complete. No active milestone.
Status: Complete Last activity: 2026-03-15 -- Shipped v1.1
Last activity: 2026-03-15 -- Completed 06-03 display component icon migration
Progress: [██████████] 100% (v1.1 phases) Progress: [██████████] 100% (v1.1 shipped)
## Accumulated Context ## Accumulated Context
### Decisions ### Decisions
- Stay with SQLite -- single-user app, Postgres adds unnecessary complexity (Full decision log archived in PROJECT.md Key Decisions table)
- 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
### Pending Todos ### Pending Todos
@@ -57,12 +43,10 @@ Progress: [██████████] 100% (v1.1 phases)
### Blockers/Concerns ### Blockers/Concerns
- `threads` table missing from database (schema exists, never pushed) -- Phase 4 None active.
- ~~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
## Session Continuity ## Session Continuity
Last session: 2026-03-15T16:59:16.000Z Last session: 2026-03-15T17:15:00.000Z
Stopped at: Completed 06-03 display component icon migration Stopped at: v1.1 milestone completed and archived
Resume file: .planning/phases/06-category-icons/06-03-SUMMARY.md 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 # Requirements: GearBox
**Defined:** 2026-03-15 **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 | - |