Ahmed Abdelaziz

FX Checker — a dark-themed live currency converter with ECB/EOD dataDesign Docs

Functional Requirements

What the app must do, in plain language.

Last updated August 2026

Overview

These are the product requirements in plain language — what a visitor should be able to do, and what the app should handle quietly.

How to read

Must = core value. Should = improves the experience. Can = nice to have.


Core User Tasks

IDRequirementPriority
FR-01See live ECB rates at a glance in a scrolling markets ticker with day-over-day change badgesMust
FR-02Convert an amount between any of 57 currencies, typing into either fieldMust
FR-03Swap the currency pair (and both amounts) in one clickMust
FR-04Search and pick a currency from a grouped catalog with flags, codes, and full namesMust
FR-05View a pair's rate history across six ranges (1D → 5Y) with open/last/change statsShould
FR-06Compare every quote currency against the base, converted at the entered amountShould
FR-07Pin favorite pairs; tapping one loads it into the converterShould
FR-08Log conversions manually and manage entries (delete one / clear all)Can
FR-09Favorites, log, and even the open tab survive a reloadMust
FR-10Operate the entire app with keyboard alone; screen readers announce dynamic resultsMust

Behavior That Matters

  • Two-way without loops — typing in either field updates only the other; currency changes re-derive exactly once via a guarded protocol. No ping-pong.
  • "Yesterday" means the previous business day — change badges compare real ECB publication dates, so weekends and holidays never produce fake 0.00% badges.
  • Fresh feel, polite fetching — the UI signals freshness (ticker, badges) while caches ensure data that changes once per day is fetched rarely.
  • Persistence without accounts — favorites, log, and tab state live on the device via localStorage. Nothing leaves the browser.
  • Motion respects preferences — the marquee collapses to a scrollable strip under prefers-reduced-motion.

Out of Scope

To keep the project focused:

  • No accounts, authentication, or backend storage — persistence is browser-local.
  • No intraday or trading data: ECB reference rates update at most once per business day.
  • No automated test framework — type-checked build and lint are the automated gates.

Trade-off made visible

"Live" here means fresh-feeling, not tick-by-tick. The design embraces the daily rhythm of the data source instead of pretending otherwise.


Acceptance in One Glance

  • A first-time visitor sees moving rates within a second of page load and can convert EUR → USD immediately (100 prefilled).
  • Typing 500 in the send field instantly shows the receive amount; focusing the receive field and typing divides instead — with no flicker or loop.
  • Pinning three favorites and logging two conversions survives a hard refresh.

Why it matters

The requirements target what users judge a converter by: instant answers, trustworthy change signals, and remembering what they care about.