← Proyectos
04 · SISTEMA INSTITUCIONAL · SOLO

Sistema de Notificaciones Electrónicas

Sistema de notificaciones electrónicas que reemplazó un sistema anterior con fallas y menos funciones. Lo diseñé y construí solo, arquitectura incluida, y lo usan unas 30.000 personas.

ROL
Diseño, arquitectura y desarrollo completo.
EQUIPO
Solo · reporte al PM
ESTADO
En uso
USUARIOS
~30.000 personas
React 18TypeScriptViteTanStack QueryZustandLexicalASP.NET CoreSQL Server
01 · CONTEXTO

Antes

La institución comunicaba novedades a su personal con un sistema anterior: un monolito en .NET (ASPX) con menos funciones, que guardaba las notificaciones como HTML con los logos embebidos en Base64. Ese contenido chocaba con el F5 de la red y el sistema fallaba seguido.

02 · PROBLEMA

Qué había que resolver

Había que enviar comunicaciones con contenido controlado a audiencias grandes y variables, con borradores, adjuntos y envío de correo en segundo plano.

Qué hace.
Las capacidades principales del sistema.

FIG_01 · ARQUITECTURA RECREADASistema de Notificaciones Electrónicas

Cómo está armado

  1. 01INTERFAZReact · TanStack Query · Lexical
  2. 02BFF / APIASP.NET Core · sesión + CSRF
  3. 03SERVICIOSplantillas · audiencias · lotes
  4. 04DATOSSQL Server · SP · TVP
  5. 05WORKERcola de correo

Decisiones técnicas.
Qué se eligió y qué implica.

  1. 01

    Contenido en JSON, no en HTML

    El editor (Lexical) guarda cada notificación como un documento JSON y el sistema conserva un snapshot de lo que se envió.

    → El F5 ya no bloquea el contenido, y cada envío queda persistido y auditable.

  2. 02

    Audiencias y lotes incrementales

    Los destinatarios se arman combinando búsquedas sobre muchas paramétricas y se suman de forma incremental, con inclusiones, exclusiones y lotes revisables.

    → Se pueden armar audiencias de miles de personas sin traer todo de una vez.

  3. 03

    Subida de adjuntos por fragmentos

    Los archivos se suben en partes, con un hash calculado en un web worker.

    → Las cargas grandes ya no se cortan en el F5 de la red.

  4. 04

    Sesión BFF con tokens en el servidor

    El login devuelve una cookie opaca; la sesión y los tokens se guardan protegidos en SQL.

    → El JavaScript del navegador no maneja tokens. A cambio hay estado de sesión que operar y CSRF que validar.

  5. 05

    Contenido resuelto en backend

    En modo plantilla, el servidor ignora el cuerpo enviado y toma tipo y contenido de la plantilla activa.

    → El contenido oficial no depende del navegador; editor y servidor tienen que coordinarse.

  6. 06

    Negocio en SQL con SP y TVP

    Audiencias, destinatarios y archivos se resuelven en procedimientos almacenados con parámetros tabla.

    → Las operaciones de volumen corren cerca de los datos, con reglas repartidas entre C# y SQL.

DESAFÍO PRINCIPAL

El sistema anterior guardaba las notificaciones como HTML y el F5 de la red lo bloqueaba. Lo rediseñé para que el contenido viaje como JSON.

  1. 01Editor con Lexical que guarda un documento JSON, y un snapshot liviano de cada notificación para persistencia y auditoría.
  2. 02Búsqueda de destinatarios entre muchas paramétricas y miles de personas, sumando resultados de forma incremental. De ahí salieron las audiencias y los lotes, la parte que más disfruté.
  3. 03Subida de archivos por fragmentos para que el F5 no corte las cargas.
  4. 04Sesión BFF y permisos por usuario en la interfaz y en la API, integrados con un sistema externo del área informática.

Cómo usé IA

Lo desarrollé con agentes de código: Cursor, MCPs, Skills y un AGENTS.md con las reglas del proyecto. Definí la arquitectura, dirigí la implementación y revisé los cambios.

Resultado

Reemplazó al sistema anterior y hoy lo usan unas 30.000 personas. En lo observado, los envíos masivos a decenas de miles de destinatarios tardan alrededor de un minuto; no es una medición formal.

  • El repositorio incluye tests de frontend (Vitest) y de backend (MSTest).