Start from Next.js
Map rendered routes and component content to typed pages and sections. React code stays outside the import.
Site Kit SDK
Convert Next.js, HTML, or WordPress evidence into SnabbSajt's structured format. Open source, local, and deliberately keyless.
Your Next.js, HTML, or WordPress project, authored however you already work.
The CLI runs the production importer's own checks, then writes a checksum-protected zip.
It lands as an unpublished draft the client edits in plain Swedish. No code, no deploys.
Push changes from the repo whenever you rebuild. Their edits are reported, never overwritten.
Map rendered routes and component content to typed pages and sections. React code stays outside the import.
Extract the real content and links. Scripts, iframes, custom CSS, and unsafe markup are left behind.
Run the same schemas and limits as the production importer, then create a checksum-protected zip.
Combine the public site with a WXR export. Keep pages, posts, media, metadata, and old-URL decisions without running PHP or plugins.
SnabbSajt validates everything again and creates a new unpublished, normally editable website.
Authoring, validation, inspection, and packing run on your machine. Then send the site owner one link, /dashboard/import, and have them drop the zip on it. It works on a brand-new account with no sites yet, and the result is an unpublished draft. Keys only make sense if we later ship a hosted CI or upload API.
Open the import pagenpx @snabbsajt/cli site import html https://example.com -o ./site
npx @snabbsajt/cli site validate ./site
npx @snabbsajt/cli site import approve ./site --yes
npx @snabbsajt/cli site pack ./site -o site.zip@snabbsajt/cli is on npm, currently 0.4.0. Site Kit is in beta: the package format is stable, the surfaces around it are still moving.
A hand-over is not the end of the project. Pair your machine with the site once, then push changes from the repo whenever you rebuild a section. The client's own edits are theirs: a push shows you what they changed and never silently overwrites it.
npx @snabbsajt/cli admin pair # one browser approval, once per machine
npx @snabbsajt/cli link # pick the site this directory belongs to
npx @snabbsajt/cli push ./site --dry-run # see the merge before anything is written
npx @snabbsajt/cli push ./sitePairing mints a scoped token by browser approval. The CLI never asks you for a password, and the token only carries the scopes you approved. Publishing stays a human decision in the editor.
The CLI installs versioned skills for import, build, review, and running a live site over MCP, for Codex and Claude Code. Project-local is the safe default; checksums catch drift.
Dropping the packed zip on the import page needs no key and no grant. Letting an agent import over MCP needs the content:write scope and nothing else. Both routes can either create a new site or update one that already exists; the browser shows a preview of the merge, including which sections you edited yourself and would keep, before anything is written.
npx @snabbsajt/cli skills install --agent autoWith the skills installed and the site connected over MCP, this is the whole brief an assistant needs. Paste it into Claude Code, Codex, or Cursor:
Convert this project into a SnabbSajt site.
Use the build-snabbsajt-site skill to author it against the typed
registry, then site validate and site pack it. Report anything the
format cannot carry instead of inventing a replacement. Never
invent testimonials, prices, opening hours, or legal text.
When it validates, push it with --dry-run first and show me the
merge. Do not publish; I will do that in the editor.Connecting an assistant is the same pairing as above, with the scopes you approve. Read plus content:write is enough to edit a draft. An agent can read, write, and prepare a publish; confirming it stays a human action.