The organisation's apex site — the page served at https://openplan-labs.github.io/. It is a hand-written static site: three CSS files, one HTML page, one 404 page, a handful of self-hosted font subsets, and no framework or build step. Documentation for the individual projects is not here.
Apex Pages and project Pages coexist. Each of these is deployed from its own repository and is not affected by anything in this one:
| Path | Repository |
|---|---|
/PythonPDDL/ |
PythonPDDL |
/pymapf/ |
pymapf |
/cuda-planning/ |
cuda-planning |
/awesome-pddl/ |
awesome-pddl |
/planviz/ |
planviz |
/openplan-bench/ |
openplan-bench |
Never add a top-level directory here whose name matches a repository that publishes a project site. A directory in this repo shadows the project site at the same path, and the project's own deploy will not put it back.
index.html the front page; the only page with content
404.html same shell, no content
tokens.css verbatim copy of openplan-labs/branding tokens/tokens.css
site.css everything else; no hex literals, only token variables
fonts.css @font-face for the latin subsets in fonts/
fonts/ Libre Franklin 600, Charis SIL 400/400i/700, IBM Plex Mono 400
favicon.svg the branding favicon, with its own prefers-color-scheme rule
tools/make_figure.py regenerates the hero figure by running A*
robots.txt sitemap.xml .nojekyll
Open index.html and change the markup. There is nothing to install and
nothing to compile — to preview, serve the directory:
python3 -m http.server 8000 # then open http://localhost:8000/Three rules that are not obvious from the source:
Colours come from tokens.css, never from a hex literal. tokens.css is a
copy of branding/tokens/tokens.css;
if the brand palette changes, re-copy the file rather than editing this one.
--color-path on light paper sits at exactly 4.50:1, so it is never lightened
for a hover state — see
brand/palette.md.
The mark is inlined, not <img>-ed. currentColor and CSS custom
properties do not cross an <img> boundary; an <img> of mark-mono.svg
renders black on a dark navbar. The reasoning is in
brand/logo.md.
The hero figure is generated, not drawn. tools/make_figure.py runs A*
with a Manhattan heuristic on a fixed 16 × 9 grid and emits the SVG, so the
expanded set, the frontier and the plan are the search's rather than a
designer's. To change the figure, change the grid in that file and paste the
output over the block between <!-- figure:begin --> and <!-- figure:end -->:
python3 tools/make_figure.pyMarker shapes follow
brand/figures.md:
filled dot for expanded, hollow ring for frontier, one connected stroke for the
plan. Shape carries the meaning so the three sets stay separable in greyscale
and to a colour-blind reader.
Three viewer states are handled, which is the contract tokens.css is written
for: prefers-color-scheme when no choice has been made, an explicit
data-theme="dark", and an explicit data-theme="light" overriding a dark OS.
The toggle in the masthead cycles system → light → dark and persists the choice
in localStorage under openplan-theme; a small inline script in <head>
applies it before first paint so an explicit choice never flashes the other
theme.
.github/workflows/deploy.yml runs on every push to main. It checks the
links with lychee — including the
project sub-path sites, so a broken /cuda-planning/ is a red build — then
uploads the repository root as the Pages artifact and deploys it. Pages is
configured with build_type=workflow; there is no Jekyll step, and
.nojekyll keeps one from appearing.
MIT — see LICENSE. The projects it links to keep their own
licences: MIT for pymapf, cuda-planning, pddl-examples, awesome-pddl,
planviz and openplan-bench; Apache-2.0 for PythonPDDL and
docker-pythonpddl.