El contexto

Iglesia Dios Fuerte Arca Evangélica necesitaba organizar sus programas de servicio semanales — quién dirige, quién adora, quién predica, quién limpia — sin depender de una hoja de cálculo ni de la memoria de un coordinador. El sistema, Church Program Manager, ya existía en una primera versión (v1), pero tenía problemas reales de fondo que este proyecto (v2) se encargó de corregir de raíz.

El reto

La v1 tenía un bug crítico en el motor de asignación: el algoritmo de equidad no priorizaba correctamente a las personas con menos participación reciente, además de generar consultas N+1 a la base de datos por cada cálculo. A eso se sumaba una brecha de seguridad seria para un sistema que maneja datos de varias iglesias: el churchId podía llegar manipulado desde el cuerpo de la petición en vez de derivarse siempre del token de autenticación — es decir, nada impedía en el código que una iglesia viera o modificara datos de otra.

La solución

La v2 fue una reescritura enfocada en seguridad, corrección y automatización, no en features cosméticas:

El desafío técnico más interesante: aislamiento multi-tenant real

En un sistema que sirve a varias iglesias desde la misma base de datos, la frontera entre "mis datos" y "los datos de otra iglesia" no puede depender de que el cliente envíe el dato correcto — tiene que estar garantizada en el servidor, siempre. El Tenant Guard resuelve esto sobrescribiendo cualquier churchId que llegue en el body de la petición con el que viene firmado en el JWT, y además valida contra la base de datos que esa iglesia esté activa antes de dejar pasar la petición — con cache para que esa validación no cueste una consulta extra en cada request. Es la diferencia entre "confiar en el cliente" y "verificar en el servidor", aplicada de forma consistente en cada endpoint mediante un middleware, no caso por caso.

Funcionalidades clave

Capturas del sistema

Church Program Manager — Pantalla de acceso con la identidad de la iglesia Church Program Manager — Configuración de tipos de actividades y formato de programa Church Program Manager — Calendario de programas Church Program Manager — Generación automática de programa con el AssignmentEngine Church Program Manager — Vista previa en tiempo real del flyer del programa generado Church Program Manager — Gestión de personas y roles Church Program Manager — Módulo de cartas de invitación Church Program Manager — Vista previa y descarga de carta generada Church Program Manager — PDF de carta de invitación con membrete de la iglesia

Stack técnico

Backend: Node.js · TypeScript · MongoDB · Redis · Bull · Puppeteer · Handlebars · JWT

Frontend: React · Vite · TypeScript