This is a private monorepo with three systems:
- Blog (
posts/,static/,templates/,build.el,build.sh) — Org-mode static site generator →public/→ GitHub Pages - Knowledge Base (
kb/) — LLM-powered personal wiki compiled from raw sources
Note: GTD lives separately at ~/org/gtd/ and is not part of this repo.
posts/— Org source files for blog posts and pages. Date-first naming:YYYY-MM-DD-slug.orgstatic/— Site assets (css/, js/, favicon.svg, robots.txt) copied topublic/static/templates/post-template.org— Starter template for new postspublic/— Generated output. Do not edit manually.kb/raw/— Immutable source material (articles, podcasts, tweets, chats). Never modify after ingestion.kb/wiki/— LLM-maintained wiki. Containsindex.org(master catalog) andlog.org(operation timeline).kb/skills/— Skill files defining Claude's behavior for each KB operation.kb/artifacts/— Query outputs, blog drafts, reports.CLAUDE.md— Project-level instructions for Claude Code, including KB command mapping.
npm ci: install Node-based toolingmake buildornpm run build: generate HTML intopublic/make build-prodornpm run build:prod: build plus asset minificationmake serveornpm run serve: servepublic/locally athttp://localhost:8000make dev: watchposts/andstatic/and rebuild on changenpm run format: format JS/CSS/JSON/Markdown/YAMLnpm run format:check: CI-style formatting check
- Prettier config (
.prettierrc): 2-space indentation, single quotes, semicolons, 100-column width, LF endings - Shell scripts:
bash+set -euo pipefail, ShellCheck-clean - Blog posts: must include
#+TITLE,#+AUTHOR,#+DATE; use#+DRAFT: truefor unpublished - Wiki pages: must include
#+title:,#+filetags:,#+date:; use above/below-the-line structure (seekb/skills/absorb.md) - Filenames: kebab-case, date-prefixed for blog posts
When working with the KB, read the corresponding skill file before executing:
| Command | Skill File | Description |
|---|---|---|
| ingest | kb/skills/ingest.md |
Import source material into kb/raw/ |
| absorb | kb/skills/absorb.md |
Compile raw sources into wiki entries |
| query | kb/skills/query.md |
Answer questions from the wiki |
| lint | kb/skills/lint.md |
Health check the knowledge base |
| breakdown | kb/skills/breakdown.md |
Find missing articles |
| reorganize | kb/skills/reorganize.md |
Restructure wiki categories |
| rebuild-index | kb/skills/rebuild-index.md |
Regenerate index.org |
Rules:
- Never modify files in
kb/raw/. Raw sources are immutable. - Always update
kb/wiki/index.orgafter creating or changing wiki pages. - Always append to
kb/wiki/log.orgafter any operation.
- No unit-test suite; quality gates are lint/build checks
- Run before push:
./build.sh,shellcheck *.sh,npm run format:check - CI validates Org metadata and checks generated HTML internal links
- Short, imperative commit subjects (e.g.,
fix lint,add kb skills,update config) - Separate content changes from tooling refactors
- Do not commit secrets; use
.blogrc/environment variables
- Start from
.blogrc.example; keep personal values in.blogrc/env vars - Do not commit
.blogrcwith real credentials