Arenile
Il gestionale balneare gratuito per stabilimenti balneari e lidi, con codice sorgente disponibile. Mappa ombrelloni interattiva, prenotazione ombrelloni online e prenotazioni senza commissioni, listini prezzi, cassa e abbonamenti stagionali: tutto in un unico binario self-hosted.
Perché Arenile · Funzionalità · Accessibilità · Installazione · Widget · Architettura · Sviluppo · Roadmap · FAQ
Important
Stato del progetto: tutte le milestone della specifica, da M0 (fondamenta) a M6 (edizione desktop) e M8 (cassa avanzata e convenzioni), sono completate e verificate da test automatici (unitari, di integrazione su SQLite e PostgreSQL, di concorrenza, di accessibilità e nel browser). La versione 1.1.0 è disponibile (note di rilascio). La tabella di stato indica cosa è disponibile, con i limiti noti, e cosa è pianificato. Arenile è fornito così com'è, senza garanzie (vedi LICENSE): per un'installazione verificata e con assistenza scrivi a Coste360. Segui il repository (Watch → Releases) per essere avvisato dei nuovi rilasci.
Arenile è un software gratuito per la gestione di stabilimenti balneari, con codice sorgente disponibile, lidi, spiagge attrezzate e piscine all'aperto. Nasce per sostituire quaderno, fogli Excel e gestionali chiusi con uno strumento moderno che il gestore installa sul proprio server in pochi minuti, con i propri dati e senza pagare commissioni a nessuno su ogni prenotazione.
A regime un solo programma comprenderà il pannello del gestore (mappa operativa della spiaggia, prenotazioni, cassa, clienti, abbonamenti, report) e la pagina di prenotazione online di ombrelloni e lettini, incorporabile in qualsiasi sito web con un iframe o con uno script di una riga. Cosa è già disponibile oggi è indicato nella tabella di stato.
È sviluppato da Coste360 SRL, la piattaforma italiana per il monitoraggio delle coste e delle concessioni demaniali marittime.
Gestionale per stabilimenti balneari gratuito e a codice sorgente disponibile
Perché scegliere Arenile come software di gestione dello stabilimento balneare, al posto di un gestionale lido a canone o di un portale che trattiene una percentuale su ogni prenotazione:
| Perché | In pratica |
|---|---|
| Gratuito, davvero | Gratuito per gli stabilimenti che lo usano per sé: nessun canone, nessuna versione "Pro" a pagamento, nessun limite di postazioni, prenotazioni o utenti. Codice sorgente disponibile con licenza BSL 1.1, che diventa AGPL-3.0 dopo 3 anni. |
| Zero commissioni sulle prenotazioni | A differenza dei portali di prenotazione a commissione, Arenile non trattiene nulla. I pagamenti online passano dal tuo account Stripe: paghi solo le commissioni del circuito di pagamento, nessuna percentuale alla piattaforma. |
| I dati sono del gestore | Clienti, prenotazioni e incassi stanno nel tuo database. Esportazione completa sempre disponibile, backup con un comando. |
| Installabile in 5 minuti | Un binario, un'immagine Docker, un volume. Gira su un VPS da pochi euro al mese, su un mini PC o su un Raspberry Pi. |
| Nessun servizio esterno obbligatorio | Niente Redis, code esterne o object storage. SQLite incluso; PostgreSQL facoltativo. Anche email e pagamenti online sono opzionali. |
| Configurabile senza codice | File, zone, pack, listini, periodi tariffari e policy di cancellazione si esprimono come dati, non come condizioni nel codice. Ogni lido è diverso, il software si adatta. |
| Il tuo sito, il tuo marchio | Il widget di prenotazione si integra nel sito del lido (WordPress, Wix, sito statico) con i tuoi colori e il tuo logo. Il cliente prenota da te, non su un portale di terzi. |
| Prenotazione online accessibile | La pagina di prenotazione punta al livello AA delle WCAG 2.1, come chiede l'European Accessibility Act per le prenotazioni online: si completa con la sola tastiera, funziona con i lettori di schermo (con un elenco delle postazioni in alternativa alla mappa), resta leggibile con i colori del lido, con lo zoom e in quattro lingue. Dettagli. |
| Aperto ed estendibile | API REST documentate in OpenAPI, webhook firmati e punti di estensione Go per nuovi driver di pagamento, fiscali e di notifica. |
Funzionalità
Panoramica delle aree funzionali previste dalla specifica. Lo stato di ciascuna è nella tabella di stato.
|
|
|
| Editor della mappa | Oggi, la giornata in un colpo d'occhio | Prenotazione online da smartphone |
Mappa ombrelloni interattiva
- Editor della mappa della spiaggia con griglia e snapping, generatore di file ("8 file da 15 ombrelloni, numerazione A–Z"), rotazione, allineamento, annulla/ripeti.
- Postazioni di ogni tipo: ombrelloni, gazebo, tende, palme; elementi decorativi (passerelle, docce, bar, torretta).
- Tre modalità di assegnazione per zona: posto esatto scelto sulla mappa, zona con assegnazione automatica o manuale, quantità per inventari senza posizione (es. lettini sfusi).
- Vista operativa del giorno con colori per stato (libero, prenotato online, prenotato in cassa, abbonato, abbonato assente, da incassare, presente, bloccato), ricerca per cliente o codice, trascinamento delle prenotazioni da un posto all'altro.
- Aggiornamento in tempo reale tra cassa, spiaggia e prenotazioni online (Server-Sent Events).
- Sfondo opzionale: planimetria caricata dal gestore o perimetro della concessione demaniale marittima importato da un
ConcessionDataProvider.
Prenotazioni online di ombrelloni e lettini
- Pagina pubblica di booking ombrelloni e lettini a
https://tuo-dominio/b/{slug}, ottimizzata per smartphone (budget < 150 KB di JavaScript, funzionante da 320 px). - Flusso in quattro passi: quando, dove (mappa o zone), cosa (pack ed extra), chi e pagamento. Nessun account richiesto al cliente.
- Mezza giornata (mattina/pomeriggio), giornaliero, multi-giorno, settimana, quindicina, mese, stagione.
- Blocco temporaneo del posto durante il checkout: nessuna doppia prenotazione tra cassa e online, garantita da vincoli del database.
- Link magico per il cliente: visualizza la prenotazione, paga il saldo, modifica o cancella secondo la policy, file
.icsper il calendario, QR code. - Lista d'attesa con notifica quando un posto si libera.
Prezzi e listini
- Motore dei prezzi come funzione pura: periodi tariffari (bassa, media, alta, Ferragosto), giorni della settimana, festività italiane incluse più patrono locale, fila e categoria di prezzo, canale, durata, anticipo.
- Listino prezzi ombrelloni a durata fissa per settimana, mese e stagione; offerte come "7 giorni al prezzo di 6".
- Codici promozionali, convenzioni (hotel, associazioni), sconti automatici.
- Prezzi IVA inclusa, aliquote impostate dal gestore, arrotondamento configurabile.
- Simulatore e matrice di listino per verificare i prezzi prima di pubblicarli, controllo dei "buchi" di listino, copia di stagione.
Policy di prenotazione
- Anticipo minimo e massimo, orario limite per prenotare in giornata.
- Formule consentite per periodo (es. ad agosto online solo settimane da sabato a sabato).
- Pagamento totale, acconto o nessun pagamento online; scadenza del saldo.
- Cancellazione a scaglioni con rimborso o credito, policy meteo, approvazione manuale per gazebo o richieste particolari.
- Le policy applicate vengono salvate con la prenotazione: rimborsi verificabili anche se le regole cambiano dopo.
Pagamenti
- Driver manuale: nessun pagamento online, saldo alla cassa.
- Driver Stripe con il proprio account: Stripe Checkout (robusto anche dentro un iframe) o Payment Element incorporato. Le chiavi sono del gestore e cifrate a riposo.
- Conferma solo da webhook firmati, deduplica degli eventi, riconciliazione automatica dei pagamenti in sospeso, rimborsi e crediti cliente.
- Interfaccia
PaymentProvideraperta per altri circuiti (es. Satispay) come contributi.
Cassa per lido e modulo fiscale
- Cassa con apertura (fondo cassa), incassi per metodo, chiusura con conteggio e differenza, report PDF.
- Incasso rapido dalla mappa, vendita libera senza prenotazione ("lettino extra al volo").
- Modulo fiscale con interfaccia
FiscalDriver: drivernone(usi il tuo registratore telematico) edexportdei corrispettivi giornalieri per aliquota e metodo in CSV e PDF per il commercialista. Vedi la nota fiscale.
Gestione abbonamenti stagionali
- Abbonamenti stagionali con diritto di prelazione sul posto l'anno successivo.
- Rilascio dei giorni da parte dell'abbonato (anche dal link magico), con rivendita del posto ed eventuale credito.
- Rinnovi proposti in blocco a fine stagione, con hold sulla stessa postazione e prezzo del nuovo listino.
Multi-stabilimento e utenti
- Più stabilimenti nella stessa installazione (organizzazioni con più lidi), con isolamento dei dati verificato da test automatici.
- Ruoli: titolare, responsabile, cassiere, personale di spiaggia, sola lettura.
- Password Argon2id, TOTP opzionale (obbligatorio per i titolari se richiesto), chiavi API con scope.
- Lingue: italiano, inglese, tedesco, francese.
Notifiche
- Email via il tuo server SMTP (nessun provider imposto): conferma, promemoria saldo, promemoria del giorno prima, cancellazione, rimborso, proposta di rinnovo, posto libero dalla lista d'attesa.
- Template modificabili in Markdown con variabili, in tutte le lingue attive.
- Interfaccia
Notifierper canali aggiuntivi (WhatsApp, SMS) come estensioni.
API e webhook
- API REST
/api/admin/v1e/api/public/v1descritte inapi/openapi.yaml(OpenAPI 3.1), errori RFC 9457,Idempotency-Key, paginazione a cursore. - Webhook in uscita firmati HMAC-SHA256 (
Arenile-Signature), con tentativi e log delle consegne. - Punti di estensione Go stabili in
pkg/ext: provider di pagamento, driver fiscali, notifiche, autenticazione SSO, protezione anti-bot, plugin UI del pannello.
Privacy, sicurezza e offline
- GDPR: dati minimi, consensi versionati, esportazione JSON dei dati del cliente, anonimizzazione su richiesta e automatica dopo N anni. Vedi la guida privacy.
- Segreti cifrati con AES-GCM, CSP e
frame-ancestorsper stabilimento, limitazione delle richieste, log senza email e telefoni in chiaro. - PWA offline del pannello: consultazione della mappa del giorno e operazioni a basso rischio (check-in, note, incassi in contanti) anche senza connessione, sincronizzate al ritorno della rete.
Accessibilità
La prenotazione di ombrelloni e lettini online deve funzionare per tutti i clienti del lido. Arenile punta al livello AA delle WCAG 2.1 (norma europea EN 301 549) sulla pagina pubblica, sul widget incorporato nel sito del lido e sull'area "Gestisci la prenotazione" del cliente; i flussi principali del pannello sono verificati con gli stessi criteri.
Cosa è supportato
- Tastiera: tutta la prenotazione si completa senza mouse (calendario con frecce e Pagina su/giù, mappa con le frecce, gruppi di opzioni, finestre che trattengono il focus); il focus è sempre visibile e si sposta sul titolo di ogni nuovo passo e sull'esito.
- Lettori di schermo: regioni, titoli e attributo di lingua per ogni lingua; ogni postazione ha un nome completo, con fila e zona ("Postazione A1, fila A, Prima fila: Libero, da 30,00 €"); prezzo, tempo rimasto ed esito del pagamento sono annunciati senza spostare il cursore; gli errori dei moduli sono collegati al campo.
- Alternativa non visiva alla mappa: il pulsante "Mostra come elenco" offre le postazioni raggruppate per fila, con stato e prezzo scritti per esteso; ogni fila è un solo punto di tabulazione (frecce, Home e Fine al suo interno) e il nome letto di ogni pulsante è il testo visibile.
- Contrasto: 4,5:1 per il testo e 3:1 per bordi e focus, in tema chiaro e scuro; sul colore principale scelto dal lido il colore del testo è calcolato in automatico.
- Il colore non è l'unico segnale nel calendario, sulla mappa e nell'elenco: giorni pieni o chiusi barrati, giorni con gli ultimi posti segnati da un punto, postazioni non disponibili con un lucchetto sulla mappa (spiegato nella legenda), stato delle postazioni scritto per esteso nell'elenco.
- Movimento ridotto: con la preferenza "riduci movimento" del dispositivo animazioni e transizioni diventano istantanee.
- Zoom e schermi piccoli: nessuno scorrimento orizzontale fino a 320 px (zoom al 200 % e oltre), aree da toccare di almeno 44 px sulla pagina pubblica.
- Quattro lingue: italiano, inglese, tedesco e francese per pagina pubblica, email e pannello.
Come è verificato: a ogni modifica del codice axe-core controlla ogni passo della prenotazione, la mappa e l'elenco, l'esito, l'area del cliente (anche con le azioni e la finestra di cancellazione aperte) e le pagine principali del pannello, e le violazioni gravi bloccano il rilascio; un test end-to-end completa una prenotazione con la sola tastiera; test dedicati controllano il contrasto dei colori in entrambi i temi, la larghezza di 320 px, la lingua della pagina e la riduzione del movimento.
European Accessibility Act: dal 28 giugno 2025 la direttiva UE 2019/882 (in Italia D.Lgs. 82/2022) chiede che i servizi di prenotazione online per i consumatori siano accessibili e che il fornitore lo dichiari; le microimprese sono esentate. Arenile fornisce lo strumento e un modello di dichiarazione, ma la responsabilità del servizio resta del lido.
Limiti noti: la pagina di pagamento è di Stripe; logo, testi ed email scritti dal lido e il sito che ospita il widget dipendono dal lido; disegnare la mappa nell'editor richiede mouse o touch; non è ancora stato fatto un audit con utenti di tecnologie assistive.
Guida completa e modello di dichiarazione di accessibilità da adattare: docs.arenile.app/gestore/accessibilita (modello).
Stato delle funzionalità
Legenda: Disponibile = rilasciato e utilizzabile · Pianificato = previsto, non ancora iniziato.
La versione attuale, la 1.1.0, è disponibile (note di rilascio). Sono completate tutte le milestone da M0 a M6 e la M8 (cassa avanzata e convenzioni): inventario ed editor della mappa, prezzi e policy, il gestionale operativo del lido (mappa del giorno, planning, clienti, abbonamenti, cassa e corrispettivi), la pagina pubblica con pagamento online tramite Stripe Checkout, la stagione completa (rinnovi, lista d'attesa, crediti, report con esportazioni Excel, importazione CSV, notifiche, modalità prova, rimborsi garantiti, casse multiple) e l'edizione desktop. Si aggiungono la vendita giornaliera con ticket numerati e i biglietti d'ingresso con controllo al varco (ADR 0020) e la stampa ESC/POS su stampanti di rete dall'app desktop (ADR 0021). Limiti noti: il pagamento incorporato con Stripe Elements non c'è (solo Stripe Checkout); la notifica al gestore per la chiusura di cassa con differenza non è disponibile; i pagamenti tardivi sono sempre rimborsati e la penale di modifica prevista dalla policy non viene addebitata; il pagamento online dentro un <iframe> semplice (senza embed.js) non riporta l'esito nel widget; stampanti ESC/POS via USB o Bluetooth e il ponte di stampa per le installazioni su server sono rimandati a dopo la 1.0.
| Area | Funzionalità | Milestone | Stato |
|---|---|---|---|
| Progetto | Specifica tecnica completa, licenza, governance, template issue/PR | M0 | Disponibile |
| Fondamenta | Struttura del repository, Makefile, CI, Dockerfile, docker compose | M0 | Disponibile |
| Fondamenta | Configurazione da variabili d'ambiente, CLI (serve, migrate, admin, seed, backup, restore, version) |
M0 | Disponibile |
| Fondamenta | Migrazioni SQLite e PostgreSQL, autenticazione e ruoli, audit log, outbox eventi, job runner | M0 | Disponibile |
| Fondamenta | Contratto OpenAPI iniziale, SPA pannello e booking di base incorporate nel binario | M0 | Disponibile |
| Agenti AI | AGENTS.md, CLAUDE.md, .claude/ (regole, skill, subagent), devcontainer |
M0 | Disponibile |
| Prezzi | Motore prezzi come libreria pura (regole, condizioni, azioni, IVA, arrotondamento) | M0/M2 | Disponibile |
| Policy | Mot |
