# Getting started

> The four pillars of a foundation that keeps your site running (Host, Edit, Collect, Delegate), and how to get it working in 5 minutes (sign up → add one script line → add attributes → publish → check in the dashboard).

URL: https://siteon.dev/docs

Siteon is infrastructure for AI-built websites: it adds hosting, a CMS your client can edit, contact forms, analytics and control from AI agents (CLI and MCP) around static HTML built with AI or by hand, so it is ready to ship.

## 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 with `siteon rollback`. You can also keep your current hosting. The Free plan can publish too, at `<name>.siteun.com` with 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 (coming 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](https://siteon.dev/docs/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](https://siteon.dev/docs/cli-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](https://siteon.dev/docs/troubleshooting).

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](https://siteon.dev/docs/plans) for details.

### 2. Add one script line

Add it right before `</body>`, or in `<head>` with `defer`. Put your site ID in `data-site`.

```html
<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.

```html
<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.

```html
<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`.

```json
{
  "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](https://siteon.dev/docs/schema). Apply schema.json with `siteon schema push` in the CLI or `update_schema` in MCP ([CLI, MCP, and API keys](https://siteon.dev/docs/cli-mcp)). Create additional sites with "Add site" in the dashboard or `siteon sites create`.

### 5. Publish

You can publish your built folder as is.

```sh
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](https://siteon.dev/docs/hosting).

### 6. Check in the dashboard

Sign in to the [dashboard](https://app.siteon.dev) 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](https://siteon.dev/docs/script) — The attribute list, and what works with the script alone
- [Editable areas (CMS)](https://siteon.dev/docs/cms) — Text, photos, news lists, and multiple languages
- [Forms](https://siteon.dev/docs/forms) — Messages, notifications, auto-replies, conversion tracking, and test submissions
- [Webhooks](https://siteon.dev/docs/webhooks) — Send inquiries to Zapier, Make or a CRM, signed
- [Scheduling](https://siteon.dev/docs/scheduling) (coming soon) — One-to-one booking for sales calls and interviews, with Google Calendar and Meet
- [Handing off to AI agents](https://siteon.dev/docs/agents) — Instructions you can paste straight into Claude Code or Cursor
