139 lines
5.2 KiB
Markdown
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.
|