ADR 0008: Publish the developer docs at developers.schellingboard.org
- Status: Accepted
- Date: 2026-09-18
Context
The developer documentation (CONTRIBUTING.md and docs/dev/) is only readable in
the repository. On GitHub it is a flat file listing with no entry point, and
navigation is by relative link. The target-architecture diagrams are worst off:
GitHub can’t run LikeC4, so the chapters embed PNGs that must be re-exported by
hand and go stale silently.
The user docs at docs.schellingboard.org are built from release tags, with the newest release at the root. Two constraints on publishing anything next to them:
- End users must not confuse the developer docs with the user docs.
- Nobody may land on documentation for unreleased features by default. Finding it on purpose is fine.
Other projects mostly split the two audiences. Contributor docs go on their own
site, unversioned and tracking the default branch (developers.home-assistant.io,
devguide.python.org, rustc-dev-guide). Unreleased user docs, where they are
published at all, are a non-default version with a warning banner (Docusaurus
/docs/next/, Read the Docs latest versus the stable default,
next.home-assistant.io).
Decision
The developer docs are their own site at developers.schellingboard.org
A separate docmd.dev.config.json builds docs/dev/ into its own site, with its
own title, navigation and search index. The user site links to it only from the
footer. developers. rather than dev. or devdocs., so the host doesn’t read
like docs. at a glance.
It is not versioned: a new developers.yml builds it from main on pushes that
touch the developer docs, like the contributor sites above. GitHub Pages serves
one custom domain per repository, so it pushes the build to a repository that
holds nothing else, as www.yml does for schellingboard.org, reusing the same
deploy app. docs.yml and the user docs are untouched.
A path under docs.schellingboard.org was considered. It needs no extra
repository, but Pages replaces the whole site on every deploy, so each tag and
release-branch deploy of the user docs would have to rebuild /dev/ from main.
A broken developer build would then block publishing a release’s docs. Also,
the target audience is very different so clearly separating is better.
It is open to search engines, like the contributor sites above.
docs/dev/README.md becomes the index and the site’s home page, so the folder is
navigable on GitHub too. Links from developer docs to files outside docs/dev/
point at GitHub, since the site can’t resolve them.
CONTRIBUTING.md becomes a short entry point
Its content moves into docs/dev/ chapters. What stays is what GitHub shows
contributors before they open an issue or pull request: a few lines on what the
project is and a link to the developer docs. AGENTS.md links to
docs/dev/README.md instead.
LikeC4 diagrams are interactive, and the PNG exports go
likec4 build --base /diagrams/ --use-hash-historypublishes the full explorer, with drill-down between levels, at/diagrams/. Hash history is there because GitHub Pages can’t route deep links to a single-page app.likec4 gen webcomponentgenerates a script, loaded through docmd’scustomJs, that defines<likec4-view view-id="…">. The chapters embed their views with that element instead of PNGs.
docs/dev/target-architecture/diagrams/export/ and make arch-diagrams-export are
removed. On GitHub the chapters then show no diagrams, which is acceptable now that
the site is where these docs are read. In exchange, nothing can go stale: the site
renders from the .c4 sources on every build.
No /next/ for now
Publishing docs/public/ from main as an “unreleased” version was considered and
deferred. It would let reviewers and organizers read upcoming docs rendered, but
nobody runs main in production. An end user arriving from a shared link or a
search would be reading about features their instance lacks, which a banner only
softens. docmd also has no per-version banner, so it would need a build-time
workaround. Revisit if people ask for rendered unreleased docs. make docs covers
contributors in the meantime.
Consequences
- One more repository, DNS record and app installation to set up.
docs/dev/documentation.mdneeds a section on the developer site. - Developer docs are only as current as
main. A contributor on a release branch reads that branch’sdocs/dev/in the repository. - Diagram PNGs no longer need committing, and publishing diagrams no longer needs
Playwright’s Chromium. The target-architecture chapters and the diagrams
README.mdswitch from the PNGs to embedded views. - To check while implementing: whether embedded diagrams follow docmd’s theme toggle, and how much the web component adds to every developer page.