Files
GearBox/.planning/research/FEATURES.md

303 lines
23 KiB
Markdown

# Feature Research
**Domain:** Multi-user gear management and discovery platform
**Researched:** 2026-04-03
**Confidence:** MEDIUM-HIGH
---
## Context
This is the feature research for **v2.0 Platform Foundation** -- transforming GearBox from a single-user gear tracker into a multi-user platform with discovery, global item database, structured reviews, and setup sharing.
**Existing features (already built through v1.4):**
- Gear collection CRUD with categories, weight/price, images, quantity
- Planning threads with candidate comparison, ranking, pros/cons, impact preview
- Named setups (loadouts) with classification, donut chart visualization
- Search/filter, CSV import/export, item duplication
- Dashboard home page, onboarding wizard
- Single-user auth (cookie sessions + API keys), MCP server (19 tools)
**Key project constraints:**
- No freeform UGC until moderation infrastructure exists (structured input only)
- Discovery-first, not social-first
- External auth provider (self-hosted, open-source)
- Postgres for multi-user platform
---
## Feature Landscape
### Table Stakes (Users Expect These)
Features users assume exist on any multi-user gear platform. Missing these makes the platform feel broken or pointless.
| Feature | Why Expected | Complexity | Notes |
|---------|--------------|------------|-------|
| **User registration and authentication** | Cannot have multi-user without accounts. Every platform has sign-up/login. | HIGH | External auth provider integration (Authentik, Keycloak, or similar). Replaces current single-user cookie auth. All existing entities need userId FK. |
| **User profiles (public)** | Every community platform has profiles. Users need identity to share and be discovered. | LOW | Minimal: display name, avatar URL, bio text, joined date. Public profile page lists user's public setups. No follower counts needed. |
| **Setup visibility controls** | Users will not share setups if they cannot control what is public. Privacy is table stakes for any sharing platform. | LOW | Binary public/private toggle per setup. Default to private (opt-in sharing). Existing setups migrated as private. |
| **Public setup detail pages** | Shared setup links must resolve to a readable page. If sharing is a feature, the shared thing must be viewable. | MEDIUM | Read-only view with item list, weight/cost totals, donut chart, creator attribution. No auth required for public setups. Extends existing setup detail view. |
| **Global item database (searchable)** | Users expect to find gear by name rather than entering specs from scratch every time. LighterPack's weakness is fully manual data entry. | HIGH | Central product catalog with brand, model, category, manufacturer weight, MSRP, product URL, image. Users search and link rather than re-enter. Seed with 200-500 items in core categories to bootstrap. This is the foundational dependency for reviews, aggregation, and item detail pages. |
| **Link personal items to global items** | Once a global DB exists, users expect to connect their gear to canonical entries for richer data. | MEDIUM | Optional FK from user items to global items. Enables aggregation (owner count, avg weight, reviews). Must handle items not yet in global DB gracefully. |
| **Item detail page (aggregated)** | When browsing gear, clicking an item should show consolidated info: specs, who owns it, ratings. Standard on any product platform. | HIGH | Aggregated view combining: manufacturer specs from global DB, owner count, setup appearances, average ratings, crowd-reported weights. This is the integration hub for all platform features. |
| **Structured reviews (ratings)** | Any product-oriented community needs evaluation. Users expect to rate gear and see what others think. | MEDIUM | Overall 1-5 star rating plus 3-5 dimension ratings (varies by product category). Attached to global items, not personal items. One review per user per global item. No freeform text per project constraint. |
| **Discovery browse page** | Users expect a way to find interesting setups and gear beyond their own collection. Without this, multi-user adds no value. | MEDIUM | Not algorithmic for v2.0. Three sections: recent public setups, recently reviewed items, popular gear (most owned). Simple sorted lists with pagination. |
| **Search global items** | Must be able to find products by name/brand in the global database. Powers linking, browsing, and review discovery. | MEDIUM | Full-text search on name, brand, category. Used in "link my item" flow, discovery browsing, and review lookup. Postgres full-text search or trigram index. |
### Differentiators (Competitive Advantage)
Features that set GearBox apart from LighterPack, GearGrams, Trailspace, and MyGear. Aligned with core value: "help people make better gear decisions."
| Feature | Value Proposition | Complexity | Notes |
|---------|-------------------|------------|-------|
| **Crowd-verified specs** | LighterPack trusts user-entered data blindly. GearBox can show "manufacturer says 450g, 12 owners measured avg 478g." Real-world weight verification is unique and high-value for weight-conscious users. | MEDIUM | Aggregate weightGrams from all user items linked to a global item. Compare against manufacturer spec. Display on item detail page. Needs sufficient linked items to be meaningful (threshold: 3+ owners). |
| **Review dimensions per product category** | Trailspace and OutdoorGearLab use editorial ratings with fixed dimensions. GearBox crowd-sources structured ratings with category-specific dimensions: a tent gets "weather protection, ventilation, setup ease" while a stove gets "boil time, fuel efficiency, packability." More relevant than one-size-fits-all. | MEDIUM | Define 3-5 rating dimensions per product category via admin config. Store dimension ratings alongside overall rating. Display as radar chart or bar chart on item detail page. |
| **"X people own this" social proof** | Shows popularity and real adoption. No gear tracker does this because they lack a global item database. Simple count, powerful signal. | LOW | Count of users who linked a collection item to this global item. Displayed prominently on item detail page and in search results. Zero implementation complexity once linking exists. |
| **Setup composition insights** | "This item appears in 47 bikepacking setups, commonly paired with Y and Z." Cross-setup analysis no competitor offers. Answers "what do people use this with?" | MEDIUM | Query across all public setups containing a given global item. Show co-occurrence patterns. Powerful but can be deferred to v2.x if query performance is a concern. |
| **Setup impact preview with global items** | Already built for personal items. Extending to global items lets users preview "adding this from the store to my setup changes weight by X." Bridges research and collection management. | LOW | Already exists for personal items. Add "preview in my setup" button on global item detail pages. Reuse existing impact preview logic. |
| **Planning threads with global item integration** | Research threads that pull in specs, reviews, and owner data from the global DB. Candidates link to global items for richer comparison than manual data entry. | MEDIUM | Add optional globalItemId to thread candidates. Auto-populate weight, price, image from global item. Show community ratings and owner count inline on candidates. |
| **Real-world weight distribution** | Histogram showing "owners report weights between 440g-490g" for a product. Beats a single manufacturer number. Valuable for ultralight community. | LOW | Aggregate weightGrams from all linked items. Display min/max/avg. Histogram if 10+ data points. |
| **Copy/fork public setups** | Use someone else's setup as a starting template. LighterPack has clunky CSV-based copying. One-click fork is much better UX. | LOW | Create new setup copying all items from a public setup. Items must exist in user's collection (or be linked to same global items). Clear UX for "items you do not own yet." |
### Anti-Features (Commonly Requested, Often Problematic)
| Feature | Why Requested | Why Problematic | Alternative |
|---------|---------------|-----------------|-------------|
| **Freeform text reviews** | Users want to explain their experience in detail | Requires moderation, spam filtering, content policy, reporting infrastructure. PROJECT.md explicitly defers until moderation exists. | Structured ratings with predefined dimensions. Short predefined tags for pros/cons (e.g., "lightweight", "durable", "runs small"). |
| **Comments on setups** | Social engagement, questions about gear choices | Moderation burden, notification system, spam, harassment risk. Deferred in PROJECT.md. | Link to user profile. Contact happens outside platform. |
| **Follow users / activity feed** | Social graph, staying updated on people | Turns a gear tool into a social network. Notification infrastructure, feed ranking, engagement metrics, retention loops. Project decision: discovery-first, not social-first. | Discovery feed shows popular/recent content without requiring social connections. |
| **Marketplace / buy-sell** | Users want to trade used gear | Payment processing, fraud prevention, disputes, shipping logistics, tax compliance. Massive liability. | Link to product URLs on global items. Users buy through retailers. |
| **AI gear recommendations** | "What tent should I buy for bikepacking?" | Training data requirements, bias, liability for bad recommendations, hallucination risk. | Global item pages with ratings, owner counts, and setup co-occurrence do implicit recommendation. "People who own X also own Y." |
| **Wiki-style open item editing** | Community wants to correct/enrich global item specs | Edit wars, vandalism, quality degradation, dispute resolution. PROJECT.md explicitly rules this out. | Structured contributions only: report measured weight, submit rating. Admin approval for spec corrections. Trusted contributor program later. |
| **Price tracking / deal alerts** | Users want to know when gear goes on sale | Requires scraping retailer sites, fragile, legal gray area, maintenance burden. PROJECT.md rules this out. | Store product URL so users can check prices manually. |
| **Real-time collaborative setups** | "Plan a group trip together" | WebSocket infrastructure, conflict resolution, permissions model, presence indicators. Massive complexity for niche use case. | Each user builds their own setup. Fork public setups as templates. |
| **Gamification (badges, points, levels)** | Drive engagement and contributions | Incentivizes quantity over quality. Users game systems for points rather than providing genuine data. Creates toxic dynamics. | Soft social proof: "contributed X reviews" on profile. No points, no leaderboards. |
| **Instagram-style infinite scroll feed** | Addictive browsing experience | Engagement-maximizing design conflicts with utility-focused tool. Users come to research decisions, not scroll endlessly. | Paginated, filterable discovery page. Browse with intent, not addiction. |
---
## Feature Dependencies
```
[External Auth Provider]
|
v
[Multi-User Data Model (userId FK on all entities)]
|
+---> [Postgres Migration] (concurrent access, auth provider needs Postgres)
|
+---> [User Profiles (public)]
| |
| +---> [Public Profile Pages]
| | |
| | +---> [Discovery Feed (browse users' public content)]
| |
| +---> [Setup Visibility Controls (public/private)]
| |
| +---> [Public Setup Detail Pages]
| |
| +---> [Copy/Fork Public Setups]
|
+---> [Global Item Database]
|
+---> [Search Global Items]
|
+---> [Link Personal Items to Global Items]
| |
| +---> [Owner Count ("X people own this")]
| |
| +---> [Crowd-Verified Specs (aggregated weight)]
| |
| +---> [Setup Appearances Count]
| |
| +---> [Real-World Weight Distribution]
|
+---> [Structured Reviews]
| |
| +---> [Review Dimensions per Category]
| |
| +---> [Average Ratings Display]
|
+---> [Item Detail Pages (aggregated hub)]
| |
| +---> [Setup Composition Insights]
|
+---> [Planning Thread Global Item Integration]
|
+---> [Candidate Auto-populate from Global DB]
```
### Dependency Notes
- **Multi-user data model is the absolute foundation.** Every feature depends on userId ownership. Items, setups, threads, categories, reviews -- all need user scoping. This is the biggest single migration.
- **Postgres migration is coupled with auth.** The external auth provider (Authentik, Keycloak) needs Postgres. Migrating the app DB at the same time avoids running two databases. Do these together.
- **Global item database is the second foundation.** Reviews, item detail pages, owner counts, crowd-verified specs, and planning thread integration all depend on canonical global item records. Without this, multi-user is just "LighterPack with accounts."
- **Structured reviews require global items.** Reviews attach to global items, not personal collection items. Otherwise reviews fragment across duplicate user-entered items with no way to aggregate.
- **Item detail pages are the integration point.** They combine global item specs, aggregated user data, reviews, owner count, and setup appearances. Should be built after all data sources exist.
- **Discovery feed requires profiles + public content.** Cannot browse without user identity and visibility controls producing public content to show.
- **Linking is the bridge.** Personal items link to global items. This single FK enables owner count, crowd-verified specs, weight distribution, and setup appearances. Prioritize this flow.
---
## MVP Definition
### Launch With (v2.0 Platform Foundation)
- [ ] **External auth provider integration** -- Nothing works without multi-user identity
- [ ] **Postgres migration** -- Required for concurrent access; auth provider dependency
- [ ] **Multi-user data model** -- userId on items, setups, threads, categories; data isolation
- [ ] **User profiles (minimal)** -- Display name, avatar, bio; public profile page
- [ ] **Setup visibility controls** -- Public/private toggle, default private
- [ ] **Public setup detail pages** -- Shareable read-only view with attribution
- [ ] **Global item database with seed data** -- Schema, admin seeding, search
- [ ] **Link personal items to global items** -- Association flow in collection UI
- [ ] **Structured reviews** -- Overall rating + dimension ratings on global items
- [ ] **Item detail pages** -- Aggregated specs, owner count, average ratings
- [ ] **Discovery browse page** -- Recent public setups, recently reviewed, popular items
### Add After Validation (v2.x)
- [ ] **Crowd-verified specs display** -- "Manufacturer: 450g, Community avg: 478g" (needs 3+ owners per item to be meaningful)
- [ ] **Setup composition insights** -- "Commonly paired with" co-occurrence analysis
- [ ] **Planning thread global item integration** -- Candidates auto-populate from global DB
- [ ] **Popular gear rankings by category** -- Most owned, highest rated per category
- [ ] **Copy/fork public setups** -- One-click template from public setups
- [ ] **Review dimension customization** -- Admin configures rating dimensions per product category
- [ ] **Real-world weight distribution** -- Histogram on item detail pages
- [ ] **Global item suggestion workflow** -- Users propose new items for admin review
### Future Consideration (v3+)
- [ ] **Freeform reviews with moderation** -- After moderation infrastructure exists
- [ ] **Comments on setups** -- After moderation infrastructure exists
- [ ] **Follow users / activity feed** -- After discovery model is validated
- [ ] **OAuth / social login** -- After external auth provider is stable
- [ ] **Trusted contributor program** -- Verified users can edit global item specs
---
## Feature Prioritization Matrix
| Feature | User Value | Implementation Cost | Priority |
|---------|------------|---------------------|----------|
| External auth provider | HIGH | HIGH | P1 |
| Postgres migration | HIGH | HIGH | P1 |
| Multi-user data model (userId on entities) | HIGH | HIGH | P1 |
| User profiles (basic) | HIGH | LOW | P1 |
| Setup visibility controls | HIGH | LOW | P1 |
| Public setup detail pages | HIGH | MEDIUM | P1 |
| Global item database (schema + seed) | HIGH | HIGH | P1 |
| Link personal items to global items | HIGH | MEDIUM | P1 |
| Search global items | HIGH | MEDIUM | P1 |
| Structured reviews | HIGH | MEDIUM | P1 |
| Item detail pages (aggregated) | HIGH | HIGH | P1 |
| Discovery browse page | MEDIUM | MEDIUM | P1 |
| Crowd-verified specs | HIGH | LOW | P2 |
| Setup composition insights | MEDIUM | MEDIUM | P2 |
| Planning thread global DB integration | MEDIUM | MEDIUM | P2 |
| Copy/fork public setups | MEDIUM | LOW | P2 |
| Popular gear rankings | MEDIUM | LOW | P2 |
| Freeform reviews + moderation | MEDIUM | HIGH | P3 |
| Follow users | LOW | MEDIUM | P3 |
| Setup comments | LOW | MEDIUM | P3 |
**Priority key:**
- P1: Must have for v2.0 platform launch
- P2: Should have, add in v2.x once core is validated
- P3: Future consideration, requires new infrastructure (moderation, notifications)
---
## Competitor Feature Analysis
| Feature | LighterPack | GearGrams | Trailspace | MyGear | GearBox v2.0 |
|---------|-------------|-----------|------------|--------|-------------|
| Gear lists/setups | Yes, drag-and-drop | Yes, trip-based | No (review only) | Yes, "Locker" | Yes, named setups with classification |
| Weight tracking | Base/worn/consumable | Carried/worn/consumable | No | Basic | Base/worn/consumable + unit conversion + donut charts |
| User profiles | Minimal (no bio) | Minimal | Review history page | Full social profile | Display name, avatar, bio, public setups |
| Sharing | Public link, embed code | Public link | N/A | Social feed posts | Public/private toggle, shareable URLs |
| Global item database | No (all user-entered) | No | Yes (editorial catalog) | No | Yes, seeded + crowd-enriched with verified specs |
| Structured reviews | No | No | Yes (summary/pros/cons + rating) | Basic star rating | Dimension ratings per product category |
| Item aggregation | No | No | Editorial scores only | No | Owner count, avg weight, setup appearances, crowd specs |
| Discovery/browse | No | No | Browse by category | AI-tagged social feed | Browse setups, items, popular gear (intent-driven, not feed) |
| Purchase research | No | No | Price comparison links | No | Planning threads with candidates, ranking, impact preview |
| Crowd-verified specs | No | No | No | No | Manufacturer vs. community-measured weight comparison |
| Mobile app | No | Yes (iOS/Android) | No | Yes (iOS/Android) | No (responsive web, per project constraint) |
### Competitive Positioning
GearBox occupies a unique niche: the only platform combining **gear management** (LighterPack's strength), **structured community reviews** (Trailspace's strength), and **crowd-verified specs** (nobody does this). The planning threads feature has no direct competitor equivalent in the gear domain.
**Key advantages over each competitor:**
- **vs. LighterPack:** Global item database eliminates manual spec entry. Multi-user with profiles and sharing. Structured reviews provide community intelligence.
- **vs. GearGrams:** Richer comparison tools (planning threads). Crowd-verified specs. Item detail pages with aggregated data.
- **vs. Trailspace:** Not just reviews -- full gear management and setup composition. Users own and track their gear, not just review it. Crowd ratings, not editorial-only.
- **vs. MyGear:** Not social-first (no engagement loops, no AI tagging gimmicks). Utility-focused: research decisions, verify specs, compare options. Hobby-agnostic data model.
**Accepted gaps:**
- No mobile native app (web-first, responsive design sufficient per project constraints)
- No social feed in the Instagram sense (intentional: discovery-first, not social-first)
- No freeform text content (intentional: structured input only until moderation exists)
---
## Implementation Notes for Key Features
### Global Item Database Schema
The global item table is distinct from user items. It represents canonical products:
- `globalItems`: id, brand, model, name (display), categoryId, manufacturerWeightGrams, manufacturerPriceCents, productUrl, imageFilename, description, createdAt, updatedAt, createdByUserId
- User items get optional `globalItemId` FK for linking
- Admin-seeded initially; later users can suggest additions via a proposal workflow
### Structured Review Schema
- `reviews`: id, userId, globalItemId, overallRating (1-5), createdAt, updatedAt
- `reviewDimensionRatings`: id, reviewId, dimensionId, rating (1-5)
- `reviewDimensions`: id, categoryId, name (e.g., "durability", "packability"), sortOrder
- Unique constraint: one review per user per global item
- Dimensions are per-category, admin-defined
### Discovery Feed Approach
Not a personalized algorithmic feed. Three content streams, each a simple sorted query:
1. **Recent public setups** -- ORDER BY createdAt DESC, paginated
2. **Recently reviewed items** -- Global items with recent reviews, ORDER BY latest review date
3. **Popular gear** -- Global items ORDER BY linked owner count DESC
No recommendation engine. No engagement scoring. Users browse with intent.
### User Profile Data
Minimal profile extending the auth provider's user record:
- Display name (from auth provider or custom)
- Avatar URL (from auth provider or uploaded)
- Bio (short text, 280 char limit)
- Joined date
- Public setups list (derived from setup visibility)
- Review count (derived)
- Collection size (count of items, public stat)
---
## Sources
- [LighterPack](https://lighterpack.com/) -- Gear list builder, community standard for ultralight hikers. Public sharing via link, no profiles or reviews.
- [LighterPack tutorial (99Boulders)](https://www.99boulders.com/lighterpack-tutorial) -- Feature overview including sharing, linking, limitations.
- [GearGrams](https://www.geargrams.com/) -- Trip-based gear list tracker with weight classification.
- [Trailspace](https://www.trailspace.com/) -- User gear reviews with structured Summary/Pros/Cons format and Review Corps program.
- [Trailspace Review Form](https://www.trailspace.com/blog/2012/02/29/new-gear-review-form.html) -- Details on structured review fields with category-specific suggestions.
- [MyGear](https://mygear.world/) -- Social app for sports gear with Locker, feed, AI gear recognition, challenges.
- [Outdoor Gear Lab](https://www.outdoorgearlab.com/) -- Professional structured gear reviews with side-by-side comparison methodology.
- [Ultralight App](https://trailsmag.net/blogs/hiker-box/ultralight-the-gear-tracking-app-i-m-leaving-lighterpack-for) -- LighterPack alternative analysis showing community pain points.
- [Ready Set Sim](https://www.readysetsim.com/) -- Sim racing gear profiles and build sharing (cross-domain reference for hobby-agnostic patterns).
- [GetStream Social Feed Architecture](https://getstream.io/blog/social-media-feed/) -- Feed implementation patterns and anti-patterns.
---
*Feature research for: GearBox v2.0 Platform Foundation -- multi-user gear discovery platform*
*Researched: 2026-04-03*