How to Hand Over a Website Without the Client Breaking It
The moment every agency dreads
Every web agency has the same story. The site for a local restaurant or dental clinic is finished, the PageSpeed score is 98, the design is pixel-perfect, the client is thrilled. You do the handover. Two days later, the client sends a screenshot: the homepage is broken, a section is overlapping, the mobile layout is destroyed.
What happened? The client logged into WordPress, tried to “fix a small typo,” accidentally changed a page template, installed a plugin someone recommended, and updated the theme because it showed a notification badge. Three things broke simultaneously and nobody knows which change caused which problem.
This isn’t the client’s fault. They did what the system allowed them to do. The architecture failed them, it gave them access to everything when they only needed access to content.
The problem is permission scope
WordPress (and most traditional CMS platforms) give the admin user access to everything: content, design, plugins, theme files, database exports, user management, PHP configuration. The admin panel is a control room with 200 buttons, and the client needs exactly 5 of them.
This is a permission scope problem. The client needs to:
- Edit text on existing pages
- Upload and swap images
- Add new blog posts
- Maybe create a new simple page from a template
- Publish changes
They do NOT need to:
- Install or update plugins
- Change the theme
- Modify CSS or HTML
- Access the database
- Configure caching rules
- Touch anything related to how the site is built
The gap between what they need and what they can touch is where every handover disaster lives.
The headless CMS architecture
A headless CMS solves this by physically separating content management from presentation. The website code lives in one place (a Git repository, deployed to Cloudflare Pages or Vercel). The content lives in another place (the CMS). They connect through an API.
Directus is an open-source headless CMS that wraps any SQL database with a clean admin interface and a REST/GraphQL API. Sanity is a hosted CMS with a highly customizable editing experience and real-time collaboration. Strapi is another open-source option with a strong plugin ecosystem.
In all three cases, the architecture looks like this:
Client's view: Developer's view:
┌──────────────┐ ┌──────────────────────┐
│ CMS Admin │ │ Git Repository │
│ Panel │ │ (Astro / Next.js) │
│ │ │ │
│ Edit text ✓ │ │ Design ✓ │
│ Upload img ✓│ API │ Components ✓ │
│ Blog posts ✓│───────→│ Performance ✓ │
│ Publish ✓ │ │ SEO ✓ │
│ │ │ Security ✓ │
│ Theme ✗ │ │ │
│ Plugins ✗ │ │ Deploys to: │
│ Code ✗ │ │ Cloudflare / Vercel │
└──────────────┘ └──────────────────────┘
The client physically cannot break the design because the CMS doesn’t control the design. They can edit “About Us” text, change the team photo, publish a new blog post, and none of those actions can affect the layout, the performance, or the security of the site.
The practical setup with Astro + Directus
For most institutional business websites, the combination of Astro and Directus is remarkably clean. Astro fetches content from Directus at build time, generates static HTML, and deploys it.
// astro.config.mjs - fetching content from Directus
// (simplified for illustration)
const directus = createDirectus('https://cms.yourdomain.com')
.with(rest());
// Fetch all published pages
const pages = await directus.request(
readItems('pages', {
filter: { status: { _eq: 'published' } },
fields: ['title', 'slug', 'body', 'seo_description']
})
);
When the client publishes a change in Directus, a webhook fires, Cloudflare Pages or Vercel triggers a rebuild, and the updated site is live within 60-90 seconds. No server to maintain. No cache to clear. No plugin to update.
The client gets a clean, modern interface where they manage their content. The developer maintains the design and code in Git, version-controlled and deployable with confidence.
Role-based permissions: the safety net
Directus and Sanity both support granular role-based permissions. For a typical business website handover:
Content Editor role: Can create and edit pages, blog posts, and team members. Can upload images within size limits. Can preview changes before publishing. Cannot delete published pages. Cannot access settings.
Administrator role: Full access, held by the development team. Can modify the content schema, create new fields, adjust the data model.
The client never sees the administrator panel. They see a clean dashboard with exactly the content types they manage. It’s not a dumbed-down version of a power tool, it’s a purpose-built interface for their specific workflow.
The testing layer
This approach pairs well with automated testing infrastructure. The build pipeline that deploys the site after a content change can include quality checks, broken link detection, image optimization validation, performance benchmarks, and accessibility audits. If a content change introduces a problem (an oversized image, a missing alt tag), the pipeline catches it before deployment.
This is how teams at Webxtek Studio structure handovers for service businesses: the client manages content with full autonomy, the automated pipeline ensures quality, and the development team maintains the technical foundation. Nobody needs to babysit the website. Nobody needs to fix “that thing the client accidentally broke.” The architecture prevents the accident from happening in the first place.
When WordPress is still the right CMS
A headless CMS isn’t always the answer. WordPress is still the right choice when:
- The client’s team is already trained on WordPress and switching has real productivity cost
- The project needs specific WordPress plugins that have no headless equivalent (complex membership systems, LMS platforms with LearnDash, WooCommerce with dozens of product variations)
- The budget doesn’t allow for headless CMS setup time and the site needs to ship fast with minimal customization
The honest trade-off: a WordPress handover is faster and cheaper upfront, but carries ongoing maintenance risk. A headless CMS handover takes more setup time but eliminates the entire category of “client broke the site” support tickets. Over a 2-3 year period, the headless approach typically costs less in total support hours, and the client has a better experience because they feel confident editing content without fear of breaking things.
The goal isn’t to eliminate the client from the equation. It’s to give them exactly the right tools for what they need to do, and nothing more.
Frequently Asked Questions
What is a headless CMS and how is it different from WordPress?
A headless CMS (like Directus, Sanity, or Strapi) manages content through an API without controlling how it's displayed. WordPress combines content management AND presentation in one system, meaning the client can change themes, install plugins, and modify code. A headless CMS gives the client access to edit text and images but physically cannot alter the site's design or code.
Can non-technical clients use a headless CMS?
Yes. Modern headless CMS interfaces are designed for non-technical users. Directus, for example, provides a clean visual editor where clients can update text, upload images, reorder content, and publish, with role-based permissions that prevent accidental damage. The learning curve is often lower than WordPress's Gutenberg editor.
How does content go live in a headless CMS setup?
When a client edits content in the CMS, a webhook triggers a rebuild of the static site (typically 30-90 seconds). The updated site is deployed to the edge network automatically. The client sees a 'Publish' button in the CMS, they press it, and the site updates globally within minutes.
Does a headless CMS add cost to a website project?
The CMS setup itself adds development time (typically 10-20 hours depending on complexity). Sanity has a generous free tier for development and small projects. Directus and Strapi are open-source, meaning the software cost is zero, the cost is the infrastructure and operational management to run them reliably. This is included in a professional managed hosting arrangement. The ongoing operational cost is minimal compared to the savings of not having to manually handle every client content change.
[ RELATED_NODES ]
> START_PROJECT
Need a website that earns trust, ranks in search, and gives your business a stronger digital presence? Start the conversation here.