LandingPager | Automata
secciones (9)
$ cd .. // volver a proyectos
automata@latam: ~/proyectos/landingpager
PRODUCTO · slug: landingpager ·2026 · 2 min read · 453 words

> LandingPager

// Constructor visual de paginas con editor de grid drag-and-drop: eliges layout, sueltas componentes en celdas, publicas a un slug publico.

Laravel 12Livewire 3Flux UITailwind 4Alpine.jsMySQLPest 4
forks last commit
LandingPager
▸ rol
Full-stack · Laravel · Livewire
▸ equipo
Solo
▸ status
ready
// section 01 · descubrimiento

$ cat ./descubrimiento.md

▸ descripcion

Page builder donde usuarios no tecnicos arman paginas responsive: eligen un layout (ancho completo, sidebar izq/der, dos columnas) y arrastran componentes a un grid CSS. Cada componente guarda su grid_position (row, col, rowspan, colspan) como JSON en PageComponent, asi el editor es una vista Livewire sobre la base. Las paginas publican en /p/{slug} sin paso de export estatico.

▸ problema

Los builders existentes son caros (Webflow, Framer) o demasiado rigidos (Wix con templates fijos). Un editor de grid con componentes reutilizables apunta al medio: mas facil que HTML/CSS, mas flexible que templates.

▸ audiencia

Pequeñas empresas, agencias y creadores no tecnicos que necesitan publicar landings sin pagar un SaaS ni contratar un dev por cada iteracion.

// section 03 · arquitectura

$ cat ./arquitectura.md

// section 03b · secuencias

$ cat ./secuencias.md

// flujos en runtime — quien habla con quien y en que orden

// El drag en el browser lo captura Alpine.js y la seleccion final llega a Livewire en un solo evento.

Seleccion drag — a componente multi-celda · flow-01
loading…
// section 04 · infraestructura

$ cat ./infraestructura.md

▸ servicios
provider: Laravel + MySQL + Vite
  • App Laravel 12 (HTTP + componentes Livewire)
  • MySQL 8 (pages, page_components, templates)
  • Vite dev server (HMR para Tailwind/Alpine)
  • Tablas queue + cache de Laravel (driver database)
  • Laravel Fortify (auth + 2FA opcional)
  • Deploy via GitHub Actions FTP
// section 05 · implementacion

$ cat ./implementacion.md

▸ frontend
  • · Livewire 3 + Volt 1.7
  • · Flux UI
  • · Tailwind CSS 4
  • · Alpine.js
  • · Vite
▸ backend
  • · Laravel 12
  • · PHP 8.2
  • · Laravel Fortify 1.30
▸ datos
  • · MySQL
  • · Eloquent + soft deletes
  • · Columnas JSON para grid_position y settings de componente
▸ devops
  • · GitHub Actions (deploy.yml — FTP)
  • · Concurrently para dev en paralelo (artisan + vite + queue)
// section 06 · desafios tecnicos

$ cat ./challenges/*.md

// 1 problemas tecnicos resueltos

01 / 01
challenge-01.md · grid · livewire · alpine
▸ problema

Colocar un componente que ocupa varias celdas a partir de una seleccion drag

restriccion: El editor lo rendera Livewire en server, pero el drag pasa en el navegador. Mandar un evento por cada movimiento del puntero inundaria el server; mandar solo la seleccion final obliga a Livewire a derivar row/col/colspan desde dos coordenadas de celda.

▸ enfoque

Alpine.js trackea el drag localmente y dispara un solo evento Livewire con selectionStart + selectionEnd cuando se suelta el puntero. PageEditor::addComponentToCellFromAlpine() deriva row/col/colspan del min/max de los dos puntos y guarda un PageComponent con grid_position como JSON.

app/Livewire/PageEditor.php php
public function addComponentToCellFromAlpine($type, $selectionStart, $selectionEnd)
{
    $row     = min($selectionStart['row'], $selectionEnd['row']);
    $col     = min($selectionStart['col'], $selectionEnd['col']);
    $colEnd  = max($selectionStart['col'], $selectionEnd['col']);
    $colspan = ($colEnd - $col) + 1;

    PageComponent::create([
        'page_id'  => $this->page->id,
        'type'     => $type,
        'settings' => [
            'grid_position' => [
                'row' => $row, 'col' => $col,
                'rowspan' => 1, 'colspan' => $colspan,
            ],
        ],
    ]);
}
// section 07 · testing & ci

$ cat ./testing.md

▸ estrategia

Pest 4 con el plugin de Laravel. DB de tests es SQLite in-memory (no requiere MySQL en CI). El foco esta en persistencia de paginas y colocacion de componentes.

▸ herramientas
Pest 4.3PHPUnitPest Laravel plugin
// section 09 · resultados

$ cat ./resultados.md

01 /
4
modelos Eloquent (Page, PageComponent, Template, User)
02 /
5
componentes Livewire (editor, selectores de layout/tipo)
03 /
8
migrations
04 /
2
seeders (Database + Template)
▸ outcomes

MVP: creacion de paginas, editor de grid, seleccion de layout y rutas de preview publico funcionan. Deploya por FTP en push a main. La libreria publica de templates es el siguiente hito.

// relacionados

$ grep -l "tech" ./projects/*

// proyectos que comparten parte del stack

// siguiente paso

$ automata deploy --tu-operacion

// Conversemos sobre como adaptamos esto a tu caso.

./contactar.sh