Build a website
This path takes you from an installed Arc CMS to a live content website that collects sign-ups. Follow the pages in order; each one says what to do in the admin area or the files, and links to the feature page for the detail.
What you will have at the end
- Content types (articles, guides, case studies) that editors write and publish from the admin area, each published as a static page at
/{type}/{item}. - Your own HTML templates for the list and detail pages and the cards of each type, with your header and footer.
- Static pages such as the privacy and cookie policies.
- Structured data, a sitemap,
robots.txt,llms.txtand RSS feeds, written on every publish. - A search box in the header and a
/searchresults page. - A signup form on the home page, with a verification code and a welcome email. Every sign-up becomes a contact you can email.
Before you start
You need an installed Arc CMS with its first admin, deployed once. If you have not done that yet, follow Install, Configure a project, Create the first admin and Deploy for the first time. Publishing builds each page from the files on the live site, so a template folder of your own must be deployed before an item that uses it can be published. The first-run wizard creates an Articles content type and a default signup form, so you do not start from nothing.
Have these ready:
| What | Why |
|---|---|
| A list of your pages and their fields | You turn it into content types in the next two pages. |
| Your design as HTML and CSS | Templates are plain HTML fragments; you add Arc CMS attributes to them. |
| A logo at an absolute URL, at least 112 by 112 pixels | Settings, About publishes it to search engines as your publisher logo, and shows it at the top of the admin panel and on the sign-in page. |
| An email provider: Gmail, an SMTP server or Resend | Signup forms send a verification code and a welcome email. |
| Your postal address | Anti-spam laws require it in the footer of your emails: it goes in the email Brand Kit and in your form emails. |
| Your privacy policy, cookie policy and terms | They become your legal pages and the links in the terms notice on every signup form. |
Decide these before you publish your first item, because changing them later is slow:
- The default language. Its pages have no prefix in their address. Changing it later changes the addresses of your pages.
- Image sizes. The sizes are made when an image is uploaded, so images uploaded before a change keep the old sizes.
- Authors. The default author is set on new items only. Items written before you add authors must be edited one by one.
- Each content type's slug. The slug names where the type's items are stored, not only their address. Changing it later hides every item of that type.
The steps
Converting an HTML site you already have? Turn an HTML site into an Arc CMS site walks through every step below on a small blog, with the files before and after.
Plan your content: decide what is a content type, a static page or a form, and what each URL looks like.
Define content types: create them in the admin area with their fields.
Design templates: give each content type its list and detail layout.
Build your home page: your front door, with your own design, animation and signup form.
Let editors change your home page: services, a hero, questions and contact details that admins edit without touching HTML.
Write static pages: fill in the ready-made About, Contact, FAQ and policy pages, and hand-write anything that never changes.
Brand the sign-in page: your name, logo, words and colours where people sign in.
Manage media: set image sizes and upload images.
Add authors and tags: bylines and topics.
Get found by search engines and AI: fill in your site identity and write pages that get quoted.
Publish in more than one language: only if you need it.
Add search: choose what visitors can search.
Collect sign-ups: set up the form, its emails and where sign-ups land.
Choose your website's features: switch off what a website does not use.
Launch checklist: check everything before you point your domain at it.
Recommended features
A content website with lead generation uses content, templates, media, authors and tags, SEO, search, signup forms, the contact form, audience and email. Keep them all on. Switch off payments and SMS unless you sell or use phone sign-in; Choose your website's features shows how. The full list is in All features.
How you work
Most of the work happens in the admin area at /admin. The rest is your website's own files, which live in one folder, src/custom/site/. It is part of the custom space: Arc CMS never ships or changes anything in it, so an upgrade never conflicts with your site.
| File or folder | What it holds |
|---|---|
src/custom/site/home.html | The home page: one HTML file with your own styles, scripts and animation, published in every language (Build your home page) |
src/custom/site/templates/ | The partials, list and detail layouts of your content types, one folder each |
src/custom/site/header.html, src/custom/site/footer.html | The site header (menu, search box, language switcher) and footer |
src/custom/site/pages/ | Hand-written static pages, for text that never changes (About, Contact and the policies are standard pages edited in the admin) |
src/custom/site/sign-in.html | The brand panel of the sign-in page |
src/custom/site/site.css | Styles for every public page and the sign-in page |
src/custom/site/strings/ | The translations of your header, footer and templates |
src/custom/site/assets/ | Images, scripts and fonts, served at /site/... and linked with their version, so a change reaches every visitor |
src/custom/features.ts | The features you switch off |
Every file is optional. Where you have none, Arc CMS's own is used (from public/_site/), and it keeps improving with each upgrade. Where you have one, yours replaces Arc CMS's. The build puts the two together, and the app and the publish functions both read the result, so what you see locally is what publishes. The full list is in Design templates and Use the custom space.
None of these is a core file, so npm run check:core stays clean and an Arc CMS upgrade never conflicts with your site. All of them are plain HTML, CSS and JavaScript. The home page, header, footer and static pages have no special rules for {, } or @. Templates are different: in them {{ }} marks a value to fill in (see Design templates).
Which files are served, and where
Only files with these names and places are part of the website:
File in src/custom/site/ | Served at |
|---|---|
home.html, home.{lang}.html, header.html, footer.html, sign-in.html | /_site/, under the same name |
templates/{folder}/partials.html, list.html, detail.html, detail-{name}.html | /_site/templates/{folder}/ |
pages/{name}.html | /_site/pages/, and published at /p/{name} |
strings/{lang}.json | /_site/strings/ |
site.css | /assets/css/site.css |
assets/ and anything inside it | /site/, so assets/images/logo.png is /site/images/logo.png |
favicon.ico, 403.html, 404.html | The root: /favicon.ico, /403.html, /404.html |
Folder and page names use lowercase letters, digits, - and _, and start with a letter or digit, such as case-studies or terms. A language is its code, such as hi or pt-br. A template folder holds only those three files, plus layouts named detail-{name}.html (see Layouts). Anything else, such as robots.txt, pages/About.html or templates/articles/card.html, is not served: npm run dev and npm run build name each such file in a warning. A README.md is allowed and stays quiet.
Run the site locally with npm run dev while you build; it reads and writes your real Firebase project (see Run it locally). A change to any of these files shows in npm run dev at once: the page reloads by itself for the header, footer and sign-in panel; reload it yourself for the rest. A strings file that is not valid JSON stops npm run dev and npm run build with a message; while npm run dev runs, it keeps the last good copy.
On the live site, publishing an item puts its page there straight away. A change to a file reaches the live site only when you deploy the website with npm run deploy, which then publishes every page again so they all use the new files (see Deploy).
Next
Start with Plan your content, or follow the worked example, Turn an HTML site into an Arc CMS site.