- 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.
117 lines
4.0 KiB
Markdown
117 lines
4.0 KiB
Markdown
# 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 `ProtectedRoute` component
|
|
- Builder routes wrapped in `BuilderLayout` component
|
|
- Code-splitting for builder routes (lazy loading)
|
|
|
|
### 2. Authentication
|
|
- `ProtectedRoute` component 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.ts` with code-splitting
|
|
- Builder routes split into separate chunk
|
|
- Supports both `sites.igny8.com` and `builder.igny8.com` domains
|
|
|
|
### 5. Docker Configuration
|
|
- Removed `igny8_site_builder` service from docker-compose
|
|
- Updated `igny8_sites` service 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
|
|
|
|
1. **Test Builder Functionality**
|
|
- Navigate to `/builder` (should require auth)
|
|
- Test wizard flow
|
|
- Test preview
|
|
- Test dashboard
|
|
|
|
2. **Test Renderer Functionality**
|
|
- Navigate to `/:siteId/*` (should work without auth)
|
|
- Test site loading from filesystem
|
|
- Test site loading from API
|
|
|
|
3. **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`
|
|
|
|
4. **Cleanup** (Optional)
|
|
- Remove `/site-builder` directory after verification
|
|
- Update documentation
|
|
|
|
## 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
|
|
|