docs: archive v1.3 and v2.0 milestones with roadmap, requirements, and retrospective
All checks were successful
CI / ci (push) Successful in 1m7s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 7s

This commit is contained in:
2026-04-08 23:10:50 +02:00
parent cc0bafe754
commit f564e8cb54
12 changed files with 803 additions and 345 deletions

View File

@@ -39,22 +39,25 @@ Help people make better gear decisions — discover what others use, compare rea
- ✓ Chart hover tooltips with weight and percentage — v1.2
- ✓ Candidate status tracking (researching/ordered/arrived) — v1.2
- ✓ Planning category filter with Lucide icons — v1.2
- ✓ Candidate pros/cons annotation and ranking with drag-to-reorder — v1.3
- ✓ Side-by-side candidate comparison table with weight/price deltas — v1.3
- ✓ Setup impact preview for candidates (replacement vs addition detection) — v1.3
- ✓ PostgreSQL database with async operations, PGlite test infra, Docker Compose — v2.0
- ✓ External OIDC auth via Logto with three-way auth middleware — v2.0
- ✓ Multi-user data model with userId isolation on all entities — v2.0
- ✓ S3 object storage (MinIO) for images replacing local filesystem — v2.0
- ✓ Global item catalog with search, owner count, and 18-item seed — v2.0
- ✓ User profiles with avatar/bio, public setup sharing — v2.0
- ✓ Reference item model with COALESCE merge for global-to-personal overlay — v2.0
- ✓ Tag system for catalog discovery with AND-filtered search — v2.0
- ✓ Global FAB with catalog search overlay and tag chip filtering — v2.0
- ✓ Item and catalog detail pages replacing slide-out panels — v2.0
- ✓ Add-from-catalog flow for collection items and thread candidates — v2.0
- ✓ Manual entry fallback with catalog submission prompt stub — v2.0
### Active
## Current Milestone: v2.0 Platform Foundation
**Goal:** Transform GearBox from a single-user gear tracker into a multi-user platform where people discover gear, research purchases using crowd-verified data, and share their setups.
**Target features:**
- External auth provider (self-hosted, open-source) for multi-user registration
- Migrate from SQLite to Postgres
- Multi-user data model (user ownership on all entities, public/private visibility)
- Global item database (seeded from manufacturer data, enrichable by users)
- Public user profiles with shared setups
- Structured item reviews (ratings + predefined fields, not freeform text)
- Discovery feed (browse setups, new items, popular gear)
- Item detail pages with aggregated specs, owner count, setup appearances
No active milestone. v2.0 shipped 2026-04-08. Next milestone TBD.
### Future
@@ -78,12 +81,13 @@ Help people make better gear decisions — discover what others use, compare rea
## Context
Shipped through v1.4 with 11,333 LOC TypeScript across 90 files. Starting v2.0 platform transformation.
Tech stack: React 19, Hono, Drizzle ORM, SQLite (migrating to Postgres), TanStack Router/Query, Tailwind CSS v4, Lucide React, Recharts, framer-motion, all on Bun.
Shipped through v2.0 with 23,970 LOC TypeScript across 210+ files. All milestones v1.0-v2.0 complete.
Tech stack: React 19, Hono, Drizzle ORM, PostgreSQL, TanStack Router/Query, Tailwind CSS v4, Lucide React, Recharts, framer-motion, all on Bun.
Primary use case is bikepacking gear but data model is hobby-agnostic.
Existing auth: single-user with cookie sessions + API keys. Will be replaced by external auth provider.
Existing features: MCP server (19 tools), E2E tests (Playwright), CSV import/export, item comparison, candidate ranking, setup impact preview.
21 test files (service-level, route-level integration, and E2E).
Auth: External OIDC via Logto (browser sessions) + API keys (programmatic) + MCP OAuth (Claude).
Infrastructure: PostgreSQL, MinIO (S3-compatible image storage), Docker Compose for dev/prod.
Features: MCP server (19 tools), global item catalog, user profiles, public setup sharing, catalog-driven gear flow, item/candidate detail pages, candidate ranking/comparison/impact preview.
18+ test files (service-level, route-level integration, MCP). E2E tests pending rewrite for OIDC auth (backlog 999.1).
## Constraints
@@ -91,7 +95,7 @@ Existing features: MCP server (19 tools), E2E tests (Playwright), CSV import/exp
- **Design**: Light, airy, minimalist — white/light backgrounds, lots of whitespace, no visual clutter
- **Navigation**: Dashboard-based home page, not sidebar or top-nav tabs
- **Auth**: External self-hosted provider — no in-house auth maintenance
- **Database**: Postgres for platform deployment
- **Database**: PostgreSQL with Drizzle ORM
- **UGC**: Structured input only (ratings, predefined fields) — no freeform text until moderation exists
- **Scope**: Multi-user platform with public discovery
@@ -118,12 +122,15 @@ Existing features: MCP server (19 tools), E2E tests (Playwright), CSV import/exp
| 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 |
| Platform pivot at v2.0 | Single-user model proven, now build for multi-user discovery | — Pending |
| External auth provider | Avoid in-house auth security burden, self-hosted + open-source | — Pending |
| SQLite Postgres | Multi-user platform needs proper concurrent DB; auth provider needs Postgres anyway | — Pending |
| Single-user mode diverges at v2.0 | Platform features irrelevant for solo use; maintain as separate artifact if needed | — Pending |
| Structured UGC only (no freeform) | Minimize moderation burden; ratings + predefined fields cover 80% of value | — Pending |
| Discovery-first, not social-first | Users come to research gear decisions, not to build social graphs | — Pending |
| Platform pivot at v2.0 | Single-user model proven, now build for multi-user discovery | ✓ Good |
| External auth provider (Logto) | Avoid in-house auth security burden, self-hosted + open-source | ✓ Good |
| SQLite to Postgres | Multi-user platform needs proper concurrent DB; auth provider needs Postgres anyway | ✓ Good |
| Single-user mode diverges at v2.0 | Platform features irrelevant for solo use; maintained as separate artifact if needed | ✓ Good |
| Structured UGC only (no freeform) | Minimize moderation burden; ratings + predefined fields cover 80% of value | ✓ Good |
| Discovery-first, not social-first | Users come to research gear decisions, not to build social graphs | ✓ Good |
| COALESCE merge for reference items | Global base + personal overlay without data duplication | ✓ Good |
| Catalog-first add flow with manual fallback | Encourages catalog usage while preserving flexibility | ✓ Good |
| Detail pages replacing slide-out panels | Better UX for complex data, shareable URLs | ✓ Good |
| Weight conversion precision: g=0dp, oz=1dp, lb=2dp, kg=2dp | Matches common usage conventions | ✓ Good |
| Unit toggle in TotalsBar (not settings page) | Visible, quick access for frequent switching | ✓ Good |
| CategoryFilterDropdown separate from CategoryPicker | Filter vs form concerns are different | ✓ Good |
@@ -152,4 +159,4 @@ This document evolves at phase transitions and milestone boundaries.
4. Update Context with current state
---
*Last updated: 2026-04-03 after v2.0 milestone start*
*Last updated: 2026-04-08 after v2.0 milestone completion*