// le page builder
Un éditeur qui
écrit du Blade.
Glisse des sections, des colonnes, des blocs. À chaque sauvegarde, le builder écrit des fichiers Blade statiques sur disque. Pas de rendu dynamique en prod, pas de dette technique — juste du HTML compilé, rapide.
blocs
propriétés
display
gap
CSS scopé
// le workflow
De l'écran au fichier, en un save.
01
Glisse un bloc
Sections, colonnes, blocs depuis la sidebar. Drag & drop, réordonnable, imbricable.
02
Édite
Inline ou en modal CodeMirror pour le CSS / HTML. CSS scopé par bloc, support du mode sombre.
03
Sauvegarde
Le BladePageGenerator écrit un fichier Blade statique sur disque. En prod : zéro rendu dynamique.
// ce que tu peux faire
Pensé pour les vrais projets.
CSS scopé par bloc
Chaque section a son CSS isolé par #section-id, avec support de html.dark pour le mode sombre.
Édition CodeMirror
Modal d'édition CSS / HTML avec coloration syntaxique, directement dans le builder.
Multilingue natif
Une page, plusieurs locales. Copie de contenu d'une langue à l'autre en un clic.
Sections partagées
Réutilise une section sur plusieurs pages. Une modif se propage partout.
Responsive par colonne
Breakpoints indépendants sur chaque colonne : empilé sur mobile, en grille sur desktop.
Rôles & visibilité
Marque des blocs dev_only : invisibles pour les utilisateurs non-développeurs.
Import / export JSON
Exporte une page ou un bloc, réimporte-le ailleurs. Versionnable, partageable.
20+ blocs natifs
Heading, columns, slider, pricing, form, map… et chaque module ajoute les siens.
// extensible
Chaque module
apporte ses blocs.
Le builder ne connaît pas tes blocs à l'avance : il les découvre. Un module déclare ses types via getBuilderConfig(), et le BuilderManager les expose dans l'éditeur. Tu écris un générateur, tu obtiens un bloc — drag & drop, propriétés, rendu Blade.
Découverte auto via getBuilderConfig()
Un générateur PHP = un bloc dans l'éditeur
Namespace isolé : 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