Website for the Keiser Lab, an AI/ML research lab at UCSF (2014-2025) led by Michael Keiser.
We use Docker for Jekyll serving only. VS Code, Claude Code, and other dev tools run on the host (not in the devcontainer).
- start Jekyll:
$ docker compose up(ordocker compose up -dfor background)- get interactive terminal:
$ docker compose exec -it keiserlab bash
- get interactive terminal:
- dev website serves at http://localhost:4000
- edit files, run python scripts, and use git on the host
bundlemanages the container's ruby environment (for Jekyll)- check for dependency updates:
- bundler:
$ bundle update --bundler - all other gems:
$ bundle update
- bundler:
uvmanages python on the host (not in the container)- run python scripts like
uv run myscript.pyoruvx --with <pkg> python3 -c "..." - check for dependency updates:
$ uv lock --upgrade- if updated, include
uv.lockin the git commit
- if updated, include
- run Claude Code CLI on the host:
claude - set
ANTHROPIC_API_KEYin your environment to authenticate
- a vscode devcontainer is available if you prefer running everything inside the container
- the devcontainer auto-installs the Claude Code extension
- or install the CLI directly:
curl -fsSL https://claude.ai/install.sh | bash - set
GH_TOKENon the host so it's available inside the container:export GH_TOKEN=$(gh auth token)
- add this to
~/.zshenv(not~/.zshrc) so it's available during vscode devcontainer auto-rebuilds
./scripts/lint.sh # all linters (internal links only)
uvx ruff check utils/ # python
uvx yamllint -d relaxed _config.yml _data/ # yaml
npx @biomejs/biome check . # scss, json
bundle exec htmlproofer ./_site # built html + internal linkscheck external links (DOIs, Zenodo, GitHub, etc. — slow, network-flaky):
docker compose exec keiserlab bundle exec htmlproofer ./_site \
--allow-hash-href --no-enforce-https \
--ignore-urls '/tags/,/tbproxy/' \
--typhoeus '{"followlocation": true, "timeout": 30}'- force container rebuild with
$ docker-compose build --no-cache
- we're using the Minimal Mistakes jekyll theme
- theme setup and use: setup guide