12 KiB
Roadmap: GearBox
Milestones
- ✅ v1.0 MVP — Phases 1-3 (shipped 2026-03-15)
- ✅ v1.1 Fixes & Polish — Phases 4-6 (shipped 2026-03-15)
- ✅ v1.2 Collection Power-Ups — Phases 7-9 (shipped 2026-03-16)
- 🚧 v1.3 Research & Decision Tools — Phases 10-13 (in progress)
- 📋 v2.0 Platform Foundation — Phases 14-18 (planned)
Phases
✅ v1.0 MVP (Phases 1-3) — SHIPPED 2026-03-15
- Phase 1: Foundation and Collection (4/4 plans) — completed 2026-03-14
- Phase 2: Planning Threads (3/3 plans) — completed 2026-03-15
- Phase 3: Setups and Dashboard (3/3 plans) — completed 2026-03-15
✅ v1.1 Fixes & Polish (Phases 4-6) — SHIPPED 2026-03-15
- Phase 4: Database & Planning Fixes (2/2 plans) — completed 2026-03-15
- Phase 5: Image Handling (2/2 plans) — completed 2026-03-15
- Phase 6: Category Icons (3/3 plans) — completed 2026-03-15
✅ v1.2 Collection Power-Ups (Phases 7-9) — SHIPPED 2026-03-16
- Phase 7: Weight Unit Selection (2/2 plans) — completed 2026-03-16
- Phase 8: Search, Filter, and Candidate Status (2/2 plans) — completed 2026-03-16
- Phase 9: Weight Classification and Visualization (2/2 plans) — completed 2026-03-16
v1.3 Research & Decision Tools (In Progress)
Milestone Goal: Give users the tools to actually decide between candidates — compare details side-by-side, see how a pick impacts their setup, and rank/annotate their options.
- Phase 10: Schema Foundation + Pros/Cons Fields — Migrate schema and deliver pros/cons annotation UI (completed 2026-03-16)
- Phase 11: Candidate Ranking — Drag-to-reorder priority ranking with rank badges (completed 2026-03-16)
- Phase 12: Comparison View — Side-by-side tabular comparison with relative deltas (completed 2026-03-17)
- Phase 13: Setup Impact Preview — Per-candidate weight and cost delta against a selected setup
v2.0 Platform Foundation (Planned)
Milestone 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.
- Phase 14: PostgreSQL Migration — Replace SQLite with Postgres, make all operations async, establish new test infrastructure
- Phase 15: External Authentication — Integrate self-hosted OIDC auth provider for user registration and login
- Phase 16: Multi-User Data Model — Add user ownership to all entities with cross-user data isolation
- Phase 17: Object Storage — Move images from local filesystem to MinIO (S3-compatible)
- Phase 18: Global Items & Public Profiles — Global item catalog, user profiles, and public setup sharing (completed 2026-04-05)
Phase Details
Phase 10: Schema Foundation + Pros/Cons Fields
Goal: Candidates can be annotated with pros and cons, and the database is ready for ranking Depends on: Phase 9 Requirements: RANK-03 Success Criteria (what must be TRUE):
- User can open a candidate edit form and see pros and cons text fields
- User can save pros and cons text; the text persists across page refreshes
- CandidateCard shows a visual indicator when a candidate has pros or cons entered
- All existing tests pass after the schema migration (no column drift in test helper) Plans: 1/1 plans complete Plans:
- 10-01-PLAN.md — Add pros/cons fields through full stack (schema, service, Zod, form, card indicator)
Phase 11: Candidate Ranking
Goal: Users can drag candidates into a priority order that persists and is visually communicated Depends on: Phase 10 Requirements: RANK-01, RANK-02, RANK-04, RANK-05 Success Criteria (what must be TRUE):
- User can drag a candidate card to a new position within the thread's candidate list
- The reordered sequence is still intact after navigating away and returning
- The top three candidates display gold, silver, and bronze rank badges respectively
- Drag handles and rank badges are absent on a resolved thread; candidates render in static order Plans: 2/2 plans complete Plans:
- 11-01-PLAN.md — Schema migration, reorder service/route, sort_order persistence + tests
- 11-02-PLAN.md — Drag-to-reorder UI, list/grid toggle, rank badges, resolved-thread guard
Phase 12: Comparison View
Goal: Users can view all candidates for a thread side-by-side in a table with relative weight and price deltas Depends on: Phase 11 Requirements: COMP-01, COMP-02, COMP-03, COMP-04 Success Criteria (what must be TRUE):
- User can toggle a "Compare" mode on a thread detail page to reveal a tabular view showing weight, price, images, notes, links, status, pros, and cons for every candidate in columns
- The lightest candidate column is highlighted and all other columns show their weight difference relative to it; the cheapest candidate is highlighted similarly for price
- The comparison table scrolls horizontally on a narrow viewport without breaking layout; the attribute label column stays fixed on the left
- A resolved thread shows the comparison table in read-only mode with the winning candidate visually marked Plans: 1/1 plans complete Plans:
- 12-01-PLAN.md — ComparisonTable component + compare toggle wiring in thread detail
Phase 13: Setup Impact Preview
Goal: Users can select any setup and see exactly how much weight and cost each candidate would add or subtract Depends on: Phase 12 Requirements: IMPC-01, IMPC-02, IMPC-03, IMPC-04 Success Criteria (what must be TRUE):
- User can select a setup from a dropdown in the thread header and each candidate displays a weight delta and cost delta below its name
- When the selected setup contains an item in the same category as the thread, the delta reflects replacing that item (negative delta is possible) rather than pure addition
- When no category match exists in the selected setup, the delta shows a pure addition amount clearly labeled as "add"
- A candidate with no weight recorded shows a "-- (no weight data)" indicator instead of a zero delta Plans: 2 plans Plans:
- 13-01-PLAN.md — TDD pure impact delta computation, uiStore state, ThreadWithCandidates type fix, useImpactDeltas hook
- 13-02-PLAN.md — SetupImpactSelector + ImpactDeltaBadge components, wire into thread detail and all candidate views
Phase 14: PostgreSQL Migration
Goal: The application runs entirely on PostgreSQL with async operations, and all existing tests pass against the new database Depends on: Phase 13 Requirements: DB-01, DB-02, DB-03, DB-04, DB-05 Success Criteria (what must be TRUE):
- Application starts and serves all existing features using PostgreSQL as the sole database
- All service-level and route-level tests pass using PGlite in-memory Postgres (no SQLite test infrastructure remains)
- A one-time migration script converts existing SQLite data into the Postgres database without data loss
- Docker Compose brings up Postgres alongside the app with a single command for local development Plans: TBD
Phase 15: External Authentication
Goal: Users can register and log in via a self-hosted OIDC auth provider, replacing the built-in single-user auth system Depends on: Phase 14 Requirements: AUTH-01, AUTH-02, AUTH-03, AUTH-04, AUTH-05 Success Criteria (what must be TRUE):
- A new user can register an account through the external auth provider and land on their empty GearBox dashboard
- A returning user can log in via the auth provider and see their previously saved data
- API keys continue to work for MCP tools and programmatic access without involving the auth provider
- E2E tests run successfully using API key authentication, with no dependency on the external auth provider being available
- The auth provider runs self-hosted in Docker Compose alongside Postgres and the application Plans: TBD
Phase 16: Multi-User Data Model
Goal: Every piece of user-created data is owned by a specific user, with complete isolation between users Depends on: Phase 15 Requirements: MULTI-01, MULTI-02, MULTI-03, MULTI-04, MULTI-05, MULTI-06 Success Criteria (what must be TRUE):
- User A cannot see or modify items, categories, threads, or setups created by User B
- Two users can each have a category with the same name without conflict
- Existing data from the single-user era is assigned to the original user account after migration
- MCP tools return only data belonging to the authenticated API key's owner
- Each user has independent settings (weight unit, onboarding state) that do not affect other users Plans: TBD
Phase 17: Object Storage
Goal: Images are stored in and served from MinIO instead of the local filesystem Depends on: Phase 16 Requirements: IMG-01, IMG-02, IMG-03, IMG-04 Success Criteria (what must be TRUE):
- Uploading an image for an item or candidate stores it in MinIO, not on the local filesystem
- All previously uploaded images are accessible after migration to MinIO (no broken images)
- Image URLs work correctly in all views (collection, planning, setups, comparison table)
- Docker Compose includes MinIO for local development with no manual bucket setup required Plans: TBD
Phase 18: Global Items & Public Profiles
Goal: Users can discover gear through a global catalog and share their setups publicly via profile pages Depends on: Phase 17 Requirements: GLOB-01, GLOB-02, GLOB-03, GLOB-04, GLOB-05, PROF-01, PROF-02, PROF-03, PROF-04, PROF-05 Success Criteria (what must be TRUE):
- A global item catalog exists with brand, model, category, specs, and images, seeded with initial manufacturer data
- User can search the global catalog by name or brand and link a personal collection item to a global entry
- A global item page shows basic info and how many users own it
- User can edit their profile (display name, avatar, bio) and view their own public profile page
- User can toggle a setup between public and private; public setups are viewable by anyone without logging in and appear on the owner's public profile Plans: TBD UI hint: yes
Progress
| 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 | 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 |
| 7. Weight Unit Selection | v1.2 | 2/2 | Complete | 2026-03-16 |
| 8. Search, Filter, and Candidate Status | v1.2 | 2/2 | Complete | 2026-03-16 |
| 9. Weight Classification and Visualization | v1.2 | 2/2 | Complete | 2026-03-16 |
| 10. Schema Foundation + Pros/Cons Fields | v1.3 | 1/1 | Complete | 2026-03-16 |
| 11. Candidate Ranking | v1.3 | 2/2 | Complete | 2026-03-16 |
| 12. Comparison View | v1.3 | 1/1 | Complete | 2026-03-17 |
| 13. Setup Impact Preview | v1.3 | 0/2 | Not started | - |
| 14. PostgreSQL Migration | v2.0 | 0/? | Not started | - |
| 15. External Authentication | v2.0 | 0/? | Not started | - |
| 16. Multi-User Data Model | v2.0 | 0/? | Not started | - |
| 17. Object Storage | v2.0 | 0/? | Not started | - |
| 18. Global Items & Public Profiles | v2.0 | 4/5 | Complete | 2026-04-05 |