4.3 KiB
4.3 KiB
SiteWeaver CMS Core - Technical Specifications
This document defines the build-ready technical specifications for the SiteWeaver CMS Core (/cms).
1. System Requirements & Stack
- Framework: Laravel 11.x
- PHP Version: 8.2+
- Database: SQLite3
- Frontend Stack:
- Admin CSS: Semantic UI
- Admin/Editor JS: Svelte 5 (compiled via Vite)
- Asset Conflict Management: Each plugin/theme must utilize a custom root-level CSS class (e.g.,
.blog) to prevent global namespace pollution.
2. Core Routing & URL Management
2.1 Admin Segment
- Default:
/loom(Branded segment) - Configuration: Managed via
ADMIN_PATHin the.envfile. - Priority: System routes (Admin, Auth, API) have absolute priority over dynamic page slugs.
2.2 Reserved Slugs
loom,admin,api,login,logout,register,sw-admin,dashboard,themes,plugins,media.
3. Block Editor: Server-Side Hydration (SSH)
3.1 Data Schema (JSON-First)
Content is stored as a JSON array of block objects:
[
{ "type": "header", "data": { "level": 2, "text": "Hello SiteWeaver" } },
{ "type": "paragraph", "data": { "text": "This is a block-based CMS." } }
]
3.2 Rendering Flow
- On Save: The Svelte editor outputs JSON. The PHP core hydrates this JSON into a "Cached Rendered HTML" column in the database.
- On Request: The CMS serves the "Cached Rendered HTML" for high performance.
- Fallback: If the cached version is missing/outdated, the PHP core re-hydrates the JSON on-the-fly using Blade components associated with each block type.
4. Plugin & Theme Architecture
4.1 Plugin Lifecycle
- Discovery: CMS scans the
/pluginsdirectory for Service Providers. - Activation: Toggle-based via Admin UI.
- Migrations:
- Plugins can define a custom migration path in the Service Provider.
- Default Path:
/plugins/{plugin-name}/migrations/.
4.2 Theme Engine
- Location:
/themes/{theme-name}/. - Required Files:
theme.md(metadata) and a root layout Blade file. - Discovery: Automated scanning of the
themes/directory. - Inheritance: Support for Child Themes (overriding parent files via directory hierarchy).
- Asset Discovery & Loading:
- Helpers:
css('path', $attributes): Outputs a<link>tag.js('path', $attributes): Outputs a<script>tag.file('path', $attributes): Smart Asset Helper. Automatically detects file type (via extension/metadata) and outputs the appropriate HTML tag (<img>withsrcsetsupport,<video>,<audio>, or<a>for documents like PDF).- JIT Image Parameters: For images, special keys in the
$attributesarray likew,h,fit,q(quality), andfm(format) are automatically intercepted and passed to the JIT image generation engine.
- JIT Image Parameters: For images, special keys in the
- Functionality: These helpers output the FULL HTML TAG.
- Attributes: The optional
$attributesarray allows for specifyingdefer,async,media,id,class,alt,w,h, etc. - Recursive Search: The engine first looks in the current Theme folder. If a Child Theme is active and the file is missing, it automatically falls back to the Parent Theme folder.
- Helpers:
5. Media Manager Specification
5.1 Storage & Logic
- Abstraction: Uses Laravel Flysystem (supports Local, S3, Nextcloud).
- Focal Point: Coordinates (X/Y) stored as metadata.
- JIT Generation: Managed via Glide/Intervention.
- URL Format:
/media/{filename}?w=800&fit=focal&fp-x=0.5&fp-y=0.5.
- URL Format:
5.2 Performance
- Preview Cache Warming: Images generated during the author's preview phase.
- Automated Cache Warming: Background jobs generate responsive
srcsetsizes upon publication. - Orphaned Media Watcher: Periodic task to prune unreferenced original files and JIT caches.
6. Authentication & Identity Provider
- Middleware:
sw:authmiddleware. - Functionality: Protects non-CMS Laravel routes using the CMS's session, user roles, and 2FA.
- Roles: Admin (Protected), Editor, Author, User.
7. Performance & Security
- Full-Page Caching: Native public-route caching.
- Security Audits: Automated periodic auditing for activated plugins.
- Backups:
sw site:backupand Admin-side trigger to snapshot the SQLite DB and project root.