Contributing
Everything in assets/ and tokens/ is generated. Change the scripts, run the build, and commit what comes out. Hand-edit a PNG and the next build will quietly undo your work, which is the most passive-aggressive code review there is.
Building
Section titled “Building”You need Node 24 (there’s an .nvmrc). From the repository root:
npm cinpm run buildThe build wipes assets/ and tokens/ and makes them again. It takes a few seconds. CI runs the same build and fails if anything changed, so a pull request with stale files won’t pass.
Where things live
Section titled “Where things live”| File | What it holds |
|---|---|
scripts/brand.mjs |
The organisation, every template, every colour scale. Start here. |
scripts/geometry.mjs |
The rings: radii, gaps and where each ring is cut. |
scripts/colours.mjs |
Which shade goes on which ring, and the spectrum arrangement. |
scripts/logo.mjs |
Turns geometry and colours into an SVG, with or without a frame. |
scripts/social.mjs |
The social template layout. |
scripts/text.mjs |
Turns text into outlines with the bundled fonts, so SVGs look the same everywhere. |
scripts/tokens.mjs |
Writes the token files and Starlight themes. |
scripts/build.mjs |
Decides which files to make, at which sizes. |
fonts/ |
The three typefaces, under the SIL Open Font Licence. |
Adding a template
Section titled “Adding a template”- Add it to
templatesinscripts/brand.mjs, with a hue nobody else is using. If it’s one of the reserved ones, fill in therepo,packageandwhatfields and dropreserved: true. - Run
npm run build. You get its logos, web icons, social preview and Starlight accent. - Add a section for it on Logo files and a row on Quick downloads.
A brand new hue needs a full 50 to 900 scale in scales. Check it against the others on the Templates page before you commit to it: two neighbours that look alike in a row of marks are the thing to avoid.
The docs site
Section titled “The docs site”The site lives in website/ and copies the generated files in when it starts:
cd websitenpm cinpm run devPushes to main publish it to GitHub Pages.