The context

Iglesia Dios Fuerte Arca Evangélica needed to organize its weekly service programs — who leads, who worships, who preaches, who cleans — without relying on a spreadsheet or a coordinator's memory. The system, Church Program Manager, already existed in a first version (v1), but had real underlying problems that this project (v2) set out to fix at the root.

The challenge

v1 had a critical bug in the assignment engine: the fairness algorithm didn't correctly prioritize people with less recent participation, and it also generated N+1 database queries on every calculation. On top of that, there was a serious security gap for a system handling data from multiple churches: the churchId could arrive tampered with from the request body instead of always being derived from the authentication token — meaning nothing in the code prevented one church from seeing or modifying another church's data.

The solution

v2 was a rewrite focused on security, correctness, and automation, not cosmetic features:

The most interesting technical challenge: real multi-tenant isolation

In a system serving multiple churches from the same database, the line between "my data" and "another church's data" can't depend on the client sending the right value — it has to be guaranteed on the server, always. Tenant Guard solves this by overwriting any churchId that arrives in the request body with the one signed into the JWT, and it also validates against the database that the church is active before letting the request through — with caching so that validation doesn't cost an extra query on every request. It's the difference between "trusting the client" and "verifying on the server," applied consistently through a single middleware at every endpoint, not case by case.

Key features

System screenshots

Church Program Manager — Login screen with the church's identity Church Program Manager — Activity type configuration and program format Church Program Manager — Program calendar Church Program Manager — Automatic program generation with the AssignmentEngine Church Program Manager — Real-time preview of the generated program flyer Church Program Manager — People and roles management Church Program Manager — Invitation letters module Church Program Manager — Preview and download of a generated letter Church Program Manager — Invitation letter PDF with the church's letterhead

Tech stack

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

Frontend: React · Vite · TypeScript