each.life logo
Book a Free Consultation
each.life

We Built a News Engine Into a Static Site — Here's How

Every property in the each.life family — Trakiyo, Beach Town Colors, Drumelicious, Lifetime Records, Eleva los Días — needed a content home. A place to put updates, case studies, and notes that wasn't buried inside some brand-specific blog that nobody finds.

The answer was simpler than expected: one news index at each.life/news, fed by markdown files, with a build script that runs at deploy time.

Why Not a CMS

We looked at the usual suspects. Contentful, Sanity, Ghost. Every one of them added a runtime dependency — something that could go down, something that needed an API key, something with a pricing tier that starts free and gets expensive the moment you actually use it.

This site already runs on Cloudflare Pages with zero servers. Adding a CMS meant adding a dependency chain. Not worth it for what's essentially a writing workflow.

The Architecture

The entire system is three parts:

  1. Markdown files in /news/posts/ — one file per post, with frontmatter for metadata
  2. A build script (build.js) that reads the files and generates HTML
  3. A posts.json manifest that the homepage and index page read to display post cards

Every post has required frontmatter:

title: "Post title here"
date: 2026-05-06
author: "Richard"
property: "each.life"
topics: ["Design", "AI"]
excerpt: "One or two sentences. Used on the index and homepage strip."

If any field is missing, the build fails loudly. No silently broken pages.

What the Build Script Does

At deploy time, node news/build.js runs and generates:

  • One HTML file per post (/news/slug.html, accessible at /news/slug)
  • posts.json — a manifest of all post metadata, sorted by date
  • news/index.html — the filterable index page

CSS comes from the existing site (extracted from faqs.html at build time), so post pages always match the live site design without maintaining a separate stylesheet.

What the Writing Workflow Looks Like

Write a .md file. Fill in six frontmatter fields. Commit and push. Cloudflare Pages runs the build automatically. The post appears on the index and the homepage news strip.

That's it. No dashboard, no preview server, no deploy button to find.

What's Next

The homepage is getting a news strip that pulls the three most recent posts from posts.json. Once that's live, every new post automatically surfaces on the front page.

The cross-link engine already works — each post page shows up to three related posts based on shared tags. Internal SEO compounding from day one.

Related from the studio

Ready to Build
Something Great?

No commitment. No jargon. Just a real conversation about your goals.

Link copied!