Il tuo comune in cifre — un ritratto dai dati ufficiali
Un ritratto del tuo comune costruito dai dati ufficiali: popolazione e struttura per età (ISTAT), reddito medio dichiarato (MEF), farmacie (Ministero della Salute) e scuole statali (MIUR). Le fonti si agganciano da sole tramite il codice ISTAT del comune. Più una mappa dell'Italia e le classifiche.
spazio dati «comune-in-cifre» — il collante della suite: sul tuo dispositivo, multi-utente con un invito (link o QR), cifrato end-to-end.
oppure aprila come app unica
Cosa registra
- Codice ISTAT del comune
Composta da 4 micro app
Un compito ciascuna, sugli stessi dati: ogni micro app legge e scrive lo spazio dati condiviso «comune-in-cifre» (col tuo consenso, chiesto alla prima apertura). Tutto resta sul tuo dispositivo — e con un solo invito l'intera suite diventa multi-utente, cifrata end-to-end.
Come funziona
Questa è un'app Reactive: un semplice documento di testo che il browser trasforma in un'app funzionante — moduli, dati dal vivo, tabelle, statistiche e persino grafici, senza installare né configurare nulla.
- Usala subito. Premi «Usa questa app»: si apre subito nel tuo browser, già pronta, con i dati salvati solo sul tuo dispositivo.
- I tuoi dati restano tuoi. Tutto è memorizzato in locale sul dispositivo, separato per ogni app: niente account, niente server, niente da configurare.
- Rendila tua. Il testo qui sotto è l'app per intero: copialo, cambia campi, viste e parole, e le modifiche diventano subito interattive.
- Condividila come file. Un'app è un semplice file: salvalo, esportalo o condividilo con un link; e con la collaborazione cifrata più persone modificano gli stessi dati in tempo reale.
Il testo dell'app
# 🏘️ Il tuo comune in cifre
Un ritratto del tuo comune costruito dai dati ufficiali: popolazione e struttura
per età (ISTAT), reddito medio dichiarato (MEF), farmacie (Ministero della
Salute) e scuole statali (MIUR). Le fonti si agganciano da sole tramite il
codice ISTAT del comune. Più una mappa dell'Italia e le classifiche.
:::::page{title="Il tuo comune" icon="🔎"}
## Cerca il tuo comune
Inserisci il **codice ISTAT** (sei cifre): es. `058091` Roma, `015146` Milano,
`037006` Bologna, `063049` Napoli.
::input[comune]{value="037006" placeholder="Codice ISTAT del comune"}
::od-query{into="profilo" sql="SELECT p.comune AS comune, p.popolazione AS popolazione, r.reddito_medio AS reddito_medio, i.eta_media AS eta_media, i.perc_stranieri AS perc_stranieri, i.indice_vecchiaia AS indice_vecchiaia FROM istat_popolazione p LEFT JOIN mef_redditi r ON r.codice_istat = p.codice_istat LEFT JOIN istat_indicatori i ON i.codice_istat = p.codice_istat WHERE p.codice_istat = '{#comune}'"}
:::cards{path="profilo" search="false"}
### {comune}
**{popolazione}** abitanti — reddito medio **{reddito_medio} €**, età media **{eta_media}** anni, residenti stranieri **{perc_stranieri}%**, indice di vecchiaia **{indice_vecchiaia}** (over 65 ogni 100 under 15).
:::
::od-query{into="servizi" sql="SELECT (SELECT count(*) FROM farmacie WHERE codice_istat = '{#comune}') AS farmacie, (SELECT count(*) FROM scuole WHERE codice_istat = '{#comune}') AS scuole"}
:::cards{path="servizi" search="false"}
🏥 **{farmacie}** farmacie · 🏫 **{scuole}** scuole statali
:::
::od-query{into="ambiente" sql="SELECT percentuale_rd AS percentuale_rd, anno AS anno FROM rifiuti WHERE codice_istat = '{#comune}' ORDER BY anno DESC LIMIT 1"}
:::cards{path="ambiente" search="false"}
♻️ Raccolta differenziata **{percentuale_rd}%** (anno {anno})
:::
::od-query{into="economia" sql="SELECT unita_locali AS unita_locali, addetti AS addetti, anno AS anno FROM imprese WHERE codice_istat = '{#comune}' ORDER BY anno DESC LIMIT 1"}
:::cards{path="economia" search="false"}
🏢 **{unita_locali}** unità locali attive, **{addetti}** addetti (anno {anno})
:::
::od-query{into="voto" sql="SELECT affluenza AS affluenza, lista_vincente AS lista_vincente, percentuale_vincente AS percentuale_vincente FROM elezioni WHERE codice_istat = '{#comune}'"}
:::cards{path="voto" search="false"}
🗳️ Affluenza **{affluenza}%** — lista più votata **{lista_vincente}** ({percentuale_vincente}%) — Camera 2022
:::
::od-query{into="invalsiComune" sql="SELECT round(avg(punteggio_medio), 1) AS punteggio_medio, anno AS anno FROM invalsi WHERE codice_istat = '{#comune}' GROUP BY anno"}
:::cards{path="invalsiComune" search="false"}
📊 Punteggio medio prove INVALSI **{punteggio_medio}** (anno {anno}, comuni sopra soglia studenti)
:::
::od-query{into="veicoliComune" sql="SELECT autovetture AS autovetture, totale AS totale FROM aci_veicoli WHERE codice_istat = '{#comune}'"}
:::cards{path="veicoliComune" search="false"}
🚗 **{autovetture}** autovetture, **{totale}** veicoli circolanti in totale (ACI)
:::
Il reddito è la media per dichiarante (MEF, ultima annualità disponibile); età,
stranieri e indice di vecchiaia sono ISTAT al 1° gennaio. Le carte su
ambiente, economia, voto, INVALSI e veicoli compaiono solo se il comune ha il
dato disponibile (INVALSI ed elezioni non coprono tutti i comuni; i veicoli
sono dove sono REGISTRATI, non dove risiedono i proprietari — grandi
noleggiatori/leasing concentrano flotte in poche città).
:::::
:::::page{title="Le scuole" icon="🏫"}
## Le scuole statali del comune
L'elenco delle scuole statali per grado, dal codice ISTAT inserito nella prima
pagina.
::od-query{into="scuoleComune" sql="SELECT nome AS nome, grado AS grado, indirizzo AS indirizzo FROM scuole WHERE codice_istat = '{#comune}' ORDER BY grado, nome" limit="200"}
:::table{path="scuoleComune" headers="Scuola,Grado,Indirizzo" pagesize="15"}
{nome} | {grado} | {indirizzo}
:::
:::::
:::::page{title="La mappa" icon="🗺️"}
## Il reddito medio per regione
La stessa Italia vista dall'alto: ogni regione colorata per reddito medio
dichiarato. Passa il mouse per il valore.
::od-query{into="mappa" sql="SELECT r.regione AS regione, r.geojson AS geojson, m.reddito AS reddito FROM istat_confini_regioni r JOIN (SELECT c.cod_reg, round(sum(x.reddito_complessivo) / sum(x.dichiaranti)) AS reddito FROM istat_confini_comuni c JOIN mef_redditi x ON x.codice_istat = c.codice_istat GROUP BY c.cod_reg) m ON m.cod_reg = r.cod_reg" limit="30"}
:::map{path="mappa" geojson="geojson" fill="reddito" height="30rem"}
**{regione}** — reddito medio {reddito} €
:::
Il colore va dal chiaro (redditi più bassi) allo scuro (più alti): il classico
divario Nord-Sud, in una mappa che si disegna da sola dai dati.
:::::
:::::page{title="Classifiche" icon="🏆"}
## I comuni con il reddito più alto
Solo comuni sopra i 10.000 abitanti, per non far dominare i piccoli centri.
::od-query{into="ricchi" sql="SELECT r.comune AS comune, r.sigla AS sigla, r.reddito_medio AS reddito_medio FROM mef_redditi r JOIN istat_popolazione p ON p.codice_istat = r.codice_istat WHERE p.popolazione >= 10000 ORDER BY r.reddito_medio DESC LIMIT 20" limit="20"}
::chart-bar{data="ricchi" x="comune" y="reddito_medio" height="20rem"}
:::table{path="ricchi" headers="Comune,Prov,Reddito medio €" pagesize="10"}
{comune} | {sigla} | {reddito_medio}
:::
:::::
---
I dati sono ufficiali e aperti: **popolazione e indicatori** ISTAT
(demo.istat.it, CC BY 4.0), **reddito IRPEF** del MEF — Dipartimento delle
Finanze (CC BY 3.0), **farmacie** del Ministero della Salute e **scuole** del
MIUR (IODL 2.0), **raccolta differenziata** ISPRA, **imprese e addetti**
ISTAT ASIA, **elezioni Camera 2022** del Ministero dell'Interno, **risultati
INVALSI** (INVALSI, CC BY 4.0 IT), **parco veicolare** ACI — Autoritratto (CC
BY 4.0), **confini** ISTAT. Si agganciano da soli tramite il codice ISTAT del
comune. Nessun dato tuo lascia il dispositivo.