Just looking?
Try the demo instead: one command, a nine-page site, no
API key and no repository. For deciding whether you want this.
Bringing a real site in?
This page wires a JSON-backed demo so you see the loop end to end in one
sitting. Your site — real components, a real CMS — is a larger job:
bring your site in.
Prerequisites
- Node.js 22+ — check with
node --version - A coding agent — Claude Code, Codex, Cursor, or anything else with a terminal. If you have none, the shell block does the same work.
- A Next.js 15 or 16 project on the App Router, or nothing at all — either path creates one if you point it at an empty directory.
- One LLM API key — Anthropic, OpenAI, or Google Gemini. Avocado runs on your key and never resells tokens.
Hand this to your coding agent
Claude Code, Codex and Cursor already have a terminal in your project. Paste this and let one of them do the wiring, on a branch, as a diff you review. This is the demo prompt: a JSON file, two built-in blocks, one sitting. The prompt for bringing a real site in — your components, your CMS, your content — is a much longer job and lives at hand it to your coding agent.The prompt is deliberately explicit about the two failures that are silent —
the shadowing route in step 9 and the missing stylesheet in step 3. Both produce
a working build and a wrong-looking site, so an agent that reasons from the
result rather than from the instructions will report success either way.
Start both processes
Two terminals.- Your site
- The editor UI
http://localhost:3000, with the orchestrator mounted inside it at /api/avocado.--orchestrator is http://localhost:4200, which is the standalone server’s address and wrong for library mode — pass the flag. On start it probes the orchestrator’s /health and warns if the reported protocol version does not match the editor build it ships. Every flag it takes: CLI and packages.
Make your first edit
Openhttp://localhost:4100. Your page loads in the preview, with an empty chat composer beside it.
Try one of these:
- “Change the hero headline to ‘Cooking made delicious’”
- “Add a testimonials section under the hero”
- “Rewrite the CTA in a more playful tone”
- A streaming plan — the planner streams typed operations back, and each one appears in the chat as it is parsed.
- A live preview — operations apply to the real page in the iframe as they arrive.
- A change log — a readable summary of what changed and why.
- Undo — every plan is undoable from the chat history.
Clicking the preview does nothing until you turn the picker on. The cursor
button in the composer toggles click-to-select, and it defaults to off so that
links and carousels keep working while you read. A correct install looks inert
until you press it. The rest of the interface:
a tour of the editor.
Publish
Publishing is a separate, explicit step, and in library mode it goes through the adapter. The editor posts to the orchestrator’s/publish, the orchestrator
takes the current draft for that session, and hands the pages to the adapter’s
onPublish — which jsonFileAdapter only has when you asked for it:
writeOnPublish defaults to false because on most deployments it cannot work:
Vercel, and every container built the ordinary way, give the running app a
read-only filesystem. It is the right option for a file on your own machine and
the wrong one everywhere else, so a deployed site publishes into something that
persists — a CMS adapter, a database, or a commit back to the repository. The
publish payload is diffed field by field against a baseline, so a target that
writes diffs writes nothing for pages nobody touched. See
publishing.
Everything on this page publishes to your own machine, which is the one place
that needs no credential. A deployment needs one, and there are two separate
gates — the orchestrator’s, and the site’s publish route. Both are on
security and access.
What’s next
You now have the loop running against a throwaway page. The real question is how your actual site gets in, and there are three honest paths.Hand it to your coding agent
The path we recommend. Claude Code, Codex or Cursor already knows your codebase. Point it at these docs and let it work in your repo through your normal review flow.
Use the built-in onboarding agent
An agent inside the editor that migrates a public URL or integrates a repository. Early — treat its first pass as a draft. Needs the standalone orchestrator, so not the library-mode setup you just built.
Read the contract
Every seam the integration has to satisfy, whether a human or an agent writes it. This is the reference, not a tutorial.
Prove it worked
editableCoverage and panelCoverage grade the integration. The number is what tells you it is done.- Manual setup — the same wiring by hand, with the reasoning, plus troubleshooting
- Custom blocks — register your own React components, which is what a real site edits.
- Field table — one declaration that drives the schema, the panel, the CMS projection and the merge.
- CMS adapters — Contentful, Sanity, Strapi, or your own.
- MCP server — 49 tools over Model Context Protocol, for any MCP host.
- Docker deployment — running the standalone orchestrator instead of library mode.
Troubleshooting
The full list — including every silent failure mode — is on manual setup. The three that catch most people:pnpm dev fails with a better-sqlite3 or sharp error. Your Next config is not wrapped in withAvocado.
The preview shows the published page and never your edits. The editor is talking to a different orchestrator than the one inside your site. Confirm you passed --orchestrator http://localhost:3000/api/avocado.
The chat answers, but nothing changes, and the model picker is empty. No provider key reached the orchestrator, or the dev server has not been restarted since you added one.