AS
Back to work

AGT Visa CRM & Web

Website + CRM platform for visa consultancy operations

AstroTailwindExpressMongoDBRedisCaddyDocker
Unified authCaddy reverse proxyDockerized stack

The problem

Visa consultancy operations needed a unified public face and an internal CRM. Juggling separate auth systems and deploy pipelines was inefficient and error-prone.

Key decision

One domain, one login, one deploy. The public marketing site and the client/staff CRM sit behind the same authentication, routed cleanly via Caddy.

How it works

A multi-container Docker Compose stack consisting of a Caddy reverse proxy, an Astro + Tailwind public website, a Node/Express API (handling auth, RBAC, and data models), a background worker, MongoDB, and Redis. Caddy dynamically routes `/api` and `/` traffic.

Results

Delivered a fully integrated, containerized platform that simplifies deployment and provides a seamless experience for both public leads and internal staff.

What went wrong

The Caddy routing configuration was initially too strict, dropping WebSocket connections needed for background worker updates due to missing header forwards. We spent hours debugging why updates were stalling until we fixed the reverse-proxy configuration.