Repository navigation
[1.0.5] - 2026-09-27
New Features
-
Apparent Temperature Engine (
CalculateApparentTemperature)- Computes "feels like" temperatures (°C/°F) using real-time temperature, relative humidity, and wind speed metrics.
- Incorporates Wind Chill dynamics for temperatures
$\le 10^\circ\text{C}$ with wind speeds$> 4.8\text{ km/h}$ . - Applies Rothfusz Heat Index approximations for warm and humid conditions (
$\ge 27^\circ\text{C}$ with relative humidity$\ge 40%$ ). - Handles seamless fallbacks to real temperatures when atmospheric thresholds are not met.
-
Smart UI "Feels Like" Display
- Evaluates variance using
math.Abs(rawCelsius - rawApparentCelsius) >= 0.5. - Appends
(feels X.X °C)/(feels X.X °F)only when the perceived temperature significantly diverges from the real temperature. Omits redundant indicators when identical.
- Evaluates variance using
-
Geographical Telemetry in Status Bar
- Displays active latitude and longitude coordinates in the bottom status bar alongside terminal dimensions.
- Dynamic styling: coordinates render in yellow for favorited locations and cyan for standard searches.
-
WMO ASCII Art Icons
- Integrated World Meteorological Organization (WMO) codes into the Open-Meteo payload.
- Renders dedicated ASCII condition art alongside weather condition labels in the main atmosphere monitor panel.
-
Adaptive Small Screen Layout (
renderSmallScreenLayout)- Triggers a compact vertical layout when terminal dimensions collapse below
80x20. - Preserves screen real estate by rendering the search input, current weather monitor, and favorites/history panels while gracefully hiding the 14-day forecast table.
- Progressively reveals extra telemetry metrics (UV index, AQI, moon phase, sunset/sunrise times, and ASCII icons) as vertical space allows.
- Triggers a compact vertical layout when terminal dimensions collapse below
Performance & Core Architecture
-
Cache Garbage Collection
- Introduced a ticker-driven background goroutine in
CacheServicethat periodically sweeps in-memory entries and evicts stales beyond the 30-minute TTL threshold to eliminate memory leaks.
- Introduced a ticker-driven background goroutine in
-
Thread-Safe Deep Copies
- Added
deepCopyResponsehelper toCacheService.GetandCacheService.Putto protect underlying slices against data races in concurrent contexts.
- Added
-
Decoupled Location Resolution
- Split
WeatherClientorchestration into discreteResolveLocationandFetchForecastByLocationsteps, enabling incremental TUI updates during async fetches.
- Split
-
Cache Service Accessor
- Exposed a clean accessor on
WeatherClientto grant callers controlled direct access to the internal cache service.
- Exposed a clean accessor on
Commits
- d7b2b39 docs(readme): align document
- db7b242 docs(readme): fix document
- b9dc8ed docs(readme): update API reference, cache documentation and key features
- 5af51a2 docs(readme): update features, API documentation, and terminal dimension guard
- 49322e7 feat(cache): add background garbage collector worker for expired entries
- 38a9dce feat(ui): add ASCII weather condition icons driven by WMO codes
- 1abdd65 feat(ui): add apparent temperature calculation to atmosphere monitor panel
- 18a493e feat(ui): add responsive layout for small terminal screens
- 3cea214 feat(ui): display coordinates in footer status bar with favorite highlight
- 06cb7bb feat(ui): dynamic metric ordering in compact layout
- 1c7bf1d refactor(weather): implement deep copy cache and decoupled geocoding pipeline
- 818d5db style(ui): enhance partly cloudy ASCII icon rendering