Content

Controller Pages: Blog, Docs, Projects, Services, Contact

How controller pages work in GAX Pro. Covers blog.md, docs.md, projects.md, services.md, and contact.md, plus collection and pagination settings.

Controller Pages: Blog, Docs, Projects, Services, Contact

What a Controller Page Is

A controller page is a Markdown file that tells GAX how to render a collection. It does not hold article content — it defines the collection settings, the layout, and the pagination.

In GAX Pro, there are five controller pages:

File Controls URL
content/blog.md Blog listing /blog/
content/docs.md Documentation listing /docs/
content/projects.md Projects listing /projects/
content/services.md Services listing /services/
content/tags.md Tag listing /tags/

The contact page is different — it is a standalone page, covered in Contact Page + Formspree.

Anatomy of a Controller Page

Every controller page has the same frontmatter structure:


---
label: "Articles & Guides"
title: "Blog"
description: "Technical articles on Go static sites and themes."
collection: blog
pagination: 5
layout: posts-list
canonical: "https://gaxpro.axcora.com/blog/"
---

The key fields are:

  • collection — the folder name under content/ that holds the articles
  • pagination — how many items per page
  • layout — the template used to render the listing
  • label, title, description — the header shown above the listing

Blog Controller


---
label: "Guides & Articles"
title: "Go SSG Guides, Theme Setup & SEO Articles"
description: "Practical guides on Go static sites: theme setup, SEO defaults, Hugo migration, and deployment."
collection: blog
pagination: 5
layout: posts-list
canonical: "https://gaxpro.axcora.com/blog/"
---

This tells GAX to:

1. Look in content/blog/ for articles

2. Show 5 articles per page

3. Use the posts-list layout to render the listing

4. Display the label, title, and description above the list

Articles in content/blog/ are covered in Blog Articles.

Docs Controller


---
layout: docs
sort: 0
title: "GAX Pro Documentation"
description: "Setup, configuration, and deployment guide for GAX Pro."
image: "/images/go-ssg9.webp"
label: "Documentation"
canonical: "https://gaxpro.axcora.com/docs/"
---

The docs controller is different from the other controllers. It uses layout: docs instead of posts-list or project-list. The docs layout renders a sidebar with all doc pages sorted by the sort field.

The sort: 0 places this page at the top of the sidebar. Doc pages use sort: 1, sort: 2, and so on.

Projects Controller


---
label: "Premium Themes"
title: "Premium Themes for Go Static Sites"
description: "Browse premium SEO-ready themes for Go static sites."
collection: projects
pagination: 6
layout: project-list
canonical: "https://gaxpro.axcora.com/projects/"
---

The projects controller uses layout: project-list, which renders a card grid. Each project in content/projects/ becomes a card with an image, title, and short description.

Services Controller


---
label: "Services"
title: "Custom Website, Theme Setup & SEO Services"
description: "Custom Go static websites, premium theme setup, and SEO configuration."
collection: services
pagination: 6
layout: services-list
canonical: "https://gaxpro.axcora.com/services/"
---

The services controller uses layout: services-list, which renders a list of services. Each service in content/services/ becomes a list item.

Tags Controller


---
title: "Tags — GAX Pro"
description: "Browse GAX Pro articles by tag: Go static sites, themes, SEO, Hugo migration."
layout: tags-list
canonical: "https://gaxpro.axcora.com/tags/"
---

The tags controller uses layout: tags-list. It does not use collection or pagination — tags are generated automatically from article frontmatter.

Pagination

The pagination field controls how many items appear per page. If a collection has more items than the limit, GAX generates additional pages automatically:

  • Page 1: /blog/
  • Page 2: /blog/page/2/
  • Page 3: /blog/page/3/

The URL structure follows content/[collection]/page/[number]/.

To change items per page, edit the pagination field:


pagination: 10

Larger numbers mean fewer pages but more content per page. Smaller numbers mean more pages but less scrolling.

Customizing the Listing Header

The label, title, and description fields are displayed above the collection list:


label: "Guides & Articles"
title: "Go SSG Guides, Theme Setup & SEO Articles"
description: "Practical guides on Go static sites."

To change the header, edit these fields. To remove the label, delete the label line. The layout adapts.

Adding a New Controller

To add a new collection, create a controller page and an article folder:

1. Create content/recipes.md with the controller frontmatter

2. Create content/recipes/ folder

3. Add Markdown files inside content/recipes/

Example controller:


---
label: "Recipes"
title: "Recipes"
description: "Cooking recipes."
collection: recipes
pagination: 10
layout: posts-list
---

GAX will generate /recipes/ and list all articles from content/recipes/.

Common Errors

Listing is empty — the collection field does not match the folder name. If collection: blog but the folder is content/articles/, the listing is blank.

Pagination does not appear — the collection has fewer items than the pagination limit. Add more items or reduce the limit.

Controller page shows 404 — the layout field points to a layout that does not exist in templates/layouts/.

Docs sidebar is empty — doc pages are missing the sort field. The docs layout sorts by sort, so pages without it appear at the bottom.

Next Step

Controllers are set. Next, edit the static pages:

Need Help?

  • Contact us — if a controller page does not render correctly