# Hosting and Domains

> How Seedly Sites hosts client sites - static hosting on Cloudflare Pages, one project per client, custom domains, and what it actually costs to run.

Seedly Sites separates the platform you run from the sites your clients' visitors see. The CMS and builder live on your server; every client site deploys as pure static files to its own Cloudflare Pages project. This page covers the hosting model, domains, and the honest economics.

---

## The Hosting Model

| Piece | Where it runs | Who sees it |
|-------|--------------|-------------|
| CMS + portal + builder | Your Railway instance | You and your clients (logged in) |
| Client sites | Cloudflare Pages, one project per client | The public |
| Media (images, video) | Cloudflare R2 storage | The public, via each site |

**One project per client.** When you create a site in the portal, the platform provisions a dedicated Cloudflare Pages project for it automatically. Deploys, domains, and traffic are isolated per client - one site's deploy can never affect another's.

**Static output.** A [deploy](/docs/help/deploying) builds the site's published content into plain HTML and CSS with no runtime framework. There is no origin server to slow down, crash, or patch; the CDN serves finished pages from locations near the visitor.

That architecture is the performance story: static pages on a global CDN are fast by default, which is exactly what Core Web Vitals reward. See the [hosting overview](/hosting) for the marketing-level summary.

---

## Domains

### The Built-In Preview Address

Every site gets a `<project>.pages.dev` address from its Cloudflare Pages project. Its behavior depends on whether the site has launched:

- **Before a custom domain is set** - the preview address serves the site but is marked not-for-indexing and blocks crawlers, so an unfinished client site cannot leak into search results.
- **After a custom domain is set** - the preview address permanently redirects (301) to the custom domain, path preserved, so any links or rankings consolidate onto the real domain.

Use the preview address for internal review and client sign-off before go-live.

### Connecting a Custom Domain

1. Open the site in the portal and set its **Custom domain** (for example `clientbusiness.com`)
2. In Cloudflare, attach that domain to the site's Pages project and point DNS at it
3. Press **Deploy**

From this deploy on, the site's canonical URLs, sitemap, and structured data all use the custom domain, and the preview address redirects to it.

### Moving a Domain from an Old Site

If the client is migrating from an existing site, set up 301 redirects for any URLs that changed as part of the [migration](/docs/help/port-a-site). Redirects are managed per site in the portal and ship with every deploy.

---

## What Hosting Actually Costs

Being straight about this, because "free hosting" claims usually hide something:

| Cost | What it covers | Scale behavior |
|------|----------------|----------------|
| Railway (CMS) | The platform: CMS, portal, builder, database | Shared across ALL client sites; grows with usage, not site count |
| Cloudflare R2 | Media storage + delivery | Usage-based; typically small |
| Cloudflare Pages | Serving every client site | Free static hosting tier |

So: **serving a client site costs you nothing per site**, but **running the platform is not zero-cost** - the CMS host and media storage are real (modest) monthly costs you pay once for the whole fleet. There are no per-site platform fees and no per-seat fees; adding your 30th client site costs the same as adding your 3rd.

---

## Reliability Notes

- A deployed site keeps serving even if your CMS is down - static files have no runtime dependency on the platform
- Deploys are atomic: visitors see the old build until the new one fully ships
- Each site's sitemap, robots, redirects, and 404 handling are regenerated on every deploy

---

## Summary

- One Cloudflare Pages project per client site, auto-provisioned
- Static HTML output, no runtime framework, CDN-served
- Preview address is noindexed pre-launch and 301s to the custom domain after
- Hosting the sites is free-tier; running the platform (Railway + R2) is a real but shared cost

---
Source: https://seedlysites.com/docs/help/hosting-domains
