# CLAUDE.md — Instructions for the Claude AI assistant ## Project Static personal website. Source in org files, built with Nix + Emacs org-publish. See README.org for full project structure and maintenance guide. ## Key files | File | Purpose | |---------------|----------------------------------------------| | `flake.nix` | Nix flake — build derivation, run apps | | `build.el` | org-publish config (pages + static assets) | | `content/` | Org source files → HTML pages | | `static/` | Static assets (CSS, images, fonts) | ## Conventions - **New pages**: add `content/.org`, add nav link to `site-nav` in `build.el` - **Sub-projects**: follow the three-step pattern in README.org (input → let binding → installPhase copy) - **CSS**: edit `static/style.css`; use existing custom properties (`--bg`, `--fg`, etc.) before adding new ones - **No JS** unless explicitly requested - **No new files** unless clearly necessary — prefer editing existing ones ## Build ```sh nix build # produces result/ symlink with the full static site nix run # build + serve at http://localhost:8080 ``` The build runs `emacs --batch --load ./build.el` inside a Nix sandbox. `org-publish-use-timestamps-flag` is `nil` so every build is a full rebuild. ## Architecture notes - Multi-arch: `x86_64-linux` and `aarch64-linux` (CI runs on Raspberry Pi) - `emacs-nox` is used (headless, no display required) - Source is filtered with `pkgs.lib.cleanSource` — avoid relying on files that would be excluded (e.g. `.git`) - `public/` is gitignored; never commit it ## Updating README.org Keep README.org up to date as the project evolves. It is the canonical human-readable documentation.