Static Pages — About, Privacy, Terms, License, and More
Create and edit static pages in Dax Pro: About, Privacy Policy, Terms of Service, License, and any custom page you need. Two methods: Decap CMS or direct editing of content/*.md.
What a Static Page Is
A static page is a page that exists at exactly one URL, is not part of any collection, and does not appear in any listing. It is the simplest kind of content in Dax Pro.
Examples of static pages in a typical Dax Pro site:
- About —
/about/— company or product background - Privacy Policy —
/privacy/— legal, required in most jurisdictions - Terms of Service —
/terms/— legal, required for commercial sites - License —
/license/— for sites that sell something (Dax Pro sells itself) - Any custom page —
/careers/,/pricing/,/contact-thanks/, etc.
Each static page is exactly one Markdown file inside the content/ folder. The filename becomes the URL. No controller, no listing, no collection. Just one file, one page.
The structure:
content/about.md → /about/
content/privacy.md → /privacy/
content/terms.md → /terms/
content/license.md → /license/
content/careers.md → /careers/
The frontmatter is minimal. The body is Markdown. That is the entire concept.
This chapter covers creating and editing static pages through both Decap CMS and direct file editing, plus the specific conventions for legal pages, the optional CTA block, and how to add a brand-new static page from scratch.
Method 1 — Editing Static Pages via Decap CMS
All static pages live under the Pages collection in Decap CMS. The collection is filtered to only show files with layout: page.dax, which is why only static pages appear there — not posts, not services, not the homepage.
Accessing the Pages Collection
1. Open https://yoursite.com/admin/ and log in
2. In the left sidebar, find 📄 Pages
3. Click it
4. You will see a list of existing pages:
- About
- Privacy Policy
- Terms of Service
- License
5. Click any page to open its editor
The editor shows the page's frontmatter as a form. The body (the actual Markdown) appears in a large text area at the bottom, labeled Body.
The Page Form Fields
Every static page has the same frontmatter structure. The editor exposes these fields:
| Field | Purpose | Required? |
|---|---|---|
| Layout | Hidden field. Always page.dax. Do not touch. |
Hidden |
| Title | Page title. Shown in , H1, and breadcrumb. |
Yes |
| Breadcrumb | Short label for breadcrumb. Optional. If empty, title is used. |
No |
| Description | Meta description for SEO. Aim for 150–160 characters. | Yes |
| CTA | Optional call-to-action block at the bottom of the page. | No |
| Body | Markdown content. This is the visible page content. | Yes |
The CTA block is optional. If you want a call-to-action box at the bottom of the page (like "Ready to get started? [Buy Now] [Contact]"), fill in the CTA fields. If you want a plain page (like privacy policies), leave it empty.
CTA sub-fields:
| Field | Purpose |
|---|---|
| CTA → Title | Heading of the CTA box |
| CTA → Description | Paragraph under the heading |
| CTA → Button 1 Text | First button label |
| CTA → Button 1 URL | First button destination |
| CTA → Button 1 Class | dax-btn-primary (filled) or dax-btn-secondary (outlined) |
| CTA → Button 2 Text | Second button label |
| CTA → Button 2 URL | Second button destination |
| CTA → Button 2 Class | dax-btn-primary or dax-btn-secondary |
Editing the About Page
The About page is the marketing page for your product or company. It usually has:
To edit via Decap CMS:
1. Click 📄 Pages → About
2. Update Title (e.g., About Dax Pro)
3. Update Breadcrumb (e.g., About)
4. Update Description — keep it to one sentence
5. Fill in the CTA section
6. Scroll to Body and edit the Markdown
7. Click Publish
Body Markdown for an About page typically includes:
## The Paradigm Shift Toward Immutable Static Portals
For over two decades, enterprise digital infrastructure has been burdened
by database-bound monolithic CMS architectures...
The Three Core Architectural Pillars
1. Native Microsoft .NET Compilation
Unlike legacy JavaScript static generators...
2. Decap CMS Headless Freedom
Non-technical content teams should never...
The Markdown renderer in Dax Pro supports:
# through ### for headingsbold and italiclink text for inline links
for images- item for unordered lists1. item for ordered lists> quote for blockquotes for code blocks for inline codeEditing the Privacy Policy
Privacy policies are legal documents. The content is usually longer than the About page, has multiple sections, and does not need a CTA block.
To edit via Decap CMS:
1. Click 📄 Pages → Privacy Policy
2. Update Title — usually Privacy Policy
3. Update Breadcrumb — usually Privacy Policy or Privacy
4. Update Description — one sentence, e.g., How we handle your data
5. Leave CTA empty
6. Edit Body with your legal text
7. Click Publish
Privacy policy body structure:
## Our Privacy Commitment
[Introduction — one short paragraph stating the overall approach]
Data We Collect
[What information you collect, if any]
Data We Do Not Collect
[Reassure users about what you do not collect]
Cookies
[Cookie policy — or state that you do not use cookies]
Third-Party Services
[Any third-party services your site uses, e.g., Formspree]
Your Rights
[GDPR, CCPA, or other jurisdiction-specific rights]
Contact
[How users can reach you about privacy]
Changes to This Policy
[How users are notified of updates]
Legal disclaimer: the Dax Pro documentation is not legal advice. Consult a lawyer before publishing a privacy policy, especially if your site collects any data (form submissions, analytics, cookies). Dax Pro ships with a template policy that is a good starting point but is not jurisdiction-specific.
Editing the Terms of Service
Similar to the privacy policy, but for terms and conditions. Usually longer, more formal, and legally binding.
To edit:
1. Click 📄 Pages → Terms of Service
2. Update Title — usually Terms of Service
3. Update Description — one sentence
4. Leave CTA empty
5. Edit Body with your terms
6. Click Publish
Terms body structure:
## Acceptance of Terms
[When users agree to these terms]
Permitted Use
[What users can do]
Prohibited Use
[What users cannot do]
Intellectual Property
[Ownership and licensing]
Payment Terms
[If applicable]
Refund Policy
[If applicable]
Limitation of Liability
[Standard limitation]
Governing Law
[Jurisdiction]
Changes to Terms
[How users are notified of changes]
Contact
[How users can reach you about terms]
Editing the License Page
The License page is specific to sites that sell something (like Dax Pro sells itself). It documents what buyers receive, what they can do, and what they cannot do.
If you are not selling anything, delete content/license.md and remove the link from _data/footer.yaml.
To edit:
1. Click 📄 Pages → License
2. Update Title — License or Commercial License
3. Update Description — one sentence
4. Leave CTA empty (unless you want to promote purchasing at the bottom)
5. Edit Body with your license terms
6. Click Publish
Creating a New Static Page
Decap CMS allows you to create new static pages without touching the file system.
To create a new page:
1. Click 📄 Pages in the left sidebar
2. Look at the top-right of the page list — you will see an Add Page button
3. Click Add Page
4. Fill in the fields:
- Title: e.g., Careers
- Breadcrumb: e.g., Careers
- Description: e.g., Open positions and company culture
- CTA: optional
- Body: your Markdown content
5. Click Publish
Behind the scenes, Decap CMS creates a new file at content/careers.md with the content you entered. On the next build, the URL /careers/ is generated automatically.
The slug rule: the filename is derived from the Title field. Careers becomes careers.md. About Our Team becomes about-our-team.md. If you want a specific URL, set the Title to produce that slug. For example, FAQ becomes faq.md and /faq/, but Frequently Asked Questions becomes frequently-asked-questions.md and /frequently-asked-questions/. Choose titles that produce the URLs you want.
To add the new page to navigation:
The new page is only reachable by direct URL. To add it to the navbar:
1. Click 🧭 Navbar → Navigation
2. Scroll to Items
3. Click Add Items
4. Fill in Title, Mobile Title, and URL (/careers/)
5. Click Publish
To add it to the footer instead:
1. Click 🦶 Footer → Footer
2. Scroll to a column (Column 1, 2, or 3)
3. Click Add Links
4. Fill in Name and Link (/careers/)
5. Click Publish
Method 2 — Editing Static Pages Directly
For developers, editing content/*.md directly is faster than the CMS. It is the same file the CMS edits, just opened in a text editor.
Opening the File
In VS Code, expand content/ in the sidebar, and click about.md, privacy.md, terms.md, or license.md.
Understanding the File Structure
Every static page has the same structure:
---
layout: "page.dax"
title: "About Dax Pro"
breadcrumb: "About"
description: "A one-sentence meta description."
cta:
title: "Ready to get started?"
description: "A short paragraph explaining the offer."
button1_text: "Buy Now"
button1_url: "/#pricing"
button1_class: "dax-btn-primary"
button2_text: "Contact"
button2_url: "/contact/"
button2_class: "dax-btn-secondary"
A Markdown heading
A paragraph of body content. This is rendered as HTML.
Another heading
More content.
The frontmatter block (between the two --- lines) is YAML. It defines the page's metadata and, optionally, a CTA block.
The body (after the second ---) is Markdown. It is the visible page content.
Editing the Frontmatter
Change fields in the frontmatter directly. The most common edits:
Change the title:
title: "About Us"
Change the breadcrumb label:
breadcrumb: "About"
Change the description:
description: "Learn about our company, our mission, and the people behind the product."
Remove the CTA block entirely:
Delete the entire cta: section. The page renders with just the header and body.
Change a CTA button:
cta:
title: "Start your free trial"
description: "No credit card required."
button1_text: "Sign Up"
button1_url: "/signup/"
button1_class: "dax-btn-primary"
button2_text: "View Pricing"
button2_url: "/pricing/"
button2_class: "dax-btn-secondary"
Add a second CTA button when there was only one:
The template renders button1 and button2 independently. If button2_text and button2_url exist, a second button renders. If not, only button1 renders. This is useful for single-CTA pages like a simple "Get Started" without an alternative.
Editing the Body
The body is Markdown. Standard Markdown applies.
Headings:
# Heading 1 (rarely used — usually the title is the H1)
Heading 2
Heading 3
Paragraphs:
Plain text. Separate paragraphs with a blank line.
Bold and italic:
This is bold and this is italic.
Links:
Visit our Gumroad page
Lists:
- First item
Second item
Third item
1. Numbered item
2. Another item
Blockquotes:
> A quote that stands out.
Code blocks:
javascript
const x = 10;
Inline code:
Run dotnet run -- build to compile.
Images:
Image paths must start with
/ and refer to files inside public/images/.
Creating a New Static Page Directly
Create a new file
content/your-page.md with this template:
---
layout: "page.dax"
title: "Your Page Title"
breadcrumb: "Your Page"
description: "A one-sentence description for SEO."
First Section
Write your content here in Markdown.
Second Section
More content.
Save the file. Run
dotnet run -- build. The URL /your-page/ is generated.
Naming rules:
Use lowercase
Use hyphens between words
Do not use spaces
Do not use special characters
Filename minus .md becomes the URL slug
Good names:
careers.md → /careers/
contact-thanks.md → /contact-thanks/
our-team.md → /our-team/
Bad names:
Careers.md → /Careers/ (uppercase URL, confusing)
our team.md → /our team/ (space breaks URL)
our_team.md → /our_team/ (works but inconsistent with the rest)
Rebuilding After Direct Edits
dotnet run -- build
Or, if the development server is running:
dotnet run -- start
The server watches
content/ and rebuilds on save.
For deployed sites:
git add content/
git commit -m "Update about page"
git push
The host rebuilds and deploys.
Conventions for Legal Pages
Privacy, terms, and license pages share conventions that distinguish them from marketing pages.
No CTA Block
Legal pages are read for compliance, not conversion. Adding a "Buy Now" button at the bottom of a privacy policy is out of place. Leave the
cta: section out of privacy.md, terms.md, and license.md.
Structured Headings
Legal documents benefit from clear section headers. Use
## for top-level sections and ### for subsections. Common sections:
Privacy: Commitment, Data Collected, Data Not Collected, Cookies, Third Parties, Rights, Contact, Changes
Terms: Acceptance, Permitted Use, Prohibited Use, Intellectual Property, Payment, Refund, Liability, Law, Changes, Contact
License: Grant, Permitted, Prohibited, Attribution, Warranty, Contact
Long-Form Content
Legal pages are usually longer than other static pages. It is normal for
privacy.md to be 500–1500 words. The Markdown renderer handles long content fine, but keep the formatting consistent — one section header per major concept, one paragraph per idea.
Update Dates
If your legal pages have an "Effective Date" or "Last Updated" line, put it at the top of the body:
Last updated: May 7, 2026
Our Privacy Commitment
Use italics so it stands out but does not compete with the H1.
Legal Advice Disclaimer
The privacy, terms, and license templates shipped with Dax Pro are starting points, not legal documents. They are not jurisdiction-specific. They are not reviewed by a lawyer. If you are running a commercial site that collects any data (form submissions, analytics, cookies), you should:
1. Read each template
2. Adapt it to your actual data practices
3. Have a lawyer review it before publishing
4. Update it whenever your practices change
For a low-traffic personal site with no data collection, the shipped templates are reasonable. For a business, they are not.
Common Static Page Mistakes
Mistake 1: Putting body content in the frontmatter.
The frontmatter holds metadata and CTA. The body holds visible content. If you put a paragraph in the frontmatter, it will not render — frontmatter is not displayed.
Mistake 2: Using a colon in an unquoted frontmatter value.
title: "Privacy Policy: How We Handle Data" # correct
title: Privacy Policy: How We Handle Data # wrong — parse error
Quote any value with a colon, hash, or leading symbol.
Mistake 3: Adding
collection: to a static page.
collection: "posts" # wrong — turns this file into a posts controller
If you add
collection:, Dax Pro treats the file as a listing controller. Only posts.md, services.md, and tags.md should have collection:.
Mistake 4: Using uppercase in the filename.
About.md produces /About/ — an unusual URL. Always lowercase.
Mistake 5: Creating a page with a very long title.
Frequently Asked Questions About Our Pricing and Refunds.md produces a painfully long URL. Use a short title or set a custom slug. In Decap CMS, edit the Title field to something shorter like FAQ. Directly in the file, rename the file.
Mistake 6: Forgetting to link the new page.
Creating
content/careers.md produces the URL /careers/, but no link points to it. Add it to _data/nav.yaml or _data/footer.yaml so visitors can find it.
Mistake 7: Editing the wrong file for a nav link change.
If you want to change the "About" nav link to point somewhere else, do not edit
about.md — edit _data/nav.yaml. The page file defines the page's content; the nav file defines where the link points.
Verifying Your Static Page
After editing (either method), verify:
1. URL works — navigate to
/about/, /privacy/, /terms/, /license/ (or your new page's URL). The page loads.
2. Title — the browser tab shows the correct title, and the page H1 matches.
3. Breadcrumb — the breadcrumb shows Home / Breadcrumb. If you set
breadcrumb: "About Us", the crumb says "About Us".
4. Description — view source (
Ctrl + U), confirm matches.
5. Body — all headings, paragraphs, lists, and links render correctly.
6. CTA — if you filled in the CTA block, the buttons render at the bottom of the content; if not, no buttons appear.
7. Mobile — resize the browser to mobile width. The text wraps, buttons stack, images resize.
If a page shows raw YAML in the browser instead of rendered content, one of these is wrong:
The file does not start with --- on line 1
The closing ---` is not followed by a blank line
Fix the frontmatter and rebuild.
What You Have Now
After this chapter, you can:
Static pages are done. The next chapter covers the Contact Page — a specialized page with a working form, email display, and integration with Formspree for form submissions.
→ Continue to Contact Page