- Update vision, architecture and technical documentation - Update module definitions (PMC-001 to PMC-008) - Update requirements documentation - Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml - Add orchestration guidelines and references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
487 lines
14 KiB
Markdown
487 lines
14 KiB
Markdown
---
|
|
id: "ARCHITECTURE"
|
|
title: "Architecture"
|
|
type: "Documentation"
|
|
project: "platform_marketing_content"
|
|
version: "1.0.0"
|
|
updated_date: "2026-01-04"
|
|
---
|
|
|
|
# Architecture
|
|
|
|
## Overview
|
|
|
|
**Platform Marketing Content (PMC)** es una plataforma de generación y gestión de contenido de marketing asistida por inteligencia artificial. Integra ComfyUI para generación de imágenes AI y modelos LLM para contenido textual, ofreciendo un CMS completo para equipos de marketing.
|
|
|
|
La arquitectura sigue un patrón de aplicación web full-stack con NestJS en backend y React en frontend, con integraciones a servicios de IA para automatización de contenido.
|
|
|
|
## Tech Stack
|
|
|
|
- **Backend:** NestJS 10+ + TypeScript 5.3+
|
|
- **Frontend:** React + TypeScript + Tailwind CSS + Vite
|
|
- **Database:** PostgreSQL 16 (pmc_dev)
|
|
- **Cache:** Redis 7
|
|
- **Storage:** MinIO (S3-compatible)
|
|
- **AI Art:** ComfyUI (Stable Diffusion, FLUX)
|
|
- **LLM:** Integration with OpenAI, Claude, local models
|
|
- **Auth:** JWT + Passport.js
|
|
- **Real-time:** Socket.IO (Bull queues for async jobs)
|
|
|
|
## Module Structure
|
|
|
|
```
|
|
platform_marketing_content/
|
|
├── apps/
|
|
│ ├── backend/ # NestJS API
|
|
│ │ └── src/
|
|
│ │ ├── modules/ # Feature modules
|
|
│ │ │ ├── auth/ # Authentication (JWT, local, OAuth)
|
|
│ │ │ ├── tenants/ # Multi-tenant management
|
|
│ │ │ ├── projects/ # Marketing projects
|
|
│ │ │ ├── assets/ # Digital assets (images, videos)
|
|
│ │ │ ├── generation/ # AI content generation
|
|
│ │ │ ├── automation/ # Workflow automation
|
|
│ │ │ ├── crm/ # CRM integration
|
|
│ │ │ └── analytics/ # Analytics & reporting
|
|
│ │ ├── common/ # Shared code
|
|
│ │ │ ├── decorators/ # Custom decorators
|
|
│ │ │ ├── filters/ # Exception filters
|
|
│ │ │ ├── guards/ # Auth guards
|
|
│ │ │ ├── interceptors/ # HTTP interceptors
|
|
│ │ │ └── pipes/ # Validation pipes
|
|
│ │ ├── config/ # Configuration
|
|
│ │ ├── app.module.ts # Root module
|
|
│ │ └── main.ts # Bootstrap
|
|
│ │
|
|
│ └── frontend/ # React SPA
|
|
│ └── src/
|
|
│ ├── modules/ # Feature modules
|
|
│ │ ├── auth/ # Login, register
|
|
│ │ ├── dashboard/ # Main dashboard
|
|
│ │ ├── projects/ # Project management
|
|
│ │ ├── assets/ # Asset library
|
|
│ │ ├── generation/ # AI generation UI
|
|
│ │ ├── campaigns/ # Marketing campaigns
|
|
│ │ └── analytics/ # Analytics dashboard
|
|
│ ├── shared/ # Shared components
|
|
│ │ ├── components/ # UI components
|
|
│ │ ├── hooks/ # Custom hooks
|
|
│ │ └── utils/ # Utilities
|
|
│ └── lib/ # Libraries
|
|
│
|
|
├── database/ # Database
|
|
│ ├── schemas/ # Schema definitions
|
|
│ └── migrations/ # Database migrations
|
|
│
|
|
├── docs/ # Documentation
|
|
└── orchestration/ # Agent orchestration
|
|
```
|
|
|
|
## Database Schemas
|
|
|
|
### Core Schemas (6 schemas)
|
|
|
|
| Schema | Purpose | Key Tables |
|
|
|--------|---------|------------|
|
|
| **auth** | Authentication & users | users, sessions, oauth_accounts |
|
|
| **tenants** | Multi-tenant management | tenants, tenant_settings |
|
|
| **projects** | Marketing projects | projects, campaigns, schedules |
|
|
| **assets** | Digital asset management | assets, tags, collections |
|
|
| **generation** | AI generation | generation_jobs, templates, workflows |
|
|
| **analytics** | Metrics & reporting | events, conversions, performance |
|
|
|
|
## Data Flow Architecture
|
|
|
|
```
|
|
┌──────────────┐
|
|
│ Frontend │ (React SPA - Port 3110)
|
|
│ (Browser) │
|
|
└──────┬───────┘
|
|
│ HTTP/WebSocket
|
|
▼
|
|
┌─────────────────────────────────────────────┐
|
|
│ Backend API (NestJS - Port 3111) │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ Controllers (REST Endpoints) │ │
|
|
│ └────────┬────────────────────────────┘ │
|
|
│ ▼ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ Services (Business Logic) │ │
|
|
│ └────────┬──────────────┬─────────────┘ │
|
|
│ │ │ │
|
|
│ ▼ ▼ │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ Repositories │ │ Bull Queue │ │
|
|
│ │ (TypeORM) │ │ (Redis) │ │
|
|
│ └──────┬───────┘ └──────┬───────┘ │
|
|
└─────────┼──────────────────┼────────────────┘
|
|
│ │
|
|
▼ ▼
|
|
┌─────────────────┐ ┌──────────────┐
|
|
│ PostgreSQL │ │ Redis │
|
|
│ (Database) │ │ (Cache) │
|
|
└─────────────────┘ └──────────────┘
|
|
|
|
┌──────────────────────────────────────────┐
|
|
│ AI Services (External) │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ ComfyUI │ │ LLM API │ │
|
|
│ │ (Port 8188) │ │ (OpenAI) │ │
|
|
│ └──────────────┘ └──────────────┘ │
|
|
└──────────────────────────────────────────┘
|
|
|
|
┌──────────────┐
|
|
│ MinIO │ (S3-compatible storage)
|
|
│ (Port 9000) │
|
|
└──────────────┘
|
|
```
|
|
|
|
### AI Content Generation Flow
|
|
|
|
```
|
|
User requests content generation
|
|
↓
|
|
Frontend → POST /api/generation/create
|
|
↓
|
|
Backend validates request
|
|
↓
|
|
Create generation_job (status: pending)
|
|
↓
|
|
Add to Bull queue (async processing)
|
|
↓
|
|
Worker picks up job
|
|
↓
|
|
├─→ Text generation: Call LLM API (GPT-4, Claude)
|
|
│ ↓
|
|
│ Save to database
|
|
│
|
|
└─→ Image generation: Call ComfyUI API
|
|
↓
|
|
Upload to MinIO
|
|
↓
|
|
Save metadata to database
|
|
↓
|
|
Update job status (completed/failed)
|
|
↓
|
|
WebSocket notification to frontend
|
|
↓
|
|
User sees generated content
|
|
```
|
|
|
|
## Key Design Decisions
|
|
|
|
### 1. NestJS Framework
|
|
|
|
**Decision:** Usar NestJS en lugar de Express.js básico.
|
|
|
|
**Rationale:**
|
|
- Arquitectura modular out-of-the-box
|
|
- Dependency injection incorporado
|
|
- TypeScript first-class support
|
|
- Decorators para routing y validation
|
|
- Integración nativa con TypeORM, Bull, WebSockets
|
|
|
|
**Trade-off:** Curva de aprendizaje mayor, pero mejor estructura para proyectos grandes
|
|
|
|
### 2. Bull Queue for Async Processing
|
|
|
|
**Decision:** Procesar generaciones de IA en background con Bull.
|
|
|
|
**Rationale:**
|
|
- Generaciones pueden tardar minutos (especialmente imágenes)
|
|
- No bloquear requests HTTP
|
|
- Retry automático si falla
|
|
- Priorización de jobs
|
|
- Dashboard de monitoreo
|
|
|
|
**Implementation:**
|
|
|
|
```typescript
|
|
// generation.processor.ts
|
|
@Processor('generation')
|
|
export class GenerationProcessor {
|
|
@Process('generate-image')
|
|
async handleImageGeneration(job: Job) {
|
|
const { prompt, settings } = job.data;
|
|
|
|
// Call ComfyUI
|
|
const result = await this.comfyUIService.generate(prompt, settings);
|
|
|
|
// Upload to MinIO
|
|
const url = await this.storageService.upload(result.image);
|
|
|
|
// Save to database
|
|
await this.generationRepository.update(job.data.id, {
|
|
status: 'completed',
|
|
resultUrl: url
|
|
});
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. MinIO for Object Storage
|
|
|
|
**Decision:** MinIO como almacenamiento S3-compatible en lugar de filesystem.
|
|
|
|
**Rationale:**
|
|
- Compatible con S3 (fácil migración a AWS S3 en producción)
|
|
- Versioning de assets
|
|
- Metadata y tags
|
|
- Pre-signed URLs para acceso controlado
|
|
- Replicación y backup
|
|
|
|
### 4. ComfyUI Integration
|
|
|
|
**Decision:** Integrar ComfyUI para generación de imágenes AI.
|
|
|
|
**Rationale:**
|
|
- Workflow visual poderoso
|
|
- Múltiples modelos (Stable Diffusion, FLUX, etc.)
|
|
- Control fino sobre generación
|
|
- Open-source y self-hosted
|
|
- API REST para integración
|
|
|
|
**Alternative:** Usar APIs directas (Replicate, Stability AI) - más simple pero menos flexible
|
|
|
|
### 5. Multi-Tenant Architecture
|
|
|
|
**Decision:** Soporte multi-tenant a nivel de aplicación.
|
|
|
|
**Rationale:**
|
|
- SaaS-ready desde el inicio
|
|
- Aislamiento de datos por tenant
|
|
- Diferentes planes y límites por tenant
|
|
- Escalable para múltiples clientes
|
|
|
|
**Implementation:** Similar a ERP-Suite (tenant_id en cada tabla, RLS opcional)
|
|
|
|
### 6. Repository Pattern with TypeORM
|
|
|
|
**Decision:** Usar Repository Pattern en lugar de Active Record.
|
|
|
|
**Rationale:**
|
|
- Mejor separación de concerns
|
|
- Facilita testing (mock repositories)
|
|
- Migrations automáticas (development)
|
|
- Type-safe queries
|
|
|
|
## Dependencies
|
|
|
|
### Critical Dependencies
|
|
|
|
| Dependency | Purpose | Criticality |
|
|
|------------|---------|-------------|
|
|
| **NestJS** | Backend framework | CRITICAL |
|
|
| **TypeORM** | ORM | CRITICAL |
|
|
| **PostgreSQL** | Database | CRITICAL |
|
|
| **Redis** | Cache, queues | HIGH |
|
|
| **Bull** | Job queues | HIGH |
|
|
| **MinIO** | Object storage | MEDIUM |
|
|
| **ComfyUI** | Image generation | MEDIUM |
|
|
|
|
### External Services
|
|
|
|
- **ComfyUI:** Image generation (local or cloud)
|
|
- **OpenAI/Claude:** Text generation
|
|
- **MinIO:** Object storage (S3-compatible)
|
|
- **Redis:** Caching and job queues
|
|
|
|
## Security Considerations
|
|
|
|
- **Authentication:** JWT with refresh tokens
|
|
- **Authorization:** Role-based (admin, user, viewer)
|
|
- **Multi-tenancy:** tenant_id isolation
|
|
- **File Upload:** Validation (type, size, malware scan)
|
|
- **API Rate Limiting:** Per tenant
|
|
- **CORS:** Configured for frontend origin
|
|
- **Input Validation:** Class-validator on DTOs
|
|
- **SQL Injection:** TypeORM parameterized queries
|
|
|
|
## Performance Optimizations
|
|
|
|
### Caching Strategy
|
|
|
|
- **Redis:** Cache generation results, frequently accessed assets
|
|
- **TTL:** Configurable per resource type
|
|
- **Invalidation:** Event-based
|
|
|
|
### Database
|
|
|
|
- Indexes on frequently queried columns
|
|
- Connection pooling
|
|
- Pagination on all list endpoints
|
|
- Lazy loading of relations
|
|
|
|
### Asset Delivery
|
|
|
|
- CDN for static assets (future)
|
|
- Image optimization (resize, compress)
|
|
- Pre-signed URLs with expiration
|
|
|
|
## Deployment Strategy
|
|
|
|
**Current:** Development environment
|
|
|
|
**Ports:**
|
|
- Frontend: 3110
|
|
- Backend: 3111
|
|
- MinIO API: 9000
|
|
- MinIO Console: 9001
|
|
- ComfyUI: 8188
|
|
|
|
**Future Production:**
|
|
- Docker containers
|
|
- Kubernetes orchestration
|
|
- AWS S3 for storage
|
|
- CloudFront CDN
|
|
- Managed PostgreSQL (RDS)
|
|
- Managed Redis (ElastiCache)
|
|
|
|
## Monitoring & Observability
|
|
|
|
**Planned:**
|
|
- NestJS Logger
|
|
- Error tracking (Sentry)
|
|
- Performance monitoring (Datadog/New Relic)
|
|
- Bull Board for queue monitoring
|
|
- Database monitoring
|
|
|
|
## Feature Modules
|
|
|
|
### Auth Module
|
|
- JWT authentication
|
|
- OAuth2 (Google, GitHub)
|
|
- Password reset
|
|
- Email verification
|
|
- Role-based access control
|
|
|
|
### Tenants Module
|
|
- Tenant management
|
|
- Settings & configuration
|
|
- Usage tracking
|
|
- Plan limits enforcement
|
|
|
|
### Projects Module
|
|
- Marketing projects
|
|
- Campaigns
|
|
- Schedules
|
|
- Team collaboration
|
|
|
|
### Assets Module
|
|
- Digital asset library
|
|
- Tags and collections
|
|
- Search and filtering
|
|
- Version control
|
|
- Sharing and permissions
|
|
|
|
### Generation Module
|
|
- AI text generation (GPT-4, Claude)
|
|
- AI image generation (ComfyUI)
|
|
- Template management
|
|
- Workflow automation
|
|
- Generation history
|
|
|
|
### Automation Module
|
|
- Scheduled generation
|
|
- Batch operations
|
|
- Webhooks
|
|
- API integrations
|
|
|
|
### CRM Module
|
|
- Contact management
|
|
- Segment creation
|
|
- Campaign targeting
|
|
- Email integration
|
|
|
|
### Analytics Module
|
|
- Performance metrics
|
|
- Conversion tracking
|
|
- Custom reports
|
|
- Dashboards
|
|
|
|
## Integration Points
|
|
|
|
### ComfyUI
|
|
|
|
**API Endpoints:**
|
|
- POST `/prompt` - Submit generation job
|
|
- GET `/history` - Get job status
|
|
- GET `/view` - Retrieve generated image
|
|
|
|
**Workflow:**
|
|
1. Build workflow JSON
|
|
2. Submit to ComfyUI
|
|
3. Poll for completion
|
|
4. Download result
|
|
5. Upload to MinIO
|
|
|
|
### LLM APIs
|
|
|
|
**OpenAI:**
|
|
```typescript
|
|
const completion = await openai.chat.completions.create({
|
|
model: 'gpt-4',
|
|
messages: [
|
|
{ role: 'system', content: 'You are a marketing content writer' },
|
|
{ role: 'user', content: prompt }
|
|
]
|
|
});
|
|
```
|
|
|
|
**Claude:**
|
|
```typescript
|
|
const message = await anthropic.messages.create({
|
|
model: 'claude-3-opus-20240229',
|
|
max_tokens: 1024,
|
|
messages: [{ role: 'user', content: prompt }]
|
|
});
|
|
```
|
|
|
|
### MinIO
|
|
|
|
```typescript
|
|
// Upload file
|
|
await minioClient.putObject(
|
|
'pmc-assets',
|
|
fileName,
|
|
fileBuffer,
|
|
fileSize,
|
|
{ 'Content-Type': mimeType }
|
|
);
|
|
|
|
// Get pre-signed URL
|
|
const url = await minioClient.presignedGetObject(
|
|
'pmc-assets',
|
|
fileName,
|
|
24 * 60 * 60 // 24 hours
|
|
);
|
|
```
|
|
|
|
## Future Improvements
|
|
|
|
### Short-term
|
|
- [ ] Implement real-time collaboration
|
|
- [ ] Add more AI models
|
|
- [ ] Improve asset search (full-text)
|
|
- [ ] Mobile responsive UI
|
|
|
|
### Medium-term
|
|
- [ ] Video generation support
|
|
- [ ] Social media scheduling
|
|
- [ ] A/B testing for content
|
|
- [ ] Brand kit management
|
|
|
|
### Long-term
|
|
- [ ] Marketplace for templates
|
|
- [ ] White-label solution
|
|
- [ ] Multi-language support
|
|
- [ ] Advanced analytics & ML insights
|
|
|
|
## References
|
|
|
|
- [CMS Guide](./CMS-GUIDE.md)
|
|
- [API Documentation](./API.md)
|
|
- [Contributing Guide](../CONTRIBUTING.md)
|
|
- [NestJS Documentation](https://nestjs.com/)
|
|
- [ComfyUI API](https://github.com/comfyanonymous/ComfyUI)
|