For the past several months I've been building Deploy Center, a self-hosted CI/CD deployment platform. v3.0 shipped recently, and I want to share the architecture decisions, what worked, and what I'd do differently.

TL;DR: https://github.com/FutureSolutionDev/Deploy-Center-Server — MIT licensed, TypeScript + Express + React + MySQL/MariaDB + Redis.

The problem I was trying to solve

Most small teams I've worked with deploy through one of these:

A bash script triggered by a cron or a manual SSH