Articles live in _src/content_a.py through _src/content_d.py. Add new
ones to whichever file is smallest, or create content_e.py and import it in
build.py.
make_article(
slug="how-to-do-something",
title="How to Do Something", # H1
meta_title="How to Do Something | ...", # <title>
meta_desc="140-160 characters.",
card_desc="One line for cards and search.",
category="brick-breaker-guides", # one of six category slugs
primary="primary keyword", # ONE search intent
secondary=["variation", "variation"],
image_alt="Descriptive alt text for the featured image",
intro="<p>...</p>", # HTML, before the TOC
body=[
("First H2 heading", "<p>HTML for this section</p>"),
("Second H2 heading", "<p>...</p>"),
],
insight="Editor's note paragraph - plain text.",
faq=[("Question?", "Answer.")],
takeaways=["...", "..."],
refs=[("https://example.com", "Source label")],
conclusion="<p>...</p>",
cta=("/games/some-game/", "Play Some Game"),
related_games=["slug"],
related_articles=["slug"],
published="2026-09-20", # optional, defaults to LAUNCH_DATE
updated="2026-09-20", # optional, defaults to published
pillar=False, # True only for cornerstone articles
)
data/articles.json, the XML sitemap and the HTML sitemap.updated when content actually changed.The builder generates a branded featured image automatically. To use your own, save a 1200x630
WebP at assets/images/articles/<slug>.webp before building - existing files are
never overwritten unless you pass --images.
Filenames must be descriptive (brick-breaker-strategy-guide.webp, never
image1.webp), and image_alt must describe the image rather than repeat
the title.
The fifty briefs in the content plan each contain the
intent, angle, outline, must-cover points, internal links and target game. Turn one into an
article object, write the sections named in the outline, delete the brief from
_src/briefs.py, and rebuild.
py _src/build.py --check