Portfolio / Operazioni di Sistema / floural

La ricetta vive nel sistema,
non nella testa della titolare.

Floural è una piccola panetteria e cake studio cresciuta più in fretta del suo modo di lavorare. La titolare era il ricettario, la formatrice, il giudice dei ritardatari e il controllore delle scadenze — tutto insieme. Le abbiamo costruito un POS che si è preso ogni uno di questi compiti, più qualcuno che non sapeva di volere, così un pasticcere al primo giorno riesce a gestire un turno da solo.

ClienteFloural Bakery
ScopePOS · Produzione · Magazzino · Personale
Onboarding2 settimane → 1 turno
CanaliDine-in · GoFood · ShopeeFood · Pre-order
Anno2026
I problemi della titolare

Sei cose che vivevano nella sua testa — e non avrebbero dovuto.

Ognuno di questi problemi aveva lo stesso difetto: la panetteria funzionava quando la titolare era in negozio, e si bloccava quando non c'era. Il brief era semplice — togliere tutto dalla sua testa e metterlo in un sistema di cui il personale si fidasse.

Problema 01

La ricetta viveva in tre posti. Nessuno concordava con gli altri.

Foto su WhatsApp, un quaderno malridotto e la memoria della titolare. Ogni nuovo pasticcere significava rinsegnare lo stesso chiffon da zero — sbagliandolo un po' ogni volta.

"Ero io il ricettario. Se ero a consegnare una torta nuziale, la panetteria smetteva di sfornare."
Problema 02

La roba stava sul banco. Nessuno sapeva da quanto tempo.

Il personale alzava le spalle e diceva "sembra fresco." I clienti alla fine non la pensavano allo stesso modo. Una crema ritirata male ha azzerato le recensioni di un sabato.

Problema 03

I componenti si fanno a lotti. Tracciarli come "stock" fa perdere il lotto.

Pan di spagna, crema al mango, ganache — prodotti a lotti, ognuno con la propria scadenza. Il vecchio POS li contava come un numero unico. Una crema da 6 giorni veniva usata prima di una da 2. Il FIFO era un'aspirazione.

Problema 04

Una nuova cassiera aveva bisogno di due settimane di affiancamento.

Il POS era un foglio di calcolo travestito. Le categorie non erano a colori, gli articoli non avevano codici abbreviati, lo schermo non aveva ritmo. I nuovi assunti imparavano sbagliando — a spese del cliente.

Problema 05

Il calcolo dei bonus era approssimativo. I ritardatari venivano discussi ogni mese.

La titolare ricordava chi era in ritardo. A volte. I bonus diventavano trattative. L'equità era percepita, non misurata.

"Certi mesi mi sentivo il cattivo. Altri mesi mi sentivo un pushover."
Problema 06

GoFood, ShopeeFood, dine-in, pre-order — quattro registri, nessun riepilogo.

Fine giornata significava quattro riconciliazioni a mano. Il P&L per canale era una voce di corridoio, non un numero.

● Problema 01

La produzione parte dalla ricetta. Non da una domanda alla titolare.

Ogni prodotto è costruito da componenti (pan di spagna, crema, ganache) che a loro volta derivano da ingredienti. Le ricette della titolare vivono nel database — una per ogni componente, una per ogni prodotto finito — e un ordine di produzione è solo "scegli il componente, premi avvia."

Il sistema mostra al pasticcere le quantità esatte per il lotto scelto, scala gli ingredienti al completamento al costo medio ponderato (HPP) e registra un nuovo lotto del componente con data di produzione e scadenza. La ricetta è la fonte della verità. La titolare non è più il collo di bottiglia.

"La prima settimana il nuovo pasticcere ha fatto un turno intero senza mandarmi un messaggio. Ho pianto un po', in senso buono." — Titolare, Floural
floural / produzione / avvia lotto
Pasticcere · Tika
Mango Cream component · 3 day life
LOTTO TARGET 2,000 g
Panna da montare 1,200 g disponibile
Purea di mango 600 g disponibile
Zucchero semolato 160 g disponibile
Succo di limone 40 g disponibile
Al completamento → scala gli ingredienti al costo medio HPP, registra il lotto MC-260422-A, scadenza 25 Apr 2026 21:00, posizione Chiller 2.
● Problema 02

Verde, giallo, rosso. È il banco che ti avvisa, non il naso.

Ogni prodotto finito in esposizione ha la propria soglia di scadenza (torte ≠ pasticceria ≠ pane). Quando un'unità viene spostata sul banco, il conto alla rovescia parte. Il display mostra una barra colorata che scorre dal verde al giallo al rosso — il personale e la titolare vedono la stessa immagine da qualsiasi punto del locale.

Rosso? L'unità finisce nel registro degli scarti con una ragione categorizzata — mai solo "eliminato" — così la titolare può vedere a fine mese se il problema è sovrapproduzione, cattiva gestione o contaminazione.

floural / banco / live
14:32
Cheesecake Slice CH · sul banco da 2h ● Fresco · 22h rimaste
Mango Tart MT · sul banco dalle 09:14 ▲ Vendi presto · 4h rimaste
Choco Chiffon CC · sul banco da ieri ■ Ritira & registra scarto
Croissant CR · sul banco da 1h ● Fresco · 7h rimaste
● Problema 03

Ogni lotto ha un ID. Il sistema pesca sempre il più vecchio per primo.

Quando un pasticcere assembla una torta finita, il POS non chiede "c'è della crema?" — sceglie il lotto di crema con la scadenza più imminente che ha ancora abbastanza quantità, lo scala, e annota quale lotto ha usato nella riga dell'ordine.

Se il pasticcere bypassa il FIFO (raro, a volte legittimo) viene registrato con una motivazione. Il deterioramento di un intero lotto finisce nella tabella degli scarti al costo HPP, non al prezzo di vendita — la titolare vede il costo reale.

floural / componenti / lotti crema mango
FIFO · auto
LottoProdottoScadenzaRimastoPos.Stato
MC-260420-B 20 Apr 06:30 23 Apr 06:30 340 g Chiller 1 USA PROSSIMO
MC-260421-A 21 Apr 14:10 24 Apr 14:10 1,820 g Chiller 2 IN CODA
MC-260422-A 22 Apr 09:05 25 Apr 09:05 2,000 g Chiller 2 IN CODA
● Problema 04

Il POS pensato perché una nuova cassiera sia operativa dal primo giorno.

Ogni prodotto ha un codice breve di 2–4 lettere, un colore per categoria e una posizione fissa nella griglia che la titolare definisce. Le nuove cassiere imparano il layout in un'ora perché non cambia mai. La ricerca funziona per codice oppure per nome — veloce per i clienti abituali, indulgente per chi è in formazione.

Il checkout è un'unica schermata: articoli, cliente (facoltativo, con punti fedeltà), metodo di pagamento (contanti, QRIS, bonifico, GoFood, ShopeeFood, acconto), fatto. Il cassetto si apre da solo ai contanti; il resto viene calcolato; la ricevuta si stampa; l'ID dell'ordine è data + sequenza.

floural / pos / ordine #260422-014
Cassiera · giorno 1
Torta Cheesecake
Slice
CH 38k
Torta Mango Tart
MT 42k
Torta Choco
Chiffon
CC 35k
Pasticceria Croissant
CR 22k
Pasticceria Pain au
Chocolat
PC 26k
Bevande Iced Latte
IL 28k
Istruzioni di onboarding · giorno 1: "Tocca il colore. Tocca l'articolo. Tocca paga. Tocca contanti. Fatto." Cinque tocchi per ogni ordine. I nuovi assunti prendono ordini nella prima ora.
● Problema 05

Ogni minuto di ritardo è un numero. Ogni bonus ha una traccia.

Il personale fa il check-in con un selfie all'inizio del turno (Pagi 07:00, Siang 15:00, Malam 21:00). Il sistema legge il timestamp, applica la tolleranza configurata (5 min) e converte ogni minuto extra in "punti ritardo" al tasso stabilito dalla titolare — 1 punto ogni 5 minuti di ritardo, Rp 3.000 per punto.

A fine mese, bonus = base − (punti ritardo × penale). La titolare approva una volta sola. Le contestazioni si azzerano perché i calcoli sono sullo schermo, con le foto.

floural / presenze / 22 aprile
turno · Pagi
RT
Rina Tania
cassiera · pagi · 07:00
06:58 PUNTUALE
DH
Dimas Hartono
pasticcere · pagi · 07:00
07:13 RITARDO 8m · 1 pt
TK
Tika Kurnia
pasticcere · pagi · 07:00
06:51 PUNTUALE
BONUS · DIMAS H · APR BASE 500k 4 pt × 3k = 488k
● Problema 06 + extra

Quattro canali di vendita, un unico registro. Più le cose che non aveva chiesto.

Ogni canale — dine-in, asporto, GoFood, ShopeeFood, pre-order con acconto — si registra nella stessa tabella ordini con un tag di canale. La riconciliazione di fine giornata è una schermata, non quattro. Il P&L per canale è un filtro, non un progetto.

E il livello extra: punti fedeltà per i clienti (1 ogni Rp 1.000 spesi, con scadenza secondo le regole della titolare), registro scarti categorizzato con perdita stimata in Rp, stock dei materiali da imballaggio che si decrementa automaticamente per ogni vendita, e un log di audit a livello di sistema che permette di tracciare qualsiasi numero di qualsiasi schermata fino alla persona e al momento.

floural / chiusura giornata · 22 apr
1 registro · 4 canali
Dine-in
42
Rp 1,84m
GoFood
31
Rp 1,22m
ShopeeFood
18
Rp 0,71m
Pre-order
07
Rp 2,95m
▸ Registro scarti · oggi Rp 84k
Mango Tart · 2 pcs kadaluarsa Rp 38k
Whipping cream · 220 g terkontaminasi Rp 28k
Croissant · 1 pc jatuh Rp 18k
Come l'abbiamo costruito

Sei settimane. Modellato sul suo flusso di lavoro reale, non su un POS generico.

Non abbiamo clonato un POS. Abbiamo trascorso i primi tre giorni in panetteria a osservare. Il modello dati — tre livelli, lotti, FIFO, scadenze — era sulla lavagna prima che una riga di codice fosse scritta.

01

Settimana 1 — Osservare e trascrivere le ricette

Seduti in panetteria. Ogni ricetta — pan di spagna, crema, ganache, ogni prodotto — trascritta in schemi strutturati di componenti e prodotti. Il modello dati è diventato il ricettario.

02

Settimana 2 — Magazzino a tre livelli

Costruiti ingredientscomponentsproductsshelf_items con tabelle lotto per i componenti e le istanze sul banco. Costo medio ponderato HPP su ogni carico e ogni produzione.

03

Settimana 3 — Produzione + scadenze

Schermata di produzione con la ricetta come checklist. Soglie di scadenza per prodotto (ore verde/giallo/rosso) collegate a barre colorate in tempo reale. Registro scarti con motivi categorizzati.

04

Settimana 4 — POS pensato per l'onboarding

Griglia a tessere con codici brevi, ordini con tag canale, checkout in unica schermata, flusso acconto + saldo per i pre-order. La cassiera formata in 90 minuti con uno script di una pagina.

05

Settimana 5 — Personale & ciclo finanziario

Presenze con selfie, configurazione punti ritardo, bozza bonus mensile → flusso di approvazione. Cassetto con riconciliazione apertura / vendite / prelievi / chiusura. Log di audit su ogni modifica.

06

Settimana 6 — Due nuovi pasticceri, in produzione

Assunti due pasticceri nuovi come test. Entrambi hanno gestito un turno completo da soli entro fine settimana — ricette dallo schermo, FIFO dallo schermo, decisioni sul banco dallo schermo. La titolare è rimasta a casa un sabato.

Cosa funziona ora

Sei cose che la titolare non porta più nella sua testa.

Nessun delta mese su mese inventato — il sistema è in fase di avvio. Questi sono i flussi di lavoro che si sono spostati dalle spalle della titolare allo schermo.

1

Fonte della verità per le ricette

Ogni ricetta nel database, versionata. I nuovi pasticceri leggono lo schermo, non la titolare.

90m

Onboarding della cassiera

Griglia a tessere + codici brevi + checkout in un'unica schermata. Il nuovo assunto prende ordini reali nella prima ora.

3

Livelli di magazzino, FIFO reale

Ingredienti → componenti → prodotti. I lotti di componenti vengono prelevati dal più vecchio, in automatico.

V/G/R

Scadenze, visibili

Ogni unità sul banco ha una barra colorata in tempo reale. "Sembra fresco?" è sostituito da "è verde?"

0

Discussioni sui bonus

Minuti di ritardo → punti ritardo → detrazione in Rp. Foto e timestamp. La titolare approva una volta sola.

4

Canali, un registro

Dine-in, GoFood, ShopeeFood, pre-order: tutti nella stessa tabella ordini. La chiusura giornata è una schermata.

Lo stack

Costruito per essere di proprietà, ospitato e modificato dall'operatore.

▸ Frontend

Vanilla JS PWA

Installabile sul tablet Android del personale. Nessun framework — ogni schermata è un modulo JS singolo che il nipote della titolare (studente di informatica) può leggere. Il service worker mantiene il POS attivo quando il wi-fi balla.

PWA · ES modules · service worker · printer.js
▸ Backend

PHP + MySQL · un file per dominio

Routing basato su azioni (?action=), PDO nativo, JWT. Schema a 25 tabelle: impostazioni, utenti, prodotti/componenti/ingredienti con ricette, lotti, banco, presenze, bonus, imballaggi, scarti, audit.

PHP · MySQL · PDO · JWT · transactional integrity
▸ Modello magazzino

Tre livelli con lotti

Ingredienti (grezzi) → componenti (semilavorati, a lotti, con scadenza) → prodotti (finiti, legati alla ricetta) → articoli sul banco (con timestamp). Costo medio ponderato HPP attraverso ogni livello.

component_recipes · product_components · shelf_items · waste_records
▸ Ciclo operativo

Presenze, bonus, cassetto, audit

Check-in con selfie e rilevazione turno, tolleranza + penale configurabili, bozze bonus mensili. Cassetto giornaliero con apertura / vendite / prelievi / chiusura. Ogni modifica nel log di audit con utente + IP.

attendance · bonuses · cash_drawer · daily_reconciliation · audit_log
Torna a → Tutti i progetti

La sua panetteria, cucina
o studio ancora nella sua testa?

Una chiamata gratuita per definire lo scope. Le diciamo cosa vale la pena costruire e cosa no.