• Claude's avatar
    feat(website): add page + block tree builder (v3) · 39f468a9
    Claude authored
    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: 's avatarClaude Opus 5 <noreply@anthropic.com>
    39f468a9