Accesso riservato. Inserisci le credenziali per continuare.
"Primo turno" = il tavolo si libera in tempo per un altro cliente: in "Disposizione" gli si potra' assegnare un tavolo gia' occupato da un altro (es. chi arriva piu' tardi).
Questa operazione cancella la prenotazione per sempre. Inserisci la password per confermare.
Promemoria per il giorno visualizzato (es. "Ordinare il pane", "Chiamare tecnico lavastoviglie").
Tocca una prenotazione qui sotto per selezionarla, poi tocca uno o piu tavoli per assegnarglieli. Ritocca un tavolo per toglierlo; assegnandolo a un'altra prenotazione si sposta automaticamente.
Questa app funziona ora in modalita demo (i dati restano solo su questo dispositivo e si perdono ricaricando la pagina). Per salvare le prenotazioni online, in modo da non perderle mai, serve un progetto gratuito su Supabase.
create table prenotazioni (
id uuid primary key default gen_random_uuid(),
data date not null,
turno text not null check (turno in ('pranzo','cena')),
nome text not null,
orario time not null,
ospiti int not null,
tavolo text,
telefono text,
note text,
cancellato boolean not null default false,
cancellato_at timestamptz,
arrivato boolean not null default false,
utente text,
abituale boolean not null default false,
posizione text,
primo_turno boolean not null default false,
created_at timestamptz default now()
);
alter table prenotazioni enable row level security;
create policy "accesso libero prenotazioni"
on prenotazioni for all
using (true)
with check (true);
agenda-prenotazioni.html con un editor di testo, cerca le righe SUPABASE_URL e SUPABASE_ANON_KEY vicino all'inizio dello script, e incolla i due valori.Hai gia creato la tabella prima d'ora? Il campo "telefono" e stato aggiunto dopo: esegui anche questo comando nell'SQL Editor per aggiungerlo alla tabella esistente (se non l'hai gia fatto, va eseguito una sola volta):
alter table prenotazioni add column if not exists telefono text;
Novita "Disdetta": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere i campi necessari alla funzione di disdetta:
alter table prenotazioni add column if not exists cancellato boolean not null default false; alter table prenotazioni add column if not exists cancellato_at timestamptz;
Novita "Arrivati / in sala": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere il campo necessario:
alter table prenotazioni add column if not exists arrivato boolean not null default false;
Novita "Utenti": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere il campo necessario:
alter table prenotazioni add column if not exists utente text;
Novita "Cliente abituale": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere il campo necessario. Il riconoscimento automatico in base al telefono non richiede invece nessuna modifica, funziona gia' sui dati esistenti:
alter table prenotazioni add column if not exists abituale boolean not null default false;
Novita "Dentro / Fuori": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere il campo necessario:
alter table prenotazioni add column if not exists posizione text;
Novita "Primo turno" e "Tavoli liberi": se la tua tabella esiste gia, esegui anche questo comando una sola volta per aggiungere il campo necessario. Il pulsante "Tavoli liberi" accanto a Pranzo/Cena non richiede invece nessuna modifica al database.
alter table prenotazioni add column if not exists primo_turno boolean not null default false;
Novita "Backup email automatico": per attivare l'invio automatico ogni 6 ore, esegui una sola volta anche questo script (crea una piccola tabella dedicata alle impostazioni dell'app):
create table if not exists impostazioni ( chiave text primary key, valore text ); alter table impostazioni enable row level security; create policy "accesso libero impostazioni" on impostazioni for all using (true) with check (true);
Novita "Accesso protetto da login": visto che l'agenda va online sul sito, e' importante attivare un vero login, cosi' i dati (nomi, telefoni) non sono raggiungibili da chi non ha le credenziali. Tre passaggi, una volta sola:
drop policy if exists "accesso libero prenotazioni" on prenotazioni; create policy "solo utenti autenticati - prenotazioni" on prenotazioni for all using (auth.role() = 'authenticated') with check (auth.role() = 'authenticated'); drop policy if exists "accesso libero impostazioni" on impostazioni; create policy "solo utenti autenticati - impostazioni" on impostazioni for all using (auth.role() = 'authenticated') with check (auth.role() = 'authenticated');
Da questo momento, aprendo la webapp comparira' una schermata di accesso: senza email e password corrette non si vede nulla. Il backup automatico via email continua a funzionare senza modifiche (la Edge Function usa una chiave separata che non passa da questo controllo).
Novita "Sincronizzazione in tempo reale": se hai piu dispositivi aperti sull'agenda contemporaneamente (es. tablet al ristorante e telefono), le modifiche fatte su uno compaiono ora automaticamente sugli altri, senza dover ricaricare la pagina. Per attivarla va acceso, una sola volta, il "Realtime" di Supabase sulla tabella prenotazioni: esegui questo comando nell'SQL Editor:
alter publication supabase_realtime add table prenotazioni;
In alternativa, dalla dashboard: Database → Replication, e attiva l'interruttore sulla riga "prenotazioni". Se il comando qui sopra da errore "gia presente" (already member), va bene cosi: significa che era gia attivo.
Novita "Note della giornata": il pulsante 📝 accanto a "Oggi" apre un elenco di promemoria/cose da fare legate al giorno visualizzato (es. "Ordinare il pane"). Per attivarlo esegui una sola volta questo script nell'SQL Editor (crea la tabella dedicata e attiva subito anche la sincronizzazione in tempo reale fra dispositivi):
create table if not exists note_giorno ( id uuid primary key default gen_random_uuid(), data date not null, testo text not null, fatto boolean not null default false, created_at timestamptz default now() ); alter table note_giorno enable row level security; create policy "solo utenti autenticati - note_giorno" on note_giorno for all using (auth.role() = 'authenticated') with check (auth.role() = 'authenticated'); alter publication supabase_realtime add table note_giorno;
Se non hai ancora attivato il login (vedi sopra "Accesso protetto da login"), sostituisci la riga "create policy" con una ad accesso libero come per le altre tabelle: using (true) with check (true). Se il comando "alter publication" da errore "gia presente", va bene cosi.
Aggiungi qui l'elenco dei tavoli (o zone) del locale: ti serviranno nella modalita "Crea disposizione" per assegnare i tavoli alle prenotazioni con un tocco.
Aggiungi qui l'elenco degli utenti: compariranno come tag da toccare in "Inserito da" quando si crea una prenotazione, per sapere sempre chi l'ha presa.
Ogni 6 ore, se sono state aggiunte nuove prenotazioni, viene inviato un PDF con tutte le prenotazioni dei prossimi 365 giorni all'indirizzo qui sotto. L'invio vero e proprio e gestito da una funzione automatica dentro Supabase (non da questa pagina): la trovi, gia pronta all'uso, nei file ISTRUZIONI-BACKUP-EMAIL.md, backup-automatico-setup.sql e index.ts forniti insieme a questa webapp. Qui sotto puoi solo cambiare in ogni momento l'indirizzo di destinazione.