Riusa / fork

Aggiornato 12/09/26, 14:04 · Contatti

Progetto non ufficiale: non affiliato ad AgID, al Governo italiano o al Comune di San Vincenzo.

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.

Servizi esterni per fork e moduli opzionali
ServizioA cosa serveObbligatorio?
GitHub

github.com/signup

Codice, fork, Issues, commit GeoJSON DAESì (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 comunaliNo account (pubblico)
OpenWeather

home.openweathermap.org/api_keys

Meteo current / forecast / AQIOpzionale
Telegram + BotFather

t.me/BotFather

Bot segnalazione DAEOpzionale
Modal

modal.com → modal setup

Hosting RAG (modelli Hugging Face)Opzionale (assistente)
Hugging Face

huggingface.co

Download pesi modelli pubbliciDi 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

  1. Account GitHub registrati, attiva 2FA. Più avanti potrai creare un Personal Access Token (scopes contents / issues) solo se usi bot DAE o Partecipa.
  2. 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
  3. Locale — Node 20+: npm install && npm run dev. Smoke: curl -s localhost:3000/api/kpi
  4. Identità comune — aggiorna config/comune.json (tabella sotto). Checklist: comune.example.json (non è caricata a runtime: copia a mano).
  5. Vercel account (login GitHub) → Add Project → importa il fork → preset Next.js → Deploy senza env per l’MVP. Verifica /api/kpi sull’URL *.vercel.app.
  6. Dominio (opzionale) — Settings → Domains, DNS come da Vercel, poi NEXT_PUBLIC_SITE_URL=https://www.tuodominio.it e redeploy. Imposta anche brand.site_url nel 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.

Campi minimi da aggiornare per un nuovo comune
CampoEsempio (San Vincenzo)Dove
istat_code049018config/comune.json → MCP Cruscotto Italia (qualsiasi comune IT)
nome / provincia / regioneSan Vincenzo / LI / Toscanaconfig/comune.json → header, SEO, footer
geo.map_center · geo.meteo43.085, 10.54mappe Leaflet, meteo, radar, Wheelmap, OpenAEDMap
geo.bbox / bbox_radius_km10.48, 43.02, 10.58, 43.12filtro DAE, TPL Overpass, bot Telegram
geo.terrain_sea_sidewestrilievo 3D (west/east/south/north/none)
miur_codice_catastaleI390scuole MIUR
farmacie_di_turno_cod49018farmacie di turno
features.*porto, balneazione, erosione_costiera, treni, … = falsespegne tab/API non pertinenti al tuo comune
gestori.acqua / gestori.rifiutiASA WFS · SEI pagina comunaleAmbiente: etichette idriche e RD% del gestore (oltre a ISPRA)
fork.maintainer_*nome/email di chi cura il forkAttribuzioni e footer; i crediti originali restano fissi
sostieni.buymeacoffee_slugaciprianipagina /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. «Aggiorna config/comune.json per il comune X, ISTAT Y, coordinate Z» o «adatta/rimuovi porto e ARPAT». Vedi AGENTS.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/kpi con 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.ts e indica te stesso in config/comune.json → fork.
  • Non lasciare ASSISTENTE_MODAL_URL / GITHUB_REPO puntati al comune originale se non è intenzionale.
  • Non committare TELEGRAM_*, GITHUB_TOKEN, chiavi meteo.

Domande sul riuso: cipriani.alessandro@gmail.com oppure Partecipa.