This is the first seed article in the content tree. It exists to exercise the
happy path of the GitOps publish loop described in docs/DEV.md: commit the
directory, push to main, and within two poll intervals the article renders
live at /articles/hello-world.
Why the directory is the slug
There is no slug: key in the frontmatter on purpose — the directory name
(hello-world) is the canonical slug. A frontmatter slug that disagrees
with the directory name is an ingest error, so the simplest correct article
omits it entirely:
---
title: Hello World — A Seed Article for the GitOps Publish Loop
tags: [Elixir, "#lead-gen", "Getting Started"]
status: published
---
No date: either
This article deliberately omits date: so the ingestion worker proves its
commit-date fallback: the first-publish commit's date becomes
published_at. An explicit ISO-8601 date: (see the draft example's frontmatter)
overrides it when present.
What a real article looks like
A published article needs only the four required keys — title,
description, tags, and status: published — plus a Markdown body.
Colocated assets are referenced relatively, e.g. , and
live in this same directory next to index.md.
How the hero image is served
The cover: ./hero.png key above points at the colocated hero asset in this
directory. At render time the ingestion SHA rewrites it to a pinned URL —
/articles/<sha>/hello-world/hero.png — which the git-backed plug streams
straight from the content blob, immutable and cache-friendly.
Why pin the URL to the SHA
A SHA-pinned asset URL never goes stale: the bytes behind
/articles/<sha>/... are, by construction, the exact bytes of that commit,
so the browser can cache them forever and the page can never mix an old
cover with a new body.