diff --git a/README.md b/README.md index 3c650da..446dfc6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Weather Tool -Tool for downloading historical and real-time data from 33 weather stations in Latvia. It aggregates and displays data for different time periods, cities, and weather parameters. +Tool for downloading historical and real-time data from weather stations in Latvia. It aggregates and displays data for different time periods, cities, and weather parameters. ## Setup Rename `.env-sample` to `.env` and fill in credentials @@ -12,7 +12,7 @@ docker-compose up --build --no-cache --force-recreate ## Local synthetic weather data -The local database can be populated with deterministic hourly sample data for all 33 stations. The seed covers the previous 18 months through the current hour and can be run repeatedly without creating duplicates. +The local database can be populated with deterministic hourly sample data for the repository station set plus Valmiera, which is required by the fixed Faktiskā template. The seed covers the previous 18 months through the current hour and can be run repeatedly without creating duplicates. ```sh docker compose --profile tools run --rm seed diff --git a/dev/seed_weather.sql b/dev/seed_weather.sql index 48792f9..577967d 100644 --- a/dev/seed_weather.sql +++ b/dev/seed_weather.sql @@ -37,7 +37,7 @@ cities(city, climate_offset) AS ( ('Pāvilosta', 0.9), ('Piedruja', -1.4), ('Priekuļi', -1.6), ('Rēzekne', -1.2), ('Rīga', 1.3), ('Rucava', 1.0), ('Rūjiena', -1.0), ('Saldus', 0.3), ('Sigulda', -0.8), ('Sīļi', -1.3), ('Skrīveri', -0.5), ('Skulte', 0.0), - ('Stende', -0.3), ('Ventspils', 0.9), ('Vičaki', 0.2), ('Zīlāni', -1.1), + ('Stende', -0.3), ('Valmiera', -1.2), ('Ventspils', 0.9), ('Vičaki', 0.2), ('Zīlāni', -1.1), ('Zosēni', -2.1) ), hours AS ( diff --git a/docs/PRODUCT_WORKFLOWS.md b/docs/PRODUCT_WORKFLOWS.md index 16a72f2..19ad119 100644 --- a/docs/PRODUCT_WORKFLOWS.md +++ b/docs/PRODUCT_WORKFLOWS.md @@ -67,7 +67,7 @@ Fixed positions: The weather symbols are not automatically derived from the historical temperature query. They remain editorial/manual inputs until a reliable phenomena-data mapping is designed and validated. -Current staging limitation: the synthetic dataset has no Valmiera row, so that position is deliberately shown as missing and remains manually editable. Monta is the production typeface; Rubik remains temporary until the authorized Monta font files are supplied. The export dimensions are locked, but final pixel-level placement must still be compared against the production masters after Monta is installed. +Valmiera is included in the development seed so all 13 fixed positions can be exercised. Monta is the production typeface; Rubik remains temporary until the authorized Monta font files are supplied. The export dimensions are locked, but final pixel-level placement must still be compared against the production masters after Monta is installed. ## Latvia overview @@ -97,6 +97,6 @@ Development limitation: representative forecast CSV fixtures are not currently i - Whether weather conditions can eventually be populated automatically and which provider field is authoritative. - Whether Stende and Zīlāni remain the production feeds after users test real provider data. -- How Valmiera should be sourced when authorized provider data is available. +- Confirm how Valmiera is named and sourced when authorized provider data is available. - Final Monta font files and a pixel-level export comparison against the production masters. - Required authentication and role separation for analytical, production, and administrative workspaces. diff --git a/docs/README.md b/docs/README.md index e10adfa..f132b78 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ This directory contains the working documentation for the WeatherTool modernizat - Development source is edited and committed on Windows; Docker builds and runtime testing are performed on Rocky. - A production-like staging copy runs through Docker Compose on Rocky Linux at `http://192.168.1.101:9190`. -- Staging uses deterministic synthetic station observations for all 33 stations. +- Staging uses deterministic synthetic observations for the repository station set plus Valmiera, required by Faktiskā. - Scheduled external-provider jobs are disabled in development and staging. - PostgreSQL is private to the project Compose network; only the Scala application publishes a host port. - UI modernization is in progress. City Analysis retains custom analytical map outputs, while Faktiskā is a fixed 13-position, latest-temperature newsroom workflow with a locked 3840×1440 export. diff --git a/docs/UPDATE_ROADMAP.md b/docs/UPDATE_ROADMAP.md index d2bb05f..fcf4caa 100644 --- a/docs/UPDATE_ROADMAP.md +++ b/docs/UPDATE_ROADMAP.md @@ -28,7 +28,7 @@ Status: in progress - [x] Review backend, frontend, deployment, and security structure. - [x] Run the project locally through Docker Desktop. - [x] Add configurable host port and scheduled-job switch. -- [x] Add deterministic synthetic station data for all 33 stations. +- [x] Add deterministic synthetic station data for the repository station set and the Faktiskā-required Valmiera position. - [x] Create an isolated Rocky Linux staging deployment. - [x] Keep staging PostgreSQL private to its Compose network. - [x] Commit the baseline changes and establish the Git-over-SSH workflow. @@ -144,7 +144,6 @@ Status: pending - Existing automated test coverage is minimal. - Direct refreshes on newer frontend routes can return 404 until the backend gains a general SPA fallback. - Full Docker build context scanning on Rocky can fail on the container-owned `postgres/` bind directory; do not loosen its permissions. -- The Faktiskā synthetic feed has no Valmiera observation; staging displays it as missing rather than substituting an unapproved station. ## Change log diff --git a/web/src/consts.ts b/web/src/consts.ts index c0753ae..7c2709a 100644 --- a/web/src/consts.ts +++ b/web/src/consts.ts @@ -8,7 +8,7 @@ export const apiHost = import.meta.env.MODE === "development" export const FETCH_DELAY_MS = 500; // delays by 500ms for server requests, so user sees that something is loading -export const cityList = ["Ainaži", "Alūksne", "Bauska", "Dagda", "Daugavgrīva", "Daugavpils", "Dobele", "Gulbene", "Jelgava", "Kalnciems", "Kolka", "Kuldīga", "Lielpēči", "Liepāja", "Madona", "Mērsrags", "Pāvilosta", "Piedruja", "Priekuļi", "Rēzekne", "Rīga", "Rucava", "Rūjiena", "Saldus", "Sigulda", "Sīļi", "Skrīveri", "Skulte", "Stende", "Ventspils", "Vičaki", "Zīlāni", "Zosēni"]; +export const cityList = ["Ainaži", "Alūksne", "Bauska", "Dagda", "Daugavgrīva", "Daugavpils", "Dobele", "Gulbene", "Jelgava", "Kalnciems", "Kolka", "Kuldīga", "Lielpēči", "Liepāja", "Madona", "Mērsrags", "Pāvilosta", "Piedruja", "Priekuļi", "Rēzekne", "Rīga", "Rucava", "Rūjiena", "Saldus", "Sigulda", "Sīļi", "Skrīveri", "Skulte", "Stende", "Valmiera", "Ventspils", "Vičaki", "Zīlāni", "Zosēni"]; export const weatherField = ["tempMax", "tempMin", "tempAvg", "precipitation", "windAvg", "windMax", "visibilityMin", "visibilityAvg", "snowAvg", "atmPressire", "dewPoint", "humidity", "sunDuration", "phenomena"]; @@ -29,4 +29,4 @@ export const resultOrder = { }; type ResultOrder = typeof resultOrder; -export type ResultOrderKeys = keyof ResultOrder; \ No newline at end of file +export type ResultOrderKeys = keyof ResultOrder;