Table of Contents

Configure a new site with Site Forge

Note

Site Forge is the single source of truth for what every public-facing storefront looks like. New sites are configured entirely through the Dashboard — no code changes, no redeploy. When you publish, the public hostname starts serving the new site within seconds.

Outcome: a published, theme-customized site at the hostname you choose, rendered through the matching template (NorthStar e-commerce or TravelAgent travel/booking) with the page sections and navigation you arranged.

Time: ~15 minutes for a first-time create. Permission: Manager role on the tenant with Sites permissions (Sites.View / .Create / .Edit / .Publish). New tenants typically get this through the SuperAdmin onboarding flow — if your tenant doesn't have Site Forge access yet, the SuperAdmin runbook (docs/operations/tenant-onboarding.md in the repo) covers the prerequisites.

Before you start

You need:

  • A tenant whose hostname is already wired into routing (Caddy + Gateway). If your hostname doesn't resolve in dev/staging yet, your SuperAdmin handles that step using the operations runbook — Site Forge picks up from there.
  • A picked template style. Two ship in v1:
    • northstar — e-commerce (product grid, journal, loyalty tiers).
    • travelagent — travel/booking (hero slideshow, offers carousel, top destinations, inspirations, favorites by city).
  • Optional but recommended: brand assets — logo URL, favicon URL, primary brand colors (hex codes), Google Fonts URL if you want a custom typeface.

Step 1 — Open the Sites list

  1. Sign in to the Dashboard.

  2. In the left sidebar, expand Site Forge and click Sites.

    📷 Sidebar: Site Forge → SitesScreenshot pending — drop file at images/01-sidebar-sites.png
  3. The page opens at /apps/siteforge/sites. You'll see a table of any existing sites for your tenant, plus a Create Site button in the top-right card header.

Step 2 — Open the Create Site modal

Click Create Site. A two-column modal opens:

  • Left column — the form fields you fill in.
  • Right column — a live preview of the selected template (color swatch + default home-page section list).
📷 Create Site modal — 2-column layoutScreenshot pending — drop file at images/02-create-modal.png

Step 3 — Fill the Create Site form

Field Value Notes
Site Name Acme Travel Admin-facing label. Shows up in the sites list and breadcrumbs.
Hostname acme.digitalantiz.net The public hostname this site serves. Must be unique across all tenants.
Tenant Pre-selected to the active tenant. SuperAdmins can pick a different tenant.
Template northstar or travelagent Determines the look + section catalog. Cannot be changed later — pick carefully.
Tip

When you pick a template, the right-hand preview pane shows you what you're committing to: the brand color swatch (primary / accent / surface / body) and the default home-page section list. Use this to spot-check that you've picked the right template before submitting.

Warning

The hostname is the public address — it's what end users type into their browser. If you misspell it, you can rename it later via the SiteDefinition's settings, but DNS + TLS provisioning may need to repeat. Get it right the first time.

Click Create. The modal closes; you land on the new site's configuration page at /apps/siteforge/sites/{id}.

Step 4 — Understand what just got auto-populated

When you create a site, the system inserts:

  • One SiteDefinition row (the parent container).
  • One SiteThemeConfig row populated from the template's default theme (colors, fonts, feature flags).
  • Several SiteNavItem rows (the navigation menu, populated from the template's default nav).
  • Several SitePageSection rows (the home page composition, populated from the template's default sections — Hero, Product Grid, etc.).

This means the site is already functional with the template defaults. You only need to override what you want to customize. Everything you don't touch keeps the template default.

The configuration page has four tabs:

  • General — site name, hostname, status (rename / archive).
  • Design — theme colors, fonts, branding, feature flags.
  • Navigation — top-nav menu items.
  • Page Sections — home page composition (which sections appear, in what order, with which content).

Step 5 — Customize the Design tab

Click the Design tab. The form has these groups:

Colors

Field Notes
Primary Buttons, links, accents. Hex (#e30019).
Primary Dark Hover state for primary. Slightly darker than primary.
Accent Secondary actions, badges.
Text Main Headings + emphasized body text.
Text Body Default body text.
Text Muted De-emphasized text (timestamps, captions).
Bg Body Page background.
Bg Surface Card / panel background. Usually #ffffff.

Typography

Field Notes
Font Heading CSS font stack for headings, e.g. "Inter", sans-serif.
Font Body CSS font stack for body text.
Google Fonts URL Optional. If you set this, the URL is added as a <link> so the browser loads the fonts.

Shape

Field Notes
Border Radius Card / button rounding, e.g. 4px, 10px.

Branding

Field Notes
Logo URL Path or absolute URL to the header logo.
Favicon URL Browser tab icon.
Hotline Optional contact number shown in headers.

Feature flags

Toggle on/off:

Flag Effect
Show Flash Sale Reveals flash-sale ribbons on product cards.
Show Rating Reveals product/tour star ratings + review summaries.
Show Installment Price Reveals "from $X/mo" pricing on cards.
Show Store Locator Reveals the physical-store finder in headers.
Show Checkout Countdown Reveals the "Reserve for 10 minutes" timer on the checkout page (TravelAgent only).
Theme Key Travel-specific theme variant key (coral, green, etc.)
Field Notes
Category Filter Style horizontal (chip strip) or sidebar (left rail).
Header Style sticky (follows scroll) or static.

Click Save at the bottom of the tab. Changes apply within ~60 seconds (FusionCache TTL) or immediately after a manual cache invalidation.

Tip

The whole site is themed via CSS custom properties (--sf-primary, --sf-bg-surface, etc.). You can preview live changes by editing the theme on a sandbox tenant first.

Step 6 — Customize the Navigation tab

Click the Navigation tab.

The default nav is populated from the template — for northstar that's typically Home / Shop / Blog / Contact; for travelagent it's Home / Activities / Destinations / Transport.

For each nav item:

  • Label — visible link text.
  • URL — relative path (e.g. /Shop) or absolute URL.
  • Sort order — lower numbers appear first.

Use the + Add nav item button to insert new ones, the trash icon to remove. Drag the row handle to reorder (or edit Sort Order numerically).

Click Save.

Step 7 — Arrange the Page Sections tab

Click the Page Sections tab.

This tab controls the home-page composition. Each row is a section. Columns:

Column Notes
Order Numeric — lower numbers render higher on the page.
Section Section key (HeroBanner, ProductGrid, FAQ, etc.). Pick from the dropdown.
Shared block Only relevant for shared sections (Reviews / FAQ / HotDeal / EarlyBird). Pick from the tenant's Library. See the shared blocks guide.
Enabled Toggle off to hide a section without deleting its config.
Actions Move up / down / delete.

Adding a new section

  1. Click + Add section.
  2. Pick a Section from the dropdown. Available keys depend on the template:
    • northstar: HeroBanner, ProductGrid, JournalTeasers, LoyaltyTiers, CategoryShortcuts, plus the four shared keys (Reviews, FAQ, HotDeal, EarlyBird).
    • travelagent: HeroSlideshow, OffersCarousel, TopDestinations, InspirationGrid, FavoriteByCity, WhyChooseUs, AppDownloadCta, plus the four shared keys.
  3. Set Order — pick a number that places the section where you want it. Existing sections keep their numbers; you can shift them later.
  4. If you picked a shared key (Reviews / FAQ / HotDeal / EarlyBird), the Shared block dropdown unlocks. Pick an existing block from the tenant's Library, or click the external-link icon to open the Library in a new tab and create one.
  5. Enabled is on by default.

Inline configuration

Some sections accept inline configuration (e.g., ProductGrid accepts count and sortBy). For v1, this is edited as JSON in the Config (JSON) field per row. Examples:

{ "count": 4, "sortBy": "featured" }
{ "count": 6 }
Note

The four shared sections (Reviews, FAQ, HotDeal, EarlyBird) don't use inline config — their content lives on the linked SharedContentBlock. This is why you pick from the Library instead of editing JSON.

Click Save when the composition matches what you want.

Step 8 — Preview your changes

Each tab has a Save button that persists changes immediately. SiteForge caches the site config for ~60 seconds; visit the public hostname after that interval to see your changes.

For a dev/staging hostname, the URL is whatever you set in step 3. For the demo tenants:

  • nemxanh.digitalantiz.net (and shop.digitalantiz.net)
  • northstar.digitalantiz.net
  • go365.digitalantiz.net (and tour-booking.digitalantiz.net)
Tip

If you can't wait 60 seconds, you can hard-refresh the public site — the FusionCache fail-safe window catches stale-but-valid entries while the resolver re-fetches in the background.

Step 9 — Publish

When you're happy with the configuration:

  1. Go back to the General tab.

  2. Click Publish.

    📷 General tab — Publish buttonScreenshot pending — drop file at images/03-publish-button.png
  3. Confirm. The site flips to Published. Behind the scenes:

    • The matching Sites routing row flips to Status = Active.
    • Caddy /caddy/ask greenlights TLS issuance for the hostname.
    • The rendering host (NorthStar or TravelAgent) starts serving the new content for incoming requests.

End users hitting the hostname now see your site.

Step 10 — Verify in the browser

Open the public hostname in a fresh browser tab (or incognito to bypass any old cache). You should see:

  • The header logo + nav from steps 6.
  • The home page sections from step 7, in order.
  • The theme colors / fonts from step 5.

If something looks wrong:

Symptom Likely cause
"Site is not yet published" message The SiteDefinition isn't published, or no SiteDefinition resolves for this hostname. Re-check step 9.
Old colors / old content FusionCache hasn't expired. Wait 60 seconds and refresh.
Wrong template style (e.g., e-commerce layout on a travel hostname) The Template was picked wrong at step 3. Templates are immutable post-create — start over with a new SiteDefinition at the same hostname (delete the old one first).
HTTPS warning / certificate error Caddy hasn't issued a TLS cert yet. Wait ~30 seconds and retry. If it persists, check the Caddy logs.

What's next?

  • Manage shared content blocks — add reusable FAQ, HotDeal, and EarlyBird blocks to your tenant's Library, then attach them to one or more sites.
  • Edit at any time — the configuration page is the single source of truth. Every Save flows through to the live site within ~60 seconds.
  • Unpublish — to take a site offline temporarily, click Unpublish on the General tab. The hostname stops serving content but the configuration is preserved.
  • Rename hostname — edit the Hostname field on the General tab and Save. The Sites routing row renames in place; Caddy issues a fresh TLS cert for the new hostname.

Permissions reference

Action Policy required
View sites + config Permissions.Sites.View
Create a site Permissions.Sites.Create
Edit theme / nav / sections Permissions.Sites.Edit
Publish / Unpublish Permissions.Sites.Publish
Delete a site Permissions.Sites.Delete

If a button is greyed out or missing, your role doesn't grant the underlying policy. Contact your tenant administrator.