feat(website): add page + block tree builder (v3)
The v2 builder could not express more than one page: website_sections had a
unique(academy_id, section_key) constraint, there was no pages table, and
SectionManager exposed only toggle + reorder. A client with a seven-page site
had no way to represent page two.
Adds an additive page/block model alongside v2:
- website_pages + website_blocks (nested tree, JSONB data/style)
- BlockRegistry of BlockType classes: 31 types, 133 layout variants, 237
fields, 442 validation rules derived from the field schema
- Page/Block/Menu/Blueprint services, BlockRenderer, BlockDataResolver
- Builder UI: page manager, block tree editor, schema-driven field forms,
repeaters, content/design/motion panels, image upload
- Authored navigation (website_menus) with dropdowns, replacing nav links
that were previously derived from enabled sections
- Blueprint import/export via `php artisan website:blueprint`
- Extended motion library: entrance effects, delay, stagger, parallax
A new block type now costs one PHP class — no migration, no enum case, no
CHECK constraint.
Nothing here is destructive. website_sections is untouched and "/" falls back
to the legacy renderer when no builder homepage exists, so already-deployed
tenants are unaffected until they opt in.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>
Showing
app/Helpers/website.php
0 → 100644
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Please register or sign in to comment