个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Eventi Vicini: agenda degli eventi pubblici italiani, gratuita e senza pubblicità. SvelteKit, Firebase, Cloudflare
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Eventi Vicini è un'agenda gratuita degli eventi pubblici italiani: sagre, mostre, concerti, mercati, attività per bambini. Mostra cosa succede oggi, stasera e nel fine settimana nel tuo comune e intorno a te, in lista o su mappa. È pensata per chi cerca qualcosa da fare senza account, senza pubblicità e senza tracciamento. Gli eventi arrivano dai siti istituzionali dei comuni e dagli open data, ogni evento rimanda alla sua fonte, e il progetto non costa nulla da mantenere (Firebase Spark, Cloudflare Pages gratuito).
In English: Eventi Vicini is a free agenda of public events across Italy (festivals, exhibitions, concerts, markets, kids' activities). It collects events daily from municipal websites and open data that allow reuse (CC-BY/CC0), shows them as a list or on a map, has no ads and no tracking, and always links back to the original source. SvelteKit on Cloudflare Pages, Firebase Firestore, a Python importer on GitHub Actions. Code under MIT; event data stays under each source's license.
Indice: Screenshot · Funzioni · Come funziona · Copertura · Privacy · Sviluppo · Struttura · Limiti noti · Sicurezza · Crediti · Licenza
Dati reali dal sito, Brescia, 30 ottobre 2026.
| Tema chiaro | Tema scuro |
|---|---|
Immagine del dettaglio evento: Comune di Brescia, CC-BY 4.0, licenza dichiarata nelle note legali del sito · fonte.
DESIGN.md).flowchart LR
A["Siti dei comuni<br/>e open data<br/>(CC-BY / CC0)"] --> B["Importer Python<br/>GitHub Actions<br/>ogni giorno"]
B --> C[("Firestore<br/>eventi + bundle<br/>per cella e città")]
C --> D["SvelteKit<br/>Cloudflare Pages<br/>(Worker, lettura REST)"]
D --> E(["Utente<br/>web / PWA"])
N["Nominatim (OSM)<br/>geocoding"] --> B
T["Tile OpenStreetMap"] --> E
tools/importer/) legge ogni giorno le fonti attive con un adapter per CMS (Plone, WordPress e HTML Design Comuni Italia, Open Data Hub Alto Adige; con la chiave TICKETMASTER_API_KEY anche Ticketmaster), normalizza, geocodifica, deduplica e scrive su Firestore solo i documenti cambiati (contentHash).web/) fa SSR su un Worker Cloudflare, legge Firestore via REST (niente Admin SDK) e usa cache a due livelli. Il Firebase SDK nel browser si carica solo per login, preferiti e proposte.Dettagli: architettura · importer · quote e letture Firestore.
Dal registro delle fonti, stato al 29 ottobre 2026: 20 regioni, circa 7.900 comuni censiti (ISTAT / IndicePA), 921 con una fonte attiva (802 Design Comuni HTML, 112 WordPress, 6 Plone, 1 Open Data Hub). Il dry-run di fine ottobre contava circa 4.000 eventi su un orizzonte di 45-60 giorni; i numeri variano con la stagione (a ottobre molti comuni del Sud pubblicano pochi eventi).
| Regione | Comuni | Fonti attive | Regione | Comuni | Fonti attive | |
|---|---|---|---|---|---|---|
| Lombardia | 1.502 | 255 | Liguria | 234 | 16 | |
| Veneto | 560 | 157 | Friuli-V. Giulia | 215 | 12 | |
| Piemonte | 1.180 | 111 | Lazio | 378 | 19 | |
| Emilia-Romagna | 330 | 66 | Sardegna | 377 | 27 | |
| Trentino-Alto Adige | 282 | 86 | Sicilia | 391 | 19 | |
| Toscana | 273 | 54 | Campania | 550 | 13 | |
| Marche | 225 | 25 | Calabria | 404 | 10 | |
| Valle d'Aosta | 74 | 13 | Abruzzo | 305 | 10 | |
| Umbria | 92 | 11 | Puglia | 257 | 9 | |
| Basilicata | 131 | 6 | Molise | 136 | 2 |
Fonti: tools/importer/sources/*.csv (conteggio delle righe attivo) e i report in tools/importer/reports/.
Come si scelgono le fonti. Una fonte diventa attiva solo se: esiste un adapter per il suo CMS; la licenza dei contenuti è CC0 o CC-BY (mai NC, ND, SA, «tutti i diritti riservati» sui contenuti); il robots.txt consente i percorsi usati; un dry-run produce almeno un evento futuro valido con coordinate coerenti. Il resto resta da_verificare o escluso, con il motivo in note. L'importer fa una richiesta al secondo per sito, con User-Agent identificativo, e ogni evento mostra e linka la fonte. Procedura completa in docs/importer.md. Per proporre un comune: CONTRIBUTING.md.
Nessun analytics, nessun pixel, nessun cookie di profilazione, nessun banner. Preferiti, posizione e tema stanno nel localStorage del dispositivo; l'account è facoltativo (età minima 14 anni). La posizione, se la concedi, non finisce nell'URL né nel profilo. Dettagli nella pagina /privacy.
Requisiti: Node.js 24 (.nvmrc), JDK 21 per gli emulatori Firebase, Python 3.12 per l'importer.
cd web; npm install
cd ..\firebase; npm install
cd ..\web
npm run emulators # Auth + Firestore (resta aperto, Ctrl+C per chiudere)
npm run seed # dati di prova, in un altro terminale
npm run dev # sviluppo con hot reload
npm run check; npm run lint; npm test; npm run build # da web/
npm run test:e2e # da web/: emulators:exec + Playwright
npm test # da firebase/: test delle regole
python -m pytest -q tests # da tools/importer/
python run.py --dry-run --regione veneto # importer, senza scrivere
Guide complete: sviluppo, test e deploy · importer · architettura e Firebase · design system.
| Cartella | Contenuto |
|---|---|
web/ | Webapp SvelteKit (adapter-cloudflare), test Vitest e Playwright |
firebase/ | Regole e indici Firestore, test delle regole |
tools/importer/ | Importer Python, adapter, registro fonti (sources/*.csv), report |
.github/workflows/ | CI, import giornaliero, ricontrollo settimanale delle fonti |
docs/ | Documentazione tecnica, brand kit, screenshot |
da_verificare.Elenco completo in docs/importer.md e docs/quote-firestore.md.
Le regole Firestore sono testate (firebase/test/): events in lettura pubblica e scrittura solo admin, proposte validate, users solo del proprietario. Le chiavi web di Firebase sono pubbliche per costruzione; il service account dell'importer è un segreto di GitHub Actions. Per segnalare una vulnerabilità leggi SECURITY.md.
Il codice è rilasciato con licenza MIT © 2026 Andrea Azzarello. I dati degli eventi non sono coperti dalla licenza del codice: restano sotto le licenze delle rispettive fonti (CC-BY, CC0) e vanno citati. Nome, logo e immagini in docs/brand appartengono al progetto e non sono coperti dalla MIT.