• v2.2.9 69818089a6

    perf(ui): eliminate full listBooks() scan on every page load
    Some checks failed
    Release / Test backend (push) Failing after 10s
    Release / Docker / backend (push) Has been skipped
    Release / Docker / runner (push) Has been skipped
    Release / Docker / caddy (push) Failing after 10s
    Release / Check ui (push) Successful in 32s
    CI / Test backend (pull_request) Successful in 39s
    CI / Check ui (pull_request) Successful in 48s
    Release / Upload source maps (push) Successful in 2m17s
    CI / Docker / caddy (pull_request) Successful in 2m44s
    Release / Docker / ui (push) Successful in 2m31s
    Release / Gitea Release (push) Has been skipped
    CI / Docker / runner (pull_request) Successful in 1m38s
    CI / Docker / ui (pull_request) Successful in 1m28s
    CI / Docker / backend (pull_request) Successful in 2m11s

    kamil released this 2026-03-26 16:14:47 +05:00 | -253 commits to main since this release

    The home, library, and /books routes were fetching all 15k books from
    PocketBase on every SSR request (31 sequential HTTP calls per request).

    Changes:

    • Add src/lib/server/cache.ts: generic Valkey JSON cache
    • Add getBooksBySlugs(): single PB query fetching only requested slugs,
      with fallback to the 5-min Valkey cache populated by listBooks()
    • listBooks(): now caches results in Valkey for 5 min (safety net for
      admin routes that still need the full list)
    • Home + /api/home: replaced listBooks()+filter with getBooksBySlugs()
      on progress slugs only — typically 1 PB request instead of 31
    • /books + /api/library: same pattern using progress+saved slug union
    Downloads