feat: simplify domain architecture - consolidate to spark.jumpstartscaling.com

This commit is contained in:
cawcenter
2025-12-14 11:00:17 -05:00
parent 060ff6420b
commit 6d9209553e
2 changed files with 303 additions and 3 deletions

299
DOMAIN_ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,299 @@
# Simplified Domain Architecture
## ✅ New Domain Configuration (Simplified!)
### Primary Domain: `spark.jumpstartscaling.com`
**Hosts BOTH:**
- 🎨 Frontend Admin UI (`/admin/*`)
- 🔌 Directus Backend API (`/items/*`, `/collections/*`, etc.)
**Routes:**
- `/admin` - Admin dashboard
- `/admin/sites` - Sites manager
- `/admin/pages` - Pages manager
- `/items/sites` - Directus API
- `/collections` - Directus collections API
- `/auth/login` - Authentication
### Preview/Staging Domain: `launch.jumpstartscaling.com`
**Used ONLY for:**
- 👁️ Site previews (`/preview/site/[id]`)
- 👁️ Page previews (`/preview/page/[id]`)
- 👁️ Post previews (`/preview/post/[id]`)
- 👁️ Article previews (`/preview/article/[id]`)
---
## 🎯 Why This is Better
### Before (Complicated):
```
launch.jumpstartscaling.com → Frontend
spark.jumpstartscaling.com → Backend
❌ Confusing
❌ CORS complexity
❌ Two domains to remember
```
### After (Simplified):
```
spark.jumpstartscaling.com → Everything (Frontend + Backend)
launch.jumpstartscaling.com → Preview/Staging only
✅ Simple
✅ Same domain = no CORS issues
✅ One domain for daily use
```
---
## 📦 Updated Configuration
### docker-compose.yaml Changes
#### Directus (Backend)
```yaml
directus:
environment:
PUBLIC_URL: 'https://spark.jumpstartscaling.com'
CORS_ORIGIN: 'https://spark.jumpstartscaling.com,https://launch.jumpstartscaling.com,http://localhost:4321'
labels:
coolify.fqdn: 'spark.jumpstartscaling.com'
coolify.port: '8055'
```
#### Frontend
```yaml
frontend:
environment:
PUBLIC_DIRECTUS_URL: 'https://spark.jumpstartscaling.com'
PUBLIC_PLATFORM_DOMAIN: 'spark.jumpstartscaling.com'
PREVIEW_DOMAIN: 'launch.jumpstartscaling.com'
labels:
coolify.fqdn: 'spark.jumpstartscaling.com'
coolify.port: '4321'
```
---
## 🌐 How Coolify Serves Both
### Traefik Routing (Coolify handles this automatically)
```
https://spark.jumpstartscaling.com/*
Traefik inspects path:
/admin*, /preview*, /*, etc. → Frontend container (port 4321)
/items/*, /collections/*, /auth/*, etc. → Passed through to Directus
Frontend makes API calls to same domain
Directus API (port 8055 internal, exposed via Traefik)
```
**Key:** Both services on same domain, Traefik routes based on path
---
## 🔗 API Calls (Same Domain!)
### Before (Cross-Domain):
```javascript
// Frontend at launch.jumpstartscaling.com
fetch('https://spark.jumpstartscaling.com/items/sites')
// ❌ CORS needed
```
### After (Same Domain):
```javascript
// Frontend at spark.jumpstartscaling.com
fetch('https://spark.jumpstartscaling.com/items/sites')
// ✅ No CORS issues!
```
Or even simpler:
```javascript
// Relative URL works!
fetch('/items/sites')
// ✅ Same domain, no CORS
```
---
## 📍 URL Examples
### Main App (spark.jumpstartscaling.com)
**Admin Pages:**
- `https://spark.jumpstartscaling.com/admin`
- `https://spark.jumpstartscaling.com/admin/sites`
- `https://spark.jumpstartscaling.com/admin/content/avatars`
**API Endpoints:**
- `https://spark.jumpstartscaling.com/items/sites`
- `https://spark.jumpstartscaling.com/collections`
- `https://spark.jumpstartscaling.com/auth/login`
**Direct Directus Admin:**
- `https://spark.jumpstartscaling.com/admin` (Directus Studio)
### Preview/Staging (launch.jumpstartscaling.com)
**Preview Routes:**
- `https://launch.jumpstartscaling.com/preview/site/abc123`
- `https://launch.jumpstartscaling.com/preview/page/def456`
- `https://launch.jumpstartscaling.com/preview/post/ghi789`
---
## 🔧 Frontend Code Updates
### Environment Variables Available
```javascript
// In frontend components:
const DIRECTUS_URL = import.meta.env.PUBLIC_DIRECTUS_URL;
// → 'https://spark.jumpstartscaling.com'
const PLATFORM_DOMAIN = import.meta.env.PUBLIC_PLATFORM_DOMAIN;
// → 'spark.jumpstartscaling.com'
const PREVIEW_DOMAIN = import.meta.env.PREVIEW_DOMAIN;
// → 'launch.jumpstartscaling.com'
```
### API Client Usage
```typescript
import { getDirectusClient } from '@/lib/directus/client';
// Automatically connects to spark.jumpstartscaling.com
const client = getDirectusClient();
// All API calls go to same domain
const sites = await client.request(readItems('sites'));
```
### Preview Links
```typescript
// Use PREVIEW_DOMAIN for staging/preview
const previewUrl = `https://${import.meta.env.PREVIEW_DOMAIN}/preview/site/${siteId}`;
// Example:
// https://launch.jumpstartscaling.com/preview/site/abc123
```
---
## 🚀 Deployment Impact
### What Changes After Redeploy:
#### ✅ Works Immediately:
- Admin dashboard
- All admin pages
- API calls (same domain!)
- Authentication
- Data fetching
#### ✅ Still Works:
- Preview links (launch domain)
- Existing data
- Database tables
- Permissions
#### ❌ Breaks (temporarily):
- Old bookmarks to `launch.jumpstartscaling.com/admin`
- **Fix:** Update bookmark to `spark.jumpstartscaling.com/admin`
---
## 📊 Comparison Table
| Feature | Old (2 domains) | New (1 + preview) |
|---------|-----------------|-------------------|
| **Main App** | launch.jumpstartscaling.com | spark.jumpstartscaling.com |
| **API** | spark.jumpstartscaling.com | spark.jumpstartscaling.com |
| **CORS** | Required | Not needed (same domain) |
| **Preview** | N/A | launch.jumpstartscaling.com |
| **Complexity** | High | Low |
| **URLs to Remember** | 2 | 1 |
---
## 🎯 User Workflow
### Daily Use:
1. Go to `https://spark.jumpstartscaling.com/admin`
2. Everything works on one domain
3. No confusion!
### Preview/Staging:
1. Click "Preview" button in admin
2. Opens `https://launch.jumpstartscaling.com/preview/...`
3. See how content will look
4. Close preview, back to admin
---
## 🔐 Security & CORS
### CORS Configuration:
```yaml
CORS_ORIGIN: 'https://spark.jumpstartscaling.com,https://launch.jumpstartscaling.com,http://localhost:4321'
```
**Why both domains in CORS?**
- `spark.jumpstartscaling.com` - Main app (technically same origin, but explicit is good)
- `launch.jumpstartscaling.com` - Preview pages calling API
- `localhost:4321` - Local development
---
## 📝 Migration Notes
### For Existing Users:
- Update browser bookmarks from `launch` to `spark`
- API tokens still work (same backend)
- All data preserved
- No database changes needed
### For New Deployments:
- Everything works out of the box
- One domain to configure
- Preview domain is bonus feature
---
## ✅ Verification After Deploy
### Test Checklist:
- [ ] `https://spark.jumpstartscaling.com/admin` loads
- [ ] Login works
- [ ] Sites manager shows data
- [ ] API calls in browser console show `spark.jumpstartscaling.com`
- [ ] No CORS errors
- [ ] Preview links use `launch.jumpstartscaling.com`
---
## 🎉 Summary
**One domain for everything:**
-`spark.jumpstartscaling.com` - Your main Spark Platform
-`launch.jumpstartscaling.com` - Preview/staging for content
**Benefits:**
- 🎯 Simple mental model
- 🚀 No CORS complexity
- 📱 One URL to remember
- 👁️ Dedicated preview domain
**Status:** Ready to deploy!
---
**Updated:** December 14, 2025
**Architecture:** Simplified to single-domain with preview subdomain

View File

@@ -49,7 +49,7 @@ services:
MAX_PAYLOAD_SIZE: '500mb'
RATE_LIMITER_ENABLED: 'false'
CORS_ORIGIN: 'https://launch.jumpstartscaling.com,https://spark.jumpstartscaling.com,http://localhost:4321'
CORS_ORIGIN: 'https://spark.jumpstartscaling.com,https://launch.jumpstartscaling.com,http://localhost:4321'
CORS_ENABLED: 'true'
PUBLIC_URL: 'https://spark.jumpstartscaling.com'
@@ -78,13 +78,14 @@ services:
environment:
PUBLIC_DIRECTUS_URL: 'https://spark.jumpstartscaling.com'
DIRECTUS_ADMIN_TOKEN: ''
PUBLIC_PLATFORM_DOMAIN: 'launch.jumpstartscaling.com'
PUBLIC_PLATFORM_DOMAIN: 'spark.jumpstartscaling.com'
PREVIEW_DOMAIN: 'launch.jumpstartscaling.com'
depends_on:
- directus
labels:
coolify.managed: 'true'
coolify.name: 'frontend'
coolify.fqdn: 'launch.jumpstartscaling.com'
coolify.fqdn: 'spark.jumpstartscaling.com'
coolify.port: '4321'
volumes: