For builders
What your clients can change
After this page you know what a client can change on their own, what waits for your approval, and how to set that per client.
The four steps
Every client has a step. You choose it when you invite them, and change it under Settings › Access on the site’s page.
| Step | What the client may change |
|---|---|
| Text and images | Words and pictures on existing pages. The default. |
| Blocks and pages | Also add, move and remove blocks, and add pages. |
| Design | Also colours, fonts, spacing and other styling. |
| Everything | Anything that is not protected. |
Above their step: your approval
A client can still ask for more. When a change goes above their step, they can still save it, but publishing waits: you get an email with a picture of before and after, and choose Approve, Reject with a note for the client, or I’ll finish it myself. Nothing above their step goes live without you. See Approvals.
Protected by default
Whatever the step, some parts are protected: what makes the site work rather than what it says.
admin.json, always.- Everything outside the site’s own folders. Per kind of site, these are open:
| Kind of site | Open folders |
|---|---|
| astro | src/, public/ |
| next | app/, pages/, components/, src/, public/, styles/, content/, data/ |
| react-router | app/, public/ |
| nuxt | app/, pages/, components/, layouts/, content/, assets/, public/ |
| sveltekit | src/, static/ |
| gatsby | src/, static/, content/ |
| react-scripts | src/, public/ |
| vite | src/, public/ |
| vite-react | src/, public/ |
| vite-vue | src/, public/ |
| vite-svelte | src/, public/ |
| eleventy | src/, content/, _includes/, _data/ |
| docusaurus | docs/, blog/, src/, static/, i18n/ |
| vitepress | docs/, public/ |
| hugo | content/, layouts/, static/, assets/, data/, i18n/ |
| plain HTML | the whole site |
- In code (a component, a page with logic), a client may change the text and the styling, never the code itself. Adding a script, an
on…=handler, ajavascript:link or an embedded frame is refused. - An existing page cannot be removed or renamed by a client, so no link to it breaks.
Change this per site with protected and open in admin.json.
How it is enforced
Every change is checked when it is saved and again when it is published, on the change itself, not on what the assistant says it did. A change that is not allowed never reaches main.