Bancal — U-pick orchard
Key features
Ripeness engine: season + open FieldDay + remaining kg
Field day open/limited/closed; FIELD_CLOSED → 409
15-min hold with server expiresAt, ~30 s sweeper, same-user / capacity / kg 409
Real QR (qrcode SVG + /pase/:code URL) on confirmation and public GET 200
Live crate at checkout + real-kg adjustment after check-in
Derived earth points: 12 pts × partySize completed
Description
Bancal is the digital desk of a U-pick orchard for the visitor. See which crops are ripe today in Madrid, pick morning or afternoon, pack the crate (crops + kg) and hold for 15 minutes with a server-side expiresAt. Confirm and get a real QR pass whose URL opens /pase/:code. Staff scan the code at the gate; after check-in they log real kg that close the bill. In My harvests you browse history, cancel with a 24 h policy and earn earth points derived from completed visits (12 pts × partySize). The truth layer is the ripeness engine + FieldDay + kg quota: an off-season crop never enters the picker, FIELD_CLOSED blocks the sale, and list ↔ detail totals come from the same BookingLine rows.
Technologies used
Angular
TypeScript
SQLite