Setup

Run GAX Pro with Decap CMS (Two Terminals)

Optional setup for browser-based content editing with Decap CMS. Run the project and the CMS proxy in two terminals, then edit pages and collections from the browser.

Run GAX Pro with Decap CMS (Two Terminals)

Editing Pages and Collections in Decap CMS

Once the CMS is open at http://localhost:8080/admin/, the left sidebar shows the content types defined in public/admin/config.yml. Each content type maps to a folder or file in content/.

Logging In for the First Time

When you open http://localhost:8080/admin/ for the first time, Decap CMS shows a login screen.

Because you are running with the local backend, the login is not a password. The CMS checks that the local proxy is running and connects to it. If the proxy is running, the login succeeds automatically.

If the login fails:

  • Check that npx decap-server is running in Terminal 2
  • Check that the GAX server is running in Terminal 1
  • Check that local_backend: true is set in public/admin/config.yml
  • Reload the page after both terminals are confirmed running

Once logged in, the CMS shows the content types in the left sidebar. From here, every page and collection can be edited from the browser.

Understanding the Sidebar

The CMS sidebar lists content types in the order they are defined in config.yml. Each item maps to a file or folder:

  • Single-file types (homepage, about, contact, tags) open one file
  • Collection types (blog, services, projects, docs) open a folder with many files

Click a content type to see its entries. For single-file types, the file opens directly. For collection types, a list of existing entries appears, with a New button to create a new one.

Editing the Homepage

The homepage is a single file at content/index.md. In the CMS sidebar, it appears under Pages or Homepage, depending on the label in the config.

When you open it, the CMS shows the frontmatter fields as form inputs. The homepage has many fields, so scroll through the form to see them all:

  • Hero — tag, title, lead text, primary button, secondary button
  • Trust — the list of tools shown in the trust bar
  • Problem — the heading, text, and bullet points
  • Solution — the heading, text, and bullet points
  • Features — the list of feature blocks, each with number, title, and text
  • Themes — the theme cards with name, text, and URL
  • Pricing — the pricing tiers with name, price, features, and button
  • FAQ — the question and answer pairs
  • CTA — the final call-to-action block

Edit any field, then click Save or Publish. The CMS writes the changes back to content/index.md. GAX rebuilds the page on the next request, and the browser shows the updated homepage after a refresh.

To add a new item to a list (like a new feature or FAQ), scroll to that section and click the Add button next to the list. To remove an item, click the delete icon on that item.

Editing Static Pages

Static pages (about.md, contact.md, 404.md) appear under a Pages collection in the CMS. Each page opens with its frontmatter fields and a Markdown body editor.

The about page has a title, description, image, and a body. Edit the fields and the body, then save.

The contact page is different. It has many fields:

  • Basic — title, description, image, canonical
  • Section — the tag, heading, and subheading above the form
  • Form — the label and placeholder for each field, the topic options, and the submit button text
  • SLA — the response time text
  • Links — the direct links shown next to the form

The most important field is formspree_id. This is the ID from your Formspree account. If you have not set it up yet, see Contact Page + Formspree. Once the ID is in place, the contact form works.

Editing Blog Articles

The blog collection is at content/blog/. In the CMS sidebar, it appears as Blog.

Click Blog to see a list of all existing articles, sorted by date. Each row shows the article title and date. Click an article to edit it, or click New Blog to create a new one.

When editing a blog article, the CMS shows:

  • Title — the article title
  • Description — the short description for SEO and social sharing
  • Label — a short category label
  • Image — the hero image path
  • Date — the publication date
  • TOC — toggle for the table of contents
  • Author — the author name
  • Tags — a list of tags
  • Canonical — the canonical URL
  • Keywords — additional SEO keywords
  • Body — the Markdown editor for the article content

Edit any field, write in the body, then save. The new article appears in the blog listing on the next build.

To publish an article with a future date, set the date field. GAX includes it in the collection but sorts it by date. This works for scheduled publishing as long as you rebuild on that date or the build reads the date.

Editing Service Pages

The services collection is at content/services/. In the CMS sidebar, it appears as Services.

Services work the same way as blog articles: click an existing service to edit it, or click New to create one. The fields are title, description, label, image, date, TOC, tags, canonical, keywords, and body.

Service pages appear in the services listing at /services/ and on the homepage if the services section is enabled.

Editing Project Pages

The projects collection is at content/projects/. In the CMS sidebar, it appears as Projects.

Projects have a different structure than blog or services because they include a tech_list block. When editing a project in the CMS, the form shows:

  • Title — the project title
  • Description — the short description
  • Label — a category label
  • Image — the hero image
  • Info — the heading text for the spec panel
  • Tech List — a list of spec items, each with a title and text
  • Date — the publication date
  • TOC — table of contents toggle
  • Canonical — the canonical URL
  • Keywords — SEO keywords
  • Body — the Markdown editor

The Tech List is the most important field for projects. Each item is a key-value pair like STACK: Go 1.27 or PRICE: $155 one-time. These render as the spec panel below the hero.

To add a spec, click Add in the Tech List section. Fill in the title and text. To remove one, click the delete icon on that item.

Editing Docs Pages

The docs collection is at content/docs/. In the CMS sidebar, it appears as Docs.

Docs pages have a sort field that controls their order in the sidebar. When editing a docs page in the CMS:

  • Title — shown in the sidebar and as the page heading
  • Description — used for the sidebar search
  • Sort — the position in the sidebar (lower number = higher)
  • Label — a category label
  • Image — the hero image
  • Canonical — the canonical URL
  • Body — the Markdown editor

To add a new docs page, click New Docs, fill in the fields, and choose a sort value. The value should fall between two existing pages. For example, to insert a page between sort: 5 and sort: 6, use sort: 5.5 or renumber the following pages.

Editing the Site Configuration

The _data/config.yaml file holds site-wide settings. If the CMS config includes it as a content type, it appears in the sidebar under Settings or Configuration.

When you open it, the CMS shows the config as a form: site title, description, brand, navigation, social links, widgets, and footer. Edit any value, then save.

Changes to the config update across the whole site on the next build. This includes:

  • Site title and description — used in SEO tags and the browser tab
  • Navigation — the menu links in the header
  • Brand — the logo text and home link
  • Social links — the URLs used in the footer
  • Widgets — the text shown above collection listings
  • Footer — the about text, copyright, badges, and link columns

Because the config controls multiple pages, a change here affects more than one place. Check the site after saving to confirm the change looks right.

Editing the Tags Page

The tags page at content/tags.md is a controller file. It has no body content, only frontmatter. In the CMS, it appears under Pages or a separate Tags section, depending on the config.

Edit the title and description in the CMS. The actual tag list is generated automatically from article frontmatter, so there is nothing else to edit on this page.

Publishing Workflow

Decap CMS uses a publish flow:

1. Edit a page or article

2. Click Save to save a draft

3. Click Publish to publish the change

With the local backend, "publish" writes the change to the local file system. There is no separate deployment step — the change is in the file immediately.

With a Git backend (production), "publish" creates a commit and pushes it to the repository. The site rebuilds on the host.

Checking Changes

After editing a page in the CMS, reload the browser tab showing the site. GAX reads the files from disk on each request, so the change appears immediately.

If the change does not appear:

  • Check that the CMS shows the change as saved
  • Reload the browser tab
  • Check the terminal for build errors
  • Check that the file on disk was actually updated

Switching Between CMS and Text Editor

Both workflows edit the same files. You can switch between them freely:

  • Edit a file in the CMS, then open it in a text editor to see the same content
  • Edit a file in a text editor, then reload the CMS to see the change

There is no lock-in. The CMS is a convenience layer over the Markdown files.

Common Errors

CMS shows a blank screen — the local proxy is not running, or local_backend is not set. Check Terminal 2 and config.yml.

Login does not complete — the proxy is running but the CMS cannot reach it. Check that the port matches (default 8081 for the proxy, 8080 for the site).

Changes do not save — the proxy is not running, or the file path in config.yml is wrong.

New article does not appear — the CMS saved the file but GAX did not rebuild. Reload the site or restart ./gax.

Fields are missing in the CMS — the config.yml does not define them. Add the field to the collection in config.yml.