# CLAUDE.md — Radar Meteo Piemonte ## Project Cross-platform weather-radar app for the Piedmont region (Italy). Android first, iOS later, single Flutter codebase. Free app monetized with AdMob (GDPR consent via UMP). Region-scoped now (Piemonte) but extensible to other regions via configuration. ## Golden rules - Code, identifiers and commit messages in English. UI text in Italian via ARB localization. - Never commit secrets. Use .env + --dart-define; keep .gitignore updated. - Use ONLY AdMob TEST ad unit IDs in development. - Never poll ARPA/DPC servers directly from the app: always go through our backend/CDN. - Never store precise user locations server-side: rain notifications use geographic CELLS. - Do not use ARPA/DPC name, logo or the word "ufficiale" in a way implying an official app. ## Architecture - Monorepo: /app (Flutter), /backend (Python worker), /docs (detailed docs). - Radar data via RadarSource interface with adapters: DpcRadarSource (default, public), ArpaRadarSource (stub, awaits authorization), MockRadarSource (offline/demo). Active source chosen by region config + runtime flag. - App reads PNG frames + manifest.json from CDN produced by the backend worker (crop to Piemonte bbox, reproject to EPSG:3857). ## Data sources & licenses (attribution is mandatory on the Sources screen) - Radar (MVP): Radar-DPC — base https://radar-api.protezionecivile.it/ , GET /findLastProductByType?type=VMI , POST /downloadProduct (GeoTIFF via presigned S3). REQUIRE header `origin: https://radar.protezionecivile.it`. License CC BY-SA — credit "Radar-DPC"; derivative data products must stay CC BY-SA. Docs: dpc-radar.readthedocs.io. - Radar (future): ARPA Piemonte (HDF5 ODIM), access via email info.meteo@arpa.piemonte.it. License CC BY 4.0 — credit "Fonte: Arpa Piemonte - www.arpa.piemonte.it". - Forecast: MET Norway api.met.no (CC BY 4.0, commercial OK) — MANDATORY identifying User-Agent (app name + contact). Fallback: ItaliaMeteo ICON-2I via MeteoHub (CC BY 4.0, credit "ItaliaMeteo-ARPAE"). Do NOT use Open-Meteo free tier (non-commercial only). - Alerts: ARPA Piemonte XML-CAP bulletin — reproduce alert levels WITHOUT reinterpreting; link the official channel. - Base map: OSM data via PMTiles/MapTiler — show OSM/ODbL attribution. - Lightning: DO NOT use Blitzortung (commercial use prohibited). ## Verification loop (run after each milestone) - `dart format .` ; `flutter analyze` ; `flutter test` ; `flutter build appbundle` - Backend: `python -m pytest` ; lint. Commit frequently with clear messages. ## Store / compliance targets - Google Play: target API 36 (Android 16) by 2026-08-31; closed testing 12 testers / 14 days; Data safety section; prominent disclosure for location; signed AAB. - Consent: Google-certified CMP (UMP), IAB TCF 2.3, non-personalized ads if user declines. - iOS later: keep platform abstractions clean (ATT + privacy nutrition label to add). ## Docs to maintain in /docs architecture.md, data-sources.md, licenses.md, stack-decisions.md, roadmap.md, privacy.md