Web prodavnica namještaja u kojoj jedna sofa može imati četiri boje, svaka sa svojim fotografijama, a svaka narudžba svoju priču.

Craft prodaje namještaj, što je bio dobar razlog za izradu ozbiljnog modela podataka. Jedna sofa dolazi u više boja, svaka boja ima svoje fotografije, neki proizvodi su na sniženju, a kupci pretražuju po prostorijama umjesto po vrsti proizvoda. Podaci se čuvaju u PostgreSQLu, modeliraju uz Prismu, a interfejs je izgrađen oko tog modela.
Balkonu su potrebne drugačije stvari nego spavaćoj sobi. Svaki proizvod označen je prostorijama kojima odgovara, pa posjetioci mogu odmah pronaći ono što opremaju i zatim dodatno suziti izbor.

Prodavati majicu je jednostavno. Sofa s različitim bojama, materijalima, dimenzijama i sniženom cijenom već zahtijeva ozbiljnu bazu podataka.
Svaka boja je varijanta sa svojim fotografijama u utvrđenom redoslijedu. Brisanjem proizvoda brišu se i njegove varijante i fotografije.
Svaka stavka narudžbe čuva cijenu u trenutku kupovine, pa kasnije sniženje ne mijenja iznos koji je kupac zaista platio.
Svaki korisnik ima jedinstvenu korpu i samo jedan red za određeni proizvod i boju. Ponovno dodavanje povećava količinu umjesto da pravi duplikat.
Kombinacija korisnika i proizvoda jedinstvena je u bazi, pa ni dvostruki klik ne može dodati isti proizvod dva puta.
Nakon kupovine narudžba dobija vremenski pregled: na čekanju, potvrđena, poslana i dostavljena. Ako nešto pođe po zlu, označi se kao otkazana, a razlog se bilježi uz narudžbu.

12 modela i 4 enumeracije s relacijama i kaskadnim brisanjem održavaju korpe, narudžbe i omiljene proizvode usklađenim. Novčani iznosi čuvaju se kao precizni decimalni brojevi, nikad kao float vrijednosti.
Interfejs i backend u jednoj bazi koda, uz Prisma tipove koji se koriste sve do komponenti.
Prijava i sesije, uz uloge koje određuju ko vidi korisnički dio, a ko administraciju.
Jednostavno i predvidljivo stanje klijenta omogućava trenutnu reakciju korpe.
Pristupačne komponente preuzimaju rutinske dijelove, pa sam više vremena mogao posvetiti samoj prodavnici.




Cijena se promijeni ili se proizvod snizi nakon što ga je kupac već naručio.
Svaka stavka narudžbe čuva kopiju svoje cijene, pa stare narudžbe uvijek prikazuju tačan plaćeni iznos.
Cijene zapisane kao floating-point vrijednosti mogu odstupati za nekoliko feninga, a prodavnica ne smije gubiti ni najmanje iznose.
Svi novčani iznosi čuvaju se kao precizne decimalne vrijednosti u PostgreSQLu, od cijene proizvoda do ukupnog iznosa narudžbe.
Korpa mora reagovati odmah, ali ostati sačuvana i nakon osvježavanja stranice.
Zustand odmah ažurira interfejs, dok se korpa čuva uz korisnički račun u bazi podataka.
Kada su relacije bile dobro postavljene, korpe, narudžbe i omiljeni proizvodi uglavnom su se svodili na jednostavne upite.
Vrijednosti koje moraju ostati nepromijenjene, poput plaćene cijene, treba sačuvati u tom trenutku, a ne naknadno ponovo tražiti.
Jasan pregled statusa narudžbe gradi više povjerenja nego bilo koji baner na početnoj stranici.