Mesa Digital

Sistema centralizado de solicitudes para la Dirección de Recursos Digitales de la Universidad César Vallejo: tickets, notificaciones, calendario, base de conocimiento y dashboard en tiempo real.

Mesa Digital — Plataforma de gestión de tickets UCV

Sobre el Proyecto

Mesa Digital centraliza en un solo canal las solicitudes de la Dirección de Recursos Digitales de la Universidad César Vallejo: tickets, notificaciones, calendario, base de conocimiento y dashboard, para que nadie tenga que preguntar '¿cómo va mi pedido?'.

Como Full-Stack Lead, construí el ecosistema completo: frontend en Next.js 16 con una interfaz inspirada en GitHub (listas tipo Issues, detalle tipo Issue, tema oscuro), y backend en NestJS 12 con arquitectura modular por eventos de dominio (auth, tickets, áreas, notificaciones, tiempo real).

La plataforma soporta múltiples organizaciones, roles configurables por capacidad (Director, Coordinador, Miembro), un tablero Kanban en tiempo real vía WebSocket, auto-cierre de tickets, notificaciones push agrupadas con horario silencioso, calendario de entregas con arrastrar y soltar, y un módulo de conocimiento con documentos versionados y checklists ejecutables.

Detalles Técnicos

  • RolFull-Stack Lead
  • Año2026
  • ClienteIA Systems & Data
  • FrontendNext.js 16, TanStack Query
  • BackendNestJS 12, Prisma 7
  • EstadoEn Producción

STACK TECNOLÓGICO —

Next.js 16
TypeScript
Tailwind CSS 4
NestJS 12
Prisma 7
PostgreSQL 16
Socket.IO
Google OAuth

Stack Completo:

Frontend:

Next.js 16, TanStack Query, interfaz estilo GitHub (shadcn/ui), tema oscuro por defecto

Backend:

NestJS 12 (ESM), Prisma 7, eventos de dominio con @nestjs/event-emitter

Tiempo real:

Socket.IO puro (sin SSE ni polling), Redis para pub/sub entre réplicas

Auth:

Google OAuth restringido por dominio de organización (multi-tenant)

FUNCIONALIDADES —

Kanban en Tiempo Real

Tablero de tickets sincronizado por WebSocket entre todos los usuarios conectados, con flujo crear → revisar → asignar → progreso → resuelto → cerrado.

Multi-Organización

Cada organización se identifica por el dominio de correo de sus usuarios; el flujo permite derivar solicitudes entre áreas y da de alta nuevas organizaciones desde un panel de plataforma.

Notificaciones Inteligentes

Campana en vivo por WebSocket y Web Push con agrupación (varios cambios en minutos generan un solo aviso) y horario silencioso configurable.

Calendario de Entregas

Vista mes/semana/agenda con arrastrar y soltar, entregas derivadas automáticamente de los tickets y eventos propios con recurrencia.

Base de Conocimiento

Documentos colaborativos con editor enriquecido, control de versiones, publicación, búsqueda en español y checklists ejecutables directamente desde el ticket.

Dashboard con KPIs

Indicadores bajo demanda con caché, series históricas, desglose por área y exportación a CSV, pensado para revisarse tras semanas de uso real.

Desafíos Técnicos y Soluciones

01. Multi-Tenant por Dominio de Correo

El sistema deduce la organización a partir del dominio del correo institucional (Organization.allowedDomains), permitiendo aislar datos entre organizaciones sin duplicar infraestructura.

02. Tiempo Real sin Polling

Todo evento viaja en un sobre { type, payload, version, ts } por WebSocket; cada módulo NestJS publica eventos de dominio con @nestjs/event-emitter y los demás se suscriben sin acoplarse entre sí.

03. Roles Configurables sobre Capacidades Fijas

Diseñé un sistema de roles por organización sobre un conjunto fijo de capacidades, permitiendo que un Jefe y un Coordinador tengan rangos de escalado de avisos distintos sin tocar código.

IMPACTO —

42+
Pruebas E2E automatizadas
11
Módulos y fases cerradas
100%
Tiempo real vía WebSocket
Multi-Org
Arquitectura Multi-Tenant
5 días
Auto-cierre de tickets resueltos
@ucv.edu.pe
Acceso institucional restringido
Turborepo
Monorepo pnpm

Notas Técnicas

Monorepo pnpm + Turborepo (apps/web, apps/api, packages/shared). Backend NestJS 12 (ESM) con módulos aislados (auth, users, areas, admin, realtime, health) comunicados por bus de eventos, Prisma 7 sobre PostgreSQL 16 y Redis 7 para pub/sub de sockets y colas. Frontend Next.js 16 con TanStack Query e interfaz estilo GitHub. Desplegado en un VPS propio detrás de Cloudflare y Caddy, con despliegue automático por GitHub Actions al hacer push a main.

UN SOLO CANAL, TODO RESUELTO.