← Docs hub

Deploying to GitHub Pages

Host your llmwiki site on GitHub Pages for free, with automatic builds on every push to master.

Live example: alexandermakarov.github.io/llm-wiki (historical demo also at pratiyush.github.io/llm-wiki).

This repository (#213): pages.yml publishes on every version tag (v*.*.*) and on manual Run workflow. Deploy on every push to main stays off (#69) — the demo tracks releases, not merges; restore push: if you want each merge to republish. The published site is built from the committed demo/ vault: demo/raw/sessions/ (demo sessions), demo/raw/docs/ (product docs), demo/wiki/ (pre-synthesized pages, committed so CI stays free/deterministic) and demo/usage/ (MCP telemetry fixtures for Analytics).

Prerequisites

Step 1: Fork or clone the repo

# Option A: fork on GitHub, then clone your fork
git clone https://github.com/<you>/llm-wiki.git

# Option B: clone this repository
git clone https://github.com/AlexanderMakarov/llm-wiki.git

Step 2: Enable GitHub Pages

  1. Go to your repo on GitHub
  2. Navigate to Settings > Pages
  3. Under Source, select GitHub Actions
  4. Save

This tells GitHub to use the workflow file rather than serving from a branch directly.

Step 3: The workflow handles everything

The repo ships with .github/workflows/pages.yml which:

  1. Checks out the code
  2. Installs Python 3.12 and the markdown dependency
  3. Runs llmwiki build --vault demo --out ./site against the committed demo/ vault
  4. Adds .nojekyll so Pages serves _-prefixed paths
  5. Uploads and deploys the artifact

No secrets or tokens are required. The workflow uses GitHub's built-in actions/deploy-pages.

Step 4: Publish

Two ways to publish, and both end in the same assertion:

After a successful run, the site is live at:

https://<username>.github.io/<repo-name>/

The deploy verifies itself

A green deploy job means GitHub accepted the artifact, not that the site serves it. So after actions/deploy-pages, the workflow checks out the commit it just published, fetches manifest.json from the deployed URL, and fails the run when the version there is not the __version__ of that commit. llmwiki build stamps the manifest with the package version, which makes it the only field on a deployed site that identifies the build.

Both triggers assert against the checked-out __version__ rather than the tag name, so a manual dispatch is checked exactly as strictly as a tag push — and a tag whose __version__ was never bumped fails here rather than publishing a mislabelled site.

Run the same check by hand against any deployed site:

python3 scripts/check_live_version.py --url https://<username>.github.io/<repo-name>/

It exits 0 on a match, 1 when the site is stale, 2 when the manifest is unreachable, and 3 when it cannot be parsed. The same check runs automatically after every Pages deploy; there is no separate scheduled freshness workflow — release/tag deploys are the gate (see uptime.md).

Using your own session data

By default the workflow builds the committed demo/ vault. To deploy your real sessions:

  1. Point the build at your own vault — change --vault demo in pages.yml to the path you sync into
  2. Commit that vault's raw/sessions/ and wiki/ (remove them from .gitignore first)
  3. Push to master

Alternatively, keep sessions local and commit only the built site/ directory.

Custom domain

  1. Go to Settings > Pages > Custom domain
  2. Enter your domain (e.g. wiki.example.com)
  3. Add a CNAME DNS record pointing to <username>.github.io
  4. GitHub provisions HTTPS automatically via Let's Encrypt
  5. Optionally add a CNAME file in site/ (the workflow will deploy it)

Troubleshooting

404 after deploy

Build fails with "no sources found"

The workflow needs session data. Make sure either: - demo/raw/sessions/ contains .md files, or - raw/sessions/ is committed with real data

Build fails with import error

The workflow installs markdown via pip. If you have added dependencies, update the Install deps step in the workflow:

- name: Install deps
  run: python -m pip install markdown

Workflow not triggering

Deploy succeeded but the site is stale

The post-deploy check fails with serves version X, expected Y. The artifact was published but the URL still serves an older build:

Assets or CSS missing

Ensure .nojekyll exists in the site root. The workflow creates it automatically, but if you are deploying from a branch instead, add it manually.

Differences from GitLab Pages

See gitlab-pages.md for the GitLab equivalent. Key differences:

Feature GitHub Pages GitLab Pages
Workflow file .github/workflows/pages.yml .gitlab-ci.yml
Output directory Configured via action Must be public/
Branch restriction Configurable Uses rules: in CI
Custom domain Settings > Pages Settings > Pages > New Domain
HTTPS Automatic Automatic
Private site GitHub Pro required Available on free tier

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date