XingfenD
|
0ea918fae6
|
feat(deploy): release compose under deploy/ with shared named volumes and rendered config mounts; drop root compose
|
2026-09-07 20:55:57 +08:00 |
|
XingfenD
|
67dc4bc2bf
|
feat(deploy): dev/prod Dockerfiles in service dirs (backend/,web/), templates live beside rendered outputs, entrypoint copies /etc/booklib conf before resolver injection
|
2026-09-07 20:53:41 +08:00 |
|
XingfenD
|
a78442da54
|
feat(deploy): prepare.sh + config templates, migrate env to deploy/, gitignore rendered outputs
|
2026-09-07 20:18:12 +08:00 |
|
XingfenD
|
505f660dbd
|
fix: self-heal missing library root on access; accept .zip in admin upload picker
|
2026-09-07 20:16:26 +08:00 |
|
XingfenD
|
6b3a4e5240
|
docs(plan): docker deploy conformance implementation plan (5 tasks); spec: smoke storage path item
|
2026-09-07 19:42:39 +08:00 |
|
XingfenD
|
e563c88913
|
docs(spec): docker deployment conformance redesign (dev/release compose, prepare.sh, shared volumes, storage path)
|
2026-09-07 19:36:34 +08:00 |
|
XingfenD
|
22ae1717f4
|
docs: tick completed plan checkboxes, mark spec as implemented
|
2026-09-07 17:27:24 +08:00 |
|
XingfenD
|
73af5c1d78
|
merge: booklib frontend Plan 2 (shelf, four readers, admin, PWA, dockerized SPA, web smoke green)
|
2026-09-07 17:24:16 +08:00 |
|
XingfenD
|
1adb596981
|
docs(plan): execution-time amendments log for plan2-frontend
|
2026-09-07 17:22:04 +08:00 |
|
XingfenD
|
cc66a648b0
|
fix(web): logout-path parity, CSP header, epub display fallback + small review nits
|
2026-09-07 17:17:33 +08:00 |
|
XingfenD
|
67c95e7bdc
|
fix(deploy): runtime DNS re-resolution via resolv.conf-injected resolver, both runtimes
|
2026-09-07 16:48:58 +08:00 |
|
XingfenD
|
96e96fec51
|
feat(web): pwa offline caching, dockerized SPA, full-stack nginx smoke
|
2026-09-07 16:33:50 +08:00 |
|
XingfenD
|
1bd7688ee6
|
feat(web): admin users CRUD + libraries create/scan/upload
|
2026-09-07 16:18:58 +08:00 |
|
XingfenD
|
4f4eff871c
|
feat(web): epub reader via epubjs arraybuffer bootstrap with cfi progress
|
2026-09-07 16:15:10 +08:00 |
|
XingfenD
|
de3015e537
|
feat(web): pdf reader with dpr-aware canvas rendering and keyboard paging
|
2026-09-07 16:08:49 +08:00 |
|
XingfenD
|
b2e40a5049
|
feat(web): txt/md reader with dompurified markdown and scroll-fraction progress
|
2026-09-07 16:04:37 +08:00 |
|
XingfenD
|
e08f1dd5b9
|
docs(plan): PageHeights.range end-exclusive matches its tests
|
2026-09-07 16:02:53 +08:00 |
|
XingfenD
|
654e4febf1
|
feat(web): cbz reader — virtual scroll with height correction, prefetch, progress restore
|
2026-09-07 15:58:01 +08:00 |
|
XingfenD
|
052b94bb6a
|
docs(plan): lazy import lands with first reader wiring (noUnusedLocals)
|
2026-09-07 15:49:44 +08:00 |
|
XingfenD
|
97f6d2d3b6
|
feat(web): throttled progress saver with keepalive flush, reader dispatch shell
|
2026-09-07 15:47:11 +08:00 |
|
XingfenD
|
36a2014a8b
|
docs(plan): shelf scan button carries isAdmin guard (constraint governs)
|
2026-09-07 15:44:25 +08:00 |
|
XingfenD
|
bc81b03d6a
|
fix(web): hide scan trigger from members per admin-only write rule
|
2026-09-07 15:44:08 +08:00 |
|
XingfenD
|
cf512b7d5a
|
feat(web): shelf with library tabs, search, dir groups, covers, continue-reading, admin delete/scan
|
2026-09-07 15:40:03 +08:00 |
|
XingfenD
|
63b41f333e
|
feat(web): authed blob image pipeline with LRU, cover card, dir grouping
|
2026-09-07 15:36:19 +08:00 |
|
XingfenD
|
b231b62720
|
fix(web): login honors from-path redirect; me-error clears stored token
|
2026-09-07 15:32:13 +08:00 |
|
XingfenD
|
c34289ebbe
|
feat(web): auth context, login page, route guards, toast/error shell
|
2026-09-07 15:27:11 +08:00 |
|
XingfenD
|
2f0fc25c7c
|
feat(web): typed api client with bearer token, 401 logout, binary channels
|
2026-09-07 15:23:18 +08:00 |
|
XingfenD
|
0cc040d750
|
feat(web): vite+react+ts+tailwind4 scaffold, vitest, /api dev proxy
|
2026-09-07 15:19:02 +08:00 |
|
XingfenD
|
b730b7acb4
|
docs(plan): frontend Plan 2 — shelf, four readers, admin, PWA, dockerized SPA
|
2026-09-07 15:14:58 +08:00 |
|
XingfenD
|
b09bcf5772
|
merge: booklib backend Plan 1 (scaffold→scanner→API→deploy, e2e smoke green)
|
2026-09-07 13:05:52 +08:00 |
|
XingfenD
|
e0783e5e6a
|
chore: smoke tmpdir hygiene, seed pw floor, README
|
2026-09-07 12:44:47 +08:00 |
|
XingfenD
|
93638ed647
|
fix(api): classify DB errors in library paths
|
2026-09-07 12:44:47 +08:00 |
|
XingfenD
|
12f6e82308
|
fix(api): lazy cover self-heal + tmp-file skip
|
2026-09-07 12:44:47 +08:00 |
|
XingfenD
|
4b40dd669b
|
fix(redis): lock acquisition fails open per spec §9
|
2026-09-07 12:44:47 +08:00 |
|
XingfenD
|
6adbab44c3
|
fix(security): trusted-proxy-scoped login rate limit
|
2026-09-07 12:44:47 +08:00 |
|
XingfenD
|
f7c27272ba
|
fix(deploy): app-owned cache/books dirs in image + .dockerignore
|
2026-09-07 12:18:49 +08:00 |
|
XingfenD
|
94b215c2b3
|
feat(deploy): compose w/ nginx api-prefix ingress, scaled stateless api, e2e smoke
|
2026-09-06 19:59:27 +08:00 |
|
XingfenD
|
a11bf28155
|
fix(backend): dbErr 503 degradation for connection-class DB errors
|
2026-09-06 19:53:19 +08:00 |
|
XingfenD
|
04095b5438
|
feat(backend): main wiring, graceful shutdown, local smoke green
|
2026-09-06 19:52:42 +08:00 |
|
XingfenD
|
8f18072843
|
feat(backend): reading progress upsert + listing, path-keyed survival
|
2026-09-05 20:59:11 +08:00 |
|
XingfenD
|
8206c7a4ed
|
fix(backend): single error body on pages paths, reject newline entry names, empty-index cache skip
|
2026-09-05 20:56:05 +08:00 |
|
XingfenD
|
0946f6be5a
|
feat(backend): cover/file/pages endpoints — immutable URLs, Range, disk+redis caches
|
2026-09-05 00:48:40 +08:00 |
|
XingfenD
|
249619b857
|
feat(backend): book list/detail/delete with embedded progress + cache cleanup
|
2026-09-05 00:42:08 +08:00 |
|
XingfenD
|
193d7612b5
|
feat(backend): directory scanner — diff, error state, covers, cache sweep, redis lock
|
2026-09-05 00:31:32 +08:00 |
|
XingfenD
|
4e84a8aeb7
|
feat(backend): immutable cache dir scheme + stale sweep
|
2026-09-05 00:23:57 +08:00 |
|
XingfenD
|
b02ca67d16
|
feat(backend): cover extraction for cbz and epub (opf cover-image/meta)
|
2026-09-05 00:23:02 +08:00 |
|
XingfenD
|
589cb210bb
|
feat(backend): zip page index with natural sort, zip-slip rejection, content hash
|
2026-09-05 00:22:13 +08:00 |
|
XingfenD
|
ed4ee2458f
|
feat(backend): user + library admin API, atomic sanitized upload
|
2026-09-05 00:16:33 +08:00 |
|
XingfenD
|
51735680e0
|
test(backend): setupAPI points BooksDir at os.TempDir and resets shared loginrl key
|
2026-09-05 00:16:33 +08:00 |
|
XingfenD
|
18e31396f3
|
fix(backend): login timing-guard uses a valid bcrypt hash so the compare actually runs
|
2026-09-04 23:59:39 +08:00 |
|