Files
GearBox/.planning/phases/33-currency-system/33-DISCUSSION-LOG.md

139 lines
5.2 KiB
Markdown

# Phase 33: Currency System - Discussion Log
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
**Date:** 2026-04-13
**Phase:** 33-Currency System
**Areas discussed:** Data model & source currency, Conversion strategy, User experience & display, Catalog & sharing implications
---
## Data Model & Source Currency
### Core pricing model
| Option | Description | Selected |
|--------|-------------|----------|
| Per-item source currency | Add priceCurrency column alongside priceCents | |
| Per-user base currency only | All prices assumed in user's currency | |
| Everything stored as USD | Normalize to USD on entry | |
| Market-specific pricing | Prices are market-specific, not converted. Different markets have different UVP/MSRP | ✓ |
**User's choice:** Market-specific pricing — not just exchange rate conversion. A €2,000 bike in Germany may be £2,200 in the UK because that's the UK market price, not a conversion.
**Notes:** User emphasized that German UVP (MSRP) can be completely different from UK or US retail prices. This is a market reality, not a conversion problem.
### Community price data
| Option | Description | Selected |
|--------|-------------|----------|
| On catalog detail page | "Report your price" button | |
| During add-to-collection | Capture when adding item | |
| Both (tied to ownership) | Only report for items you own, auto-captured from collection | ✓ |
**User's choice:** Both, but tied to collection ownership — you can only report prices for items you have. Prevents duplicates.
**Notes:** User also identified that candidate "price I found it for" is research-quality data. Purchase date should be tracked for temporal context.
### Scope check
| Option | Description | Selected |
|--------|-------------|----------|
| Foundation layer | UVP display + conversion, community data later | |
| Full system | Everything: market prices, community submissions, conversion | ✓ |
| Let's scope it together | Walk through each piece | |
**User's choice:** Full system in Phase 33.
---
## Conversion Strategy
### Rate source
| Option | Description | Selected |
|--------|-------------|----------|
| Free API (ECB/frankfurter.app) | Daily rates, no API key, ~30 currencies | ✓ |
| Paid API (Open Exchange Rates) | More currencies, intraday, ~$12/mo | |
| You decide | Claude picks | |
**User's choice:** Free API — ECB via frankfurter.app
### Conversion location
| Option | Description | Selected |
|--------|-------------|----------|
| Server-side | Server fetches rates, returns converted prices | ✓ |
| Client-side | Client converts locally | |
| You decide | Claude picks | |
**User's choice:** Server-side
---
## User Experience & Display
### Market/locale detection
| Option | Description | Selected |
|--------|-------------|----------|
| Manual setting only | User picks market in settings | |
| Auto-detect + manual override | Browser locale / IP, changeable | |
| Tied to currency choice | Currency = market, with auto-suggestion | ✓ |
**User's choice:** Currency tied to market (EUR=EU, GBP=UK, USD=US) with auto-suggestion from browser locale and IP geolocation. Best of both worlds.
### Converted price display
| Option | Description | Selected |
|--------|-------------|----------|
| Prefix with ~ and muted style | ~£1,720 with tooltip | |
| Dual display | €2,000 (~£1,720) — source prominent, converted in parens | ✓ |
| You decide | Claude picks | |
**User's choice:** Dual display
---
## Catalog & Sharing Implications
### Catalog detail page
| Option | Description | Selected |
|--------|-------------|----------|
| User's market first, others expandable | Local UVP + community avg prominent, other markets collapsible | ✓ |
| All markets in a table | Price table showing all markets at once | |
| You decide | Claude picks | |
**User's choice:** User's market first, others expandable
### Shared setup prices
| Option | Description | Selected |
|--------|-------------|----------|
| Owner's original prices | Show in owner's currency with conversion toggle | |
| Viewer's market prices | Auto-convert to viewer's currency | |
| Layered disclosure | Card: viewer's market MSRP. Detail: full breakdown including owner's price | ✓ |
**User's choice:** Layered — card shows viewer's market MSRP, detail page shows full breakdown (owner's price, all market MSRPs, community averages).
### Comparison table currencies
| Option | Description | Selected |
|--------|-------------|----------|
| Normalize to user's currency | All candidates in viewer's currency, marked as approximate | ✓ |
| Source currency with tooltip | Each in source currency, hover for conversion | |
| You decide | Claude picks | |
**User's choice:** Normalize — mixed currencies (EUR, USD, JPY, TRY) are useless for comparison. Rough converted price gives direction even if not exact. Users can add their own researched "price I found it for."
## Claude's Discretion
- Rate caching strategy
- Schema design for market prices table
- Community price aggregation approach
- Transition from current simple priceCents model
## Deferred Ideas
None — discussion stayed within phase scope.