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
Sign in to the Dashboard.
In the left sidebar, expand Site Forge and click Sites.
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).
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
SiteDefinitionrow (the parent container). - One
SiteThemeConfigrow populated from the template's default theme (colors, fonts, feature flags). - Several
SiteNavItemrows (the navigation menu, populated from the template's default nav). - Several
SitePageSectionrows (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
- Click + Add section.
- 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.
- Set Order — pick a number that places the section where you want it. Existing sections keep their numbers; you can shift them later.
- 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.
- 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(andshop.digitalantiz.net)northstar.digitalantiz.netgo365.digitalantiz.net(andtour-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:
Go back to the General tab.
Click Publish.
Confirm. The site flips to Published. Behind the scenes:
- The matching
Sitesrouting row flips toStatus = Active. - Caddy
/caddy/askgreenlights TLS issuance for the hostname. - The rendering host (NorthStar or TravelAgent) starts serving the new content for incoming requests.
- The matching
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.