Sites
Build managed multipage websites with draft editing, CMS bindings, forms, domains, and publishing.
sitespublishingcmsforms
Sites
Sites are managed multipage websites built inside Einblick. They combine pages, reusable layouts, site classes, custom CSS, CMS bindings, hosted forms, custom domains, and managed publishing. Each Site also has a shared Website identity for its domains, public site key, preview, and optional analytics.
Open the feature
- Open Websites from the sidebar. This hub contains Sites built with Einblick alongside SDK/editor registrations and analytics-only websites; capability badges distinguish them.
- Existing
/siteslinks redirect to the Websites hub, and existing Site detail and editor links forward to the matching Website. - If the entry is missing, an admin can enable the Sites module and Websites sidebar item. Sites depend on CMS because published pages can bind to CMS collections.
Create and publish a site
- Click Build with Einblick in Websites to create a draft Site with a managed domain based on the site slug. Choose Blank for an empty Home page or Portfolio starter for a shared header/navigation/footer layout plus Home and Projects pages.
- Site slugs are normalized, kept unique inside the Workspace, and can be edited from the site actions. Changing the slug also updates the managed host and puts its DNS status back into review.
- Each site has a name, slug, draft theme, default SEO, optional custom CSS, pages, layouts, classes, domains, a site image folder, and form submissions.
- Save persists draft changes without changing the public site. Publish saves dirty drafts first, then copies the site settings, pages, layouts, classes, and custom CSS into the site-wide published version. Public rendering only uses published content.
- The publish popover previews page readiness and domain status before publishing.
- Publishing queues managed-domain DNS provisioning and asks the site renderer to revalidate when that integration is configured. The domain becomes public only after it is active.
- A site that is still draft, archived, unpublished, or only reachable through a pending or failed domain returns not found publicly.
Manage sites
- The Websites hub supports grid and table views. Search by name or public site key, filter by status, and use capability badges to identify Sites built with Einblick. Cards include the current website preview and connected-domain count.
- Opening a builder website shows its Site overview with a live primary-domain preview, current publish state, last publish time, page and domain readiness, DNS issues, and recent submissions. You can refresh the stored preview from this page.
- Use the website header actions to edit, duplicate, or delete the Site. Publishing sits beside the live preview, while Add page is in the Pages card. Open the Website-level Analytics and Settings tabs for analytics, shared domains, and site-key settings when your role has access.
- Duplicating a site creates a draft copy named after the source, gives it a unique managed
-copyslug and domain, and copies draft pages, layouts, classes, and custom CSS. Custom domains, published state, and form submissions are not copied. - Deleting a site removes its domains, pages, layouts, classes, stored form submissions, and site image folder, then revalidates the renderer when configured.
- The homepage cannot be deleted, but additional pages can be added from the site detail page or editor.
Pages and editor
- Add pages from the site detail page or editor. Paths are normalized and must be unique inside the site; a site can only have one
/homepage. - Page settings control the title, path, layout, page type, CMS detail collection, preview record, and page SEO. Static pages use fixed paths; CMS detail pages use dynamic paths such as
/posts/:slug. - Layouts store shared structure such as headers and footers. A page can use no layout or one layout, and layouts can inherit from a parent layout. Layout content is inserted through an Outlet element.
- The editor lets you add HTML-like elements, arrange layers, edit text and attributes, copy and paste elements, upload or link images, switch preview widths, and save page SEO.
- Editor status distinguishes unsaved changes, saved draft changes that are not yet published, and the currently published version.
- Styles can be stored inline on an element or in reusable site classes. Style states are saved per breakpoint for base, current page, hover, focus, active, and open states.
- Interactions can run on click, mouse enter, mouse leave, focus, or blur. Actions can toggle states, classes, or allowed attributes on the element itself or another element; the
openstate can drive open-state styling andaria-expanded. - The editor includes a Forms block for embedding an existing form from Forms. The block is offered only when your role can read forms, and the inspector lets you choose the connected form.
- The editor includes a site-scoped assistant panel for users who can update the site. Threads are scoped to the current user, Workspace, and site. Before the assistant sends a prompt, Einblick saves unsaved draft changes. The assistant can inspect the current site, active page, selected node, pages, layouts, classes, CMS collections, and available forms; it can patch page or layout drafts and call allowed site, CMS, and minimal form APIs. Patches update drafts, not published content, and destructive or outbound actions require explicit confirmation.
- Custom CSS is saved at site level and injected into rendered pages after generated styles.
- Each site can contain up to 200 pages, 100 layouts, and 500 reusable classes.
- Preview mode disables selection so you can test links, forms, and interactions in the canvas.
CMS bindings
- Collection-list bindings repeat an element for published records from a CMS-backed API resource. They can set a record limit and filters.
- Collection-detail pages can use dynamic paths such as
/posts/:slugand render the published CMS record that matches the slug. - Field bindings can render a field from the current list item, detail record, or singleton record as text or as a chosen attribute, such as an image
srcor linkhref. - Public pages only read published CMS records.
Forms and submissions
- The Forms block embeds a hosted form with the public
/f/:formId?embed=1URL. The selected form still controls its own publish status, visibility, and response settings. - Form elements submit to Einblick through the public site endpoint.
- Form submissions must come from the same host as the site, stay under 1 MB, and pass per-IP and per-site/form rate limits.
- Submitted payloads are stored on the site with the page, form ID, origin, user agent, and timestamp.
- The site detail page shows recent submissions so admins can review incoming form data.
Domains and public rendering
- New sites get a managed host based on the site slug. Managed DNS uses the configured renderer target and can reconcile a wildcard CNAME or an exact per-site CNAME when needed.
- Add custom domains from Edit site details > Domains. Einblick registers the host with the site renderer and shows the CNAME record to create at the DNS provider. Wildcard domains and hosts under the managed Sites domain are rejected.
- Pending custom domains can be checked manually. Einblick also rechecks pending custom domains in the background while DNS propagates, and emails the creator when a domain first becomes active.
- Domain status shows whether DNS is pending, active, disabled, or failed, including the stored DNS error when provisioning fails.
- Domain additions and verification changes are recorded as site-domain activity items that link back to the site.
- Public resolution checks the request host and path against active site domains and published pages.
- Published sites expose page metadata, robots rules, and a sitemap from the rendered site.