# Sites

URL: /products/site/sites · Id: `system:sites`

> Sites keeps each Site with its Pages, navigation and Brand, served on one or more Domains, with previews, redirects and rollbacks.

[Sites](/business/nouns/site) keeps every Site a [Startup](/business/nouns/startup) publishes, with its [Pages](/business/nouns/page), navigation and [Brand](/business/nouns/brand), on its own [Domains](/business/nouns/domain). Every [Change](/business/nouns/change) gets a preview, and every publish rolls back in one step.

## Summary
| Part | This System |
| --- | --- |
| Group | Moves to Products |
| Status | Live |
| Shelf | Front: offered from a Startup’s first days |

You can ask:

- “Put up a landing page”
- “Change the headline on the home page”
- “Roll back the last change to the site”
- “Add a pricing page”

## What you get
| Part | This System |
| --- | --- |
| Starts | On for every Startup at creation, with nothing to install. |
| Built from | [Apps and sites](/products/platform/apps-and-sites), [Domains](/products/platform/domains), [Domain registration](/products/platform/domain-registration), [Database](/code/platform/capabilities/database), [Search](/code/platform/search) |

## Nouns it owns
| Noun | Definition |
| --- | --- |
| [Site](/business/nouns/site) | A Site is a website as a Thing: its Pages, navigation, and Brand, served on one or more Domains. |
| [Page](/business/nouns/page) | A Page is an addressable page of a Site, of a named type such as pricing, about one Thing or each member of a Collection. |
| [Domain](/business/nouns/domain) | A Domain is a hostname that points at a Thing, with a role, a status, and a lifecycle tracked as data. |
| [Theme](/business/nouns/theme) | A Theme is the design tokens of a Brand, its color, type, spacing, radius, and motion, that every Component reads when it renders. |
| [Portal](/business/nouns/portal) | A Portal is the signed-in part of a Site where each Customer orders, tracks delivery, accepts work, and pays, seeing only their own records. |

## Verbs
| Verb | Object | Approval | Event |
| --- | --- | --- | --- |
| [Site.create](/business/nouns/site/create) | [Site](/business/nouns/site) | None | `Site.created` |
| [Site.publish](/business/nouns/site/publish) | [Site](/business/nouns/site) | Asks first | [`Site.published`](/business/events/Site.published) |
| [Page.create](/business/nouns/page/create) | [Page](/business/nouns/page) | None | `Page.created` |
| [Page.update](/business/nouns/page/update) | [Page](/business/nouns/page) | None | `Page.updated` |
| [Domain.register](/business/nouns/domain/register) | [Domain](/business/nouns/domain) | Asks first; waits 1 business hour | [`Domain.registered`](/business/events/Domain.registered) |
| [Domain.connect](/business/nouns/domain/connect) | [Domain](/business/nouns/domain) | Asks first | [`Domain.connected`](/business/events/Domain.connected) |
| [Domain.transfer](/business/nouns/domain/transfer) | [Domain](/business/nouns/domain) | Asks first; waits 1 business day | [`Domain.transferred`](/business/events/Domain.transferred) |

## Events
| Direction | Event | How |
| --- | --- | --- |
| Emits | `Site.created` | By [Site.create](/business/nouns/site/create) |
| Emits | [`Site.published`](/business/events/Site.published) | By [Site.publish](/business/nouns/site/publish) |
| Emits | `Page.created` | By [Page.create](/business/nouns/page/create) |
| Emits | `Page.updated` | By [Page.update](/business/nouns/page/update) |
| Emits | [`Domain.registered`](/business/events/Domain.registered) | By [Domain.register](/business/nouns/domain/register) |
| Emits | [`Domain.connected`](/business/events/Domain.connected) | By [Domain.connect](/business/nouns/domain/connect) |
| Emits | [`Domain.transferred`](/business/events/Domain.transferred) | By [Domain.transfer](/business/nouns/domain/transfer) |
| Emits | [`Domain.renewalDue`](/business/nouns/domain#domainrenewaldue) | Raised when a date passes |
| Emits | [`Domain.expired`](/business/nouns/domain#domainexpired) | Raised when a date passes |

## States
The lifecycle of a [Domain](/business/nouns/domain):

| State | Meaning | Moves to |
| --- | --- | --- |
| `candidate` (first) | A name found by search that no one here holds yet. | `held` by [Domain.register](/business/nouns/domain/register); `registered` by [Domain.register](/business/nouns/domain/register); `claimed` by [Domain.claim](/business/nouns/domain/claim); `connected` by [Domain.connect](/business/nouns/domain/connect) |
| `held` | Registered to the holding Company and not yet assigned to a Startup. | `claimed` by [Domain.claim](/business/nouns/domain/claim); `released` by [Domain.release](/business/nouns/domain/release) |
| `claimed` | Assigned to a Startup: a label under an issuing Domain, or a held Domain. | `live` by [Domain.verify](/business/nouns/domain/verify); `released` by [Domain.release](/business/nouns/domain/release) |
| `registered` | Registered to its owner of record and pointed at the Startup’s address. | `verifying` by [Domain.verify](/business/nouns/domain/verify) |
| `connected` | Attached from another registrar while its ownership proof is checked. | `verifying` by [Domain.verify](/business/nouns/domain/verify) |
| `verifying` | Its first DNS, ownership and certificate checks are running. | `live` by [Domain.verify](/business/nouns/domain/verify); `degraded` by [Domain.verify](/business/nouns/domain/verify) |
| `live` | Serving, with its DNS, ownership and certificate checks passing. | `degraded` by [Domain.verify](/business/nouns/domain/verify); `expiring` on [`Domain.renewalDue`](/business/nouns/domain#domainrenewaldue); `renewed` by [Domain.renew](/business/nouns/domain/renew); `transferred` by [Domain.transfer](/business/nouns/domain/transfer); `released` by [Domain.release](/business/nouns/domain/release) |
| `degraded` | A check failed; a degraded canonical Domain opens an Incident. | `live` by [Domain.verify](/business/nouns/domain/verify); `released` by [Domain.release](/business/nouns/domain/release) |
| `expiring` | Inside its renewal window with no renewal yet. | `renewed` by [Domain.renew](/business/nouns/domain/renew); `lapsed` on [`Domain.expired`](/business/nouns/domain#domainexpired) |
| `lapsed` | Its registration ended unrenewed, and the registrar may still restore it. | `renewed` by [Domain.renew](/business/nouns/domain/renew); `released` by [Domain.release](/business/nouns/domain/release) |
| `renewed` | Extended by whole years at its renewal price. | `live` by [Domain.verify](/business/nouns/domain/verify) |
| `transferred` | Moved to another holder or registrar, with its record and history kept. | None: it ends here. |
| `released` | Its registration or claim ended, and its record, history and aliases are kept. | None: it ends here. |

## Who operates it
| Part | This System |
| --- | --- |
| Accountable | [Designer](/agents/product/designer) |
| Team | [Product Team](/agents/product) |
| Seat | A role agent holds it until a Human is seated. |
| Autonomy | `supervised` |
| Also calls its Verbs | [Integration Engineer](/agents/engineering/integration-engineer), [Content Lead](/agents/marketing/content-lead), [Legal Lead](/agents/legal/legal-lead), [Contracts Manager](/agents/legal/contracts-manager) |

## Approvals and limits
| Verb | Rule | Detail |
| --- | --- | --- |
| [Site.publish](/business/nouns/site/publish) | A person says yes first | None. |
| [Domain.register](/business/nouns/domain/register) | A person says yes first | Waits 1 business hour |
| [Domain.connect](/business/nouns/domain/connect) | A person says yes first | None. |
| [Domain.transfer](/business/nouns/domain/transfer) | A person says yes first | Waits 1 business day |
| [Page.create](/business/nouns/page/create) | Limit for the [Content Lead](/agents/marketing/content-lead) | 5 calls per week |

## Processes that use it
| Process | How it uses it |
| --- | --- |
| [Launches](/workflows/processes/launches) | A Workflow writes [Page](/business/nouns/page) |
| [Content marketing](/workflows/processes/content-marketing) | A Workflow writes [Page](/business/nouns/page) |
| [Contracting](/workflows/processes/contracting) | A step calls [Page.create](/business/nouns/page/create) |
| [Product definition](/workflows/processes/product-definition) | A step calls [Page.update](/business/nouns/page/update) |
| [Retention](/workflows/processes/retention) | A step calls [Page.create](/business/nouns/page/create) |
| [Takedowns](/workflows/processes/takedowns) | A step calls [Page.update](/business/nouns/page/update) |

## Rail underneath
None.

## Views and dashboards
| View | Shows | Metrics |
| --- | --- | --- |
| The [Designer](/agents/product/designer)’s view | The Metrics its accountable Role answers for. | [Page task success](/agents/product#page-task-success) |

## Access
What each Access level may call here.

| Access level | May call |
| --- | --- |
| `owner` | Every Verb (29) |
| `admin` | All but 2 of 29: `Domain.register`, `Domain.transfer` |
| `member` | All but 2 of 29: `Domain.register`, `Domain.transfer` |
| `viewer` | Read only (10 of 29) |

## Import and export
None.

## Fees and pricing
None.

## Availability and limits
| Part | This System |
| --- | --- |
| Status | Live |

## Compliance notes
Controls it carries:

- [Point-in-time recovery](/systems/trust-and-governance/controls/point-in-time-recovery)
- [Processing definitions](/systems/trust-and-governance/controls/processing-definitions)

## Related Systems
- [Intellectual property](/systems/intellectual-property): also holds [Domain](/business/nouns/domain)

## Example
A [SaaS](/products/templates/saas) for dental clinics publishes a pricing Page for each of the 40 cities it serves. The [Content Lead](/agents/marketing/content-lead) [Agent](/business/nouns/agent) drafts all 40 from one layout, previews them on a branch, and publishes them as one Change. A typo found an hour later rolls back without touching the other 39.