Static site content for theflat.gen.nz, hosted on GitHub Pages.
Octopus favicons based on icons created by Freepik - Flaticon
Dungeons & Dragons was created by Gary Gygax and Dave Arneson and is published by Wizards of the Coast
D&D 5e data provided by the D&D 5e API (5e-bits/5e-srd-api), licensed under the MIT License.
This work includes material taken from the System Reference Document 5.1 ("SRD 5.1") by Wizards of the Coast LLC and available at D&D Beyond. The SRD 5.1 is licensed under the Creative Commons Attribution 4.0 International License.
Stars Without Number was created by Kevin Crawford and published by Sine Nomine Publishing. The swn/ compendium's markdown is based on files from Dark Star Adventures, modified for this campaign; campaign source notes live at github.com/octopusnz/swn.
index.html: site homepagerpg.html: D&D 5e RPG Campaign Trackerswn/index.html: Stars Without Number campaign compendium — dashboard plus rendered campaign/rules notes404.html: not-found page
github-stats.json: auto-generated GitHub statistics (updated by GitHub Actions)rpg-data.json: RPG campaign tracker statedarkstone.json: Darkstone campaign data (460 KB;rpg.htmlfetches it lazily on first visit to the Characters tab, not on page load)inventory.json: campaign inventory dataurls.json: curated links datadata/: cached D&D 5e API data (ability scores, classes, conditions, equipment, monsters, spells, etc.)swn/content/: campaign/compendium markdown synced from octopusnz/swn, plusmeta.json.pages.jsonholds page metadata (frontmatter, folder, category, etc.) and a precomputed backlink index, but not body text — each page's body is a separate file underbodies/(mirroring the vault's own folder structure, one.mdper page) fetched only when that page is opened, so the ~380 KB of combined markdown isn't part of the app's boot payload.Images/holds the synced images (each full-size image gets a.webpsibling that the page prefers via<picture>, and a square thumbnail underImages/thumb/). GM-only "Hooks & Secrets" and "GM Notes" sections are stripped during sync since this page is public. This is a manual sync (not part of the automated deploy workflow) — re-runscripts/fetch-swn-data.shand commit the result to publish vault updates.
.github/workflows/static.yml: fetches D&D 5e API data, refreshesgithub-stats.json, then deploys the site to GitHub Pages — triggers on pushes tomain, daily at 01:00 UTC, and manually viaworkflow_dispatch
scripts/fetch-dnd-data.sh: fetch and cache D&D 5e API data locallyscripts/check-structure.sh: diagnostic script to validaterpg.htmlstructurescripts/fetch-swn-data.sh: clone theoctopusnz/swnvault and rebuildswn/content/(manual — see Data above)scripts/build_swn_manifest.py: parses the vault's markdown/frontmatter intoswn/content/pages.json(metadata + backlink index) andswn/content/bodies/(one.mdper page), called byfetch-swn-data.sh
Image generation tooling (drafting/requesting portrait images via the Grok Imagine API and landing them in the vault) lives in octopusnz/swn itself, not here — see that repo's scripts/ and README. This repo only picks up the result on the next fetch-swn-data.sh run.
site.webmanifest: installable PWA metadataandroid-chrome-192x192.png/android-chrome-512x512.png: PWA iconsapple-touch-icon.png: iOS home screen iconfavicon-16x16.png/favicon-32x32.png/favicon-96x96.png/favicon.ico/favicon.svg: faviconsmap.jpg/map.webp: campaign map image.rpg.htmlloads the WebP and falls back to the JPEG if the browser can't decode it, so both must stay in sync. Regenerate the WebP after changing the JPEG:python3 -c "from PIL import Image; Image.open('map.jpg').convert('RGB').save('map.webp', quality=85, method=6)"robots.txt: crawler rulessitemap.xml: sitemap for search engineshumans.txt: human-friendly site attribution/metadatallms.txt: guidance for LLM tooling.well-known/security.txt: security contact information.nojekyll: disables Jekyll processing on GitHub PagesCNAME: custom domain configuration