# PHASE 5: SITES RENDERER **Detailed Implementation Plan** **Goal**: Build Sites renderer for hosting public sites. **Timeline**: 2-3 weeks **Priority**: MEDIUM **Dependencies**: Phase 3 --- ## TABLE OF CONTENTS 1. [Overview](#overview) 2. [Sites Renderer Container](#sites-renderer-container) 3. [Publisher Service](#publisher-service) 4. [Publishing Models](#publishing-models) 5. [Publisher API](#publisher-api) 6. [Multiple Layout Options](#multiple-layout-options) 7. [Testing & Validation](#testing--validation) 8. [Implementation Checklist](#implementation-checklist) --- ## OVERVIEW ### Objectives - ✅ Create Sites renderer container - ✅ Build publisher service - ✅ Support multiple layout options - ✅ Deploy sites to public URLs - ✅ Render sites from site definitions ### Key Principles - **Component Reuse**: Use shared component library from Phase 3 - **Multiple Layouts**: Support 7 layout types - **Public Access**: Sites accessible via public URLs - **User-Friendly**: "My Websites" or "Published Sites" in UI --- ## SITES RENDERER CONTAINER ### 5.1 Sites Renderer Container **User-Friendly Name**: "My Websites" or "Published Sites" | Task | File | Dependencies | Implementation | |------|------|--------------|----------------| | **Create Sites Container** | `docker-compose.app.yml` | None | Add new container for sites renderer | | **Sites Renderer Frontend** | `sites/src/` | NEW | React app for rendering sites | | **Site Definition Loader** | `sites/src/loaders/loadSiteDefinition.ts` | NEW | Load site definitions from API | | **Layout Renderer** | `sites/src/utils/layoutRenderer.ts` | NEW | Render different layouts | | **Template System** | `sites/src/utils/templateEngine.ts` | NEW | Template rendering system | **Docker Compose Configuration**: ```yaml # docker-compose.app.yml igny8_sites: build: ./sites ports: - "8024:5176" volumes: - /data/app/igny8/sites:/app - /data/app/sites-data:/sites environment: - VITE_API_URL=http://igny8_backend:8010 ``` --- ## PUBLISHER SERVICE ### 5.2 Publisher Service | Task | File | Dependencies | Implementation | |------|------|--------------|----------------| | **PublisherService** | `business/publishing/services/publisher_service.py` | Phase 1 | Main publishing service | | **SitesRendererAdapter** | `business/publishing/services/adapters/sites_renderer_adapter.py` | Phase 3 | Adapter for Sites renderer | | **DeploymentService** | `business/publishing/services/deployment_service.py` | Phase 3 | Deploy sites to renderer | **PublisherService**: ```python # business/publishing/services/publisher_service.py class PublisherService: def publish_to_sites(self, site_blueprint): """Publish site to Sites renderer""" adapter = SitesRendererAdapter() return adapter.deploy(site_blueprint) ``` --- ## PUBLISHING MODELS ### 5.3 Publishing Models | Task | File | Dependencies | Implementation | |------|------|--------------|----------------| | **PublishingRecord Model** | `business/publishing/models.py` | Phase 1 | Track content publishing | | **DeploymentRecord Model** | `business/publishing/models.py` | Phase 3 | Track site deployments | --- ## PUBLISHER API ### 5.4 Publisher API | Task | File | Dependencies | Implementation | |------|------|--------------|----------------| | **Publisher ViewSet** | `modules/publisher/views.py` | PublisherService | API for publishing operations | --- ## MULTIPLE LAYOUT OPTIONS ### 5.6 Multiple Layout Options **Layout Types**: - Default (Standard) - Minimal (Clean, simple) - Magazine (Editorial, content-focused) - Ecommerce (Product-focused) - Portfolio (Showcase) - Blog (Content-first) - Corporate (Business) | Task | File | Dependencies | Implementation | |------|------|--------------|----------------| | **Layout Configuration** | `business/site_building/models.py` | Phase 3 | Store layout selection | | **Layout Renderer** | `sites/src/utils/layoutRenderer.ts` | Phase 5 | Render different layouts | --- ## TESTING & VALIDATION ### 5.5 Testing **Test Cases**: - ✅ Sites renderer loads site definitions - ✅ Blocks render correctly - ✅ Deployment works end-to-end - ✅ Sites are accessible publicly - ✅ Multiple layouts work correctly --- ## IMPLEMENTATION CHECKLIST ### Backend Tasks - [ ] Create PublisherService - [ ] Create SitesRendererAdapter - [ ] Create DeploymentService - [ ] Create PublishingRecord model - [ ] Create DeploymentRecord model - [ ] Create Publisher ViewSet ### Frontend Tasks - [ ] Create Sites container in docker-compose - [ ] Create sites renderer frontend - [ ] Create site definition loader - [ ] Create layout renderer - [ ] Create template system - [ ] Import shared components --- ## SUCCESS CRITERIA - ✅ Sites renderer loads site definitions - ✅ Blocks render correctly - ✅ Deployment works end-to-end - ✅ Sites are accessible publicly - ✅ Multiple layouts supported --- **END OF PHASE 5 DOCUMENT**