Riusa il Cruscotto San Vincenzo
Guida al riuso del template per un altro comune: fork GitHub, identità ISTAT e deploy.
Riusa questo cruscotto
Guida per adattare questo stack a qualsiasi comune italiano: GitHub → config/comune.json → Vercel. I link di fork e la documentazione puntano sempre al progetto originale di Alessandro Cipriani (Cruscotto San Vincenzo).
In sintesi
Questo sito è un cruscotto monocomune open data (un deploy = un comune), alimentato in larga parte da Cruscotto Italia (AgID) via codice ISTAT. Flusso consigliato: account GitHub → fork → identità comunale → deploy Vercel → (opzionale) moduli locali. Non serve un MCP proprio: i KPI usano già il MCP pubblico AgID.
Due percorsi
Principiante / MVP (~mezz’ora): GitHub + Vercel + cambio ISTAT_CODE / nome / coordinate / stemma. Nessuna API key. Online su *.vercel.app con i KPI del tuo comune.
Completo / produzione: dominio custom, OpenWeather, bot Telegram DAE, assistente RAG (Modal + Hugging Face), token GitHub per feedback/segnalazioni, adattamento moduli regionali.
Architettura dello stack: Come funziona.
Account e tool esterni
Solo GitHub e Vercel sono necessari per pubblicare. Il resto abilita moduli opzionali.
| Servizio | A cosa serve | Obbligatorio? |
|---|---|---|
| GitHub github.com/signup | Codice, fork, Issues, commit GeoJSON DAE | Sì (fork/deploy) |
| Vercel vercel.com — login con GitHub | Hosting Next.js (regione fra1) | Sì (online) |
| AgID Cruscotto Italia MCP cruscotto-italia-mcp.agid.workers.dev/mcp | KPI comunali | No account (pubblico) |
| OpenWeather home.openweathermap.org/api_keys | Meteo current / forecast / AQI | Opzionale |
| Telegram + BotFather t.me/BotFather | Bot segnalazione DAE | Opzionale |
| Modal modal.com → modal setup | Hosting RAG (modelli Hugging Face) | Opzionale (assistente) |
| Hugging Face huggingface.co | Download pesi modelli pubblici | Di solito no token |
| Wheelmap / Sozialhelden info@sozialhelden.de | Embed iframe accessibilità | Opzionale |
| Cursor / Claude cursor.com · claude.ai | IDE o chat AI per adattare il fork (opzionale) | No |
Da GitHub alla messa online
- Account GitHub — registrati, attiva 2FA. Più avanti potrai creare un Personal Access Token (scopes
contents/issues) solo se usi bot DAE o Partecipa. - Fork — Fork su GitHub (consigliato) oppure mirror in un repo nuovo:
git clone --depth 1 https://github.com/magiaslab/san-vincenzo-cruscotto.git mio-cruscotto cd mio-cruscotto rm -rf .git && git init git remote add origin git@github.com:TUO_USER/mio-cruscotto.git git add -A && git commit -m "Fork iniziale cruscotto comunale" git branch -M main && git push -u origin main
- Locale — Node 20+:
npm install && npm run dev. Smoke:curl -s localhost:3000/api/kpi - Identità comune — aggiorna
config/comune.json(tabella sotto). Checklist: comune.example.json (non è caricata a runtime: copia a mano). - Vercel — account (login GitHub) → Add Project → importa il fork → preset Next.js → Deploy senza env per l’MVP. Verifica
/api/kpisull’URL*.vercel.app. - Dominio (opzionale) — Settings → Domains, DNS come da Vercel, poi
NEXT_PUBLIC_SITE_URL=https://www.tuodominio.ite redeploy. Imposta anchebrand.site_urlnel JSON.
Identità del comune (minimo)
Con questi cambi il nucleo KPI (MCP AgID) e la shell del dashboard puntano al nuovo comune. Non serve riscrivere React.
| Campo | Esempio (San Vincenzo) | Dove |
|---|---|---|
istat_code | 049018 | config/comune.json → MCP Cruscotto Italia (qualsiasi comune IT) |
nome / provincia / regione | San Vincenzo / LI / Toscana | config/comune.json → header, SEO, footer |
geo.map_center · geo.meteo | 43.085, 10.54 | mappe Leaflet, meteo, radar, Wheelmap, OpenAEDMap |
geo.bbox / bbox_radius_km | 10.48, 43.02, 10.58, 43.12 | filtro DAE, TPL Overpass, bot Telegram |
geo.terrain_sea_side | west | rilievo 3D (west/east/south/north/none) |
miur_codice_catastale | I390 | scuole MIUR |
farmacie_di_turno_cod | 49018 | farmacie di turno |
features.* | porto, balneazione, erosione_costiera, treni, … = false | spegne tab/API non pertinenti al tuo comune |
gestori.acqua / gestori.rifiuti | ASA WFS · SEI pagina comunale | Ambiente: etichette idriche e RD% del gestore (oltre a ISPRA) |
fork.maintainer_* | nome/email di chi cura il fork | Attribuzioni e footer; i crediti originali restano fissi |
sostieni.buymeacoffee_slug | acipriani | pagina /sostieni + tab; ringraziamenti in config/sostegni.json |
Aggiorna anche geo.terrain_sea_side, features.erosione_costiera, bbox DAE, stemma/OG in public/. Poi: npm run dae:sync, npm run omi:update, npm run trasporti:gtfs.
Variabili d’ambiente
Elenco completo in .env.example e nella guida su GitHub. Su Vercel: Project → Settings → Environment Variables (le NEXT_PUBLIC_* richiedono redeploy).
(nessuna obbligatoria)
KPI AgID funzionano senza secret
NEXT_PUBLIC_SITE_URL
Dominio custom, SEO, PWA, link bot
OPENWEATHER_API_KEY
Pannello OpenWeather
ASSISTENTE_MODAL_URL
Tuo deploy Modal (non usare il default SV)
TELEGRAM_BOT_TOKEN / WEBHOOK_SECRET / ADMIN_CHAT_IDS
Bot DAE + moderazione
NEXT_PUBLIC_TELEGRAM_BOT_URL
CTA «Segnala su Telegram»
GITHUB_TOKEN + GITHUB_REPO
Persistenza DAE su Vercel e/o Partecipa (Issues)
NEXT_PUBLIC_WHEELMAP_EMBED_TOKEN
Iframe Wheelmap ufficiale
Non committare token. Imposta GITHUB_REPO sul tuo fork se usi Partecipa o il bot DAE.
Moduli opzionali
Porto, balneazione, GTFS regionale, bot DAE, RAG, eventi comunali sono extra: nel fork puoi lasciarli, spegnerli o sostituirli.
OpenWeather
API key free → OPENWEATHER_API_KEY su Vercel → redeploy
Bot Telegram DAE
BotFather → env TELEGRAM_* + GITHUB_TOKEN (contents:write) → setWebhook su /api/telegram/webhook — vedi docs/dae-telegram-bot.md
Assistente RAG (Modal + HF)
modal setup → aggiorna corpus → modal deploy → ASSISTENTE_MODAL_URL — vedi modal_rag/README.md
Partecipa / Issues
GITHUB_FEEDBACK_TOKEN o GITHUB_TOKEN con issues:write sul tuo repo
Percorsi ciclo / pedonali
OSM automatico sul bbox (features.ciclabili_pedonali). URL GeoJSON comunale opzionali. GPX dalla lista in Mobilità
OMI / DAE
npm run omi:update e npm run dae:sync dopo aver impostato ISTAT e geo.bbox
Allerte / ARPAT / turismo / eventi
URL regionali in constants — spesso da sostituire fuori Toscana
Rifiuti ISPRA / gestore
features.rifiuti_ispra (default true, CSV nazionale). gestori.rifiuti.url = pagina comunale SEI o analogo per RD% HTML
Acqua / SII
features.acqua_sii + gestori.acqua.geoserver_wfs (ASA WFS). Fuori ATO 5: spegni il flag e lascia i link al tuo gestore
Finanza DVNS
features.finanza_dvns (default true). MCP DoveVannoINostriSoldi: IRPEF MEF + OpenCivitas per ISTAT. Non è il SIOPE comunale
Sostieni / Buy Me a Coffee
sostieni.buymeacoffee_slug in comune.json (vuoto = pagina nascosta). Ringraziamenti in config/sostegni.json
Testi i18n e FAQ
Nome comune in pannelli, i18n/en.ts, assistente-faq.ts
docs/dae-telegram-bot.mdmodal_rag/README.md
Un MVP utile è spesso «KPI nazionali + mappa + 1–2 fonti locali», non la parità totale con San Vincenzo.
Usare Cursor o Claude
Cursor e Claude aiutano a personalizzare il fork (constants, stemma, moduli locali). Non serve costruire un MCP proprio: i KPI usano già il MCP pubblico AgID.
- Cursor: apri la cartella del fork →
npm install && npm run dev→ in Agent chiedi ad es. «Aggiornaconfig/comune.jsonper il comune X, ISTAT Y, coordinate Z» o «adatta/rimuovi porto e ARPAT». VediAGENTS.md. - Claude: Claude Code sul repo, oppure Project con brief fisso: ISTAT, nome comune, «nessun DB, disclaimer da mantenere, checklist in
docs/riuso-fork.md». - Opzionale: in Cursor/Claude puoi anche collegare l’MCP AgID (
https://cruscotto-italia-mcp.agid.workers.dev/mcp) per interrogare i KPI dall’IDE — non è necessario per il sito online.
Dettaglio e prompt di esempio: sezione 12 di docs/riuso-fork.md.
Checklist e cosa non fare
- Smoke
/api/kpicon demografia del tuo ISTAT prima di annunciare il sito. - Un deploy resta dedicato a un ISTAT: niente selettore multi-comune out-of-the-box.
- Non rimuovere disclaimer e attribuzioni. Nei fork lascia intatto
src/lib/project-origin.tse indica te stesso inconfig/comune.json → fork. - Non lasciare
ASSISTENTE_MODAL_URL/GITHUB_REPOpuntati al comune originale se non è intenzionale. - Non committare
TELEGRAM_*,GITHUB_TOKEN, chiavi meteo.
Domande sul riuso: cipriani.alessandro@gmail.com oppure Partecipa.