102 lines
5.1 KiB
Markdown
102 lines
5.1 KiB
Markdown
---
|
|
gsd_state_version: 1.0
|
|
milestone: v2.2
|
|
milestone_name: User Experience Polish
|
|
status: executing
|
|
stopped_at: Phase 31 context gathered
|
|
last_updated: "2026-04-12T18:50:04.872Z"
|
|
last_activity: 2026-04-12
|
|
progress:
|
|
total_phases: 36
|
|
completed_phases: 24
|
|
total_plans: 67
|
|
completed_plans: 65
|
|
percent: 97
|
|
---
|
|
|
|
# Project State
|
|
|
|
## Project Reference
|
|
|
|
See: .planning/PROJECT.md (updated 2026-04-09)
|
|
|
|
**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.
|
|
**Current focus:** Phase 30 — Onboarding Redesign
|
|
|
|
## Current Position
|
|
|
|
Phase: 31
|
|
Plan: Not started
|
|
Status: Executing Phase 30
|
|
Last activity: 2026-04-12
|
|
|
|
Progress: [░░░░░░░░░░] 0%
|
|
|
|
## Performance Metrics
|
|
|
|
**Velocity:**
|
|
|
|
- Total plans completed: 67 (all milestones through v2.0)
|
|
- v1.3: 6 plans across 4 phases (2026-03-16 to 2026-04-08)
|
|
- v2.0: 32 plans across 10 phases (2026-03-17 to 2026-04-08)
|
|
|
|
*Updated after each plan completion*
|
|
|
|
## Accumulated Context
|
|
|
|
### Decisions
|
|
|
|
Key decisions carried forward from v2.0:
|
|
|
|
- External auth provider: Logto (self-hosted OIDC) — RESOLVED
|
|
- Structured UGC only — ratings and predefined fields, no freeform text — ACTIVE
|
|
- Separate globalItems table — not a flag on user items table — RESOLVED
|
|
- COALESCE merge for reference items — RESOLVED
|
|
- Detail pages replacing slide-out panels — RESOLVED
|
|
|
|
v2.1 decisions:
|
|
|
|
- Product images: manufacturer images with attribution and source link, honor takedown requests — RESOLVED
|
|
- Catalog data: open datasets + manufacturer specs + agent MCP enrichment — RESOLVED
|
|
- Public-first: auth model rework before content features — RESOLVED
|
|
- Phase 999.3 (Public Access Auth Model backlog item) is now Phase 24 — PROMOTED
|
|
- [Phase 24-public-access-infrastructure]: createRateLimit factory pattern for configurable rate limiting per endpoint tier
|
|
- [Phase 24-public-access-infrastructure]: Browse tier 120/min, detail tier 60/min — same limits for auth and anon users
|
|
- [Phase 24]: Both auth prompt CTAs go to /login — Logto handles sign-in and sign-up at the same OIDC endpoint
|
|
- [Phase 24]: Soft navigate() replaces hard window.location.href for private route redirect — defers until auth resolves
|
|
- [Phase 25-catalog-enrichment-agent-tools]: Three-way tag sync: undefined=leave untouched, []=clear all, [names]=replace — enables selective tag updates from catalog agents
|
|
- [Phase 25-catalog-enrichment-agent-tools]: unique(brand, model) constraint on globalItems: enables safe ON CONFLICT DO UPDATE for catalog enrichment agents
|
|
- [Phase 25-catalog-enrichment-agent-tools]: Catalog MCP tools use registerCatalogTools(db) without userId — shared catalog needs no user scoping
|
|
- [Phase 25-catalog-enrichment-agent-tools]: Attribution spacing: image div removes mb-6, attribution paragraph takes mb-6, fallback div ensures consistent spacing
|
|
- [Phase 26-discovery-landing-page]: Composite cursor for setups uses itemCount_id format filtered post-query in JS for simplicity with grouped SQL
|
|
- [Phase 26-discovery-landing-page]: No cursor pagination for getTrendingCategories — bounded small list, simple limit is sufficient
|
|
- [Phase 26]: discoveryRoutes registered with browseTier rate limiting (120 req/min) for all GET discovery endpoints
|
|
- [Phase 26-discovery-landing-page]: PublicSetupCard itemCount/creatorName fields are optional for backward compatibility with users/$userId usage
|
|
- [Phase 26-discovery-landing-page]: Discovery sections hide entirely (return null) when not loading and data is empty — avoids empty grid layouts
|
|
- [Phase 27]: Setups elevated to top-level /setups route; Collection page reduced to Gear and Planning tabs with .catch(gear) fallback for legacy URLs
|
|
- [Phase 27]: Wave 0 tests use test.fixme for removed dashboard cards — preserves test intent for future reference
|
|
- [Phase 27]: Old setups tab test replaced with fallback-to-gear assertion matching the Zod .catch('gear') behavior planned in Plans 01-03
|
|
- [Phase 27]: Used 'house' icon instead of plan-specified 'home': lucide-react has no Home icon, only House — prevents Package fallback rendering in navigation
|
|
|
|
### Pending Todos
|
|
|
|
None active.
|
|
|
|
### Blockers/Concerns
|
|
|
|
None.
|
|
|
|
### Quick Tasks Completed
|
|
|
|
| # | Description | Date | Commit | Directory |
|
|
|---|-------------|------|--------|-----------|
|
|
| 260411-022 | Fix global items search bar layout - too tall and hard to navigate back | 2026-04-10 | ef48891 | [260411-022-fix-global-items-search-bar-layout-too-t](./quick/260411-022-fix-global-items-search-bar-layout-too-t/) |
|
|
| 260411-0zq | Redesign search UX — real nav search bar navigating to /global-items?q= | 2026-04-10 | 334bf33 | [260411-0zq-redesign-search-ux-bigger-nav-search-bar](./quick/260411-0zq-redesign-search-ux-bigger-nav-search-bar/) |
|
|
| 260411-1h2 | Rebuild global items page with sticky toolbar and inline filters | 2026-04-10 | ee3b6f7 | [260411-1h2-rebuild-global-items-page-with-sticky-se](./quick/260411-1h2-rebuild-global-items-page-with-sticky-se/) |
|
|
|
|
## Session Continuity
|
|
|
|
Last session: 2026-04-12T18:01:20.416Z
|
|
Stopped at: Phase 31 context gathered
|
|
Resume file: .planning/phases/31-mobile-polish/31-CONTEXT.md
|