Under the hood of NorminUp
Yann1 min readLire en français
What runs NorminUp today: an API, agents that run the checks, queues, and a deployment I can roll back.
When you run a service on your own, every technical choice has to stay easy to understand and to fix at 2 a.m. Here is what NorminUp runs on today.
The site and the dashboard
The site, the dashboard and the status pages are built with Next.js 16 and React 19, styled with Tailwind. One application serves the marketing site, the documentation and the customer area, depending on the address visited.
The API
The API is written in Node.js with Express. Data lives in MySQL, with hand-written SQL and no ORM: I know exactly which query hits the database, which helps a lot when tracking down a slowdown.
The checks
Your services are not checked by the API. The checks are handed to agents, running from France, which share the services to monitor between them. The API stays available even when there are many checks, and adding an agent is enough to take on more.
The queues
Everything that can wait a few seconds goes through BullMQ queues on Redis: sending alerts, webhooks, building exports. If a third-party service answers slowly, nothing else is held up.
The deployment
Everything runs in Docker containers, orchestrated by Docker Compose on a server at OVH, behind Caddy which handles HTTPS. On each deployment, continuous integration builds the images, then the server pulls them, checks everything answers, and rolls back to the previous version on its own if it does not.
Nothing revolutionary: proven tools, put together so I can sleep.