Files
Europa/Nuvolari/app/assets/regions/piemonte.json
T
Alby96andClaude Opus 5 85b2c99949 Scaffold the Flutter app with Italian l10n and region configuration
Creates the app skeleton and the seam everything else in the project hangs
off: region-specific data lives in an asset file, not in code, so adding a
region later is a new JSON file rather than a refactor.

Notable choices:

- applicationId and namespace are it.nuvolari.app rather than the doubled
  it.nuvolari.nuvolari that `flutter create` produces, with the Kotlin package
  and the iOS bundle identifiers moved to match.
- SDK levels are pinned instead of inherited from `flutter.*`. Google Play
  requires API 36, and that is a release blocker rather than something to let a
  Flutter upgrade change silently. minSdk 24 is the highest floor the planned
  dependencies impose.
- Riverpod and Dio-free for now, no code generation: see docs/stack-decisions.md.
- Italian is the l10n source language, so app_it.arb is the template rather
  than a translation of an English original.

The region parser rejects rather than repairs. An inverted bounding box, a map
centre outside its own bounds, an unknown adapter name, a duplicate zone code
or an empty attribution list all throw with the offending field named. Each of
those would otherwise fail silently and visibly wrong: a swapped latitude and
longitude renders the radar in the wrong place, an unknown adapter falling back
to mock would show demo frames where live data was expected, and a missing
attribution is a licence violation rather than a cosmetic gap.

Tests run against the asset that actually ships and against a captured copy of
the live ARPA CAP feed, so the eleven zone codes in the config are checked
against the eleven the feed really emits rather than against a list retyped
from documentation.

Verified: dart format clean, flutter analyze 0 issues, 50 tests passing,
flutter build appbundle --debug produces an AAB with applicationId
it.nuvolari.app, minSdk 24, targetSdk 36.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 11:24:26 +02:00

72 lines
2.3 KiB
JSON

{
"id": "piemonte",
"displayName": "Piemonte",
"timeZone": "Europe/Rome",
"bbox": [6.55, 43.95, 9.30, 46.55],
"map": {
"center": [7.95, 45.25],
"zoom": { "min": 6.0, "max": 13.0, "initial": 7.2 }
},
"sources": {
"radar": {
"defaultAdapter": "mock",
"availableAdapters": ["mock", "dpc"],
"product": "VMI",
"frameIntervalMinutes": 5
},
"forecast": {
"defaultAdapter": "metno",
"availableAdapters": ["metno"]
},
"alerts": {
"defaultAdapter": "arpaCap",
"availableAdapters": ["arpaCap"],
"officialBulletinUrl": "https://www.arpa.piemonte.it/rischi_naturali/boll/bollettino_allerta.pdf"
}
},
"alertZones": [
{ "code": "Piem-A", "name": "Toce", "provinces": ["NO", "VB"] },
{ "code": "Piem-B", "name": "Val Sesia, Cervo e Chiusella", "provinces": ["BI", "NO", "TO", "VC"] },
{ "code": "Piem-C", "name": "Valli Orco, Lanzo, bassa Val Susa e Sangone", "provinces": ["TO"] },
{ "code": "Piem-D", "name": "Alta Val Susa, Valli Chisone, Pellice e Po", "provinces": ["CN", "TO"] },
{ "code": "Piem-E", "name": "Valli Varaita, Maira e Stura", "provinces": ["CN"] },
{ "code": "Piem-F", "name": "Valle Tanaro", "provinces": ["CN"] },
{ "code": "Piem-G", "name": "Belbo e Bormida", "provinces": ["AL", "AT", "CN"] },
{ "code": "Piem-H", "name": "Scrivia", "provinces": ["AL"] },
{ "code": "Piem-I", "name": "Pianura Settentrionale", "provinces": ["AL", "AT", "BI", "NO", "TO", "VC"] },
{ "code": "Piem-L", "name": "Pianura Torinese e Colline", "provinces": ["AL", "AT", "CN", "TO"] },
{ "code": "Piem-M", "name": "Pianura Cuneese", "provinces": ["CN", "TO"] }
],
"attributions": [
{
"id": "dpc",
"text": "Radar-DPC — Dipartimento della Protezione Civile",
"license": "CC BY-SA",
"url": "https://radar.protezionecivile.it"
},
{
"id": "metno",
"text": "MET Norway",
"license": "CC BY 4.0",
"url": "https://api.met.no"
},
{
"id": "arpa",
"text": "Arpa Piemonte",
"license": null,
"url": "https://www.arpa.piemonte.it"
},
{
"id": "osm",
"text": "© OpenStreetMap contributors",
"license": "ODbL",
"url": "https://www.openstreetmap.org/copyright"
}
]
}