No description
  • JavaScript 38.7%
  • MDX 28.1%
  • CSS 13.5%
  • Astro 11.2%
  • Nix 5.8%
  • Other 2.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
natsukium 813819b8b9
Some checks failed
ci / astro check + link check (push) Successful in 1m11s
deploy / build and deploy to Cloudflare Pages (push) Failing after 21s
docs: follow the web client's split and rename
`felis-web-core` is now `felis-web-component`, and the WebSocket relay
that used to live beside it is `felis-web-gateway`. The flake input,
`scripts/sync-web.mjs`, CI and the ecosystem page all move with it.

The gateway gets a card of its own rather than a footnote. It is the
answer to the question the live-terminal section below raises without
naming — a page cannot open a Unix socket or speak felis's framing, so
something native has to, and "which repo is that" should be answerable
from this page.

flake.lock is left for a follow-up: the renamed input cannot resolve
until Forgejo has the new name.

Assisted-by: Claude Code Opus 5
2026-08-15 01:15:37 +09:00
.forgejo/workflows docs: follow the web client's split and rename 2026-08-15 01:15:37 +09:00
plugins fix(links): derive the felis repo URL from .gitmodules 2026-06-21 21:43:46 +09:00
public feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
scripts docs: follow the web client's split and rename 2026-08-15 01:15:37 +09:00
src docs: follow the web client's split and rename 2026-08-15 01:15:37 +09:00
vendor chore: advance the vendored felis submodule to the current tip 2026-07-17 10:23:36 +09:00
.gitignore docs: follow the web client's split and rename 2026-08-15 01:15:37 +09:00
.gitmodules feat: Starlight docs site with runtime base16 theming 2026-06-07 13:28:37 +09:00
astro.config.mjs feat: mirror the felis docs Diátaxis restructure 2026-07-03 00:09:08 +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 docs: follow the web client's split and rename 2026-08-15 01:15:37 +09:00
linkinator.config.json ci: gate the docs site on astro check + internal link check 2026-06-21 21:44:00 +09:00
package-lock.json ci: gate the docs site on astro check + internal link check 2026-06-21 21:44:00 +09:00
package.json ci: gate the docs site on astro check + internal link check 2026-06-21 21:44:00 +09:00
README.md feat: mirror the felis docs Diátaxis restructure 2026-07-03 00:09:08 +09:00
tsconfig.json ci: gate the docs site on astro check + internal link check 2026-06-21 21:44:00 +09:00

felis-docs

Documentation site for felis — tutorials, how-to guides, reference, and the design docs, on the Diátaxis map — 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.