Drop Xamarin skeleton and add project guidelines
The Nuvolari app is being rebuilt as a Flutter project targeting Android first and iOS later on a single codebase, so the original Xamarin.Android skeleton no longer applies. Its files were already removed from the working tree; this records the removal. Adds CLAUDE.md with the golden rules that constrain the rewrite: English code and commit messages with Italian UI via ARB, no secrets in the repo, AdMob test IDs only, no direct polling of ARPA/DPC from the app, and no server-side precise user locations. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user