docs(04): capture phase context
Phase 04: Theme Engine - Template syntax decisions (Twig-style, string templates) - Layout composition (WinterCMS-style placeholders) - Asset pipeline requirements (hot reload, bundling) - Rendering modes (SPA, hybrid, static)
This commit is contained in:
82
.planning/phases/04-theme-engine/04-CONTEXT.md
Normal file
82
.planning/phases/04-theme-engine/04-CONTEXT.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Phase 4: Theme Engine - Context
|
||||
|
||||
**Gathered:** 2026-02-04
|
||||
**Status:** Ready for planning
|
||||
|
||||
<domain>
|
||||
## Phase Boundary
|
||||
|
||||
Render themes with layouts, partials, and Vue integration. Includes asset management and multiple rendering modes (SPA, hybrid, static). Theme creation tooling and CLI scaffolding are separate phases.
|
||||
|
||||
</domain>
|
||||
|
||||
<decisions>
|
||||
## Implementation Decisions
|
||||
|
||||
### Template Syntax
|
||||
- String templates with interpolation (not ScalaTags) — designers can work with HTML directly
|
||||
- Twig-style syntax for includes: `{% partial 'header' %}`
|
||||
- Variable passing supports both named parameters and context objects:
|
||||
- Simple: `{% partial 'card' title='Hello' count=5 %}`
|
||||
- Complex: `{% partial 'card' with cardData %}`
|
||||
- Components expose variables implicitly — templates can use component data directly (WinterCMS style)
|
||||
|
||||
### Layout Composition
|
||||
- Pages declare layout in front matter YAML: `layout: default`
|
||||
- WinterCMS-style placeholder system:
|
||||
- `{% page %}` injects main page content
|
||||
- Named placeholders supported: `{% placeholder 'sidebar' %}`
|
||||
- Flat layout structure only — no layout inheritance
|
||||
- Use partials for shared pieces across layouts
|
||||
- Theme metadata in `theme.yaml` at theme root
|
||||
|
||||
### Asset Pipeline
|
||||
- Research best Scala ecosystem options for manifest/bundling
|
||||
- Manifest file preferred if no better standard tool exists
|
||||
- Hot reload essential for development workflow
|
||||
- Production optimization requirements:
|
||||
- Minification with content hashing for cache busting
|
||||
- Separate bundles: vendor, app, critical CSS
|
||||
- Plugin asset injection like WinterCMS:
|
||||
- `addCss()` and `addJs()` for global hooks
|
||||
- Component-scoped assets load when components are used
|
||||
- Both mechanisms supported
|
||||
|
||||
### Rendering Modes
|
||||
- Theme default in `theme.yaml`, per-page override in front matter
|
||||
- Three modes: `spa`, `hybrid`, `static`
|
||||
- SPA mode: Server renders HTML, Vue 3 hydrates on client
|
||||
- Hybrid mode: Page-level granularity (whole page is either server or SPA)
|
||||
- Static mode supports both:
|
||||
- Build-time generation via CLI command
|
||||
- On-demand generation with caching
|
||||
|
||||
### Claude's Discretion
|
||||
- Specific string template library/implementation for Scala
|
||||
- Asset bundling tool selection (investigate Scala ecosystem)
|
||||
- Hot reload implementation approach
|
||||
- Exact Vue hydration setup
|
||||
- Cache invalidation strategy for static mode
|
||||
|
||||
</decisions>
|
||||
|
||||
<specifics>
|
||||
## Specific Ideas
|
||||
|
||||
- Template syntax should feel familiar to WinterCMS developers — Twig-style tags
|
||||
- Asset injection API similar to WinterCMS `addCss()` and `addJs()` functions
|
||||
- Hot reload is essential — CSS/JS changes must reflect immediately in dev mode
|
||||
|
||||
</specifics>
|
||||
|
||||
<deferred>
|
||||
## Deferred Ideas
|
||||
|
||||
None — discussion stayed within phase scope
|
||||
|
||||
</deferred>
|
||||
|
||||
---
|
||||
|
||||
*Phase: 04-theme-engine*
|
||||
*Context gathered: 2026-02-04*
|
||||
Reference in New Issue
Block a user