-
v4.4.4
StableAll checks were successfulRelease / Test backend (push) Successful in 59sRelease / Test UI (push) Successful in 1m39sRelease / Build and push images (push) Successful in 8m9sRelease / Deploy to homelab (push) Successful in 23sRelease / Gitea Release (push) Successful in 1m37sRelease / Deploy to prod (push) Successful in 2m12sreleased this
2026-04-17 22:53:41 +05:00 | -563 commits to main since this release- Homepage hero: wider cover (w-32→w-36), adjusted info panel height,
hide genre pills on mobile (they wrap and waste vertical space) - Chapter reader: tighten top nav gap mb-8→mb-4 and heading gap
mb-6→mb-4 on mobile so content starts earlier - Library cards: hide genre tags on mobile (hidden sm:flex) — redundant
in a library context and cramped at 2-column density - Book detail: reduce hero bottom margin mb-8→mb-5 on mobile
- Catalogue list view: fix hardcoded hover:border-zinc-500 → brand
color, matching the grid view hover style
Downloads
- Homepage hero: wider cover (w-32→w-36), adjusted info panel height,
-
v4.4.3
StableSome checks failedRelease / Test backend (push) Successful in 56sRelease / Test UI (push) Successful in 1m48sRelease / Build and push images (push) Successful in 8m22sRelease / Deploy to homelab (push) Successful in 22sRelease / Deploy to prod (push) Failing after 1m1sRelease / Gitea Release (push) Successful in 2m3sreleased this
2026-04-17 22:28:02 +05:00 | -562 commits to main since this release- Discover loading skeleton: add borders and book icon placeholder so
card shapes are visible on all dark themes (was invisible on forest) - Library grid cards: match catalogue hover style (brand border, surface
lift, shadow, -translate-y-0.5) and remove hardcoded zinc-500 border - Reading progress bar: increase height 2px→3px and add brand glow shadow
Downloads
- Discover loading skeleton: add borders and book icon placeholder so
-
v4.4.2
StableAll checks were successfulRelease / Test UI (push) Successful in 57sRelease / Test backend (push) Successful in 6m10sRelease / Build and push images (push) Successful in 4m33sRelease / Deploy to homelab (push) Successful in 17sRelease / Gitea Release (push) Successful in 26sRelease / Deploy to prod (push) Successful in 2m35sreleased this
2026-04-17 17:00:42 +05:00 | -561 commits to main since this releaseBook detail: stronger blurred cover bg (opacity 0.35 + saturate), larger
cover (sm:w-56), more dramatic gradient, bigger title (sm:text-4xl).
Homepage hero: atmospheric blurred cover bg matching current carousel book.
Catalogue: cards now lift on hover with brand border + shadow.Downloads
-
v4.3.7
StableAll checks were successfulRelease / Test backend (push) Successful in 1m3sRelease / Test UI (push) Successful in 1m50sRelease / Build and push images (push) Successful in 7m32sRelease / Deploy to homelab (push) Successful in 16sRelease / Gitea Release (push) Successful in 27sRelease / Deploy to prod (push) Successful in 2m21sreleased this
2026-04-17 15:57:54 +05:00 | -559 commits to main since this releaseIssue: Two sequential 'docker compose up' commands caused race condition:
- First command (--no-deps) starts removing containers
- Second command (--remove-orphans) tries to remove same containers
- Result: 'removal of container is already in progress' error
Fix: Combine into single command with both flags:
docker compose up -d --no-deps --remove-orphansThis ensures atomic operation without race conditions.
Downloads
-
v4.4.1
StableSome checks failedRelease / Test backend (push) Successful in 1m3sRelease / Test UI (push) Successful in 58sRelease / Build and push images (push) Successful in 5m55sRelease / Deploy to prod (push) Failing after 48sRelease / Deploy to homelab (push) Successful in 21sRelease / Gitea Release (push) Successful in 29sreleased this
2026-04-17 13:32:48 +05:00 | -557 commits to main since this release- Catalogue/cover: rewrite raw scraped cover URLs to /api/cover/{domain}/{slug}
in handleCatalogue so all covers route through the backend proxy; fix broken
cdn.novelfire.net fallback in handleGetCover to read stored URL from PocketBase - Catalogue/profile: add Svelte 5 onerror handlers on cover
tags to show
letter-initial placeholder when image fails to load - Library page: read ?status URL param to initialise activeShelf tab on load so
/books?status=reading correctly pre-selects the Reading tab - Sessions: filter bot/tool user-agents (curl, python, wget, etc.) and debug-IP
sessions from listUserSessions display; also purge them in pruneStaleUserSessions - Profile: show email under username, quick stats chips (streak/chapters/completed)
in header, reading count on Library row, dedicated Sign out row, history covers
routed through /api/cover proxy
Downloads
- Catalogue/cover: rewrite raw scraped cover URLs to /api/cover/{domain}/{slug}
-
v4.3.6
StableSome checks failedRelease / Test backend (push) Successful in 1m7sRelease / Test UI (push) Successful in 1m29sRelease / Build and push images (push) Successful in 4m30sRelease / Deploy to prod (push) Failing after 19sRelease / Deploy to homelab (push) Successful in 13sRelease / Gitea Release (push) Successful in 27sreleased this
2026-04-16 21:51:58 +05:00 | -556 commits to main since this releasePreviously: 'docker compose up -d' recreated all services with changed images,
causing dependent services (pocketbase, minio, redis, etc.) to restart and
wait for healthchecks, leading to longer downtime.Now: Use '--no-deps' flag to restart ONLY the services with updated images
(backend, runner, ui, caddy, pocketbase) without touching their dependencies.Benefits:
- Faster deployments (~15-20s vs ~60s)
- No unnecessary restarts of infrastructure services
- Reduced downtime for the application
The final 'docker compose up -d --remove-orphans' ensures any orphaned
containers are cleaned up and all services are in the desired state.Downloads
-
v4.3.5
StableAll checks were successfulRelease / Test backend (push) Successful in 1m2sRelease / Test UI (push) Successful in 58sRelease / Build and push images (push) Successful in 4m34sRelease / Deploy to prod (push) Successful in 2m24sRelease / Deploy to homelab (push) Successful in 15sRelease / Gitea Release (push) Successful in 20sreleased this
2026-04-16 21:35:19 +05:00 | -555 commits to main since this release- 'Check ui' → 'Test UI' (consistent with 'Test backend')
- 'Docker' → 'Build and push images' (more descriptive of what it does)
Job IDs remain unchanged (test-backend, check-ui, docker) for stability.
Downloads
-
v4.3.3
StableSome checks failedRelease / Test backend (push) Successful in 1m1sRelease / Check ui (push) Successful in 1m2sRelease / Docker (push) Successful in 9m22sRelease / Deploy to prod (push) Successful in 2m32sRelease / Gitea Release (push) Successful in 1m37sRelease / Deploy to homelab (push) Failing after 5sreleased this
2026-04-16 20:22:40 +05:00 | -551 commits to main since this releaseCRITICAL FIX: The homelab server runs the full stack (runner + GlitchTip +
observability tools), not just the runner. Copying homelab/runner/docker-compose.yml
would have destroyed all other services.Changed: homelab/runner/docker-compose.yml → homelab/docker-compose.yml
Downloads
-
v4.4.0
StableSome checks failedRelease / Test backend (push) Successful in 1m1sRelease / Check ui (push) Successful in 1m0sRelease / Docker (push) Successful in 11m19sRelease / Deploy to prod (push) Successful in 2m10sRelease / Deploy to homelab (push) Failing after 7sRelease / Gitea Release (push) Successful in 2m25sreleased this
2026-04-16 20:20:16 +05:00 | -550 commits to main since this releaseContent visibility:
- Add
visibilityfield to books ("public" | "admin_only"); new migration
backfills all existing scraped books to admin_only - Meilisearch: add visibility as filterable attribute; catalogue/search
endpoints filter to public-only for non-admin requests - Admin users identified by bearer token bypass the filter and see all books
- All PocketBase discovery queries (trending, recommended, recently-updated,
audio shelf, discover, subscription feed) now filter to visibility=public - New scraped books default to admin_only; WriteMetadata preserves existing
visibility on PATCH (never overwrites)
Author submission:
- POST /api/admin/books/submit — creates a public book with submitted_by
- PATCH /api/admin/books/{slug}/publish / unpublish — toggle visibility
- SvelteKit proxies: /api/admin/books/[slug]/publish|unpublish
- /api/books/[slug] endpoint for admin book lookup
Frontend:
- backendFetchAdmin() helper sends admin token on any path
- Catalogue server load uses admin fetch when user is admin
- /submit page: author submission form with genre picker and rights assertion
- "Publish" nav link shown to all logged-in users
- Admin catalogue-tools: visibility management panel (load book by slug, toggle)
Downloads
- Add
-
v4.3.2
StableSome checks failedRelease / Test backend (push) Successful in 1m2sRelease / Check ui (push) Successful in 1m0sRelease / Docker (push) Successful in 4m39sRelease / Deploy to prod (push) Successful in 2m18sRelease / Deploy to homelab (push) Failing after 4sRelease / Gitea Release (push) Successful in 29sreleased this
2026-04-16 19:17:13 +05:00 | -549 commits to main since this releaseDownloads