# Requirements Archive: v2.0 Platform Foundation **Archived:** 2026-04-08 **Status:** SHIPPED --- # Requirements: GearBox v2.0 Platform Foundation **Defined:** 2026-04-03 **Core Value:** Help people make better gear decisions — discover what others use, compare real-world data, and see how a potential buy affects your setup before committing. ## v2.0 Requirements ### Database Migration - [x] **DB-01**: Application runs on PostgreSQL instead of SQLite - [x] **DB-02**: All service functions use async database operations - [x] **DB-03**: Test infrastructure uses PGlite instead of bun:sqlite in-memory databases - [x] **DB-04**: Existing SQLite data can be migrated to Postgres via a one-time script - [x] **DB-05**: Docker Compose provides Postgres for local development ### Authentication - [x] **AUTH-01**: User can register an account via external OIDC auth provider - [x] **AUTH-02**: User can log in via external auth provider and access their data - [x] **AUTH-03**: API keys remain functional for programmatic access (MCP, scripts) - [x] **AUTH-04**: Auth provider runs self-hosted alongside the application - [x] **AUTH-05**: E2E tests authenticate via API keys without depending on the auth provider ### Multi-User Data Model - [x] **MULTI-01**: Every item, category, thread, and setup is owned by a specific user - [x] **MULTI-02**: User can only see and modify their own data (cross-user isolation) - [x] **MULTI-03**: Categories use composite unique constraint (userId + name) - [x] **MULTI-04**: Existing data is assigned to the original user during migration - [x] **MULTI-05**: MCP tools operate within the authenticated user's scope - [x] **MULTI-06**: Settings are per-user rather than global ### Image Storage - [x] **IMG-01**: Images are stored in MinIO (S3-compatible) instead of local filesystem - [x] **IMG-02**: Existing uploaded images are migrated to MinIO - [x] **IMG-03**: Image upload and retrieval work through the new storage layer - [x] **IMG-04**: Docker Compose provides MinIO for local development ### Global Item Database - [x] **GLOB-01**: A global item catalog exists with brand, model, category, manufacturer specs, and image - [x] **GLOB-02**: Global catalog is seeded with initial items from manufacturer data - [x] **GLOB-03**: User can search the global catalog by name or brand - [x] **GLOB-04**: User can link a personal collection item to a global catalog entry - [x] **GLOB-05**: Global item pages show basic info and owner count ### Catalog-Driven Gear Flow - [x] **CATFLOW-01**: FAB shows mini menu with "Add to Collection" and "Start Thread" globally, plus "New Setup" on setups page - [x] **CATFLOW-02**: Full-screen catalog search with tag chip filtering - [x] **CATFLOW-03**: User can add a catalog item to collection as a reference item with personal fields - [x] **CATFLOW-04**: Collection items referencing global items display merged data (global base + personal overlay) - [x] **CATFLOW-05**: Thread candidates can be added from catalog with global item link - [x] **CATFLOW-06**: Thread resolution with catalog-linked candidate creates reference item with auto-link - [x] **CATFLOW-07**: Manual entry fallback when item not in catalog - [x] **CATFLOW-08**: Non-functional "Submit to catalog?" prompt shown after manual save ### Item & Catalog Detail Pages - [x] **DETAIL-01**: Clicking a collection item navigates to a full detail page (`/items/:id`) - [x] **DETAIL-02**: Clicking a catalog search result navigates to a public detail page (`/global-items/:id`) - [x] **DETAIL-03**: Item detail page has edit mode toggle for modifying personal fields - [x] **DETAIL-04**: Thread candidates navigate to detail pages instead of opening slide-out panels - [x] **DETAIL-05**: Slide-out panels for items and candidates are removed from the application ### Tags - [x] **TAG-01**: Tags table seeded with curated tag set for outdoor/adventure gear - [x] **TAG-02**: Global items have multiple tags, searchable and filterable via API ### User Profiles & Sharing - [x] **PROF-01**: User has a profile with display name, avatar, and bio - [x] **PROF-02**: User can view their own public profile page - [x] **PROF-03**: User can set a setup as public or private - [x] **PROF-04**: Public setups are viewable by anyone without authentication - [x] **PROF-05**: Public profile page lists the user's public setups ## Traceability | Requirement | Phase | Status | |-------------|-------|--------| | DB-01 | Phase 14 | Complete | | DB-02 | Phase 14 | Complete | | DB-03 | Phase 14 | Complete | | DB-04 | Phase 14 | Complete | | DB-05 | Phase 14 | Complete | | AUTH-01 | Phase 15 | Complete | | AUTH-02 | Phase 15 | Complete | | AUTH-03 | Phase 15 | Complete | | AUTH-04 | Phase 15 | Complete | | AUTH-05 | Phase 15 | Complete | | MULTI-01 | Phase 16 | Complete | | MULTI-02 | Phase 16 | Complete | | MULTI-03 | Phase 16 | Complete | | MULTI-04 | Phase 16 | Complete | | MULTI-05 | Phase 16 | Complete | | MULTI-06 | Phase 16 | Complete | | IMG-01 | Phase 17 | Complete | | IMG-02 | Phase 17 | Complete | | IMG-03 | Phase 17 | Complete | | IMG-04 | Phase 17 | Complete | | GLOB-01 | Phase 18 | Complete | | GLOB-02 | Phase 18 | Complete | | GLOB-03 | Phase 18 | Complete | | GLOB-04 | Phase 18 | Complete | | GLOB-05 | Phase 18 | Complete | | PROF-01 | Phase 18 | Complete | | PROF-02 | Phase 18 | Complete | | PROF-03 | Phase 18 | Complete | | PROF-04 | Phase 18 | Complete | | PROF-05 | Phase 18 | Complete | | CATFLOW-01 | Phase 20 | Complete | | CATFLOW-02 | Phase 20 | Complete | | CATFLOW-03 | Phase 19, 22 | Complete | | CATFLOW-04 | Phase 19 | Complete | | CATFLOW-05 | Phase 19, 22 | Complete | | CATFLOW-06 | Phase 19, 22 | Complete | | CATFLOW-07 | Phase 23 | Complete | | CATFLOW-08 | Phase 23 | Complete | | TAG-01 | Phase 19 | Complete | | TAG-02 | Phase 19 | Complete | | DETAIL-01 | Phase 21 | Complete | | DETAIL-02 | Phase 21 | Complete | | DETAIL-03 | Phase 21 | Complete | | DETAIL-04 | Phase 21 | Complete | | DETAIL-05 | Phase 21 | Complete | **Coverage:** - v2.0 requirements: 45 total - Mapped to phases: 45 - Complete: 45 - Unmapped: 0 --- *Requirements defined: 2026-04-03* *Archived: 2026-04-08*