# Session handoff — Catacomb > Working notes for continuing this work in another session/agent (e.g. Codex). > Written 2026-06-19. Delete or update freely; this is not a tracked spec. ## TL;DR — where things are - Project: `catacomb` — one Rust binary that is **both** an egui desktop GUI and an axum web server wrapping `yt-dlp`. See [CLAUDE.md](CLAUDE.md) for the authoritative architecture; [ROADMAP.md](ROADMAP.md) for the plan. - Recent work has been almost entirely on the **web UI** (`src/web_ui/index.html`, a single `include_str!`-baked SPA) plus a few `web.rs`/`database.rs` changes. - Branch: `main`. Last commit: `2f95e7f` (unified cinematic video player). - A dev web server is usually running on **:8081** against the user's real library. It keeps getting reaped between turns — just restart it (see below). ## How to build / run / test ```bash cargo build --release # ~1.5 min (opt-level=3 + thin LTO) cargo test --release # 128 unit + 11 integration (tests/api.rs); no network ./target/release/catacomb --web 8081 # headless web server (what the user uses) ./target/release/catacomb # desktop GUI (default) ``` ### CRITICAL gotchas (learned this session) 1. **The web SPA is one big embedded file** — `src/web_ui/index.html`, baked in at compile time via `include_str!`. **Editing it requires a `cargo build`** to take effect. A JS syntax error there will NOT be caught by `cargo build` (the HTML is just a string), so after every edit: ```bash awk '/