Sites — Multi-Page Websites with AI

Sites is the full website builder (distinct from Web Studio's single landing pages). Generate a complete multi-page site from a prompt, edit pages individually, and publish under your own custom domain.

Open in CRMown →

Steps

  1. Go to Sites (sidebar > Sites).
  2. Click "🤖 AI Create New" — describe the site (industry, sections, tone) and pick a type (business / portfolio / store / blog).
  3. Wait for the build (runs in a background job; progress streams over Socket.io). When done, the site appears in your Sites list.
  4. Click "Edit" on any site to open the multi-page editor — add/rename pages, edit HTML/CSS, set per-page SEO + sitemap settings.
  5. Publish — files render at /s/{slug} or your connected custom domain. Sitemap.xml auto-builds across all published pages + blog posts.

Good to know

  • Sites differ from Web Studio funnels: Sites = multi-page brochure/marketing/blog, Web Studio = single landing pages, opt-in pages, and funnels.
  • Site assets are stored in your connected file storage provider (R2 by default).
  • Custom domain: connect via Settings > Communications > File Storage workflow (or via the Sites detail page once built).
  • AI Site generation makes ONE AI call per page — by design, so each page gets a focused, full-quality response. Defaults: type "website" → 4 pages (Home, About, Services, Contact) = 4 calls; type "funnel" → 3 pages = 3 calls; type "landing" → 1 page = 1 call. So one site build typically shows up as multiple "Site Generation" rows in Settings > AI Usage — that is the same task, not a duplicate run. To minimise tokens for a quick test, use the "landing" type.
  • Multi-page WordPress (or any site with a sitemap) migration: on Sites > AI Create New click "📥 Import Existing Site", paste the homepage URL, then click "🗺 Discover All Pages". We probe /sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml (WP 5.5+ native), and robots.txt. Top 20 pages are pre-checked; toggle the rest. Three modes: "📋 Static" for plain WordPress (fastest, free) — direct fetch, images auto-rehosted to your storage; "🌐 Render JS" for JS-heavy themes (Elementor, Divi, React/Next, headless WP) — same as Static but uses headless Chromium so JS-rendered content is captured (free, slower); "🤖 AI Rebuild" — fetches every selected page, asks 5–6 clarifying questions about your business, then rewrites each page with CRMown AI using your answers as context (cost: ~N+1 AI calls — 1 shared header/footer + N page rewrites — uses tokens from your monthly cap or BYOK key). Up to 30 pages per import, 3 fetched in parallel for direct/render, 2 in parallel for AI rebuild. If individual pages fail (HTTP error, timeout, etc.) they're reported on the success screen so you can retry them as single-page imports.
  • WordPress export (.xml/.wxr) upload: for closed/firewalled WP sites the URL won't reach. From wp-admin go Tools > Export > All content > Download Export File, then on Sites > AI Create New > Import scroll to "Upload WordPress Export" and pick the file. Up to 50MB. We parse it server-side, strip nav menus / attachments / revisions / WP-internal post types, then show a checklist of pages and posts. Default selection is published pages only; toggle the type filter to add posts, drafts, etc. Common shortcodes (gallery, contact-form-7, wpforms, captions) are stripped — plugin-driven content like forms or e-commerce won't carry over (re-add via CRMown Forms after import). "Rehost images & media" toggle (default on) walks each page's HTML for absolute http(s) image/PDF URLs and pulls them into your BYOS so the site keeps working when the source WP goes down. Up to 100 items per import.
  • Re-pull from source: any Site that was created via an import flow (single-URL, sitemap, AI rebuild) shows a "↻ Re-pull" button next to Save / Publish in the editor. It re-runs the original import and REPLACES every page atomically — your editor changes will be lost, so the confirmation dialog is loud about this. AI-rebuild Sites re-pull as direct mode (the original Q&A answers aren't kept), so the result will be a 1:1 of the current source. WXR-imported Sites can't re-pull because the source file isn't kept on the server — re-upload the WXR file to import again.
  • Asset rehosting (images, video, audio, documents): every import path walks the imported HTML for absolute http(s) URLs and pulls them into your BYOS / R2 / S3 — so the imported site keeps working when the source goes offline. Coverage: img src/srcset, picture sources, video src/poster, audio src, lazy-load attributes (data-src, data-srcset, data-lazy-src, data-original, data-bg, data-orig-file, data-medium-file, data-large-file — most WP lazy-load plugins), <link rel=preload>, ALL CSS url() references (background-image, mask-image, border-image, list-style-image, cursor, content) inside <style> blocks AND inline style attributes, AND downloadable documents linked via <a href>, <embed>, <object>, <iframe> when the URL ends in .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, or .zip (menus, whitepapers, brochures). Multi-page imports share a per-job cache so a logo on every page rehosts ONCE, not N times. Per-import cap of 200 unique assets; extras stay as hotlinks and the success screen tells you how many were skipped. Per-asset size caps: 8MB images, 25MB documents, 50MB video/audio. HEAD-first preflight rejects oversized files without downloading them. Single retry with 750ms backoff on transient 5xx/429/network errors so a flaky source doesn't leave assets hotlinked. Concurrency capped at 5 simultaneous fetches to avoid hammering the source.
Example: A new home-services business types: "5-page site for an Austin landscaping company — Home, Services (mowing/install/seasonal), Gallery, Reviews, Contact". 90 seconds later they have a complete, brand-coloured site live at /s/austin-landscaping. They edit page copy and add their logo, then connect "austinlandscaping.com" as a custom domain over the weekend.

Troubleshooting

Published site shows "Not Found"
Site not published, custom-domain DNS not pointed correctly, or the page slug is wrong.
Fix: Web Studio > Sites > click your site > click Publish. For custom domains, verify DNS records point to CRMown (CNAME to the provided target). Check Settings > Domains.
Custom JavaScript not working on published pages
Script tags can be stripped during save (known editor state issue).
Fix: Use the Custom JavaScript field in the page's Settings tab — scripts entered there are injected at publish. Alternatively paste scripts directly in the HTML Code view.
One AI site build shows up as 3-4 "Site Generation" entries in Settings > AI Usage
Not a duplicate run — the AI generator makes one call per page so each page gets dedicated context and stays under the per-call token cap. Type "website" = 4 pages = 4 calls; "funnel" = 3; "landing" = 1.
Fix: Expected behaviour. To reduce token spend for testing, generate with type "landing" (1 page, 1 call). For a full multi-page site, the per-page cost is the trade-off for higher-quality, focused HTML on each page.

Error messages

  • Domain already in use — The custom domain is connected to another site. Remove it from the other site first.
  • SSL certificate pending — DNS was just updated. SSL certificates take 5–15 minutes to issue. Wait and refresh.
  • Publish failed — Server error during site generation. Try publishing again. If persistent, confirm all pages have valid content.

View as Markdown