Townhall — gestionale per il comune
Il gestionale del comune che sta in un file: protocollo, segnalazioni, atti e sportello. Tutto resta sul tuo dispositivo.
spazio dati «townhall» — 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
- Oggetto della pratica
- Cittadino / richiedente
- Ufficio...
- Stato...
- Note (documenti mancanti, referente...)
- Cosa succede (buca, lampione, rifiuti...)
- Dove (via, piazza, frazione)
- Tipo...
- Stato...
- Numero (es. 42/2026)
- Tipo di atto...
- Oggetto dell'atto
- Ufficio / responsabile
- Ora (es. 10:30)
- Cittadino
- Ufficio...
- Motivo dell'appuntamento
- Comune (es. Roma)
Composta da 6 micro app
Un compito ciascuna, sugli stessi dati: ogni micro app legge e scrive lo spazio dati condiviso «townhall» (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
# 🏛️ Townhall
Il gestionale del comune che sta in un file: protocollo, segnalazioni, atti e sportello. Tutto resta sul tuo dispositivo.
:::::page{title="Cruscotto" icon="📊"}
## Il comune in un colpo d'occhio
:::grid{cols="3"}
**Pratiche protocollate**
:count[npra]{path="pratiche"}
---
**Segnalazioni**
:count[nseg]{path="segnalazioni"}
---
**Atti pubblicati**
:count[natt]{path="atti"}
:::
## Pratiche per stato
::::if-empty{path="pratiche"}
*Nessuna pratica ancora: protocolla la prima dalla pagina Protocollo.*
::::
:::group-by{path="pratiche" field="stato" as="list"}
**{oggetto}** — {richiedente} · {ufficio}
:::
:::::
:::::page{title="Protocollo" icon="🗂️"}
## Registro delle pratiche
::::form{path="pratiche" id="fpra"}
::input{form="fpra" field="data" type="date" required="true" legend="Ricevuta il"}
::input{form="fpra" field="oggetto" placeholder="Oggetto della pratica" required="true"}
::input{form="fpra" field="richiedente" placeholder="Cittadino / richiedente" required="true"}
:::select{form="fpra" field="ufficio" placeholder="Ufficio..."}
- Anagrafe
- Tributi
- Tecnico
- Servizi sociali
- Polizia locale
- Altro
:::
:::select{form="fpra" field="stato" placeholder="Stato..."}
- Ricevuta
- In lavorazione
- Sospesa
- Chiusa
:::
::input{form="fpra" field="note" placeholder="Note (documenti mancanti, referente...)"}
::add-form{form="fpra" path="pratiche" label="Protocolla"}
::::
:::table{path="pratiche" headers="Ricevuta,Oggetto,Richiedente,Ufficio,Stato" deletable="true" editform="fpra"}
{data} | **{oggetto}** | {richiedente} | {ufficio} | {stato}
:::
## Per ufficio
:::group-by{path="pratiche" field="ufficio" as="list"}
{data} — **{oggetto}** ({richiedente}) · {stato}
:::
:::::
:::::page{title="Segnalazioni" icon="🚧"}
## Dai cittadini al cantiere
::::form{path="segnalazioni" id="fseg"}
::input{form="fseg" field="data" type="date" required="true" legend="Segnalata il"}
::input{form="fseg" field="oggetto" placeholder="Cosa succede (buca, lampione, rifiuti...)" required="true"}
::input{form="fseg" field="luogo" placeholder="Dove (via, piazza, frazione)" required="true"}
:::select{form="fseg" field="tipo" placeholder="Tipo..."}
- Strade
- Illuminazione
- Verde pubblico
- Rifiuti
- Altro
:::
:::select{form="fseg" field="stato" placeholder="Stato..."}
- Aperta
- In corso
- Risolta
:::
::add-form{form="fseg" path="segnalazioni" label="Registra segnalazione"}
::::
:::table{path="segnalazioni" headers="Segnalata,Oggetto,Luogo,Tipo,Stato" deletable="true" editform="fseg"}
{data} | **{oggetto}** | {luogo} | {tipo} | {stato}
:::
## Per stato
:::group-by{path="segnalazioni" field="stato" as="list"}
{data} — **{oggetto}** ({luogo}) · {tipo}
:::
:::::
:::::page{title="Atti" icon="📜"}
## Delibere, determine e ordinanze
::::form{path="atti" id="fatt"}
::input{form="fatt" field="numero" placeholder="Numero (es. 42/2026)" required="true"}
::input{form="fatt" field="data" type="date" required="true" legend="Data"}
:::select{form="fatt" field="tipo" placeholder="Tipo di atto..."}
- Delibera di Giunta
- Delibera di Consiglio
- Determina
- Ordinanza
:::
::input{form="fatt" field="oggetto" placeholder="Oggetto dell'atto" required="true"}
::input{form="fatt" field="ufficio" placeholder="Ufficio / responsabile"}
::add-form{form="fatt" path="atti" label="Registra atto"}
::::
::::card{id="albo" title="Albo pretorio"}
:::sort{path="atti" field="data" order="desc" as="list" deletable="true"}
**{tipo} n. {numero}** del {data} — {oggetto} ({ufficio})
:::
::::
::print{target="albo" label="Stampa / PDF per l'albo"}
:::::
:::::page{title="Sportello" icon="📅"}
## Appuntamenti con i cittadini
::::form{path="appuntamenti" id="fapp"}
::input{form="fapp" field="data" type="date" required="true" legend="Giorno"}
::input{form="fapp" field="ora" placeholder="Ora (es. 10:30)" required="true"}
::input{form="fapp" field="cittadino" placeholder="Cittadino" required="true"}
:::select{form="fapp" field="ufficio" placeholder="Ufficio..."}
- Anagrafe
- Tributi
- Tecnico
- Servizi sociali
- Polizia locale
- Altro
:::
::input{form="fapp" field="motivo" placeholder="Motivo dell'appuntamento"}
::add-form{form="fapp" path="appuntamenti" label="Fissa appuntamento"}
::::
:::calendar{path="appuntamenti" field="data"}
{ora} {cittadino} · {ufficio}
:::
:::::
:::::page{title="Territorio" icon="🗺️"}
## Riferimenti territoriali ufficiali (dati open)
I codici che servono ogni giorno in ufficio, dai dati aperti ufficiali:
comuni con codice ISTAT e targa, sempre a portata di mano.
::input[od_comune]{placeholder="Comune (es. Roma)"}
::od-query{into="od_territorio" sql="SELECT LABEL_COMUNE_IT AS comune, SIGLA_AUTOMOBILISTICA AS targa, CODICE_COMUNE AS codice, CODICE_PROVINCIA AS provincia FROM voc_istat_cities WHERE DATA_FINE_VALIDITA = '31-12-9999' AND LABEL_COMUNE_IT LIKE '%' || UPPER('{#od_comune}') || '%' ORDER BY comune" limit="20"}
:::table{path="od_territorio" headers="Comune,Targa,Codice ISTAT,Cod. provincia" search="false" pagesize="5"}
{comune} | {targa} | {codice} | {provincia}
:::
## Trova altri dataset pubblici
Descrivi a parole il dato che cerchi (es. "classificazione delle professioni")
e scopri i dataset ufficiali disponibili, con una query pronta da copiare.
::od-search{}
:::::