Kernset Kernset
Closed beta - early access open now

For agencies and freelancers managing 5 to 50 client websites

Your clients edit. The design never moves.

Kernset is a self-hosted, multi-tenant CMS for web agencies and freelance developers. One installation handles every client website. Block schemas live in your code repo. Clients can only touch what you exposed - nothing else.

Stop spinning up a WordPress site per client. Define the editable regions in TypeScript, sync the schema with one CLI command, hand over the login. Done.

  • Self-hosted, EU jurisdiction
  • Clients cannot break the design through the CMS
  • 30+ ready-made blocks included
  • One admin for all client websites
blocks/Hero.ts
// Kernset block schema. Lives in your repo.
// Your client edits the fields you exposed - nothing else.
export const HeroBlock = {
  slug: 'hero',
  fields: [
    { name: 'headline',    type: 'text',     localized: true, required: true },
    { name: 'lede',        type: 'textarea', localized: true },
    { name: 'image',       type: 'media',    required: true },
    { name: 'cta',         type: 'link' },
  ],
}

30+

Standard blocks

Hero, FAQ, gallery, pricing table, contact info, opening hours, blog teaser, embed, and more - plus a custom-block factory.

3

Hosting shapes

Static on shared hosting, cached site on an edge platform, or your own Node app. Same content, three deployment options.

1

Admin for all clients

One Kernset installation handles every client website. Add a new workspace, hand over the login, done.

0

Third-party trackers

Self-hosted fonts, cookieless analytics path, EXIF metadata stripped on upload. GDPR-aligned by default.

What Kernset is

One installation. Every client website.

Switch clients in one click

Every client website is a fully isolated workspace. Users, media, audit logs, and content are scoped at the database level - not just in the app. Cross-website data access is structurally blocked. Add a new client, hand over a login, done. No new installation, no new VPS, no new plugin nightmare.

The design is locked in code

Block schemas live in TypeScript in your code repo - not in a database config your client can accidentally touch. They can edit the text field, swap the image, fill the FAQ. They cannot move a section, change a font, or paste rogue HTML. The structure is yours. The content is theirs.

Clients figure it out without you

Built like a product, not a developer tool. Log in, find the page, change the photo, click publish. Per-locale completeness badges so they know what still needs translating. Drafts and one-click rollback so mistakes are reversible. Built-in usage guides so the training call is optional.

How it works

From repo to published in three steps

  1. Define your blocks

    Write the block schemas in TypeScript. A hero, a feature list, a contact section. Each block declares its editable fields with types, validations, and helper text the editor will see.

  2. Sync the schema

    Run one CLI command. Kernset reads the cmsBlocks export per page and creates the matching content slots. The CLI never touches client content - it only registers structure. Re-run any time, idempotently.

  3. Hand it to your client

    Send them the login. They edit text, swap images, fill the FAQ, click publish. The site rebuilds (or fetches live, depending on hosting mode) within seconds.

Before and after

What actually changes when agencies move to Kernset

One WordPress site per client
With Kernset
Separate install, separate plugin set, separate admin per client.
One admin. Switch client workspaces in the sidebar.
Clients can paste HTML, change fonts, break the theme.
Design is locked in code. Content is the only thing clients can touch.
Onboarding takes a training call and follow-up support tickets.
Built-in usage guides. Clients need significantly less hand-holding.
Client website needs Node.js on the server.
Works on plain shared hosting. No Node required for the default setup.
Multi-language needs a paid plugin and database surgery.
Multi-language is built in. Add a locale with one registry entry.
Contact form submissions go to a third-party service.
Leads land in the client's workspace. One webhook setup - no ongoing maintenance.
Client has to call you to see a draft before it goes live.
Send a shareable preview link. Client sees the draft without logging in.
Plugin updates create security debt across every client site.
One platform update covers every client workspace. No plugin maintenance.
No audit trail of what the client changed or when.
Append-only audit log per workspace. Every edit, publish, and login recorded.

An honest look at the stack

EU infrastructure. Every client website.

The CMS runs on a self-hosted EU server. Block schemas live in your TypeScript repo and sync with one CLI command. The client website can run on plain shared hosting (no Node needed), a cached edge platform, or your own Node server. Content stored as structured JSON in a relational database. Every workspace is database-isolated.

Read the architecture page →
  • 01

    Direct publish

    any shared host

  • 02

    Cached site

    edge platform

  • 03

    Your Node app

    your VPS

Resellable add-ons

Three add-ons you charge extra for. Per client.

Chatbot

Per-client chatbot trained on documents you upload. The client's website answers questions from its own knowledge base. Captured conversations land in the client's lead inbox. You enable it per workspace and charge for it monthly. When disabled, it disappears completely from the admin.

AI writing assistant

Inline translation, content suggestions, SEO copy. The client clicks a button inside the page editor to get a suggestion. Strict opt-in per organisation - you flip it on, you charge for it. When disabled, every AI surface vanishes. No client data leaves your EU server.

Premium analytics

Cookieless, GDPR-aligned dashboards inside each client's workspace. Real-time visitor data, exportable reports, zero third-party tracking scripts. Enable it per client, add it to the invoice. Turning it off removes the dashboard entirely.

Privacy by default

EU-hosted. GDPR-aligned from the start.

Fonts are self-hosted - no Google Fonts request on load. EXIF data, GPS coordinates, and camera metadata are stripped from every uploaded image automatically. Contact form submissions route into the client's lead inbox via a one-time webhook setup. Per-workspace audit logs document every edit, publish, and login for GDPR accountability. Your clients' content stays under EU jurisdiction.

  • Self-hosted fonts
  • Cookieless analytics path
  • EXIF metadata stripped on upload
  • EU-hosted, EU jurisdiction
  • Audit log per client website
  • Zero third-party trackers

Common questions

Things agencies usually ask first

Is Kernset open source?

No. Kernset is a commercial product with agency-friendly licensing finalising at GA. The architecture is open in a different sense: the public content API is a plain HTTPS surface, so your clients are not locked into a particular frontend framework.

Can I host the CMS on my own VPS?

Yes. The CMS itself is Docker-compose driven. Client websites can be hosted anywhere: cheap shared hosting, an edge platform like Vercel, your own Node host, or wherever fits the client. The CMS is one place; the client websites are wherever they need to be.

How does pricing work?

Licensing finalises alongside the GA launch. Early-access pilot pricing is available now; email us to discuss. We are not publishing tiers until the structure is locked in.

What happens if my client's edit breaks something?

Layout and design live in your code, so client edits cannot reach them through the CMS. Their edits change content only. Content is versioned per document with full revision history and one-click rollback. Drafts let them stage changes before publishing.

How is Kernset different from WordPress?

WordPress is open by design: clients can add any block, paste any HTML, install any plugin. That openness is exactly why agency clients break the design and call you back. Kernset locks structure in code; clients edit only the typed fields you exposed. WordPress gives clients more raw flexibility. Kernset is built for the opposite trade: many similar SMB sites where the design has to hold.

How do you handle media across multiple websites?

Each website has a fully isolated media library. Cross-website references are blocked at the database constraint level - one website cannot reference another's images, even by ID. The picker only ever shows the current website's media.

What about EXIF metadata and tracking pixels?

EXIF, IPTC, XMP, and ICC-profile metadata are stripped from JPEG, PNG, and WebP uploads automatically. Customer-uploaded images carry no GPS data, no camera info, no embedded tracker by default. PDFs and videos are not auto-stripped (out of scope for the image pipeline).

How many client websites are you managing right now?

Tell us your portfolio size and current stack. We will set up a private demo against a real site close to your client mix, and share early-access pricing that reflects what you actually need.

Contact

Email or use the form. Tell us how many client websites you maintain today and where the friction is.