2025–2026Full-stack developer · UTSA Mobile Lab

EZMSG — MESSAGING PROTOCOL TESTER

Next.jsNode.jsDockerGCPPostgreSQLRedis
View live

The risk

QuitTxt sends real messages — RCS and SMS — to actual participants in a clinical study. Every time a researcher wanted to test a new messaging sequence or tweak delivery timing, they risked touching the production system. One bad config and real study participants get the wrong messages at the wrong time. There was no sandbox. You tested in production or you didn't test.

What I built

An open-source clone of QuitTxt's messaging infrastructure. Researchers log in, configure message protocols — timing, content, delivery channel — and test full sequences without any connection to the live study. Proper auth, role-based access, clean dashboard. Set up a messaging flow in a few clicks, preview what participants would receive, and iterate without consequences.

The reverse-engineering problem

The original system wasn't designed to be cloned. It was a monolith — messaging logic tangled with carrier APIs, phone number handling, and production database connections. I had to trace through the protocol logic, extract the messaging rules, and rebuild them as a standalone Next.js app with its own Node backend. The goal was behavioral fidelity: EzMsg should do exactly what the real system does, minus anything that touches actual phone numbers or carrier networks.

Auth for multiple researchers

Getting authentication right for a multi-researcher environment took more work than I expected. Different permission levels — admin, researcher, observer — each with different access to protocol configuration. The invite flow had to be clean enough that new lab members could onboard themselves without a walkthrough.

Where it is now

Deployed and used by UTSA Mobile Lab researchers for safe protocol testing. New lab members learn the messaging layer by using EzMsg instead of reading stale wikis.