# Progress Running record of what has actually landed. Newest entry first. The full design and step list live in the plan file at `/config/.claude/plans/i-want-to-create-playful-quiche.md`. ## Build order - [x] **1. Repo skeleton** — git init (`main`), `cargo init --name ipx`, deps pinned, LICENSE, README, this file. - [x] **2. `config.rs` + `db.rs`** — TOML config structs + SQLite schema. - [x] **3. `feed.rs`** — conditional GET, RSS-then-Atom parse, persist entries. - [x] **4. `download.rs`** — downloads, filters, dedupe. - [x] **5. `retention.rs`** — oldest-first quota + age reaper. - [x] **6. `ipc.rs` + daemon** — UDS JSON-lines server, TTL scheduler, CLI-proxies-to-daemon. - [x] **7. `torrent.rs`** — librqbit, seed to ratio/time, stall abort. (swarm download unverified — see the step 7 entry) - [x] **8. OPML + polish** — import/export, add/rm/status, tracing setup, systemd units, README. ### Phase 2 — web front end Decided with Ray: axum serving plain HTML/JS (no WASM toolchain), running **inside the daemon** process so it reads SQLite and the event bus directly, LAN-bindable with a shared token. - [x] **9. Config hot-reload + web skeleton.** `Ctx.cfg` becomes `RwLock>` so the UI can edit feeds without a daemon restart. `[web]` config section (enabled/bind/token, token auto-generated and saved on first run). axum server started by `ipx daemon`, token checked by middleware, `?token=` sets a cookie so `