- Merged the site builder functionality into the main app, enhancing the SiteBuilderWizard component with new steps and improved UI. - Updated the Docker Compose configuration by removing the separate site builder service and integrating its functionality into the igny8_sites service. - Enhanced Vite configuration to support code-splitting for builder routes, optimizing loading times. - Updated package dependencies to include new libraries for state management and form handling.
4.0 KiB
4.0 KiB
Site Builder → Sites Container Migration Summary
Overview
Successfully merged Site Builder container into Sites container. Sites is now the primary container hosting both:
- Public Site Renderer (no auth required)
- Site Builder (auth required)
Structure Changes
New Directory Structure
sites/src/
├── builder/ # Site Builder (from site-builder/src/)
│ ├── pages/ # Wizard, Preview, Dashboard
│ ├── components/ # Builder-specific components
│ ├── state/ # Zustand stores
│ ├── api/ # API client with conditional auth
│ ├── types/ # TypeScript types
│ └── App.css # Builder styles
├── renderer/ # Sites Renderer (existing)
│ ├── pages/ # SiteRenderer component
│ ├── loaders/ # Site definition loaders
│ ├── utils/ # Layout renderer utilities
│ └── types/ # Renderer types
├── shared/ # Shared components
│ └── ProtectedRoute.tsx
├── App.tsx # Unified router
└── main.tsx # Entry point
Routing Structure
Public Routes (No Auth)
/:siteId/*- Site renderer (public sites)/- Root page
Builder Routes (Auth Required)
/builder- Wizard page/builder/preview- Preview canvas/builder/dashboard- Blueprint history
Key Changes
1. Unified Router (App.tsx)
- Single router handles both builder and renderer routes
- Builder routes wrapped in
ProtectedRoutecomponent - Builder routes wrapped in
BuilderLayoutcomponent - Code-splitting for builder routes (lazy loading)
2. Authentication
ProtectedRoutecomponent checks for JWT token in localStorage- Builder API client conditionally includes auth headers
- Public renderer routes have no authentication
3. API Clients
- Builder API (
builder/api/builder.api.ts): Includes auth token if available - Renderer API (
renderer/loaders/loadSiteDefinition.ts): No auth required
4. Build Configuration
- Updated
vite.config.tswith code-splitting - Builder routes split into separate chunk
- Supports both
sites.igny8.comandbuilder.igny8.comdomains
5. Docker Configuration
- Removed
igny8_site_builderservice from docker-compose - Updated
igny8_sitesservice comment - Single container now handles both functions
Backend (No Changes)
- Backend Django views remain unchanged
- API endpoints:
/api/v1/site-builder/(same as before) - Database tables: No changes
- Authentication: Same JWT-based auth
Migration Checklist
✅ Created merged directory structure ✅ Moved site-builder files to sites/src/builder/ ✅ Created unified App.tsx with routing ✅ Created ProtectedRoute component ✅ Created BuilderLayout component ✅ Merged package.json dependencies ✅ Updated vite.config.ts with code-splitting ✅ Updated main.tsx entry point ✅ Updated docker-compose.app.yml (removed site_builder service) ✅ Updated API clients with conditional authentication ✅ Updated index.css with builder styles
Next Steps
-
Test Builder Functionality
- Navigate to
/builder(should require auth) - Test wizard flow
- Test preview
- Test dashboard
- Navigate to
-
Test Renderer Functionality
- Navigate to
/:siteId/*(should work without auth) - Test site loading from filesystem
- Test site loading from API
- Navigate to
-
Build & Deploy
- Build Docker image:
docker build -t igny8-sites-dev:latest -f Dockerfile.dev . - Update docker-compose:
docker compose -f docker-compose.app.yml up -d igny8_sites
- Build Docker image:
-
Cleanup (Optional)
- Remove
/site-builderdirectory after verification - Update documentation
- Remove
Notes
- No Backward Compatibility: Old site-builder container is removed
- Backend Unchanged: All Django views and models remain the same
- Code-Splitting: Builder code is lazy-loaded, so public sites don't load builder code
- Route Conflicts: Builder routes are namespaced under
/builder/*to avoid conflicts