// el page builder
Un editor que
escribe Blade.
Arrastra secciones, columnas, bloques. En cada guardado, el builder escribe archivos Blade estáticos en disco. Sin renderizado dinámico en prod, sin deuda técnica — solo HTML compilado, rápido.
bloques
propriétés
display
gap
CSS scopé
// el flujo
De la pantalla al archivo, en un guardado.
01
Arrastra un bloque
Secciones, columnas, bloques desde la sidebar. Drag & drop, reordenable, anidable.
02
Edita
Inline o en modal CodeMirror para el CSS / HTML. CSS con scope por bloque, soporte de modo oscuro.
03
Guarda
El BladePageGenerator escribe un archivo Blade estático en disco. En prod: cero renderizado dinámico.
// lo que puedes hacer
Pensado para proyectos reales.
CSS con scope por bloque
Chaque section a son CSS isolé par #section-id, avec support de html.dark pour le mode sombre.
Edición CodeMirror
Modal d'édition CSS / HTML avec coloration syntaxique, directement dans le builder.
Multilingüe nativo
Une page, plusieurs locales. Copie de contenu d'une langue à l'autre en un clic.
Secciones compartidas
Réutilise une section sur plusieurs pages. Une modif se propage partout.
Responsive por columna
Breakpoints indépendants sur chaque colonne : empilé sur mobile, en grille sur desktop.
Roles y visibilidad
Marque des blocs dev_only : invisibles pour les utilisateurs non-développeurs.
Importar / exportar JSON
Exporte une page ou un bloc, réimporte-le ailleurs. Versionnable, partageable.
20+ bloques nativos
Heading, columns, slider, pricing, form, map… et chaque module ajoute les siens.
// extensible
Cada módulo
aporta sus bloques.
El builder no conoce tus bloques de antemano: los descubre. Un módulo declara sus tipos vía getBuilderConfig(), y el BuilderManager los expone en el editor. Escribes un generador, obtienes un bloque — drag & drop, propiedades, renderizado Blade.
Descubrimiento auto vía getBuilderConfig()
Un generador PHP = un bloque en el editor
Namespace aislado: Punky\{Module}
public function getBuilderConfig(): array { return [ 'blocks' => [ 'product-grid' => [ 'label' => 'Grille produits', 'generator' => ProductGridGenerator::class, 'icon' => 'grid', ], ], ]; }
↑ le bloc apparaît dans la sidebar du builder