| MEDIUM | httpserver/koreader.go | 30 | // ── KOReader server state ───────────────────────────────────────────────────── |
| MEDIUM | httpserver/koreader.go | 91 | // ── KOReader HTTP mux ───────────────────────────────────────────────────────── |
| MEDIUM | httpserver/koreader.go | 132 | // ── Helpers ─────────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/koreader.go | 169 | // ── Handlers ────────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 17 | // ── OPDS configuration ──────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 25 | // ── Atom / OPDS XML types ───────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 95 | // ── Book model from SQLite ──────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 160 | // ── Cover file detection ────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 236 | // ── XML helpers ─────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 256 | // ── OPDS handlers ───────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 493 | // ── Entry builder ───────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/opds.go | 538 | // ── OPDS router ─────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/main.go | 25 | // ── Configuration ──────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/main.go | 96 | // ── Helpers ─────────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/main.go | 201 | // ── Handlers ────────────────────────────────────────────────────────────────── |
| MEDIUM | httpserver/main.go | 448 | // ── Router ──────────────────────────────────────────────────────────────────── |
| MEDIUM | .github/workflows/docker-publish.yml | 30 | # ── Pre-build React app on native runner (eliminates QEMU overhead) ────── |
| MEDIUM | src/pages/stats/component.tsx | 47 | // ── 1. Books read (has a recordLocation) ────────────────────────────── |
| MEDIUM | src/pages/stats/component.tsx | 62 | // ── 2. Total reading time from readingStats ──────────────────────────── |
| MEDIUM | src/pages/stats/component.tsx | 73 | // ── 3. Longest streak (consecutive reading days up to today) ────────── |
| MEDIUM | src/pages/stats/component.tsx | 92 | // ── 4. Daily average ────────────────────────────────────────────────── |
| MEDIUM | src/pages/stats/component.tsx | 99 | // ── 5. Last 30 days data ────────────────────────────────────────────── |
| MEDIUM | src/pages/stats/component.tsx | 111 | // ── 6. Heatmap: last 52 weeks ───────────────────────────────────────── |