A personal engineering knowledge base maintained by an LLM. Sources go in; the LLM compiles them into interlinked wiki pages and keeps those pages current as new sources arrive.
Read it at https://wiki.kelvin.ink/, or browse the wiki/ folder.
New to Claude Code? Start with
How Claude Code works.
The approach follows Andrej Karpathy's LLM Wiki pattern. Most AI note tools look up raw documents again for every question. Here the LLM files each source into the wiki once: it updates the pages that source touches and notes where sources disagree. Pages use the Open Knowledge Format v0.2 (OKF): plain Markdown with a small YAML header that records each page's type, sources, and review status.
Every article lives in exactly two places: its original in raw/, and the LLM's summary of it
merged into the topic pages under wiki/topics/.
flowchart TD
accTitle: How an article becomes wiki pages
accDescr: A link is captured in full into raw/; the old articles already sit in raw/ under their topic folders. Ingest reads the original and merges what it teaches into topic pages under wiki/topics, whose footnotes link back to the original. CLAUDE.md sets the rules. Readers use wiki.kelvin.ink.
L[You send a link] -->|scripts/capture.py| RW["raw/date-slug.md (original + image transcriptions)"]
RL["raw/AWS/, raw/Claude/ and the other old-article folders (frozen)"]
RW -->|ingest| T["wiki/topics/<domain>/<topic>.md"]
RL -->|ingest| T
T -.->|footnotes link back| RW
S[CLAUDE.md rules] -.-> T
T --> P[wiki.kelvin.ink]
One topic page merges every article on its subject, and one article can update several topic
pages. Each page lists its originals under sources in its header and cites them per section;
a footnote also carries the source's caveat, such as "vendor marketing" or "self-reported figures".
| Layer | Where | Who changes it |
|---|---|---|
| Originals | raw/ only: link snapshots as raw/<date>-<slug>.md (full text with AI transcriptions of their images), and the old articles in raw/AWS/, raw/Claude/, and the other topic folders |
Snapshots are added or recaptured with scripts/capture.py, never hand-edited or deleted; the old articles are frozen |
| Summaries | wiki/topics/, plus answers filed under wiki/syntheses/ |
The LLM, through pull requests you review |
| Rules | CLAUDE.md (the schema and who the pages are for) and .claude/skills/wiki/ (the ingest, query, and lint procedures) |
You and the LLM together |
Work happens in a Claude Code session in this repository:
| You do | What happens |
|---|---|
Send a link, or /ingest <link or legacy article> |
The LLM captures the article into raw/, merges what it teaches into the topic pages it touches, updates the indexes and wiki/log.md, and opens a pull request. A YouTube link first goes through the youtube-transcript skill |
| Ask a question | The LLM answers from the wiki with links to the pages it used, and offers to file a useful answer under wiki/syntheses/ |
| Ask for a health check | The LLM lists contradictions, stale or orphaned pages, and missing concepts, and fixes the mechanical ones |
New pages start as status: draft. A page counts as reviewed once you add
verified: { by: human:kelvinlee97, at: ... } to it.
Needs Python 3.11 and Node 22:
pip3 install pyyaml
python3 scripts/build_site.py build
python3 scripts/build_site.py check
cd .site-build/quartz && npx quartz build -d ../content --serve # http://localhost:8080Every pull request runs these in CI; run them locally before pushing:
| Check | Command | Catches |
|---|---|---|
| Wiki | python3 scripts/wiki_check.py, python3 -m scripts.wiki_index --check |
Missing frontmatter or type, index entries that disagree with pages, uncited sources, numbers missing from sources, section links to a missing heading, edits to frozen sources |
| Site | python3 scripts/build_site.py build && python3 scripts/build_site.py check |
Pages missing from the build, broken links on the site |
| Diagrams | python3 scripts/check_mermaid_diagrams.py |
Mermaid diagrams that fail to render |
| Tooling | uvx ruff check ., mypy, python -m unittest discover -s scripts/tests -p 'test_*.py' |
Lint, type, and test failures in scripts/ |
| Path | Contents |
|---|---|
raw/ |
Every original: link snapshots (raw/<date>-<slug>.md) and the old articles in raw/AWS/, raw/Bash/, raw/Claude/, raw/Git/, raw/Kubernetes/, raw/Nginx/, raw/Nodejs/, raw/Python/, raw/Ubuntu/, raw/YouTube/, raw/ZooKeeper/, raw/apple/ (frozen) |
wiki/ |
The wiki: index.md, log.md, topics/<domain>/, syntheses/ |
site/ |
Quartz configuration for wiki.kelvin.ink |
scripts/ |
Page capture, wiki checker, index generator, site builder, diagram renderer, and their tests |
youtube-transcript/ |
Transcript capture and validation CLI used by the youtube-transcript skill |
.claude/ |
Skills (wiki, youtube-transcript) and the /ingest command for Claude Code |
These are personal study notes, not official product documentation. Each page lists the sources it draws on and marks the author's own analysis as analysis. Do not contribute credentials, employer or client code, or other confidential material.