Article

README

Published · ProofAML editorial

Blog content — how to drop a post

This directory holds the markdown for the /blog section. It uses the exact build-time loader pattern as /compliance (src/data/blog.ts reads these files with gray-matter at next build; nothing runs at request time). Adding a post is: drop a .md file here, commit, redeploy. No code changes.

Ownership: marketing owns the words; engineering owns the loader, the routes, and this README. The two files currently here are engineering placeholder stubs so the route builds — replace or delete them when real copy lands.

Add a post

  1. Create src/content/blog/<slug>.md. The filename (without .md) becomes the URL: <slug>.md/blog/<slug>/. Use a lowercase, hyphenated slug.
  2. Add YAML frontmatter (all fields below).
  3. Write the body in GitHub-flavored markdown (tables, lists, links all work).
  4. Build to verify (npm run build) and redeploy.

Frontmatter

---
title: "Human-readable post title"          # required
description: One or two sentences. Used as   # required — meta description + card
  the meta description, the card summary,     #            + JSON-LD description
  and the social preview.
date: 2026-07-01                              # required — publication date, YYYY-MM-DD
category: article                             # required — "article" or "digest"
author: ProofAML editorial                    # optional — defaults to "ProofAML editorial"
lastUpdated: 2026-07-15                        # optional — defaults to `date`
tags:                                          # optional — free text, used as keywords
  - sanctions-screening
  - ofac
---
  • category: article — evergreen explainers, launch posts, SEO pieces. Appears in the /blog index.
  • category: digest — the monthly enforcement digest. Appears in the /blog index and on the /blog/digest/ category landing. Suggested slug: YYYY-MM-enforcement-digest.

Links — the point of the blog

The blog is the conversion layer: it funnels readers into the screenable corpus. Link liberally into the rest of the site using absolute paths:

  • /sources/ — the data catalog (source lists + licenses)
  • /programs/ — sanctions programs
  • /compliance/ and /compliance/<jurisdiction>/ — AML/CFT guides
  • /browse/all/page/1/ — every listed entity
  • /timeline/ — recently designated
  • A specific entity page — copy its canonical URL from the entity page itself (e.g. /people/<slug>-nk<shortid>/)

Link to other blog posts with a relative markdown link — [text](/blog/other-slug/) — and the loader rewrites it to /blog/other-slug/ automatically.

The post template also renders a fixed "Screen against the sources" block and a subscribe CTA on every post, so those conversion links exist even if a body has none.

Reserved slugs

digest is the /blog/digest/ category route — do not create digest.md. The loader ignores it if present.

Turn this into a screening action

Screen against the sources behind this post


← All posts