The Gitea Actions workflow checks out a fresh copy of the repo via actions/checkout, which never has frontend/.env.local (it's gitignored, only exists in the manually-maintained /root/realtime-collab clone). Without it, Vite silently fell back to the localhost dev defaults and baked a broken API URL into the production bundle — every CI-triggered build overwrote a working manual build with a broken one. Co-Authored-By: Claude Sonnet 5 <[email protected]>