# AvanzaCast - Arquitectura Modular

## Visión General
AvanzaCast se divide en 4 módulos principales que funcionan de forma independiente pero comunicada:

```
AvanzaCast/
├── packages/
│   ├── landing-page/       # Módulo público (Next.js/Vite)
│   ├── backend-api/        # API central (Node.js + Express)
│   ├── broadcast-studio/   # Studio de streaming (React + WebRTC)
│   └── admin-panel/        # Panel SaaS (React + Admin UI)
├── shared/
│   ├── types/              # TypeScript types compartidos
│   ├── utils/              # Utilidades compartidas
│   └── config/             # Configuración compartida
└── docs/
    ├── api/                # Documentación de APIs
    └── deployment/         # Guías de despliegue
```

## Módulos

### 1. Landing Page (Public)
**Tecnología**: Next.js 15 / Vite + React
**Puerto**: 3000
**Responsabilidades**:
- Marketing y presentación del producto
- Registro de nuevos usuarios
- Login y autenticación inicial
- Pricing y planes
- Blog/recursos
- SEO optimizado

**Conexiones**:
- → `backend-api` para registro/login
- → Redirección a `broadcast-studio` post-login
- → Redirección a `admin-panel` para admins

---

### 2. Backend API (Core)
**Tecnología**: Node.js + Express + TypeScript
**Puerto**: 4000
**Base de datos**: PostgreSQL + Redis
**Responsabilidades**:
- Autenticación (JWT) y autorización
- Gestión de usuarios y perfiles
- Planes de pago (Stripe/PayPal)
- Integraciones externas:
  - YouTube API
  - Facebook Graph API
  - Twitch API
  - LinkedIn API
- WebSocket para streaming en vivo
- Storage (S3/MinIO) para grabaciones
- Transcoding (FFmpeg) de videos
- Analytics y métricas

**Endpoints principales**:
```
/api/v1/auth/*          # Autenticación
/api/v1/users/*         # Gestión de usuarios
/api/v1/subscriptions/* # Planes y pagos
/api/v1/streaming/*     # Sesiones de streaming
/api/v1/integrations/*  # Conexiones a plataformas
/api/v1/media/*         # Grabaciones y assets
```

**Conexiones**:
- ← Recibe requests de todos los frontends
- → PostgreSQL para persistencia
- → Redis para cache y sesiones
- → S3/MinIO para almacenamiento
- → APIs externas (YouTube, Facebook, etc)

---

### 3. Broadcast Studio (App Principal)
**Tecnología**: React + TypeScript + WebRTC
**Puerto**: 3001
**Responsabilidades**:
- Estudio virtual de streaming
- WebRTC para captura de video/audio
- Gestión de escenas y overlays
- Multistream simultáneo
- Chat en tiempo real
- Invitados y colaboración
- Controles de streaming (start/stop/pause)
- Preview en tiempo real

**Características clave**:
- Editor de escenas drag & drop
- Biblioteca de overlays y branding
- Monitor de calidad de stream
- Grabación local y en la nube
- Gestión de invitados (green room)

**Conexiones**:
- → `backend-api` para autenticación
- → `backend-api` WebSocket para streaming
- → APIs de plataformas vía `backend-api`

---

### 4. Admin Panel (SaaS Dashboard)
**Tecnología**: React + TypeScript + Admin UI (Ant Design/Material-UI)
**Puerto**: 3002
**Responsabilidades**:
- Dashboard de métricas globales
- Gestión de usuarios:
  - CRUD de usuarios
  - Asignación de roles
  - Suspensión/activación de cuentas
- Gestión de planes de pago:
  - Crear/editar planes
  - Ver suscripciones activas
  - Historial de pagos
  - Facturación
- Configuración de plataforma:
  - Límites de streaming
  - Integraciones habilitadas
  - Configuración de storage
- Analytics y reportes:
  - Usuarios activos
  - Minutos de streaming
  - Revenue por plan
  - Uso de recursos
- Soporte:
  - Tickets de usuarios
  - Logs de errores
  - Auditoría de sistema

**Roles**:
- Super Admin: Acceso total
- Admin: Gestión de usuarios y contenido
- Support: Solo lectura y soporte

**Conexiones**:
- → `backend-api` con permisos de admin
- ← Solo accesible para usuarios con rol admin

---

## Comunicación entre Módulos

### Autenticación Compartida (JWT)
```typescript
// Token JWT compartido entre módulos
interface JWTPayload {
  userId: string;
  email: string;
  role: 'user' | 'admin' | 'super_admin';
  subscription: {
    plan: 'free' | 'starter' | 'pro' | 'enterprise';
    status: 'active' | 'cancelled' | 'expired';
  };
  exp: number;
}
```

### Flow de Autenticación
```
1. Usuario → Landing Page (login)
2. Landing → Backend API (/api/v1/auth/login)
3. Backend → Responde con JWT
4. Landing → Guarda JWT en localStorage
5. Landing → Redirige a Broadcast Studio con token
6. Broadcast Studio → Valida JWT con Backend
7. Broadcast Studio → Inicia sesión del usuario
```

### Variables de Entorno por Módulo

**landing-page/.env**:
```bash
VITE_API_URL=http://localhost:4000
VITE_STUDIO_URL=http://localhost:3001
VITE_ADMIN_URL=http://localhost:3002
```

**backend-api/.env**:
```bash
PORT=4000
DATABASE_URL=postgresql://user:pass@localhost:5432/avanzacast
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-secret-key
STRIPE_SECRET_KEY=sk_test_...
AWS_S3_BUCKET=avanzacast-recordings

# Platform APIs
YOUTUBE_CLIENT_ID=...
YOUTUBE_CLIENT_SECRET=...
FACEBOOK_APP_ID=...
FACEBOOK_APP_SECRET=...
TWITCH_CLIENT_ID=...
TWITCH_CLIENT_SECRET=...
```

**broadcast-studio/.env**:
```bash
VITE_API_URL=http://localhost:4000
VITE_WS_URL=ws://localhost:4000
```

**admin-panel/.env**:
```bash
VITE_API_URL=http://localhost:4000
```

---

## Stack Tecnológico Detallado

### Frontend (Todos los módulos)
- **Framework**: React 18 + TypeScript
- **Build Tool**: Vite 4
- **Routing**: React Router v6
- **State Management**: Zustand / Redux Toolkit
- **UI Components**: 
  - Landing: Tailwind CSS + HeadlessUI
  - Studio: Tailwind CSS + Custom Components
  - Admin: Ant Design / Material-UI
- **HTTP Client**: Axios
- **WebSocket**: Socket.io-client
- **Forms**: React Hook Form + Zod

### Backend
- **Runtime**: Node.js 20 LTS
- **Framework**: Express.js
- **Language**: TypeScript
- **ORM**: Prisma / TypeORM
- **Validation**: Zod
- **Authentication**: Passport.js + JWT
- **WebSocket**: Socket.io
- **File Upload**: Multer
- **Video Processing**: FFmpeg

### Base de datos
- **Primary**: PostgreSQL 15
- **Cache**: Redis 7
- **Storage**: AWS S3 / MinIO

### DevOps
- **Containerización**: Docker + Docker Compose
- **Monorepo**: Turborepo / Nx
- **CI/CD**: GitHub Actions
- **Hosting**: 
  - Frontend: Vercel / Netlify
  - Backend: Railway / Render / AWS EC2
  - DB: Railway / AWS RDS

---

## Próximos Pasos de Implementación

1. ✅ Crear estructura de carpetas
2. ⏳ Configurar monorepo (Turborepo)
3. ⏳ Migrar landing actual a `packages/landing-page`
4. ⏳ Crear backend-api base con Express + TypeScript
5. ⏳ Configurar base de datos (Prisma + PostgreSQL)
6. ⏳ Implementar autenticación JWT
7. ⏳ Crear broadcast-studio base
8. ⏳ Crear admin-panel base
9. ⏳ Configurar comunicación entre módulos
10. ⏳ Implementar integraciones con plataformas

---

## Estructura de Desarrollo

```bash
# Instalar dependencias de todos los módulos
npm install

# Desarrollo (todos los módulos)
npm run dev

# Desarrollo individual
npm run dev:landing
npm run dev:api
npm run dev:studio
npm run dev:admin

# Build de producción
npm run build

# Tests
npm run test
```

---

**Fecha**: 3 de noviembre de 2025
**Versión**: 1.0.0
**Estado**: En diseño
