cphlabspace adds Dockerfiles, Wrangler config, and a deployment guide to fill the gap between local dev and a live site

The repo already built locally, but `npm run deploy` was broken - the Wrangler config it depended on didn't exist. cphlabspace adds that config, Dockerfiles for both services, a root-level Compose file, and a GitHub Actions CI workflow, along with a narrative deployment guide covering six host options.

infrastructureworkflow

The backend gets a multi-stage Debian-slim image with LibreOffice and fonts baked in, running as a non-root user under tini with a health endpoint. The frontend gets a parallel image built around Next.js standalone output, with standalone mode gated behind an env var - next dev, next start, and the existing OpenNext Cloudflare path are unaffected by the change. A root-level compose file wires the two together with the frontend waiting on the backend's healthcheck.

The Cloudflare fix is the load-bearing change. The new Wrangler config targets the standard OpenNext output paths and enables nodejs_compat. Before this PR, the deploy target was implicit; without the config file, npm run deploy had no valid target.

The GitHub Actions workflow runs backend and frontend builds in parallel on every push and PR. Lint is wired up but left as a non-blocking check because of an existing warning backlog - cphlabspace explicitly defers the cleanup to a follow-up rather than blocking the CI addition on it.

The deployment guide covers Supabase, R2, and model-provider setup with instructions for Cloudflare Workers, Vercel, Fly.io, Render, Railway, and plain Docker. The stated goal is that a maintainer can pick a host, follow the guide, and arrive at a working deployment without reverse-engineering env vars and build commands from the source.

So what Useful if you're setting up a fresh deployment of the upstream mike codebase and want the infrastructure artifacts already written. The Cloudflare Wrangler fix is a functional correction, not polish - without it, the documented deploy path simply doesn't work. The multi-host deployment guide is the kind of document that's cheap to maintain and saves hours during initial setup. The non-blocking lint decision is a reasonable trade-off for a CI addition that shouldn't be held up by pre-existing issues, but worth cleaning up before the warning count grows.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?