Tarologa — prenotazioni, pagamenti, negozio video
Prenotazioni pagate e un negozio video in cui ogni lettura registrata arriva solo a chi l'ha comprata.
- Astro
- React
- Cloudflare Workers
- Cloudflare D1
- Cloudflare R2
- Stripe
- Workers AI
- Claude API
- ≈27endpoint API per prenotazioni, admin, pagamenti, negozio video e upload a blocchi
- 20 minvideo da telefono caricati a blocchi con ripresa
- 3mesi di aggiornamenti in produzione su richieste reali della cliente
Carte, pagamenti e video che apre solo chi li ha comprati
Un sito sotto un cielo notturno con il gioco delle carte, un motore di prenotazione con un pool di posti condiviso, il pagamento prima di ogni slot o video e gli upload dal telefono che diventano una libreria privata.
Tocca un blocco per vedere cosa fa.
- Ingresso
- Persone
- Logica
- AI
- Infrastruttura
- Uscita
Ingresso
Sito pubblico
Astro SSR su Workers. Isole React per il wizard di prenotazione, il gioco della carta e la chat delle domande; Lenis per lo scroll fluido.
- Astro
- React
- Lenis
Passa a Motore prenotazioni

Persone
Upload da telefono
Dall'admin sul telefono un video da 10 a 20 minuti va su R2 con upload multipart, che riprende dall'ultima parte. Lei può aggiungere un breve vocale.
- Cloudflare R2
Passa a Trascrizione e scheda, Versione web
Logica
Motore prenotazioni
Motore condiviso riusato: slot, fuso orario, email, .ics. Le letture registrate condividono un pool di 10 posti con consegna entro 72 ore.
- TypeScript
- Cloudflare D1
Riceve da Sito pubblicoPassa a Stripe Checkout, Cron promemoria
AI
Trascrizione e scheda
Whisper su Workers AI trascrive il suo vocale, poi Claude scrive una bozza di descrizione e tag. Senza chiave non fa nulla e lei li scrive a mano.
- Workers AI
- Whisper
- Claude API
Riceve da Upload da telefonoPassa a Libreria dell'acquirente
Infrastruttura
Versione web
Job GitHub Actions ogni due ore di giorno: l'HEVC HDR a circa 12 Mbit/s diventa H.264 720p a circa 2 Mbit/s, ricaricato a parti da 40 MB.
- GitHub Actions
- ffmpeg
Riceve da Upload da telefonoPassa a Libreria dell'acquirente
Infrastruttura
Cron promemoria
Worker separato ogni 15 minuti: promemoria email un'ora prima di ogni consulto e posti trattenuti da pagamenti non completati liberati.
- Cron Worker
- Resend
Riceve da Motore prenotazioni
Logica
Stripe Checkout
Pagamento prima dello slot o del video. La firma del webhook si verifica con Web Crypto, senza SDK; il webhook conferma la prenotazione o sblocca l'acquisto.
- Stripe
- Web Crypto
Riceve da Motore prenotazioniPassa a Libreria dell'acquirente
Uscita
Libreria dell'acquirente
Accesso con link email monouso valido 30 minuti, poi una sessione firmata di 90 giorni. I byte del video arrivano da R2 solo per un acquisto pagato, mai da link pubblico.
- HMAC
- PWA
- HTTP range
Riceve da Stripe Checkout, Trascrizione e scheda, Versione web
Il problema
Una tarologa faceva consulti in videochiamata e gestiva a mano agenda e pagamenti. Voleva anche vendere letture registrate. Il sito doveva prendere prenotazioni a posti limitati, incassare in anticipo e consegnare ogni video solo a chi l'aveva comprato.
Cosa ho costruito
- Ho portato in un repo proprio il motore di prenotazione di un mio progetto precedente per un trainer e l'ho esteso con pool di posti condivisi e aperture e chiusure dell'agenda.
- Ho aggiunto Stripe Checkout con un webhook di cui verifico la firma con Web Crypto, senza SDK; senza chiavi il sito resta in modalità demo.
- Ho costruito il negozio video: catalogo, anteprima gratuita, acquisto singolo e una libreria personale che si apre da un link via email e si installa come mini-app.
- Ho fatto andare gli upload dal suo telefono su R2 a parti che riprendono dopo un'interruzione; un breve vocale sul video diventa una bozza di descrizione e tag (Whisper, poi Claude) che lei può modificare.
- Ho dato alla home un gioco per pescare una carta, una chat di domande frequenti e un suono d'ambiente, come isole React.
La parte difficile
I video lunghi dal telefono. Le sue registrazioni da 10 a 20 minuti arrivano in HEVC HDR a circa 12 Mbit/s: si bloccavano ogni pochi minuti e su molti browser non partivano. L'upload va su R2 a parti con ripresa, e un job programmato crea una copia H.264 720p a circa 2 Mbit/s che il player usa al posto dell'originale, che resta intatto.
Risultato
Online sul dominio della cliente e aggiornato per tre mesi sulle sue richieste reali, come aperture e chiusure dell'agenda e un pool condiviso di 10 posti. I bug di produzione, come la pagina di prenotazione bianca per una data limite scaduta, sono stati risolti nello stesso ciclo.
Il mio ruolo
Progetto per una cliente, in solitaria. Ho gestito la cliente e trasformato le sue richieste in task, configurato Stripe, R2, dominio e segreti, e collaudato pagamenti e upload su telefono; Claude Code ha scritto 71 dei 72 commit.