Name
member - people, one page each, in a searchable grid
A member is a person described once, in the front matter of one file, in a collection of type member: the people of a group, a team, a list of mentors. Each gets a page and a card with their names, pronouns, affiliation and public profiles; a section marked {members} shows them all as a grid that the theme's members.js can search and filter.
Settings
A member collection may set these keys under [collections.<name>]; each has its default in the type's module, types/member.py.
| Key | Default | Meaning |
|---|---|---|
man | "SITE-MEMBERS(7)" | the man-page name of its items, unless one sets its own |
nav | "members" | the [[nav]] entry its items mark as current |
categories | ["admin", "member"] | the categories, in the order of the grid and of the filter's buttons |
default_category | "member" | a member's category when the front matter sets none |
empty | "No member listed yet." | the text of a {members} list with nothing in it |
search_label | "search" | the label of the search field |
search_placeholder | "first or last name" | the placeholder of the search field |
all | "all" | the filter's button that shows every category |
one | "entry" | the count's noun, for one |
many | "entries" | the count's noun, for several |
none | "No entry matches." | what a search that finds nothing says |
full | "full" | said on the card of a member whose capacity is reached |
The six words from search_label to none are for members.js, which holds no text of its own. defaults.toml already declares [collections.members], on content/members/; a site with mentors adds its category and its words:
[collections.members]
type = "member"
categories = ["admin", "mentor", "member"]
search_placeholder = "name"
A file per member
A member is content/members/<slug>.md, or a folder with its index.md. The type is not dated: any slug will do, jane-doe.md. Start from a _template.md in the folder that lists every field; its name keeps it from being built.
Front matter
---
title: Jane Doe
description: Jane Doe, who runs the project and answers its mail.
tagline: admin
first_name: Jane
last_name: Doe
pronouns: she/her
category: admin
affiliation: Example Corp
website: https://jane.example
mastodon: https://social.example/@jane
---
| Key | Meaning |
|---|---|
first_name, last_name | the person's names; last_name sorts the grid |
display_name | the name to show when it is not first and last name: a chosen name, a pseudonym, a single name. When set, it is the only name shown; the others stay searchable |
pronouns | as the person writes them (she/her, they/them, iel); ask, never guess, and leave it out if they prefer |
category | one of the collection's categories; default default_category. The card's tag, and the filter's |
affiliation | a company, a school or a project, if they want one shown |
capacity | a note on what they can still take on, 2 per term, for a category that tracks one, such as mentors |
full | yes when that capacity is reached: the tag turns to the warning colour and full is said in words |
linkedin, github, gitlab, mastodon, bluesky, website | the addresses of public profiles (below) |
man, nav | default: the collection's man and nav |
Leave empty what does not apply: an empty field shows nothing. There is deliberately no field for gender, age or a photo. title and description are the page's own, as on every page; the card shows the member's name, not the title.
The grid
A section marked {members} lists every member of the collection as a grid (.grid), in this order: by category, in the order of categories (a category not listed there comes after them); then by last name, accents and case ignored; then by file name.
## Members {members}
Each card shows the name (display_name, else first and last name), a line with the pronouns, the affiliation, the capacity and, when full, the word full, the category as a tag, and the profile links. In the grid the name links to the member's page; on that page the same card, without the link, closes the first section.
Profiles
Six keys hold public profiles, shown in this order: linkedin, github, gitlab, mastodon, bluesky, website. Each holds an address, or several separated by spaces, a personal and a work account; each is then named with the last part of its address, GitHub (jane).
- Logos. A link shows the theme's
theme/icons/<network>.svg,icons/github.svgforgithub, inlined in the page (its paths only, classed.icon, for the theme to colour) and hidden from screen readers, which hear the network's name instead. Without the icon, the link shows the name followed by↗.websiteis named bylabels.website,"website"by default (configuration). - Verification. Every link has
rel="me", which lets a profile that links back to the page verify it, and the addresses are thesameAsof the member's structured data. - Text mirror. Each profile is a line,
GitHub: <address>.
Search and filter
A page with a {members} section loads the theme's members.js, if the theme ships one: the type names it in its SCRIPT. The script is the theme's own; the one tilder describes adds a search field (first, last and display name, accents and case ignored, every word must match) and one button per category. Without JavaScript, the whole grid is simply shown (scripts).
It finds what it needs in the page. Each card carries data-category and data-search (the member's names, in lower-case ASCII), and the section carries the collection's six words as data-search_label, data-search_placeholder, data-all, data-one, data-many and data-none, so the script speaks the page's language.
Search engines
A member's page is a ProfilePage whose mainEntity is a Person: its name is the page's heading (its name:, else its title without the site's suffix), not display_name; the site's organisation is its memberOf, the profiles its sameAs, and the affiliation as an Organization. A member collection has no RSS feed: the type gives no feed items.