// PROJECT_

El Dulce de la Nonna

Laravel 13

01. LIVE_DEMO

Tap to play
// DEMO
PAUSED

// LIVE PREVIEW

El Dulce de la Nonna

VISIT_SITE

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.