Case Study · il Piacere di Leggere Mussomeli (CL) · Settembre 2026

Una libreria di paese con il suo negozio online e gli ordini su WhatsApp

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.

36 titoli nel catalogo iniziale, ricostruito dalle foto degli scaffali
0 € di commissioni: niente marketplace e niente pagamenti online
28 test automatici su API, accesso, prezzi, ricerca e messaggi WhatsApp
30 giorni di backup notturni del catalogo e delle copertine, su un disco separato
Cosa serviva

Cosa doveva fare il negozio

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.

Ordini sul canale che i clienti già usano

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.

Una gestione alla portata del libraio

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 percorso del cliente

Come funziona un ordine

  1. SfogliaCerca per titolo, autore o ISBN e filtra per categoria.
  2. CarrelloIl carrello resta salvato sul telefono, anche chiudendo la pagina.
  3. ModuloNome, ritiro in libreria o consegna a domicilio (1,50 €, solo a Mussomeli), indirizzo e note.
  4. WhatsAppSi apre WhatsApp con l'ordine già scritto e indirizzato alla libreria: basta premere Invia.
  5. ConfermaLa libreria risponde con disponibilità e tempi di ritiro o consegna.

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.

Ciao! Vorrei ordinare questi libri 📚 1. La prima regina – Alessandra Selmi ISBN 9788842934042 1 × 20,00 € = 20,00 € 2. Il cavallo di Troia – Davide Morosinotto ISBN 9788847740785 1 × 8,90 € = 8,90 € Subtotale: 28,90 € Consegna a domicilio: 1,50 € Totale: 30,40 € 🚚 Consegna a domicilio Indirizzo: Via Roma 12, Mussomeli Nome: Maria Rossi Attendo conferma della disponibilità. Grazie!Messaggio generato dal negozio, con dati di esempio
Il negozio

Catalogo, scheda del libro e modulo d'ordine

ilpiaceredileggere.shop
Catalogo del negozio online il Piacere di Leggere con ricerca, categorie e copertine
Il catalogo: ricerca, categorie (Narrativa, Saggi, Ragazzi e una sezione dedicata a Mussomeli) e disponibilità su ogni libro.
ilpiaceredileggere.shop/libro
Scheda di un libro con prezzo, disponibilità, descrizione e pulsante per aggiungerlo al carrello
La scheda del libro, con descrizione, dati bibliografici e domanda diretta su WhatsApp.
ilpiaceredileggere.shop/ordine
Modulo d'ordine con scelta tra ritiro in libreria e consegna a domicilio e riepilogo del carrello
Il modulo d'ordine: ritiro gratuito o consegna in paese, riepilogo e totale prima di aprire WhatsApp.
Il catalogo visto da uno smartphone
Il catalogo da telefono
La scheda di un libro vista da uno smartphone
La scheda del libro da telefono
Area riservata

Il pannello del libraio

ilpiaceredileggere.shop/admin
Pannello di gestione con l'elenco dei libri, prezzi, copie e interruttore di visibilità
L'elenco dei libri nel pannello, con copie e visibilità modificabili direttamente dalla lista.

Cosa può fare il libraio

  • Aggiungere, modificare, nascondere o eliminare un libro: titolo, autore, prezzo, copie, categoria, editore, ISBN, anno e descrizione.
  • Caricare la copertina con una foto dal telefono. Il browser la riduce a 1000 pixel sul lato lungo prima dell'invio, così anche una foto da diversi megabyte arriva leggera.
  • Cambiare le copie con i pulsanti + e - e mostrare o nascondere un titolo dall'elenco, senza aprire la scheda.
  • Gestire le impostazioni del negozio: numero WhatsApp, consegna a domicilio attiva o no, costo e nota, indirizzo, orari e un avviso in cima al sito.
  • Cambiare la password del pannello.
Scelte tecniche

Lo stack del negozio

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.

ParteSceltaPerché
InterfacciaReact 19, React Router, ViteNegozio e pannello nella stessa app. La build statica viene servita dallo stesso server dell'API.
ServerNode.js 24, Express 5Un'API piccola: catalogo pubblico, impostazioni del negozio e area riservata.
DatiSQLite con better-sqlite3Un solo file e nessun server di database da gestire. Journal WAL e migrazioni numerate con PRAGMA user_version.
CopertineFile su discoIl formato viene riconosciuto dai byte del file: passano solo JPG, PNG e WebP, anche se il nome dice altro.
PubblicazioneDocker, Cloudflare TunnelLa porta del container è esposta solo su 127.0.0.1: dall'esterno si arriva al negozio soltanto attraverso il tunnel.
BackupTimer systemd notturnoDatabase e copertine copiati ogni notte su un disco separato, con 30 giorni di storico.
Dietro le quinte

Sicurezza, rilasci e dati

Accesso al pannello

  • Nel codice non c'è la password, solo il suo hash scrypt.
  • Il cookie di sessione è HttpOnly e SameSite=Strict, ed è marcato Secure quando la richiesta arriva in HTTPS. Una sessione dura al massimo 7 giorni.
  • I tentativi di accesso sbagliati sono limitati per indirizzo IP, e ogni richiesta che modifica dati deve arrivare dal sito stesso.
  • Content Security Policy e intestazioni di sicurezza su tutte le risposte.

Rilasci e dati

  • Il rilascio parte con un solo comando: prende l'ultima versione dal Git self-hosted, rifiuta modifiche non salvate nel repository, ricostruisce l'immagine e aspetta che /api/health risponda.
  • Se la build fallisce, il negozio in linea resta quello di prima.
  • Il database e le copertine stanno fuori dalla cartella del codice, quindi un rilascio non può toccarli.
  • Il dominio è passato su Cloudflare conservando i record della posta della libreria, con HTTPS obbligatorio.
Cronologia

Dalla prima versione al catalogo in linea

Fase 01 Aprile 2026

Una prima versione su Netlify

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.

  • Netlify Functions
  • Netlify Blobs
Fase 02 24 settembre 2026

Riscritto da zero per un server proprio

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.

  • React 19
  • Express 5
  • SQLite
  • node:test
Fase 03 24 settembre 2026

In linea su ilpiaceredileggere.shop

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.

  • Docker Compose
  • Cloudflare Tunnel
  • systemd timer
Fase 04 29 settembre 2026

Il catalogo iniziale

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.

  • Import via API
  • Copertine verificate

Per ora i clienti non hanno un account: il negozio funziona senza. L'accesso con Google è previsto per una fase successiva.

Hai un negozio e ti serve qualcosa di simile?

Raccontami come lavori oggi, cosa vendi e come ti contattano i clienti. Ne parliamo e ti dico cosa ha senso costruire.