// PROJECT_

El Dulce de la Nonna

Laravel 13

01. LIVE_DEMO

// DEMO
LIVE

// LIVE PREVIEW

El Dulce de la Nonna

VISIT_SITE

02. PROJECT_OVERVIEW

Business website for an artisan alfajores home-baker, built together with my regular development partner under our own studio, Dual-Stack Studio — a small GitHub organization we run to ship client and personal projects together. Customers browse the landing page and submit custom orders through a validated form — the order is dispatched as two transactional emails (owner notification + customer confirmation) with no database storage needed. Built as a server-rendered Laravel 13 monolith with Blade, Tailwind v4 and Carbon date validation enforcing a 48-hour advance order window.

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.