Un catalogo da consultare sul telefono
Ricerca per titolo, autore o ISBN, categorie, ordinamento e disponibilità sempre aggiornata. Un libro esaurito resta visibile, con un pulsante per chiedere quando torna.
il Piacere di Leggere è una libreria indipendente di Mussomeli. L'obiettivo era semplice: chi abita in paese deve poter vedere dal telefono quali libri ci sono e ordinarli, senza scaricare app, senza creare account e senza che la libreria paghi commissioni a un marketplace. Il cliente sceglie i libri, compila un breve modulo e invia alla libreria un messaggio WhatsApp già scritto. Il libraio conferma e prepara l'ordine per il ritiro in negozio o per la consegna a domicilio.
Ricerca per titolo, autore o ISBN, categorie, ordinamento e disponibilità sempre aggiornata. Un libro esaurito resta visibile, con un pulsante per chiedere quando torna.
Niente account e niente pagamenti online. L'ordine arriva alla libreria come un normale messaggio WhatsApp, e la conferma di disponibilità e tempi resta una conversazione tra persone.
Aggiungere un libro con la foto della copertina scattata dal telefono, cambiare prezzo e copie con un tocco, nascondere un titolo senza cancellarlo. Tutto da un pannello protetto da password.
Il messaggio viene composto nel browser a partire dal carrello: titoli, ISBN, quantità, prezzi, totale e modalità di consegna. Prezzi e disponibilità vengono sempre riletti dal catalogo, quindi un carrello salvato giorni prima non può mandare un prezzo vecchio o un libro nel frattempo esaurito.
Nome e indirizzo possono restare memorizzati sul dispositivo del cliente per l'ordine successivo, ma non vengono mai inviati al server: l'unico posto in cui arrivano è la chat con la libreria.
Per un libro che non è in catalogo c'è la pagina Richiedi un libro, che prepara allo stesso modo un messaggio con titolo, autore ed eventuale ISBN.
Il negozio è un'unica applicazione Node.js che serve sia il sito sia l'API. Non ci sono servizi a pagamento di terze parti nel percorso di un ordine.
| Parte | Scelta | Perché |
|---|---|---|
| Interfaccia | React 19, React Router, Vite | Negozio e pannello nella stessa app. La build statica viene servita dallo stesso server dell'API. |
| Server | Node.js 24, Express 5 | Un'API piccola: catalogo pubblico, impostazioni del negozio e area riservata. |
| Dati | SQLite con better-sqlite3 | Un solo file e nessun server di database da gestire. Journal WAL e migrazioni numerate con PRAGMA user_version. |
| Copertine | File su disco | Il formato viene riconosciuto dai byte del file: passano solo JPG, PNG e WebP, anche se il nome dice altro. |
| Pubblicazione | Docker, Cloudflare Tunnel | La porta del container è esposta solo su 127.0.0.1: dall'esterno si arriva al negozio soltanto attraverso il tunnel. |
| Backup | Timer systemd notturno | Database e copertine copiati ogni notte su un disco separato, con 30 giorni di storico. |
/api/health risponda.Il primo sito era un'istantanea pubblicata su Netlify: il catalogo stava in un unico documento JSON su Netlify Blobs, letto e scritto da funzioni serverless.
Negozio, carrello, ordini su WhatsApp, pagina per richiedere un libro, pannello di gestione e una suite di 28 test automatici. Il progetto include la configurazione Docker e gli strumenti da riga di comando per password, backup e dati di prova.
Il container gira sul server dietro il Cloudflare Tunnel, con il backup notturno attivo. Il DNS del dominio è passato da register.it a Cloudflare senza interrompere la posta della libreria.
I primi 36 titoli sono stati ricostruiti dalle foto degli scaffali: per ciascuno sono stati cercati edizione, ISBN, editore e prezzo di copertina, e ogni copertina è stata confrontata con la foto. Tra questi ci sono sei titoli di storia locale di Mussomeli, alcuni pubblicati senza ISBN. Il caricamento è passato dall'API del pannello, con le stesse validazioni di un inserimento a mano.
Per ora i clienti non hanno un account: il negozio funziona senza. L'accesso con Google è previsto per una fase successiva.
Raccontami come lavori oggi, cosa vendi e come ti contattano i clienti. Ne parliamo e ti dico cosa ha senso costruire.