Lalo Bakery Solutions
- Client
- Lalo Bakery Solutions
- Industry
- Food manufacturing & distribution
- Year
- 2025
A storefront and back office for a bakery-ingredients supplier: customer accounts and checkout on the front, and products, suppliers, stock adjustments, recipes and delivery pricing behind it.
Visit the site
1
Delivery fee calculation, shared by shop and staff
100%
Of stock movements carry a reason
2
Audiences (retail and trade) on one catalogue
What it covers
- E-commerce storefront & checkout
- Customer accounts & order history
- Server-side delivery pricing
- Inventory & stock adjustments
- Suppliers & damaged-stock tracking
- Recipe library
Two systems that had to be one
A bakery-ingredients supplier sells to the public and to trade, and the two look nothing alike from the inside. The shop needs a catalogue, a cart, a delivery fee and an order confirmation. The business needs to know what it paid, what it has left, what went to waste, and who owes it money.
Building those separately is how a shop ends up selling something the warehouse ran out of last week.
The storefront
A catalogue with categories, product galleries and priced ranges: a product is sold in several pack sizes, each with its own price, rather than as a single line with a single number. Customers get real accounts: an order history, saved delivery addresses, a settings page and password reset.
Delivery pricing is server-side, always. The fee is looked up from the delivery area the customer picked, orders at or above the free-delivery threshold pay nothing whatever the area, and local pickup is free by definition. The same function serves checkout and the dashboard, so the fee quoted to a customer and the fee staff see on that order are the one number. A fee posted by a browser is never trusted.
Recipes are a genuine content section, not filler: each recipe carries prep and cook times, instructions, a featured image and its ingredient list, which links to the products the shop actually sells.
The back office
Products and stock. Categories, images, suppliers, and a stock ledger built from adjustments: every movement is a signed row with a reason, and a sale links directly to the transaction that caused it. Damaged stock is recorded against the product rather than quietly deducted, so wastage is a number somebody can look at.
Orders. All orders, delivered, cancelled; each with its customer, its items, its delivery fee and its payment method. Customer records carry their full order history.
Money and reporting. Transactions, discounts, free-delivery thresholds, payment methods and a reports screen over the lot.
Administration. Roles and permissions with per-user overrides, a testimonials manager, a message inbox from the contact form, and a logo/branding manager.
The result
One place where a price change, a stock count and a customer's order are the same set of facts. The shop cannot sell what the warehouse does not have, and the month-end question (what did we actually make on this) has an answer that does not require assembling it from three spreadsheets.
How it was built
- Framework
SvelteKit
Server load functions, form actions and endpoints; SSR by default.
Svelte 5
Runes for reactivity ($state, $derived, $effect).
- Language
TypeScript
Strict mode across app and server code.
- Data
MySQL
Primary datastore.
Drizzle Kit
Committed SQL migrations rather than push-to-prod diffing.
Drizzle ORM
Typed schema and queries, with migrations generated from the schema.
- Auth
Better Auth
Session-based auth with server-side verification.
- Forms
Superforms
Progressive-enhancement forms with server-side validation.
Zod
One schema validating both client and server.
- UI
Chart.js
Reporting charts.
Embla
Carousels.
Dark mode
System-aware theme switching.
Lucide
Icon set.
TanStack Table
Sorting, filtering and pagination for admin tables.
Bits UI
Headless primitives behind the component library.
Tailwind CSS
Utility-first styling with a project design token layer.
- Reporting
jsPDF
Server-side PDF generation for reports and receipts.
jsPDF AutoTable
Tabular report export.
- Infrastructure
Client image compression
Uploads compressed in the browser before hitting the server.
Nodemailer
Transactional email over SMTP.
Inside the system