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
// 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
-
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.
-
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.
-
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
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
- 02
Cached site
- 03
Your Node app
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.