infographics.sgit.ai / admin

How this site is built

Hand-written static HTML, one generated chrome definition, one catalogue generator, and a pre-release gate that has to pass before anything is tagged or published. Same pipeline as every other *.sgit.ai site: validate → tag → deploy.

The pipeline

1

validate

node admin/build/validate.js. Structure, links, version agreement, canonical/CNAME agreement, the agent surface, block balance, the agent-block rule, and the catalogue contract. A failure stops the release: no tag, no publish.

2

tag-release

Every push to dev is a release and ends tagged v{release}.{major}.{minor}. The version is owned by admin/build/version.txt and must agree with the release commit's subject.

3

deploy

Publishes the tagged commit to GitHub Pages. Never runs when validation failed, never from a pull request.

What the gate checks

#CheckWhy it is here, specifically for this site
1–7Version agreement, links, canonical, agent surface, key-leak, block balance, agent blockThe shared core, inherited from every sibling site
8The catalogue contract — every library/<slug>/metadata.json must carry the required fields (source brief, source site, generator, licence, status…), and a published entry's declared image file must actually existThis site's whole reason to exist is that a stored infographic stays traceable to its source. An entry that failed this check would have broken that promise silently

The chrome and the catalogue generator

Every page is hand-written static HTML. The nav row and footer columns are defined once in admin/build/chrome.py and rewritten in place across the tree on every run. The gallery grid on library/index.html, the machine-readable library/data/catalogue.json, and the "catalogued so far" list in llms.txt are owned by admin/build/gen_library.py, driven from each entry's metadata.json — never hand-edited.

python3 admin/build/gen_library.py  # rebuilds the gallery + catalogue.json from metadata.json
python3 admin/build/chrome.py       # rewrites nav + footer everywhere, stamps the version
node    admin/build/validate.js     # the gate

Adding a catalogued infographic

1. mkdir library/<slug>
2. Drop the image file in, and write library/<slug>/metadata.json
   (see briefs/01__catalogue-schema-and-storage.md for the required fields)
3. Write library/<slug>/index.html by hand — a detail page, following the
   pattern of an existing entry
4. python3 admin/build/gen_library.py
5. python3 admin/build/chrome.py
6. Add the new page to sitemap.xml
7. node admin/build/validate.js
8. git commit -am "site vX.Y.Z: ..." && git push origin dev

Making a release

1. bump admin/build/version.txt (vX.Y.Z, exactly once)
   add a row to admin/versions.html
   update admin/comms.html

2. python3 admin/build/gen_library.py
3. python3 admin/build/chrome.py
4. node admin/build/validate.js

5. git commit -am "site vX.Y.Z: ..." && git push origin dev

The repository

.github/workflows/deploy-pages.yml   validate → tag → deploy
admin/build/validate.js              the gate
admin/build/chrome.py                the single definition of nav and footer
admin/build/gen_library.py           the catalogue generator
admin/build/version.txt              the version, owned here
admin/comms.html                     tasks and requests, in public
admin/versions.html                  release history
assets/site.css  assets/nav.js       the sgit.ai design language
library/<slug>/                     one folder per catalogued infographic
library/data/catalogue.json          generated machine-readable index
network/  about/                     sibling boundaries, participant disclosure
briefs/                              the pack this site was built from
CNAME  robots.txt  sitemap.xml  llms.txt  index.md
LICENSE  LICENSES.md                 code Apache 2.0, content CC BY 4.0