Title Casing

How a page's title: frontmatter (and its matching # H1) are capitalized. Enforced by npm run normalize:titles / scripts/normalize-wiki-titles.ts. Source: User, 2026-06-13; User correction, 2026-06-22

Prose pages (Title Case)

All reader-facing page/article titles use Title Case, including skills and tools whose executable slug is lowercase:

  • Capitalize the first and last word and all principal words (nouns, verbs incl. forms of "to be" like Is/Are, adjectives, adverbs, pronouns).
  • Lowercase short function words mid-title only: a, an, the, and, but, or, nor, for, of, to, in, on, at, by, vs, as, from, with, into, over, per.
  • Use display spaces for lowercase slug titles: ai-seo (skill) becomes AI SEO (Skill). Keep the real slug in aliases:, source URLs, and body code.

Good: Staying in the Loop with Agents · The Eval Loop (Slop Is an Output Problem) · AI SEO (Skill) · Agent Browser -- Browser Automation for Agents. Bad: Staying in the Loop With Agents · Resolver Vs Skill Resolver · ai-seo (skill) · agent-browser -- Browser Automation for Agents.

Preserve brand and acronym casing

Preserve known acronym and brand casing when it is part of a polished title: AI, MCP, SDK, UI, UX, API, CSS, YC, LLM, 3D, CoTCodec, ReAct, iMessage, GSAP, PGlite, PostHog, OpenRouter, Next.js, arXiv, npm, v0.

Do not preserve lowercase slugs as display titles. skills/personal/<slug>/ and source URLs remain lowercase; wiki article titles do not. A title that starts with a slug-like product or tool name still gets reader-facing article casing: json-render -- Generative UI Framework becomes JSON Render -- Generative UI Framework.

H1 matches the title

The body # H1 should match the frontmatter title: exactly.

Enforcement

Run npm run normalize:titles after adding or importing pages. The script updates frontmatter title: and the first matching Markdown # H1, preserving slugs and aliases. New captures must pass this before rebuild/search steps.

Title Contract

Surface Default Exception
Frontmatter title: Reader-facing Title Case Preserve exact brand/acronym casing
H1 Matches frontmatter exactly None for ordinary pages
Slugs and executable names Stay lowercase in paths, URLs, aliases, and code Display title still becomes reader-facing
Skill/tool articles Title Case display, slug preserved in aliases/source None unless brand casing demands it

Proof

Run npm run normalize:titles, then npx tsx scripts/build-index.ts. The proof is that the generated index and H1/title pairs agree while slugs remain stable.

Style Rule Contract

This page follows Style Rule Contract: name the default pattern, banned pattern, reason, exception, proof, and codification path clearly enough that the next agent can apply the rule without asking Kevin again. If a local repo has a stricter rule, follow the local rule and update the wiki when the decision becomes durable.


Timeline

  • 2026-07-01 | Aligned this page with Style Rule Contract so style guidance names default behavior, banned patterns, exceptions, proof, and codification expectations. Source: User request, 2026-07-01
  • 2026-07-01 | Added a title contract and proof rule for frontmatter/H1 agreement, brand casing, slug preservation, and generated index validation. Source: User request, 2026-07-01
  • 2026-06-22 | Removed the old skill/tool lowercase carve-out after Kevin clarified that every reader-facing page/article title should be properly capitalized regardless of executable slug casing. Added scripts/normalize-wiki-titles.ts / npm run normalize:titles. Source: User correction, 2026-06-22
  • 2026-06-13 | Page created for article title hygiene. Source: User directive, 2026-06-13