Skip to main content

🏗️ Arquitectura del Proyecto Yana

La arquitectura de Yana está diseñada para ser modular, escalable, mantenible y adecuada para ambientes productivos reales. Cada componente tiene una responsabilidad clara y se comunica con los demás de forma eficiente a través de protocolos estándar.


📊 Diagrama general del ecosistema

graph TD
Bot --> Core
Core --> DB
Core --> UI
UI --> Core
                             ┌────────────────────────┐
│ Usuario (Discord) │
└────────────┬───────────┘


┌────────────┐
│ yana-bot │ ◄──┐
└─────┬──────┘ │
│ │ Comandos Slash, eventos
▼ │
┌──────────────────┐ │
│ yana-core │◄┘
│ (NestJS + API) │
└─────┬──────┬──────┘
│ │
┌────────────────────────────┘ └────────────────────────────┐
▼ ▼
┌──────────────────────┐ ┌────────────────────────┐
│ PostgreSQL + Prisma │ │ WebSocket Gateway │
└──────────────────────┘ └──────────┬─────────────┘


┌─────────────────────┐
│ yana-desk (UI) │
│ React + Vite + WS │
└─────────────────────┘

🔹 1. yana-bot (Bot de Discord)

Es el componente de entrada desde Discord. Construido con discord.js, se encarga de:

  • Escuchar y ejecutar comandos Slash /
  • Detectar menciones especiales a roles o canales
  • Asignar roles de forma dinámica
  • Expulsar usuarios, enviar mensajes programados, registrar actividad
  • Interactuar con yana-core por REST o WebSocket

✅ Este servicio es stateless y puede escalarse fácilmente en horizontal.


🔹 2. yana-core (Backend API)

Backend construido con NestJS, encargado de:

  • Exponer endpoints HTTP REST
  • Gestionar sockets WebSocket en tiempo real
  • Manejar lógica de negocio: validaciones, acciones, reglas
  • Gestionar usuarios, roles, sedes, clanes y actividad
  • Conectarse a PostgreSQL usando Prisma ORM

🔐 Incluye validaciones de entrada, autenticación y capa de seguridad.


🔹 3. yana-desk (Frontend Admin)

Interfaz visual para administrar todo el ecosistema, creada con React + Vite. Permite:

  • Iniciar sesión (con usuario y con OAuth de Teams)
  • Visualizar dashboards, estadísticas y logs
  • Programar mensajes, añadir cohortes, clanes y sedes
  • Asignar o quitar usuarios, ver actividad por clan o sede
  • Usar filtros y búsqueda inteligente

Se comunica con yana-core por REST y WebSocket.

🎨 Utiliza una paleta de colores corporativa inspirada en RIWI.io y diseño responsivo empresarial.


🔹 4. Base de Datos

Usamos PostgreSQL, gestionado por Prisma como ORM. Algunas tablas principales:

  • users: Usuarios registrados y validados
  • roles: Roles de Discord asociados
  • clans, cohorts, sedes: Agrupaciones organizativas
  • messages: Mensajes programados o enviados
  • activity_logs: Logs de actividad (mensajes, comandos, reacciones, etc.)

🧩 La base de datos crece modularmente según las nuevas necesidades del ecosistema.


🔹 5. Infraestructura (yana-infrastructure)

Toda la infraestructura está contenida y orquestada con Docker. Características:

  • docker-compose para levantar los servicios de forma centralizada
  • GHCR (GitHub Container Registry) como repositorio de imágenes
  • NGINX Proxy Manager como proxy reverso y gestor de certificados SSL
  • CI/CD usando GitHub Actions, con despliegue automático a tu VPS

🚀 El objetivo es lograr zero downtime y despliegues automatizados desde el repositorio.


🌐 Comunicación entre componentes

De → AProtocoloEjemplo
yana-deskyana-coreREST / WSGET /api/cohorts, ws://.../activity
yana-botyana-coreREST / WSValidación de usuarios, obtener roles
yana-core → DBPrisma ORMprisma.user.findMany()

🔐 Seguridad

  • Comunicación por red interna privada en Docker
  • Acceso a VPS solo por SSH con clave privada (desde CI o admins)
  • Uso de secrets en GitHub Actions para variables sensibles
  • Tokens API entre microservicios si se requiere
  • HTTPS a través de NGINX Proxy Manager

♻️ Escalabilidad

El diseño permite escalar según sea necesario:

  • Añadir Redis para colas o eventos pub/sub entre servicios
  • Aumentar réplicas de yana-core o yana-bot
  • Usar CDN si en algún momento hay archivos públicos o contenido pesado
  • Migrar a contenedores orquestados (Kubernetes) si se requiere a futuro

Con esta arquitectura, Yana puede crecer de forma controlada, organizada y profesional, manteniendo su enfoque en facilitar la gestión de comunidades en Discord.