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
| ID | Requirement | Priority |
|---|---|---|
| FR-01 | Search any city by name and see up to 10 matching places with country flags | Must |
| FR-02 | Detect "my location" through the browser on first load | Must |
| FR-03 | See current conditions: temperature, feels-like, humidity, wind, precipitation | Must |
| FR-04 | See a 24-hour hourly forecast, grouped by day with a day selector | Must |
| FR-05 | See a 7-day daily forecast with high/low ranges | Must |
| FR-06 | Switch between metric and imperial units — instantly, with no reload | Must |
| FR-07 | Remember chosen units and last location across visits | Should |
| FR-08 | Work with keyboard, screen reader, and touch as well as a mouse | Must |
| FR-09 | Show search-engine and social-share previews (OG image, structured data) | Can |
Behavior That Matters
- Search never lies — results are debounced (500 ms) and older requests are cancelled, so a fast typist can never see stale results for the wrong query.
- Instant return visits — coordinates from the previous visit fire immediately from
localStorage; a fresh geolocation fix silently replaces them when it arrives. - Units switch in place — data is fetched once in Celsius and converted at render time. No refetch, no loading state.
- No jumping layout — the forecast grid is reserved from first paint; each section fills its skeleton independently when data lands.
- Everyone gets the same app — full ARIA combobox semantics, skip link, visible focus, 44 px touch targets, reduced-motion support.
Out of Scope
To keep the project focused:
- No backend of its own, no accounts, no favorites or saved places.
- No offline mode — weather data requires an internet connection.
- No automated tests in the current version (documented honestly, not hidden).
Trade-off made visible
A frontend-only weather client is a complete product on its own. Everything that would require a server is either keyless (Open-Meteo) or isolated behind one small server action.
Acceptance in One Glance
- A first-time visitor sees their local weather within seconds of allowing location access — with zero setup.
- Typing a partial city name shows relevant suggestions before they finish typing, with no flicker.
- Switching Celsius → Fahrenheit updates every widget instantly and survives a page reload.
Why it matters
The requirements target the two things users actually judge a weather app by: how fast it answers, and whether it respects their preferences.