In Part 7 , I taught my server how to die gracefully. It felt production-ready. Auth, rate limiting, caching, clean shutdown — the API was doing real work. I said Part 8 would be "Docker + Postgres." I was wrong. Postgres alone deserved its own post, because swapping the database under a running backend taught me more in a weekend than the three weeks before it. Then I tried to run my tests in CI. And everything broke. The SQLite Honeymoon When I started this project, SQLite was the obvious choice: import _ "modernc.org/sqlite" DB , err = sql . Open ( "sqlite" , "./data.db" ) One file. No server. No Docker. No connection strings. Pure Go driver — not even CGO. It felt like cheating. I built auth, entries, pagination, rate limiting, and caching all on top of a single .db file sitting next to my binary. For 7 posts, SQLite carried this backend beautifully. Then I wrote this in my GitHub Actions workflow: - name : Run tests run : go test ./... And the CI logs lit up red.…