Skip to content

Commit de73f81

Browse files
HeyItsGilbertclaude
andcommitted
docs: design author profiles (ADR 0002 + glossary)
Capture the decision to enrich author taxonomy term pages with opt-in profile content files, keeping the display name as the frontmatter key with an optional preferred-name override (X over Y). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 66b4195 commit de73f81

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

CONTEXT.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,22 @@ and used as a site section, "Module" means specifically these org-stewarded proj
1313
— not the generic sense of "any PowerShell module you `Install-Module`", which is the
1414
subject of the site as a whole.
1515
_Avoid (for this concept)_: project, tool, package
16+
17+
**Author**:
18+
A person credited as a contributor to site content (articles, podcast episodes) via
19+
the `authors:` frontmatter. Each distinct Author is surfaced as a taxonomy term with
20+
its own profile page, and may optionally describe themselves (avatar, tagline, bio,
21+
links). An Author exists the moment they are credited on a piece of content; the
22+
self-description is optional enrichment, not what makes someone an Author.
23+
_Avoid (for this concept)_: contributor, writer, user, account
24+
25+
The **author name** stored in `authors:` frontmatter is both the display byline and
26+
the source of the Profile URL slug — it is the stable key. An Author may additionally
27+
set a **preferred name** on their Profile, which overrides only how their name is
28+
*displayed*; it never changes the slug or the byline key. Authors without a Profile
29+
display their author name unchanged.
30+
31+
**Profile**:
32+
The per-Author page at `/authors/<name>/` listing that Author's content and, when
33+
provided, their self-description. Distinct from the **Author list** — the index page
34+
at `/authors/` showing every Author as a card.

docs/adr/0002-author-profiles.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Author profiles: enrich taxonomy term pages, keep the display name as the key
2+
3+
Authors are a Hugo taxonomy derived from the `authors:` frontmatter on ~1,045 articles
4+
and podcast episodes (see [[Author]] in `CONTEXT.md`). The term pages at `/authors/<name>/`
5+
are auto-generated and show only a name and a content list. To let an Author describe
6+
themselves (avatar, tagline, bio, links), we enrich each term page with an **optional**
7+
content file at `content/authors/<slug>/_index.md`. Profiles are **opt-in via PR** — not
8+
pre-scaffolded — so most Authors have no file and must keep rendering correctly.
9+
10+
The load-bearing decision is what gets stored in every article's `authors:` frontmatter.
11+
We keep the **display name** there (`authors: [James Petty]`), exactly as today. The name
12+
is both the byline and the source of the Profile slug — the stable key. A Profile may set
13+
a **preferred name** that overrides only how the name is *displayed*; it never changes the
14+
slug or the byline. Authors without a Profile render their author name unchanged.
15+
16+
## Considered options
17+
18+
- **Slug as the key** (`authors: [james-petty]`, display name rendered from the Profile) —
19+
rejected. It decouples slug from name, but the display name would then live *only* in the
20+
Profile. With ~70 of 80 Authors un-enriched at launch, their bylines and cards would fall
21+
back to a humanized slug — `darren-mar-elia` → "Darren Mar Elia" (wrong hyphen),
22+
`jasonmorgan` → "Jasonmorgan". It also forces a repo-wide migration of all 1,045 files.
23+
- **Display name as the key, with an optional preferred-name override** — chosen. Zero
24+
migration, correct bylines for every Author for free, and the changeable-display-name
25+
benefit is preserved for those who opt in. The only thing it gives up is a slug decoupled
26+
from the original name — but the slug is a URL we want stable anyway, and renaming it is a
27+
redirect-and-find/replace job in *either* model.
28+
29+
A central `data/authors.yaml` was also rejected in favor of taxonomy term content files:
30+
term files bind to the existing `/authors/<name>/` page automatically and carry a Markdown
31+
bio, which a data file cannot do naturally.
32+
33+
## Consequences
34+
35+
- The profile content file's directory **must** equal Hugo's slug of the exact author
36+
string; a mismatch yields an orphan page that enriches nothing. A `new-author.ps1`
37+
scaffolder generates the file with the right slug, and a build-time check flags author
38+
content files whose slug matches no taxonomy term.
39+
- Renaming a slug is the rare, deliberate case: `new-author.ps1` rewrites the term across
40+
content and adds an `aliases` redirect on the Profile to preserve the old URL.
41+
- Avatars resolve `avatar``gravatar_hash``email``identicon` fallback. Raw `email`
42+
is convenient but lands in the public repo; `gravatar_hash` lets the privacy-conscious
43+
avoid that, and an explicit `avatar` image bypasses Gravatar entirely.
44+
- The Author list orders enriched profiles first, then by count, so a partially-filled grid
45+
reads as intentional rather than sparse.

0 commit comments

Comments
 (0)