06ab816ebe784526b0d9c4fcd9961b0cebbf82d7
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e14308bbb6 |
Survey the ARPA REST APIs and correct the licence position
Scanned the two public ARPA Piemonte APIs and recorded what they actually contain, so this question does not get re-litigated from the marketing pages later. Neither needs a key, a token or a registration. This corrects something I got wrong. The docs said ARPA states no licence for its data, based on the open-data page saying only "gratuiti". The site's legal notice does state one — CC BY 4.0, commercial use explicitly permitted, credit "Fonte: Arpa Piemonte - www.arpa.piemonte.it" — and both APIs link that notice from their OpenAPI description, so anything they serve is covered. Only the radar volumes remain ambiguous, because their own page does not repeat the licence and the access link is still issued by email; both questions belong in the same message to ARPA. The survey's operative findings: - api_realtime carries 374 stations with coordinates, of which 286 have a rain gauge, spanning 74 m to 2820 m of elevation. - Its observations lag by about 4.5 hours on an hourly cadence, measured uniformly across every station sampled. That is the property that decides how it can be used: it is an observation archive with a publishing delay, not a real-time feed, and it must never sit next to 5-minute radar looking current. - Only 4 of 143 hydrometer stations publish guard and danger thresholds, and 5 publish a river name. A river-level warning built on this would be empty for 97% of stations, so that idea is recorded as rejected rather than pending. - Meteoweb is a 3.27-million-record historical archive plus a seismic catalogue: a research dataset, not app content. One thing is worth adopting: rain-gauge accumulations as ground truth for the radar. Radar infers rainfall from reflectivity aloft, gauges measure what reached the ground, and the network is densest exactly where Alpine terrain blocks the beam. It belongs behind the worker, clearly timestamped, once the worker exists. Also notes that the credit ARPA asks for is the full "Fonte: Arpa Piemonte - www.arpa.piemonte.it", not the bare name currently in the region config, to be adopted the moment any ARPA-sourced data is displayed. No code changes: nothing is integrated yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
f3a0e3794a |
Narrow scope to radar, and put the app on a real OpenStreetMap base map
Drops forecasts, lightning, the home-screen widget and advertising. What remains is radar on a map, the official ARPA alert bulletin, and rain notifications. The base map is now OpenFreeMap's Positron style: real OpenStreetMap vector tiles with no API key, no registration, no request limits and commercial use permitted. Every other free tier — MapTiler, Stadia, Jawg, Thunderforest — needs a key, which is a secret to manage, a quota to outgrow and a signup to complete before anyone can build the project, and the map is the one thing the app cannot work without. Positron rather than Liberty or Bright because the radar overlay has to be the loudest thing on screen, and a desaturated grey base is built to sit under data. Its style JSON carries no `attribution` field, so MapLibre displays no credits by itself. The app renders them from the region config instead: the two mandatory credits, OpenStreetMap and OpenMapTiles, go in the always-visible bar, and OpenFreeMap's own credit — optional by their terms — is listed on the Sources screen with the rest. The bundled offline style is still reachable with MAP_STYLE_URL=offline, and still claims no base map attribution, because crediting OpenStreetMap while showing it would be a false claim. Radar-DPC stays the source. ARPA Piemonte's own radar remains a disabled stub for two reasons that belong to the project owner, not to the code: the real-time access link is only issued by email, and the open-data page states the data is "gratuiti" and nothing else. Free of charge is not a licence, and rendering those volumes into frames served from a CDN is redistribution. Both questions go in the same email. An earlier draft of the docs recorded ARPA radar as CC BY 4.0; the source page does not support that, so the claim is removed rather than carried forward. The documentation is updated throughout rather than annotated: CLAUDE.md gains an explicit scope boundary, data-sources drops MET Norway and ISTAT and gains the base map, licenses records that free of charge is not a licence, privacy loses the whole advertising section, and the roadmap is renumbered so the backend worker is next — until it exists, DpcRadarSource has nothing to read. licenses.md keeps Open-Meteo and Blitzortung listed as excluded even though the features that would have used them are gone: both are non-commercial-only, ads are a plausible future, and neither should be adopted on the grounds that there are none today. Verified: analyze clean, 130 tests passing, and on the emulator the radar overlay sits correctly over Piedmont on real OSM tiles with Turin, Milan and Genoa labelled, the age reads "Aggiornato 4 minuti fa", and the Sources screen lists all five credits with their licences. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
3fcbb9f1c4 |
Add monorepo scaffolding and project documentation
Sets up the Nuvolari monorepo layout (app/, backend/, docs/, tool/) with the groundwork that does not depend on the Flutter toolchain: gitignore covering Flutter, Python and every secret file shape; env.example.json as the template for --dart-define-from-file; a verification script that skips stages whose target does not exist yet so it is runnable from day one; and a CI workflow in GitHub Actions syntax so it runs unchanged on Gitea or GitHub. The documentation records facts verified against the live services rather than restated from the brief. Two of them change the design: - DPC VMI rasters are 1200x1400 Float32 on a 1 km grid in a custom projection centred on Italy, not EPSG:4326 or EPSG:3857, and their GeoKeys are internally inconsistent. Reprojection is mandatory and the source CRS must be read from each file rather than hardcoded. - The ARPA CAP feed carries six level values, not four: BIANCO for the avalanche scale out of season and "-" for no data. Collapsing either into VERDE would report "no alert" where the bulletin reports "not assessed". Also documents why the frames we publish inherit CC BY-SA from the DPC source, and why rain notifications subscribe to cell topics from the device so no user location ever reaches a server. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |