toa://blog
Headless multi-site blog engine.
OVERVIEW
blog is the writing surface for the whole ecosystem. Posts live once and publish to any toa:// site over a clean, versioned REST API — markdown in, structured JSON out, with a per-site RSS feed for free. Each site is its own tenant: owners invite editors, Postgres row-level security keeps content isolated, and per-site API keys let automations like n8n post on their own. Sign-in is single sign-on via toa://auth; draft → publish is a single status flip.
FEATURES
Headless via API
Public REST endpoints, a per-site RSS feed and sitemap.xml — fetch posts into any site or framework.
Multi-site, multi-editor
Owners invite editors per site; Postgres row-level security keeps each site fully isolated.
Draft, schedule & publish
Draft → published in one flip, or schedule a post for a future time and a worker publishes it automatically.
Media library
Per-site image library — upload, auto-convert to WebP, organise by category and reuse across posts.
Built-in SEO
Per-post meta and canonical, a ready-made BlogPosting JSON-LD block, plus sitemap.xml and RSS for every site.
Revisions & full-text search
Every edit is snapshotted and one-click restorable; full-text search across title, excerpt and content.
Auto-rebuild on publish
A deploy webhook fires on publish so your Cloudflare Pages / n8n build rebuilds itself — GitHub-push to a Hugo/Astro repo is built in too.
Built for automation
Per-site API keys let n8n and external tools read and post programmatically.
WHAT'S NEW
- changed Admin sites IA cleanup. Editor site management is now consolidated under
/admin/manage/*(hub,/new,/{slug});/admin/sitesis the superadmin all-sites view only — the two no longer share a route prefix. The sidebar's two duplicate "sites" links are now "my sites" (editor) and "all sites" (superadmin). Removed the unusednavigation.ts(a dead second nav definition).
- added Deploy guide — a new
/admin/deploypage documenting how to pull your posts into a site over the public REST API (endpoints, post shape, Astro/Nuxt/Hugo/ curl examples, the ready-made SEO/JSON-LD block, auto-rebuild webhook, and the GitHub-push alternative). Examples are pre-filled with your active site's slug.
- added Media library: a site selector in the page header (matching the other admin pages). The library was already per-site under the hood; now you can clearly see and switch which site's media you're viewing, and uploads go to the selected site.
API