@obsidian-labs/site-cms
v0.3.0
Published
A page-scoped content editor that mounts on the live site and commits JSON to GitHub.
Downloads
662
Readme
@obsidian-labs/site-cms
A page-scoped content editor that mounts on the live site.
Editors sign in with GitHub, edit the fields for the page they are looking at in a slide-over panel, and saving commits JSON to the repo, which triggers the host's normal rebuild.
One schema per site — a plain TypeScript spec — generates the form UI, the runtime validator, and the content types.
Status: in development. See PLAN.md.
Hosts
The server is a plain (Request) => Response, so an adapter only bridges
whatever the host hands it to that. Pick the entry that matches the host:
| Host | Entry | Route file |
|---|---|---|
| Next.js (Vercel or Cloudflare) | @obsidian-labs/site-cms/next | toNext(cms) |
| Bare Node function (Vercel) | @obsidian-labs/site-cms/vercel | toVercel(cms) |
| Cloudflare Workers | @obsidian-labs/site-cms/cloudflare | toCloudflare(cms) |
On Workers, toCloudflare(cms) is a whole export default — the CMS on the
spec's apiBase, everything else served from the ASSETS binding. Use
toCloudflareHandler(cms) instead to compose the CMS into a Worker that
already has routes of its own.
env on Workers is per request by contract, so it is a parameter and never a
module-scope capture. Under @opennextjs/cloudflare, pass it lazily:
export const { GET, POST, PUT, DELETE } = toNext(cms, {
env: () => getCloudflareContext().env as any,
});templates/cloudflare/ holds working wrangler.jsonc files, a static-site
Worker, the Actions deploy workflow, and the Vercel→Cloudflare runbook.
