Biobank entries are stored as one Markdown file per entry in content/data/biobank/. Each file generates its own page via layouts/biobank-page.njk, and the collector on /biobank/ lists them all. An entry references a research lab by its stable key (UUID) through affiliated_lab. The entry's lab name and country are derived from that lab at build time (see below).
| Field | Type | Required | Notes |
|---|---|---|---|
key |
UUID (hidden) | yes | Auto-generated by the CMS |
title |
string | yes | Name of the item offered |
tags |
string[] | no | Free-text labels (e.g. Strain, ST1); shown as chips and usable as a filter |
contact_person_name |
string | yes | Person offering this item (may differ from the lab contact) |
contact_person_email |
yes | Address the "Request via email" button writes to | |
affiliated_lab |
UUID | yes | A Research Lab key; links the entry to that lab |
picture |
image | no | Optional photo of the item |
body |
markdown | no | Free-text description |
Derived lab and country
The Biobank does not store a lab name or country of its own. affiliated_lab holds a Research Lab's key (UUID), which is resolved at build time:
buildLabIndex()in.eleventy.jsbuilds a map of labkey→ research lab object fromcontent/data/research_labs.json.- In
getItemsFromCollection(), the matched lab's name and country are denormalized onto each biobank item (asaffiliated_lab_nameandcountry), so the server-pre-rendered collector card, the listing's Lab/Country filters, and search have them without a runtime lookup. - The entry page additionally resolves the lab through the
labByKeyEleventy filter, exposing the full lab object (for the affiliation block) and its name/country.
Because the name and country come from the lab, the lab's Country field must be set for it to appear on affiliated entries. This is the first collection that links into Research Labs.