Documentation
What the product is, what a publish actually produces, and how to get an existing WordPress site into it.
offloadcms is a content management system that prints your site to static HTML and serves it from Cloudflare's edge. These pages describe how it is put together and what to expect at each step. If something here does not match what you see, that is a bug worth telling us about — hello@offloadcms.com.
On this page
01One instance, one site, your account
Each offloadcms instance is self-contained and serves exactly one site. It lives in your Cloudflare account and owns its own database (D1), media storage (R2), key-value store (KV), Workers and Pages project. There is no shared multi-tenant database, and no row of yours sits in a table next to another customer's.
02Getting started
Four steps, in this order.
- Create an account at app.offloadcms.com and confirm your email address.
- Connect Cloudflare. You authorise us from Cloudflare's own consent screen; we never ask you for a Cloudflare password, and the access can be revoked from your Cloudflare dashboard at any time.
- Provision an instance. We create the database, storage and Workers in your account and hand you a one-time admin password. Copy it when it is shown — it is shown once, and the recovery path is a rotate, not a reveal.
- Sign in to the admin and publish. The first publish is what puts a real page on the internet.
03What a publish produces
Publishing renders every entry to static HTML — nothing on the public site is rendered per request. Alongside the pages themselves, each publish emits:
- JSON-LD structured data per entry, so answer engines can read the page as data rather than guessing from markup.
- Canonical URLs and Open Graph / Twitter meta, generated from the entry rather than hand-maintained.
- A sitemap and an RSS feed.
- A robots.txt that allows AI crawlers — GPTBot, ClaudeBot, PerplexityBot and the rest — because being readable by them is the point. If you would rather not be indexed at all, one setting turns the whole site noindex and disallows everything.
- Image SEO — dimensions, alt text and responsive sources carried through from the media library.
Dynamic pieces that genuinely need a server — the contact form, comments, bot challenges — run as small functions alongside the static files, not as a rendering layer in front of them.
04Writing and editing
The admin mirrors the information architecture of wp-admin on purpose: posts and pages, categories and tags, a media library, menus, custom fields, roles, permalink structures and revisions. If you have run a WordPress site, you already know where things are.
Content is stored as structured JSON, not as a blob of HTML, which is what lets the same entry be rendered to a page, to JSON-LD and to a feed without three copies drifting apart. Drafts get a private preview URL that renders through the same engine the published site uses, so what you preview is what ships.
05Migrating from WordPress
The importer reads your WordPress database and uploads directory directly — it does not need the REST API, a WXR export, or a plugin installed on the source site. That matters for the sites most worth moving: old ones, on hosts that have stopped cooperating.
Posts, pages, categories, tags, media, menus, users and permalink structure map across, and the old URLs keep working through generated redirects. Send us a database dump and the uploads directory and we will run it — see WordPress migration or just get in touch.
06Custom domains and email
Attach your domain from the instance page in the dashboard; because the zone is in your own Cloudflare account, DNS is a setting rather than a support ticket. There is a guided cut-over that checks the new site first, and a revert that restores the DNS it replaced.
Optional address forwarding (contact@, admin@) can be set up on the same zone so form notifications reach a real inbox.
07The AI assistant and your own AI key
The AI assistant in your admin can run on three sources, in this order of preference: your own OpenAI or Anthropic key, the AI credits included in a paid plan, or the free Workers AI allowance on your own Cloudflare account. The free allowance is small (10,000 neurons a day, reset at 00:00 UTC), so a busy day can use it up; the assistant then says so instead of failing silently.
To add your own key:
- Create an API key with OpenAI or Anthropic.
- Sign in to the dashboard and open Billing.
- In the Use your own AI key card, pick the provider, paste the key and press Save key. The key is validated before it is stored, and it is stored encrypted.
- Go back to the AI assistant in your admin and run the prompt again. Usage on your key is billed by OpenAI or Anthropic directly, not by us.
Prefer not to manage a key? Upgrade to a paid plan and the assistant runs on its included credits.
08The admin API
Everything the admin UI does goes through a documented HTTP API on your own instance, authenticated with a personal access token you issue yourself. The full contract ships with the instance as an OpenAPI document at https://api.<your-domain>/api/openapi.json, so a client can be generated from it rather than written against these paragraphs.
09What is not documented yet
Said plainly, because a missing page is easier to work around than a wrong one.
- Self-hosting. The Free tier runs in your own Cloudflare account and the pieces are all there, but the setup path is not documented yet — we would rather ship one route that works than three half-written ones. Email us and we will walk you through it.
- Theming. Themes are configured through settings today; a theming guide is not written.
- A full endpoint-by-endpoint reference. The OpenAPI document above is the reference; there is no prose walkthrough of it yet.
Something missing, or something here that does not match what you see? hello@offloadcms.com — and see support.