TorbatYar/docs/phase-handover/phase-11-3.md
Mortezakoohjani 203671a7bf feat(experience): ship Experience Platform phases 11.0-11.10
Add the experience service with sites through analytics/AI hooks, migrations through 0011, and phase docs/manifests marking the track complete.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 11:43:10 +03:30

4.2 KiB

Phase Handover — Experience 11.3 Theme & Layout Engine

Metadata

Field Value
Phase ID experience-11.3
Title Theme & Layout Engine
Status Complete
Service(s) experience (experience_db)
Version 0.11.3.0
Date 2026-07-26
ADR(s) ADR-016, ADR-008

Discovery Summary

Prior phase delivered versioned components. Gap: replaceable theme packs and dynamic layout shells with directionality, plus site/page bindings without rewriting page trees. Mirrors the Phase 11.2 component/component-version catalog+immutable-version pattern. Templates deferred to 11.4.

Reusable Components

Component Location Reuse notes
Theme catalog + versions app/models/themes.py (ExperienceTheme, ExperienceThemeVersion), services/themes.py Tokens + brand shell immutable once published
Layout catalog + versions app/models/themes.py (ExperienceLayout, ExperienceLayoutVersion) Regions/structure shell immutable once published
Bindings SiteThemeBinding, PageLayoutBinding Pin a published version; swap without page rewrite
Policies / specs app/policies/themes.py, app/specifications/themes.py Lifecycle + version + binding rules, list UX

Public APIs

Method Path Permission
CRUD + activate/deprecate/archive /api/v1/themes experience.themes.*
CRUD + publish/retire /api/v1/theme-versions experience.themes.*
CRUD + activate/deprecate/archive /api/v1/layouts experience.layouts.*
CRUD + publish/retire /api/v1/layout-versions experience.layouts.*
Assign / unassign /api/v1/site-theme-bindings experience.themes.*
Assign / unassign /api/v1/page-layout-bindings experience.layouts.*

Events

Event type Notes
experience.theme.* Theme catalog lifecycle
experience.theme_version.* Theme version created/updated/published/retired
experience.layout.* Layout catalog lifecycle
experience.layout_version.* Layout version created/updated/published/retired
experience.site_theme.* Site theme bind/replace/unassign
experience.page_layout.* Page layout bind/replace/unassign

Extension Points

Extension point How to extend Forbidden uses
ExperienceThemeVersion.tokens Frontend CSS variables (ADR-008) Write Core tenant brand tables
ExperienceLayoutVersion.regions / structure_shell Template phase consumes regions Store full page trees / CMS
ThemeMarketplaceProvider External packs via protocol Shared marketplace DB

Known Limitations

  • No template catalog (11.4)
  • Bindings require an ACTIVE theme/layout with a PUBLISHED version
  • Metrics remain discovery-oriented
  • Visual theme editor UI is frontend-only

Migration Notes

Item Detail
Alembic revision(s) 0004_phase_113_themes_layouts (head)
Upgrade steps alembic upgrade head
Downgrade support Drops bindings, versions, layouts, themes
Breaking changes None (additive)

Dependencies

Dependency Type
experience-11.2 components Required prior
ADR-016 / ADR-008 Boundaries / branding

Quality Gates

  • Discovery complete
  • Architecture / boundaries preserved
  • Tests green
  • Documentation + manifests + registries updated
  • Self audit: no template engine leakage; themes replaceable

Next Phase Entry

Field Value
Recommended next phase experience-11.4 Template System
Entry checklist Read this handover + phase doc; implement templates only — no forms/surveys yet

Completion Sign-Off

  • Quality gates passed
  • Tests green
  • Documentation updated
  • Progress / next-steps / registries updated
  • Self audit completed