--- convoy: pricing-online-local brief_number: 13 depends_on: [9, 11, 12] recommended_model: composer-2.5 model_tier: standard files: - components/card-detail/CardDetailLocalStores.js - components/CardDetailView.js - lib/use-card-detail.js - test/components/CardDetailLocalStores.test.js cross_brief_commitments: - brief: 9 description: | Inserts local stores section into the purchase tab area using the slot Brief 9 reserved. Does not rework purchase pricing UI. --- # Brief 13: Local stores card detail UI ## Goal (1 sentence) Show “Game stores near you” on card detail using saved home zip and the nearby stores API. ## Files in scope (do not edit anything else) - `components/card-detail/CardDetailLocalStores.js` - `components/CardDetailView.js` - `lib/use-card-detail.js` - `test/components/CardDetailLocalStores.test.js` ## Conventions to follow - Fetch `/api/stores/nearby` when purchase tab active (auth required). - List: name, address, distance, phone/website links, OSM link — no in-store prices. - Empty states: no zip → link to Settings; no stores → gentle copy. - Liquid Glass styling consistent with Brief 9 components. ## Acceptance criteria - [ ] Stores render when user has home zip configured - [ ] Prompt to set zip when missing - [ ] No scraped in-store pricing shown - [ ] Component test covers empty + populated states - [ ] Tests pass - [ ] No scope expansion ## Rationale (≤3 sentences) Completes Phase 2 user-facing goal on card detail. Depends on pricing UI shell from Brief 9 and backend from Briefs 11–12.