Mappa interattiva dei sentieri e rifugi del Club Alpino Italiano — Sezione di Bergamo.
Progressive Web App installabile, accessibile da desktop e dispositivi mobili.
| Tecnologia | Versione | Utilizzo |
|---|---|---|
| Svelte | 5 | Framework UI (runes mode) |
| Vite | 6 | Build tool e dev server |
| ArcGIS Maps SDK for JS | 5 | Mappa, layer, geocoding |
| Lucide Svelte | 1.x | Icone SVG |
src/
├── App.svelte # Layout principale (panel, loading, settings)
├── App.css # Stili panel, footer, impostazioni
├── global.css # CSS custom properties (tema chiaro/scuro), reset
├── main.js # Entry point
│
├── assets/
│ └── i18n/ # Localizzazione
│ ├── i18n.svelte.js # Store i18n ($state)
│ ├── it.json # Stringhe italiano
│ └── en.json # Stringhe inglese
│
├── components/
│ ├── map/
│ │ ├── MapContainer.svelte # Mappa Esri, GeoJSONLayer da Supabase, click handler
│ │ └── MapContainer.css
│ │
│ ├── panel/
│ │ ├── search/
│ │ │ ├── SearchBar.svelte # Ricerca sentieri, rifugi, indirizzi
│ │ │ └── SearchBar.css
│ │ ├── locate/
│ │ │ ├── LocateButton.svelte # Pulsante geolocalizzazione
│ │ │ └── LocateButton.css
│ │ ├── basemap/
│ │ │ ├── BasemapSwitcher.svelte # Selezione mappa base
│ │ │ └── BasemapSwitcher.css
│ │ └── legend/
│ │ ├── Legend.svelte # Legenda sentieri e rifugi
│ │ └── Legend.css
│ │
│ └── popup/
│ ├── CustomPopup.svelte # Card popup glassmorphism
│ └── CustomPopup.css
│
└── stores/
├── mapStore.svelte.js # Stato mappa, popup, highlight
└── themeStore.svelte.js # Stato tema (light/dark/system)
public/
├── manifest.json # PWA manifest
├── service-worker.js # Service worker per caching
├── offline.html # Pagina offline
├── favicon.png
└── images/icons/ # Icone PWA (32–512px + maskable)
git clone <repo-url>
cd Cai-pwa
npm install
npm run dev
L'app sarà disponibile su http://localhost:5173.
npm run build
npm run preview # anteprima locale del build
I file di output vengono generati nella cartella dist/.
I dati geografici provengono dal servizio cartografico Maggioli S.p.A. per conto di CAI Bergamo e sono serviti tramite Supabase (PostGIS) in formato GeoJSON.
Il geocoding degli indirizzi utilizza il World Geocoding Service di Esri.
Il progetto include la configurazione per Netlify (netlify.toml).
Basta collegare il repository a Netlify e il deploy avverrà automaticamente.
[build]
command = "npm run build"
publish = "dist"
Questo progetto è a uso privato. I dati cartografici sono di proprietà di CAI Bergamo / Maggioli S.p.A.