Calendesk
Prenotazioni, pagamenti e clienti per terapeuti e professionisti
Incasso mensile: 21.000 USD (fonte indicata nella scheda)
Cosa fa
Software per terapeuti, psicologi e attività di servizi: prenotazioni online, pagamenti, pacchetti di sedute e rapporto con i clienti.
Come guadagna
Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.
Rendilo tuo
- Per fisioterapisti, osteopati e nutrizionisti italiani.
- Attenzione ai dati sanitari: privacy e conservazione vanno fatte bene.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Agenda Cura": gestisce prenotazioni online, pacchetti di sedute, pagamenti e schede clienti per fisioterapisti, osteopati, nutrizionisti e psicologi. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale per i professionisti, con vantaggi e prezzi
2. Registrazione e configurazione: servizi, orari, studio
3. Pagina pubblica di prenotazione /:slug
4. Calendario del professionista
5. Schede dei pazienti e pacchetti di sedute
Stile: calmo e professionale: sfondo bianco, verde salvia #5F8D7A, blu tenue #3B5B7A, carattere "Nunito Sans", molto spazio e niente colori aggressivi. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "servizi": nome, durata, prezzo, collegati al professionista
- "pazienti": nome, contatti, consenso privacy, collegati al professionista
- "pacchetti": numero di sedute comprate e usate per paziente
- "appuntamenti": paziente, servizio, inizio e fine, stato
Regole di sicurezza obbligatorie:
- ogni professionista vede solo i suoi pazienti, pacchetti e appuntamenti
- i pazienti prenotano solo orari liberi e non vedono i dati degli altri
- le note cliniche non vanno salvate in questa app: solo dati organizzativi
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. Prenotazione e pacchetti di sedute
Crea la pagina pubblica /:slug del professionista: foto, studio, servizi con durata e prezzo, poi scelta del giorno e dell'orario libero, nome, email, telefono e consenso al trattamento dei dati (obbligatorio).
Aggiungi i pacchetti di sedute: il professionista crea pacchetti (es. 5 sedute a 200 €, 10 sedute a 380 €) e il paziente li compra online. A ogni appuntamento completato si scala una seduta dal pacchetto (funzione nei Dettagli tecnici); quando ne resta una, il paziente riceve un'email per rinnovare.
Promemoria automatico 24 ore prima con il link per spostare o annullare.
4. Calendario e schede
Crea il calendario del professionista (giorno, settimana, mese) con gli appuntamenti colorati per servizio, blocchi per ferie e pause, e appuntamenti presi al telefono.
Scheda paziente con: contatti, storico degli appuntamenti, pacchetto attivo con sedute rimaste, pagamenti. Statistiche del mese: incasso, sedute, nuovi pazienti, tasso di appuntamenti annullati.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 25 € al mese. Gratis l'utente ha: un solo servizio e 20 appuntamenti al mese. Con il piano Pro sblocca: servizi e appuntamenti illimitati, pacchetti di sedute e pagamenti online dei pazienti.
A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Dati sanitari: verifica che non ci siano campi per diagnosi o note cliniche, e che la privacy spieghi chi tratta i dati dei pazienti.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Pacchetti di sedute
I pacchetti comprati dai pazienti e la funzione che scala una seduta in modo sicuro, anche se due persone ci provano insieme.
create table pacchetti (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade, -- il professionista
paziente_id uuid not null,
sedute_totali int not null check (sedute_totali > 0),
sedute_usate int not null default 0,
pagato boolean not null default false,
check (sedute_usate <= sedute_totali)
);
alter table pacchetti enable row level security;
create policy "le mie righe" on pacchetti
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
-- Scala una seduta solo se ne restano: restituisce quante ne rimangono, o null
create function usa_seduta(pacchetto uuid) returns int
language plpgsql security definer set search_path = public as $
declare rimaste int;
begin
update pacchetti
set sedute_usate = sedute_usate + 1
where id = pacchetto
and utente_id = auth.uid() -- solo il professionista del pacchetto
and pagato
and sedute_usate < sedute_totali
returning sedute_totali - sedute_usate into rimaste;
return rimaste;
end $;Appuntamenti senza sovrapposizioni
Come per le prenotazioni dei negozi: il database impedisce due appuntamenti nello stesso orario.
create extension if not exists btree_gist;
create table appuntamenti (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
paziente_id uuid not null,
servizio text not null,
periodo tstzrange not null,
stato text not null default 'confermato'
check (stato in ('confermato', 'completato', 'annullato')),
exclude using gist (utente_id with =, periodo with &&) where (stato = 'confermato')
);
alter table appuntamenti enable row level security;
create policy "le mie righe" on appuntamenti
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
Pezzi comuni a tutti i progetti
Glossario
- Slug
- La parte finale e leggibile dell'indirizzo di una pagina, es. /pizzeria-da-mario.