WiseWig overview
WiseWig is an Astro-first CMS framework for agencies and developers building small-business sites. The public site is server-rendered HTML that can be edge cached. An authenticated editor sees that same page rendered from draft content with a small React overlay added beside it. There is one component implementation per feature, not separate public and editable components.
The mental model
| Concept | What it owns |
|---|---|
| Site | A customer-facing hostname, pages, settings, navigation, forms, redirects, media, and a selected developer-owned theme. |
| Page | A stable ID, one-segment route slug, title, SEO description, and a typed document of sections. The empty slug is the protected home page. |
| Component | A developer-defined, schema-validated section type: its content fields, defaults, editor controls, approved variants, and structural/placement limits. |
| Theme | Appearance tokens and layout slots. Themes style and arrange components; customer content does not contain arbitrary CSS or HTML. |
| Draft and published state | Editors change drafts. A confirmed publish makes a version public. Published requests do not load editor metadata or perform authentication work. |
| Editor overlay | React UI for selection, inline fields, asset pickers, structural commands, save state, undo, and publishing. It does not hydrate the whole site. |
| Hosting adapter | The implementation of persistence and deployment. Cloudflare is the reference adapter: D1 controls tenants/domains, a tenant Durable Object serializes writes, and R2 stores asset bytes. |
Editing boundaries
The component developer, not a page editor, decides the allowed changes:
- Content — schema-defined property values such as heading, image, FAQ items, or a link.
- Presentation — named variant choices such as
left,center, orsplit. - Structure — whether an instance can move, be removed, or be duplicated, plus instance limits.
- Placement — regions and limits in which the component may appear.
WiseWig does not persist arbitrary rendered HTML, arbitrary iframe code, arbitrary classes, or editor-authored JavaScript. The public and private MCP services follow the same boundary: public tools see public content only; engagement and personal data are private, permission-gated tools.
Rendering modes
| Mode | Content | Cache policy | Editor UI |
|---|---|---|---|
published | Published snapshot | Public edge cache | None |
preview | Draft snapshot | private, no-store | None or minimal controls |
edit | Draft snapshot | private, no-store | React overlay and edit metadata |
?__edit=1 is only a request for edit mode; it never grants a role. The server validates the session and site permission before it loads a draft or accepts a mutation.
What is concrete today
The tested reference site supports twelve marketing components: Hero, Content, Image + Text, Card Grid, Gallery, Testimonials, FAQ, Contact Details, Form, Call to Action, Video/approved YouTube embed, and Download. The management UI supports page templates, routing, SEO, primary navigation synchronization, redirects, and atomic publish of that page-routing bundle.
Start with Getting started, then use the component interface reference when you need custom behavior. For the agency handoff/deployment path, see Agency five-page workflow.