What Siteon does
Siteon is a foundation for publishing a finished static site (HTML) and keeping it running. AI can build how a site looks; this foundation takes on what comes after: publishing, updates, inquiries, and day-to-day operation. It doesn't matter how the site was built. HTML generated by AI and HTML written by hand work the same way.
The foundation has four pillars. Use only the ones you need.
- Host — hosting — Publish a built folder with
siteon deploy, with CMS values filled in before delivery. Roll back to a previous version withsiteon rollback. You can also keep your current hosting. The Free plan can publish too, at<name>.siteun.comwith a "Made with Siteon" badge; custom domains and badge removal come with paid plans (from $4/mo). Publishing on a custom domain is in preparation Soon - Edit — editable areas (CMS) — The business owner can edit the areas you mark in the HTML, such as opening hours, news, and photos, from the dashboard
- Collect — inquiry forms — Receiving and storing submissions, email and Slack notifications to the business, and thank-you emails (auto-reply) to customers. This also covers recording where ad visitors came from (
utm_*and so on), loading GTM, an event for counting submissions as conversions, and webhooks to Zapier, Make or a CRM (paid plans) - Delegate — operation by AI agents — With the CLI, the MCP server, and API keys, you can hand an agent everything from creating a site and applying the schema to test submissions, publishing, and checking inquiries (CLI and MCP)
Signing up, payment, issuing API keys, export, and closing your account are all self-service through the dashboard and commands. If something goes wrong, look up the symptom in Common errors and fixes.
You don't write JavaScript on your site, and you don't need to add hidden fields. Add one script line and put attributes on your HTML.
If the CMS goes down, your site stays up. When values can't be fetched, the static text written in the HTML is shown as is. So make sure the HTML text makes sense on its own.
Get it working in 5 minutes
1. Register a site and get a site ID
Enter your email address and you'll receive a sign-in link. Opening it creates one site on the Free plan and assigns a site ID (for example, hanaya). It works on development and preview domains (such as localhost and *.pages.dev) and on its Siteon hosting subdomain (<name>.siteun.com). See Plans and limits for details.
2. Add one script line
Add it right before </body>, or in <head> with defer. Put your site ID in data-site.
<script src="https://cdn.siteon.dev/sitekit.js" data-site="hanaya" defer></script>3. Add attributes
For a form, just add data-sitekit-form to the <form>. The script handles submission.
<form data-sitekit-form="contact">
<label>Name <input name="name" required></label>
<label>Email <input type="email" name="email" required></label>
<label>Message <textarea name="message"></textarea></label>
<!-- Bot protection. Place it where people can't see it (required) -->
<input type="text" name="_hp" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true">
<button type="submit">Send</button>
</form>
<div data-sitekit-success role="status" aria-live="polite" hidden>Thank you for your inquiry.</div>
<div data-sitekit-error role="status" aria-live="polite" hidden></div>Add data-cms to the areas the business owner should be able to edit. The text inside is the default, shown as is when values can't be fetched.
<dl>
<dt>Open</dt>
<dd data-cms="hours.days">Mon–Sat</dd>
<dt>Hours</dt>
<dd data-cms="hours.time">10:00 - 18:00</dd>
</dl>4. Define what's editable and what the form looks like in schema.json
To match the HTML above, write it like this. forms[].key must match the form's data-sitekit-form value, and fields[].key must match each input's name.
{
"locales": ["en"],
"groups": [
{ "key": "hours", "label": "Opening hours", "fields": [
{ "key": "days", "label": "Open", "type": "text" },
{ "key": "time", "label": "Hours", "type": "text" }
] }
],
"forms": [
{ "key": "contact", "label": "Contact", "fields": [
{ "key": "name", "label": "Name", "type": "text", "required": true },
{ "key": "email", "label": "Email address", "type": "email", "required": true },
{ "key": "message", "label": "Message", "type": "textarea" }
] }
]
}The full syntax is in Writing schema.json. Apply schema.json with siteon schema push in the CLI or update_schema in MCP (CLI, MCP, and API keys). Create additional sites with "Add site" in the dashboard or siteon sites create.
5. Publish
You can publish your built folder as is.
siteon hosting enable --site hanaya # first time only
siteon deploy ./dist --site hanaya # published at https://hanaya.siteun.com/You can also keep your current hosting (Cloudflare Pages and others). The differences are in Hosting and delivery.
6. Check in the dashboard
Sign in to the dashboard and the fields from schema.json appear as inputs. Edit a value and publish it: it reaches the site within 15 seconds with Siteon hosting, or within 1 minute with the relay or data-embed (no site redeploy needed). Inquiries sent from the form also arrive in the dashboard list.
Glossary
| Term | Meaning |
|---|---|
| Site ID | The identifier for each site. Used in the script's data-site and in API URLs |
| schema.json | The file that declares which fields the business owner can edit and which fields each form has |
| Public JSON | JSON containing the currently published content. The relay and data-embed read it and fill it into the HTML |
| Relay | A Cloudflare Pages Function that fills values from the public JSON into the HTML before delivery |
| deploy | Publishing a built folder to Siteon hosting. Each publish is called a "version" |
| Primary language | The first entry in schema.json's locales. The language the business owner enters content in, also used when a translation is missing |
Read next
- script tag — The attribute list, and what works with the script alone
- Editable areas (CMS) — Text, photos, news lists, and multiple languages
- Forms — Messages, notifications, auto-replies, conversion tracking, and test submissions
- Webhooks — Send inquiries to Zapier, Make or a CRM, signed
- Scheduling Soon — One-to-one booking for sales calls and interviews, with Google Calendar and Meet
- Handing off to AI agents — Instructions you can paste straight into Claude Code or Cursor