Shared shape of the portfolio collections (DESIGN.md §4): typed entries
under content/portfolio/, slug from the filename, no page of their
own — the timeline, story, and CV views render them.
Every entry carries tags: from the same taxonomy as blog posts
(the cross-linking is the feature) and may opt into the CV with a
cv: curation block.
Summary
Functions
Schema fields every portfolio collection shares.
A required/optional ISO date field.
Derives slug from the filename: acme.md → acme.
Functions
@spec common_fields() :: keyword()
Schema fields every portfolio collection shares.
A required/optional ISO date field.
Derives slug from the filename: acme.md → acme.