Engineering Platform › Source control · See it on the architecture map
How my code versions are organized. One account on GitHub holds nine private repositories: one per application, one for the control plane, one for each piece of shared code, and one for the shared CI. Branches map to environments, so where a change is in its life is visible from the branch it sits on. Ports are chosen the same way for every app.
A change starts on main. When the five gates go green it moves to sit and is rebuilt on the test environment with no human step. Moving from sit to prod is a deliberate person's action, never automatic.
main is where work lands and where the gates run.sit always matches what is running in system integration testing.prod always matches what is live.Code stays inside its app until a second app needs it. Then it moves into its own repository and both apps install it from there, instead of keeping copies. The shared CI is pinned to a version tag (v1), so a change to a tool version is one commit in one place, and a repo can stay on an older tag until it is ready.
Data never lives in a repository. Each environment has its own, created on the machine that runs it.
Each app has one port per environment. Dev runs on a local PC. SIT runs on a private machine that is reachable only over a private network (Tailscale). Prod runs on the shared web server behind one nginx, on the standard secure port.
5000 · SIT 5100 · Prod 4435173 · SIT 8080 · Prod 4438765 · SIT 8767 · Prod 4435330 · SIT 8090 · Prod 44353xx range. Its SIT port is the next free one from 8081 to 8099. Prod is always 443, through the shared web server, with a name per app instead of a port.