The knobkit marketing site, served by GitHub Pages at https://knobkit.dev.
index.html— the landing page: minimal hero (copy left, demo video right), the live playground full-width below. Self-contained HTML/CSS/JS, light/dark via system preference plus a toggle. Preview locally withpython3 -m http.serverfrom the repo root (the playground iframe and video need HTTP, not file://).playground-src/— the playground source (moved here from the main repo'sexamples/playground); depends on the publishedknobkitfrom npm, so the public playground always matches the version users install.playground/+assets/— the deployed playground, a staticknobkit buildofplayground-src/.knobkit buildemits absolute/assets/...URLs (nobaseoption yet), so the hashed assets live at the site root andplayground/index.htmlworks from its subpath.demo/— Remotion source for the demo video (seedemo/README.mdfor preview/render commands, host and Docker).demo.mp4/demo.gif— the rendered demo. The MP4 is embedded by the landing page; the GIF is hot-linked by the main repo's README..github/workflows/pages.yml— deploys the repo as-is to GitHub Pages on push tomain(set Pages source to "GitHub Actions" in the repo settings).
When the playground is rebuilt, bump the ?v=N query on the /playground/ iframe in
index.html so cached copies of the old playground/index.html (with stale asset hashes)
can't serve a blank embed.
After a knobkit release (versions are lockstep):
# playground — from playground-src/ (bump the knobkit dep to the new version first) npm install && npm run build cp dist/index.html ../playground/index.html rm -rf ../assets && cp -R dist/assets ../assets # demo — from <site>/demo npm run render:mp4 && npm run render:gif cp out/demo.mp4 out/demo.gif <site>/