Fixed
- Forecast refresh failures now fall back to existing cached rows with
stale: true. - The map control panel now groups controls and instructions clearly without stray separator bullets.
Added
- Interactive Swagger UI for safe live read-only requests.
- Full OpenAPI response examples and curl, JavaScript, and Python samples for every operation.
- Explicit MCP output schemas with validated structured content.
- Expanded agent workflow and response guidance in
/llms.txt. - Redocly OpenAPI validation in local tooling and CI.
Fixed
- Exact forecast rows and complete map feature properties are now reflected in OpenAPI.
Added
- Wildcard CORS on public read-only REST routes.
- Explicit daily-category-maximum metadata and labeling for map values.
- Five-minute shared edge caching with stale-while-revalidate.
Changed
- Invalid, zero, negative, fractional, and oversized
limit values now return 400.
Fixed
- Malformed and impossible date parameters now return
400 before querying the database. - Database connection and query failures are distinguished in private logs, while public errors no longer expose configuration hints.
Breaking changes
- Daily pollen rows now use
tree, grass, weed, and total instead of avg_* names. - Pollen-range hourly and daily modes now return one flat row shape.
Added
- One documented
404 UNSUPPORTED_CITY response across all city-aware REST operations, with the same actionable error message from MCP tools. - Hosted MCP discovery metadata in OpenAPI.
- Complete pollen data in the initial server-rendered city page HTML.
September 20, 2025
1.0.0
Initial public pollen, forecast, weather, map, OpenAPI, and discovery endpoints.