Documentation

Content model

Every content file, field by field.

Ten JSON files under source/content/ hold every word, number, link and list a visitor sees, plus one file of design tokens. Nothing user-visible is hard-coded in a template, which is why one edit reaches all four formats.

This is the field-by-field reference. For a worked walkthrough of changing things, see customizing; for how the layers fit together, see architecture.

FileHolds
site.jsonBrand, navigation, footer, contact details, social links, portal
home.jsonEvery band of the home page
pages.jsonEvery interior page, as a hero plus a list of sections
products.jsonThe catalogue and every product detail page
collections.jsonRepeated lists: leadership, facilities, pipeline, partners
articles.jsonNews and briefing articles
ui.jsonInterface labels, column headings, empty states, ARIA strings
seo.jsonTitles, meta, Open Graph, robots, schema.org, sitemap
lite.jsonWhich subset of the above the free edition ships
tokens/tokens.jsonColour, type, spacing, radius, shadow, breakpoints

Every file may carry a $comment key. The build ignores it; it is there so a file can explain itself to whoever opens it next.

site.json

The chrome. Read on every page in every format.

KeyTypeEffect
brand{ name, suffix }The wordmark. suffix renders in the lighter weight beside the name
taglinestringUsed in the footer and as a fallback description
descriptionstringThe footer blurb
skinstringWhich token build to link, if you ship more than one
navarrayThe menu. See below
portalobjectThe portal button in the navigation bar
contact{ address_lines[], email, phone }Footer and contact page
socialarrayFooter icons

nav is an array of { label, children }. An entry with a children array becomes a dropdown; without one it is a plain link. The footer columns and the mobile drawer are generated from this same array, so the menu is edited once and three places follow.

home.json

Nine keys, each one band of the home page, in this order: hero, ribbon, mandate, network, pipeline, science, news, contact, partnering.

hero carries badge, title, lead, cta_primary, cta_secondary and a stats array of { count, suffix, label }. Those counts animate up from zero; the final value is in the HTML, so it reads correctly without JavaScript.

network drives the 3D globe. focus is the region it opens on, as { lat, lng }, and hubs is an array of { lat, lng, label, primary }. A hub marked primary pulses. No JavaScript is edited to move a marker.

pipeline holds programmes, each with a pct for the progress bar and a status of active, enrolling or planning.

Three of these bands can be pulled into an interior page with an include section, so they are written once: science, partners and contact.

pages.json

One key per interior page under pages. The key is the URL: mandate becomes /mandate.html.

FieldEffect
titlePage title, tab title, breadcrumb
descriptionMeta description and link preview text
hero{ eyebrow, h1, lead }
sectionsOrdered list of typed sections

The section types are the substance of this file and have their own reference: see the section catalogue for all seventeen, their fields, the three tones and the eight interactive apps.

Adding a page is adding a key here and a link in site.json's nav.

products.json

products is an array; each object produces a catalogue row, a full detail page, a schema.org Drug block and a sitemap entry.

FieldEffect
genericThe generic name, and the row's primary label
proprietaryBrand name, shown beside the generic
brand_equivalentWhat it is equivalent to, on the detail page
ndcNational Drug Code. Searchable in the catalogue
categoryFilter pill. A new value creates a new pill by itself
formDosage form, for example tablet or injection
strengthDosage strength
routeRoute of administration
prescribing_info_urlLink to the prescribing information document

categories is the display order for the filter pills. disclaimer is the regulatory line shown on every product page.

prescribing_info_url ships pointing at a placeholder document whose text says so. Replace it before launch: a prescribing information link is the single most consequential link on a pharmaceutical site.

collections.json

Lists that appear in more than one place. Edit a person once and every page showing them follows.

KeyItem fields
leadershipname, title, bio, photo
facilitiesname, location, capability, specs
pipelinename, indication, modality, phase
pipeline_stagesThe phase labels, in order
partnersname, kind, logo
metricslabel, value
credentialsCertification and accreditation strings

phase on a pipeline entry must be one of the strings in pipeline_stages; that is what positions it on the chart.

articles.json

FieldEffect
slugURL: /article/<slug>.html
title, excerpt, tag, date, author, read_minutesCard and byline
body, body2Prose, with pull as a pull quote between them

This file drives the listing pages. Writing a new article as markdown in your format's own idiom is the easier route and is covered in the four formats; note that a markdown article does not appear in these listings unless you also add it here.

ui.json

Every interface string: column headings, button text, empty states, ARIA labels, form messages. Grouped by where they appear (catalog, product, feed, jobs, footer, contact_form, portal_form, article, facilities, leadership, partners, a11y).

There is no user-visible English hard-coded in the renderer. Translating the theme means editing this file and seo.json, not grepping templates.

seo.json

KeyEffect
site_urlCanonical base. Set this before you launch
site_name, titlesTitle template and per-page overrides
lang, dir, default_localeLanguage, direction, locale
socialOpen Graph and Twitter card defaults
robotsThe generated robots.txt
organizationschema.org Organization: legal_name, type, founding_date, contact_point, same_as
product_schemaschema.org Drug defaults for catalogue entries
breadcrumbsBreadcrumb structured data
verificationSearch Console and similar meta tags
analyticsLeft empty. Nothing is loaded unless you fill it in
theme_colorBrowser UI colour

site_url is the one that matters most. Canonicals, Open Graph URLs and the sitemap are all built from it, and shipping with the demo value means every canonical on your site points somewhere else.

lite.json

The manifest for the free edition: which home sections and which pages it ships, which are withheld, and the note shown where a withheld page would have been. You do not need this file unless you are producing a cut-down build of your own.

tokens/tokens.json

Colour, type scale, spacing, radius, shadow and breakpoints. Compiled to CSS custom properties by build-core.py. Full table in theming.