Engineering notes
The studio’s technical decisions, written down with their reasons and their cost. For developers who want to know how it is built.
Three backends, two servers, nine decisions.
Famsub, Tallyno and then Payskool each have a NestJS backend with PostgreSQL and Redis. Rather than letting each product deploy its own way, one repository, lehmora-infra, describes the whole setup: Docker Compose stacks, scripts, backups, monitoring. It is designed so that a lost server can be rebuilt from a blank Ubuntu image, using that repository and the off-site backups.
Production and staging are planned on two separate servers that will share no network, no database and no secret. A failed migration or a container eating all the memory in staging will not be able to take production down.
The trade-off
No multi-region, no high availability. For three small backends, a rebuildable, well-backed-up server costs less and is easier to reason about than a cluster.
Actual state
Stacks, scripts and decisions are under version control. The two servers are not provisioned yet: none of this serves real traffic today.
The decisions
D-01Two servers split by environment, not by service tier.D-02One PostgreSQL engine per server, one database and role per app.D-03No Portainer, no webhooks: git pull and docker compose over SSH.D-04No network mesh between production and staging.D-05Self-hosted mail, on production only.D-06Backup destination not tied to one provider.D-07One dump per database, restorable app by app.D-08A single monitoring instance for both servers.D-09Tallyno adopts Famsub’s build pipeline (merge in progress).