No description
  • JavaScript 39.1%
  • MDX 27%
  • CSS 14.2%
  • Astro 11%
  • Nix 5.8%
  • Other 2.9%
Find a file
natsukium fac5cfd4c4
Some checks failed
deploy / build and deploy to Cloudflare Pages (push) Failing after 17s
feat: embed a live felis-web terminal and add felis-tui to the map
The ecosystem page claimed felis-web could host a live component instead
of a screenshot; this makes the page prove it. A recorded .fcast now
replays in the page through the real felis renderer (felis-client-core
compiled to wasm), rendering selectable DOM text with the recording's own
theme — verified end-to-end in a browser, no console errors.

The bundle is consumed, not rebuilt here: the felis-web flake input
exposes packages.web (wasm + component + assets), the dev shell hands its
path to the build via FELIS_WEB_BUNDLE, and scripts/sync-web.mjs copies it
into public/felis/ at predev/prebuild. That keeps the wasm/rust toolchain
out of this repo — the docs build stays node + wrangler. public/felis/ is
gitignored; the input pin is the source of truth, like the vendored docs
and generated palette.

Also maps felis-tui, the newest client: a felis-native multiplexer that
hands back the splits felis core refuses, by mirroring the structured
grid rather than re-parsing a PTY.

Assisted-by: Claude Code Opus 4.8
2026-06-20 21:09:45 +09:00
.forgejo/workflows feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
plugins feat: publish the whole felis docs tree, not just the manual 2026-06-08 01:07:10 +09:00
public feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
scripts feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
src feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
vendor feat: bump felis docs and surface the new Design Values doc 2026-06-20 18:39:27 +09:00
.gitignore feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
.gitmodules feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
astro.config.mjs feat: add an Ecosystem page mapping felis's clients 2026-06-20 20:34:27 +09:00
flake.lock feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
flake.nix feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
package-lock.json feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
package.json feat: embed a live felis-web terminal and add felis-tui to the map 2026-06-20 21:09:45 +09:00
README.md feat: publish the whole felis docs tree, not just the manual 2026-06-08 01:07:10 +09:00
tsconfig.json feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00

felis-docs

Documentation site for felis — the end-user manual and the design docs — built with Astro Starlight and themed to look like a terminal — every base16 colour scheme is selectable at runtime.

Where the content lives

The content itself is not in this repository. It lives in the felis repo under docs/ (next to the code it documents, so it can't rot) and is vendored here via the vendor/felis submodule — every entry of docs/ is symlinked into src/content/docs/, so site routes mirror the repo layout (docs/spec.md/spec/). The only pages authored here are the landing page and the site chrome. The sidebar groups in astro.config.mjs mirror the reading order in felis docs/README.md.

Relative links inside the docs are rewritten at build time (plugins/remark-felis-links.mjs): links between published pages become site routes; links escaping docs/ (crate sources, the config JSON schema) become URLs into the felis repository.

Updating the docs

A docs change lands in felis first. Publishing it here is a submodule bump:

git submodule update --remote vendor/felis
git commit -am 'chore: bump felis docs'
git push   # CI rebuilds and deploys

The same flow with vendor/schemes picks up new base16 schemes.

Development

The Nix flake pins the toolchain (Node.js + wrangler):

nix develop
git submodule update --init   # felis docs + base16 schemes
npm install
npm run dev                   # generates schemes, serves on :4321

npm run generate converts vendor/schemes/base16/*.yaml into src/generated/schemes.json (picker UI) and src/styles/base16.generated.css (one [data-base16="…"] rule per scheme). Both are gitignored — the submodule pin is the source of truth.

Theming model

  • ThemeProvider.astro applies the stored scheme before first paint and sets Starlight's data-theme from the scheme's dark/light variant.
  • ThemeSelect.astro replaces Starlight's dark/light toggle with a picker over every scheme.
  • terminal.css maps Starlight's grey ramp + accents onto --base00..--base0F, and code blocks use Shiki's css-variables theme so syntax highlighting follows the palette (Expressive Code is disabled — it bakes token colours per theme at build time, which doesn't scale to ~250 runtime-switchable schemes).

Deploy

Forgejo Actions (.forgejo/workflows/deploy.yml) builds on push to main and deploys dist/ to Cloudflare Pages with wrangler. Repo secrets required: CLOUDFLARE_API_TOKEN (Pages:Edit) and CLOUDFLARE_ACCOUNT_ID.