chore: complete v1.0 MVP milestone
Archive roadmap, requirements, and phase directories to milestones/. Evolve PROJECT.md with validated requirements and key decisions. Reorganize ROADMAP.md with milestone grouping. Delete REQUIREMENTS.md (fresh for next milestone).
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## What This Is
|
||||
|
||||
A web-based gear management and purchase planning app. Users can catalog their gear collections (bikepacking, sim racing, or any hobby), track details like weight, price, and source, and use planning threads to research and compare new purchases against their existing setup. Built as a single-user app with a clean, minimalist interface.
|
||||
A web-based gear management and purchase planning app. Users catalog their gear collections (bikepacking, sim racing, or any hobby), track weight, price, and source details, and use planning threads to research and compare new purchases. Named setups let users compose loadouts from their collection with live weight/cost totals. Built as a single-user app with a clean, minimalist interface.
|
||||
|
||||
## Core Value
|
||||
|
||||
@@ -12,36 +12,45 @@ Make it effortless to manage gear and plan new purchases — see how a potential
|
||||
|
||||
### Validated
|
||||
|
||||
<!-- Shipped and confirmed valuable. -->
|
||||
|
||||
(None yet — ship to validate)
|
||||
- ✓ 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
|
||||
- ✓ 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
|
||||
|
||||
### Active
|
||||
|
||||
<!-- Current scope. Building toward these. -->
|
||||
|
||||
- [ ] Gear collection with items including weight, price, purchase source, category, photos, product links, and notes
|
||||
- [ ] Planning threads for researching purchases — add candidate products, compare side-by-side
|
||||
- [ ] See how candidates affect overall setup (total weight/cost impact)
|
||||
- [ ] Named setups (e.g. "Summer Bikepacking") composed from collection items with total weight/cost
|
||||
- [ ] Thread resolution — pick a winner, it moves to your collection, thread closes
|
||||
- [ ] Status tracking on thread items (researching → ordered → arrived)
|
||||
- [ ] Priority/ranking within threads to mark favorites
|
||||
- [ ] Dashboard home page with cards linking to collection, threads, and setups
|
||||
- [ ] Search items by name and filter by category
|
||||
- [ ] Side-by-side candidate comparison on weight and price
|
||||
- [ ] Candidate status tracking (researching → ordered → arrived)
|
||||
- [ ] Candidate ranking/prioritization within threads
|
||||
- [ ] Impact preview: how a candidate affects setup weight/cost
|
||||
- [ ] Weight unit selection (g, oz, lb, kg)
|
||||
- [ ] CSV import/export for gear collections
|
||||
- [ ] Weight distribution visualization (pie/bar chart by category)
|
||||
- [ ] Classify items as base weight, worn, or consumable per setup
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- Authentication / multi-user — single user for v1, no login needed
|
||||
- Custom comparison parameters — future enhancement, not v1
|
||||
- Mobile app — web-first
|
||||
- Social/sharing features — may add later
|
||||
- Custom comparison parameters — complexity trap, weight/price covers 80% of cases
|
||||
- Mobile native app — web-first, responsive design sufficient
|
||||
- Social/sharing features — different product, defer to v2+
|
||||
- Price tracking / deal alerts — requires scraping, fragile
|
||||
- Barcode scanning / product database — requires external database
|
||||
- Community gear database — requires moderation, accounts
|
||||
- Real-time weather integration — only outdoor-specific, GearBox is hobby-agnostic
|
||||
|
||||
## Context
|
||||
|
||||
- Primary use case is bikepacking gear, but the data model should be generic enough for any hobby/collection type
|
||||
- Replaces a spreadsheet-based workflow for tracking gear and planning purchases
|
||||
- Single user, no auth — simplest possible setup
|
||||
- User prefers Bun over npm as package manager/runtime
|
||||
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.
|
||||
Primary use case is bikepacking gear but data model is hobby-agnostic.
|
||||
Replaces spreadsheet-based gear tracking workflow.
|
||||
|
||||
## Constraints
|
||||
|
||||
@@ -54,10 +63,18 @@ Make it effortless to manage gear and plan new purchases — see how a potential
|
||||
|
||||
| Decision | Rationale | Outcome |
|
||||
|----------|-----------|---------|
|
||||
| No auth for v1 | Single user, simplicity first | — Pending |
|
||||
| Generic data model | Support any hobby, not just bikepacking | — Pending |
|
||||
| Dashboard navigation | Clean entry point, not persistent nav | — Pending |
|
||||
| Bun runtime | User preference | — Pending |
|
||||
| No auth for v1 | Single user, simplicity first | ✓ Good |
|
||||
| Generic data model | Support any hobby, not just bikepacking | ✓ Good |
|
||||
| Dashboard navigation | Clean entry point, not persistent nav | ✓ Good |
|
||||
| Bun runtime | User preference | ✓ Good |
|
||||
| Service layer with DI | Accept db as first param for testability | ✓ Good |
|
||||
| Hono context variables for DB | Enables in-memory SQLite integration tests | ✓ Good |
|
||||
| Prices stored as cents | Avoids float rounding issues | ✓ Good |
|
||||
| Vite proxy dev setup | Required by TanStack Router plugin | ✓ Good |
|
||||
| drizzle-kit needs better-sqlite3 | bun:sqlite not supported by CLI | ✓ 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 |
|
||||
| Onboarding state in SQLite settings | Source of truth in DB, not Zustand | ✓ Good |
|
||||
|
||||
---
|
||||
*Last updated: 2026-03-14 after initialization*
|
||||
*Last updated: 2026-03-15 after v1.0 milestone*
|
||||
|
||||
Reference in New Issue
Block a user