// PROJECT_
El Dulce de la Nonna
01. LIVE_DEMO
// LIVE PREVIEW
El Dulce de la Nonna →
02. PROJECT_OVERVIEW
Client project — An artisan alfajores bakery in Miami needed an online presence with a simple email-first order flow. No database, no admin panel, no maintenance overhead. The site is built around Argentine nostalgia — expats who miss the taste of grandmothers' homemade alfajores — with every order handmade to order on a Laravel 13 monolith. Legal compliance is front-and-center: allergen disclosure for Florida food safety, FDUTPA-compliant cancellation terms, and FDBR privacy policy with explicit data rights. The 48-hour advance order window is enforced server-side. Architecture stays intentionally simple now so it scales cleanly when the business grows — clear path to Stripe checkout, automated emails and a lightweight admin panel when ready. Built under Dual-Stack Studio with my development partner.
Status
Active Development
Scope
Full-Stack Architecture
Primary Stack
Laravel 13
Repo
Public
03. TECH_STACK & ARCHITECTURE
//Server-rendered monolith — Blade views compiled server-side, zero client-side JS framework
//Orders are email-only: no DB table for encargos, two Mailables dispatched on successful validation
//Carbon enforces 48-hour advance order window — computed on request and re-validated server-side
//Tailwind v4 via Vite: custom design tokens (rosa-pastel, chocolate, crema) define the brand palette
//Two routes: GET /encargar (form) + POST /encargar (store) — standard Laravel resourceful pattern
//SQLite in dev for zero-config setup — swappable to MySQL/PostgreSQL via DATABASE_URL
Laravel 13 + PHP 8.3
Full-Stack Framework
Server-rendered monolith. MVC architecture: routes → controllers → views. Artisan CLI for migrations, mailables and dev tooling. Laravel Pail for real-time log tailing in development.
Blade Templates
View Layer — Templating
Server-side rendered HTML. Layouts via @extends/@section. Components for header and shared UI. No client-side JS framework — all interactivity handled by native browser behavior.
Tailwind CSS v4 + Vite
View Layer — Styling & Assets
Tailwind v4 via @tailwindcss/vite plugin — zero-config CSS bundling. Custom design tokens: rosa-pastel, chocolate, crema, rosa-fuerte. Vite compiles and hashes assets for production.
EncargoController
Controller — Order Flow
create() renders the order form with Carbon-computed minimum delivery date (now + 48h). store() validates the request, dispatches two Mailables and redirects with a success flash message.
Laravel Validation
Server-Side Validation
Request validation on store(): nombre, email, teléfono, dirección, fecha_entrega (after_or_equal: +48h enforced via Carbon), pedido (10–1000 chars). Custom Spanish error messages for all rules.
Laravel Mail + Mailables
Email System
Two Mailables: NuevoEncargoMail dispatched to the business owner (new order alert) and ConfirmacionEncargoClienteMail dispatched to the customer. Both use Blade email templates with order details.
Carbon
Date Handling
Computes the minimum allowed delivery date (Carbon::now()->addDays(2)) on every request — injected into the view and used as the after_or_equal validation constraint.
SQLite + Laravel Migrations
Database
SQLite for local development — zero-config, committed as database.sqlite. Orders are not persisted in the DB (email-only flow). Migrations manage the default Laravel users, cache and jobs tables.
PHPUnit 12
Testing
Laravel's built-in PHPUnit integration. Feature tests cover HTTP request/response cycles. phpunit.xml configures a separate in-memory SQLite instance so tests never touch the dev database.