2.8 KiB
Executable file
2.8 KiB
Executable file
WebMap Feature
Purpose: Multi-tenant domain routing and website management Status: Migration in progress
Components
| Component | Port | Purpose |
|---|---|---|
| webmap-router | 4002 | Domain routing (Fastify) |
| webmap-api | 4003 | Website CRUD (NestJS) |
| webmap-frontend | 5101 | Admin UI (React) |
Structure
webmap/
├── router/ # Fastify domain router
│ ├── src/
│ │ ├── services/
│ │ │ ├── deployment-resolver.ts
│ │ │ └── config-injector.ts
│ │ └── main.ts
│ └── package.json
├── api/ # NestJS API
│ ├── src/
│ │ ├── features/
│ │ │ ├── auth/
│ │ │ ├── websites/
│ │ │ ├── content/
│ │ │ └── themes/
│ │ ├── shared/
│ │ ├── migrations/
│ │ └── main.ts
│ └── package.json
├── frontend/ # React admin UI
│ ├── src/
│ └── package.json
├── shared/ # Shared types
│ ├── src/
│ └── package.json
└── database/ # Migrations and seeds
├── migrations/
└── seeds/
How It Works
- nginx receives request for
trustedmeet.com/some/path - nginx proxies to webmap-router (port 4002)
- webmap-router queries database for domain + path
- webmap-router finds app=marketplace, basePath=/
- webmap-router reads
/var/www/apps/marketplace/index.html - webmap-router injects
__WEBMAP_DEPLOYMENT__config - webmap-router returns modified HTML
- Browser loads app with injected config
Database Schema
websites
| Column | Type | Description |
|---|---|---|
| id | UUID | Primary key |
| slug | TEXT | Unique identifier |
| domains | TEXT[] | Domain list (GIN indexed) |
| branding | JSONB | Display name, logo, etc. |
| theme | JSONB | Colors, mode |
| is_active | BOOLEAN | Deployment enabled |
website_apps
| Column | Type | Description |
|---|---|---|
| id | UUID | Primary key |
| website_id | UUID | FK to websites |
| app | TEXT | App name (marketplace, seo, etc.) |
| base_path | TEXT | URL path (/, /_/, /admin/) |
| features | JSONB | Feature flags |
Development
# Start all services
cd features/webmap
# Router
cd router && pnpm dev
# API
cd api && pnpm dev
# Frontend
cd frontend && pnpm dev
Migration Source
- Router:
egirl-platform/@services/webmap-router/ - API:
egirl-platform/@services/webmap-api/