Production hardening and e2e tests
A full day of production prep across the stack.
Testing: added a Playwright e2e suite covering the full platform — signup, site creation, deploys, admin flows, the works. Catching regressions before users do.
Infrastructure: rewrote the production
deploy.sh to use IMAGE_TAG and
DOCKER_GID for cleaner image pinning and container
permissions. Dropped dnsmasq from production — it's a
local-dev-only convenience.
Tenant isolation: refactored Redis so each site gets
its own key prefix instead of relying on DB SELECT. More
scalable and plays nicer with managed Redis. The Drupal image now
honors the prefix for cache isolation too, plus fixes for the
installer redirect and dev-mode cookies.
Fixes and DX: SSH gateway now exits exec cleanly
when command output ends (was hanging on stdin close). The control
panel detects production via APP_ENV instead of
NODE_ENV. The API cancels stale redis-enable jobs on
site delete and hides soft-deleted sites from listings. Auth
auto-promotes ADMIN_EMAIL on register/login, and
dev-mode deploy endpoints skip branch/tag validation so local
testing doesn't fight you.