Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
375 commits
Select commit Hold shift + click to select a range
6c1ff62
feat(hardcover): add API client and data models
jabloink Mar 17, 2026
b0c3ae5
feat(readarr): add API client, scanner, and download tracker
jabloink Mar 17, 2026
c9d2862
feat(entities): add book support to database entities
jabloink Mar 17, 2026
910b560
feat(api): add book, author, and series routes
jabloink Mar 17, 2026
3f23a0d
feat(notifications): add book support to notification agents
jabloink Mar 17, 2026
f96d503
feat(ui): add book assets, hooks, and i18n
jabloink Mar 17, 2026
bfc8700
feat(ui): add book, author, and series pages
jabloink Mar 17, 2026
8015620
feat(ui): add book support to existing components
jabloink Mar 17, 2026
3fce72c
feat(hardcover): add api key setup screen
jabloink Mar 17, 2026
4e7237a
chore(ci): update preview workflow to match upstream
jabloink Mar 17, 2026
eacd836
docs: update book support instructions
jabloink Mar 17, 2026
09ad610
fix(settings): strip Bearer prefix from hardcover api key
jabloink Mar 17, 2026
f990dfb
fix(readarr): use Id instead of Slug for externalUrl
jabloink Mar 19, 2026
6cb5c9f
fix(ui): add book guard in slideover
jabloink Mar 19, 2026
ed502c6
fix(ui): check book before movie
jabloink Mar 24, 2026
a9523ba
fix(ui): use audiobook for book 4k
jabloink Mar 24, 2026
34a85b5
fix(ui): fix image urls after refactor
jabloink Apr 15, 2026
83499ad
fix(ui): update book badge color on error card
jabloink May 13, 2026
b16c5d9
fix(ui): tag audiobook downloads with book
jabloink May 13, 2026
5745ff3
feat(books): add book support migration with fork upgrade
jabloink May 13, 2026
64ab5af
fix(api): include book in blocklist and watchlist
jabloink May 13, 2026
b6e74ec
chore(ci): replace release workflow
jabloink Jul 15, 2026
1d6770e
feat(books): replace book migration
jabloink Jul 16, 2026
df0bbe8
docs: update pr status
jabloink Jul 17, 2026
f481b56
fix(subscriber): await request status updates (#3223)
fallenbagel Jul 21, 2026
46d8033
fix(availability-sync): prevent false removals for merged-version Ple…
fallenbagel Jul 21, 2026
bf5323f
docs(blog): rootless design and PUID/PGID rationale (#3105)
fallenbagel Jul 21, 2026
0adbf50
fix: support for IPv6 address literals in HOST env var (#2614)
kouellette Jul 22, 2026
3279393
fix(next): add next-env.d.ts to .gitignore (#3282)
gauthier-th Jul 22, 2026
8ccd0f6
fix(discover): use added sort in recent requests slider (#3202)
fallenbagel Jul 22, 2026
e810b98
fix(ui): revalidate request list after approving or declining a reque…
aaamoeder Jul 23, 2026
669a58a
fix(airdatebadge): anchor day diff to UTC midnight instead of raw ms …
fallenbagel Jul 23, 2026
4b65ab5
chore(i18n): update translations from Weblate
weblate Jul 24, 2026
f484791
Merge commit from fork
gauthier-th Jul 27, 2026
73937c0
feat: allow to disable version check (#3137)
M0NsTeRRR Jul 27, 2026
b21049a
chore(release): prepare 3.4.0 release
fallenbagel Jul 28, 2026
2dbe886
chore(release): prepare v3.4.0
fallenbagel Jul 28, 2026
f78916b
chore(helm): bump seerr to 3.4.0 (#3299)
M0NsTeRRR Jul 28, 2026
40017e4
chore(helm): add dnsConfig and dnsPolicy (#3254)
M0NsTeRRR Jul 28, 2026
45f7a7a
ci: parallelize the action steps when possible (#3225)
M0NsTeRRR Jul 28, 2026
95e18de
ci: fix docker login race condition (#3303)
M0NsTeRRR Jul 29, 2026
8ea0c17
fix: handle already-removed media in radarr/sonarr delete (#3209)
fallenbagel Jul 29, 2026
3ee6f92
fix: don't delete requests when removing media from arr (#3288)
fallenbagel Jul 29, 2026
f926248
fix(ui): keep user list action buttons sized with a single user (#3311)
0xSysR3ll Jul 30, 2026
5c8f1cb
chore(release): prepare v3.4.1 release
gauthier-th Jul 30, 2026
69f73a6
chore(release): prepare v3.4.1
gauthier-th Jul 30, 2026
bd491c7
chore: exclude .pnpm-store from Docker build context (#3313)
samtheruby Jul 30, 2026
1fd35f9
fix(request): render anime notice alert in a div instead of a p (#3331)
fallenbagel Aug 1, 2026
93c0b6a
fix(sonarr): decouple anime root folder routing from seriesType (#3328)
fallenbagel Aug 1, 2026
42bee2a
fix(sonarr): apply configured series type to non-anime requests (#3329)
fallenbagel Aug 1, 2026
7baed83
feat: add support for custom plex metadata provider guid scheme in sc…
lichie567 Aug 2, 2026
090c659
ci: fix release workflow verify attestation (#3337)
M0NsTeRRR Aug 3, 2026
c8c8f7a
chore(helm): bump seerr to 3.4.1 (#3352)
peruzzof Aug 8, 2026
dea5960
docs: clarify ai disclosure policy further (#3358)
fallenbagel Aug 9, 2026
afb17aa
feat(notifications): add embed poster option for Gotify (#3332)
tuvokian Aug 11, 2026
bd971f8
build(docker): update node.js to v22.23.2 (#3077)
renovate[bot] Aug 11, 2026
d3c070e
fix: changes the suggested url from plex's "hosted" app (#3250)
ofgrenudo Aug 11, 2026
d103787
fix(login): hide quick connect button for emby servers (#3369)
fallenbagel Aug 11, 2026
39ff48c
test(cypress): stop dirty restartRequired flag cascading across specs…
fallenbagel Aug 11, 2026
039a5c4
feat: add Readarr recently-added scan and fix file detection for unmo…
breakthestatic Aug 14, 2026
985ddef
fix(api): stop library reads from resetting enabled flags (#3321)
fallenbagel Aug 16, 2026
c9f2ac5
fix: keep library settings when renamed on media server (#3323)
fallenbagel Aug 16, 2026
4d17e08
fix: stop masking connection failures across media server sync and lo…
fallenbagel Aug 16, 2026
059008c
fix(subscriber): keep request status updates on the owning save's con…
fallenbagel Aug 18, 2026
7fae95b
fix(override-rules): match default *arr server by id (#3428)
aussierk Aug 25, 2026
92f8404
fix(ui): don't mark empty collections as available (#3431)
0xSysR3ll Aug 25, 2026
aae8816
feat(users): add search box for user lookup by username or email (#2482)
Arul1998 Aug 27, 2026
59ad5f1
perf: bound tmdb cache & split scan lookups into their own tier (#3367)
fallenbagel Aug 27, 2026
92bad10
feat(notifications): add support for ntfy.sh tags (#3350)
bartdelange Aug 27, 2026
a123d20
feat(api): send a Seerr user agent on outbound requests (#3395)
MannXo Aug 27, 2026
5af32cb
fix(settings): mutate the query-string status key for modal immediate…
fallenbagel Aug 27, 2026
0be53e6
fix: prevent hideAvailable/hideBlocklisted from filtering person resu…
britsync07-prog Aug 28, 2026
2759058
fix(discover): fix tv title sorting and validate sortBy per media typ…
fallenbagel Aug 28, 2026
0f79ee6
fix(datasource): register entities and subscribers explicitly (#3375)
fallenbagel Aug 31, 2026
cc592e8
chore(i18n): update translations from Weblate
weblate Aug 29, 2026
da4b555
fix(ui): stop appear leaking onto the DOM in Modal and SlideOver (#3446)
fallenbagel Aug 31, 2026
d7b08bd
fix(datasource): break import cycle mistyping postgres timestamps (#3…
fallenbagel Aug 31, 2026
1cc2f11
chore(deps): upgrade @headlessui/react to 2.2.10 (#3450)
fallenbagel Aug 31, 2026
df743f4
fix(ui): stop the slideover backdrop flashing back on close (#3451)
fallenbagel Aug 31, 2026
aa8e0de
refactor(ui): use headlessui flat named exports (#3453)
fallenbagel Aug 31, 2026
46d5915
refactor(ui): use the Radio component instead of RadioGroup.Option (#…
fallenbagel Aug 31, 2026
7997f75
fix(tv): prevent phantom specials from blocking season request (#3351)
fallenbagel Aug 31, 2026
5f4cb1e
fix(db): drop stale auth unique on sqlite push subscriptions (#3391)
fallenbagel Aug 31, 2026
9f6403e
fix(requests): enforce pending and failed states on request routes (#…
fallenbagel Aug 31, 2026
5a5f059
ci(actions): update github actions (#3306)
renovate[bot] Aug 31, 2026
5c04640
chore(i18n): update translations from Weblate
weblate Aug 31, 2026
b7d3265
feat(ui): show audiobook status badge on book title cards
benjitobz Sep 1, 2026
39d2161
fix(ui): gate book title-card request button on book permission
benjitobz Aug 31, 2026
8283eaf
fix(hardcover): throttle client to 60 req/min to avoid 429 rate limiting
benjitobz Aug 31, 2026
e1e3c0c
Merge remote-tracking branch 'upstream/main' into sync/upstream-main
benjitobz Sep 1, 2026
af589f5
Merge remote-tracking branch 'breakthestatic/feat-readarr' into develop
benjitobz Sep 1, 2026
8880d6e
Merge branch 'fix/hardcover-rate-limit' into develop
benjitobz Sep 1, 2026
9ebc196
Merge branch 'fix/book-titlecard-request-permission' into develop
benjitobz Sep 1, 2026
37da3ea
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 1, 2026
ccba40f
feat(ui): add book icon to ebook status badge on book title cards
benjitobz Sep 2, 2026
992fa6b
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
72c96c5
feat(ui): merge format icon into status chip on book title cards
benjitobz Sep 2, 2026
bda04d1
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
8a01fb3
feat(ui): white background with status-colored outline and icons on b…
benjitobz Sep 2, 2026
79e598c
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
9972377
fix(ui): match book chip check style and outline weight to standard b…
benjitobz Sep 2, 2026
c9a6d4b
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
70a3435
fix(ui): book chips reuse the standard badge fill and icons, oval onl…
benjitobz Sep 2, 2026
7b97f83
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
07ecc97
fix(ui): status icon sits flush in book chip like the round badge
benjitobz Sep 2, 2026
48ec114
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
063184b
fix(ui): label book quota selector as Book Request Limit
benjitobz Sep 2, 2026
4361b01
Merge branch 'fix/book-quota-label' into develop
benjitobz Sep 2, 2026
e73825b
fix: fix empty discordId in comment webhooks (#3467)
fallenbagel Sep 2, 2026
970bb54
fix(requests): reset orphaned season statuses when a request is delet…
Knat-Dev Sep 2, 2026
28a9a18
fix(api): include 4k/audiobook availability in media list status filters
benjitobz Sep 2, 2026
10b59d8
feat(ui): pass audiobook status to book title cards in media sliders
benjitobz Sep 2, 2026
5d0d583
Merge branch 'fix/media-list-4k-availability' into develop
benjitobz Sep 2, 2026
2bea0e9
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
a430390
feat(ui): distinguish missing, requested, and partial format states o…
benjitobz Sep 2, 2026
f08f75f
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
75408d2
feat(ui): format-specific status badges and partial availability on b…
benjitobz Sep 2, 2026
7ac41b1
Merge branch 'feature/audiobook-tile-status' into develop
benjitobz Sep 2, 2026
3a7a7d6
feat(discover): browse books by genre with sliders and genre pages
benjitobz Sep 2, 2026
6c0d8a4
Merge branch 'feature/book-genre-discovery' into develop
benjitobz Sep 2, 2026
816c2f5
feat(api): add books genre discovery endpoint to api spec
benjitobz Sep 2, 2026
12e3a7a
Merge branch 'feature/book-genre-discovery' into develop
benjitobz Sep 2, 2026
eaa3eec
fix(ui): keep loading state during transient fetch errors on book car…
benjitobz Sep 2, 2026
ab49fe3
Merge branch 'fix/transient-error-grace' into develop
benjitobz Sep 2, 2026
2dff36d
fix(ui): loading grace for request cards and persistent slider skeletons
benjitobz Sep 2, 2026
f8f928b
Merge branch 'fix/transient-error-grace' into develop
benjitobz Sep 2, 2026
6abf27c
Revert "Merge branch 'feature/book-genre-discovery' into develop"
benjitobz Sep 2, 2026
c93336f
Revert "Merge branch 'feature/book-genre-discovery' into develop"
benjitobz Sep 2, 2026
08c0c30
feat(discover): add sort and filters to book discovery
benjitobz Sep 2, 2026
818ad13
Merge branch 'feature/book-discover-filters' into develop
benjitobz Sep 2, 2026
9284861
fix(hardcover): inline filter expressions, api rejects bool_exp varia…
benjitobz Sep 2, 2026
574ed15
Merge branch 'feature/book-discover-filters' into develop
benjitobz Sep 2, 2026
87e6be6
fix(hardcover): clamp far-future junk dates when sorting by release date
benjitobz Sep 2, 2026
b92beb3
Merge branch 'feature/book-discover-filters' into develop
benjitobz Sep 2, 2026
25c109c
fix(ui): extend transient error grace period to 20 seconds
benjitobz Sep 2, 2026
219848c
Merge branch 'fix/transient-error-grace' into develop
benjitobz Sep 2, 2026
e617d3c
fix(readarr): only log invalid hardcover ids for relevant books
benjitobz Sep 3, 2026
ee83dcc
Merge branch 'fix/scanner-invalid-hcid-noise' into develop
benjitobz Sep 3, 2026
17fc4cc
fix(requests): stop editing a request from stealing another's season …
fallenbagel Sep 3, 2026
d7dc7bd
fix(requests): serialize request creation per user (#3377)
fallenbagel Sep 3, 2026
a4f5eaa
docs(docker): add cap-drop and security-opt to docker command (#3472)
M0NsTeRRR Sep 4, 2026
b034797
fix(readarr): reset available books that no longer exist in readarr
benjitobz Sep 4, 2026
8056f47
fix(readarr): detect removed books during recently-added scans
benjitobz Sep 4, 2026
1aa5c28
Merge branch 'fix/book-status-cleanup' into develop
benjitobz Sep 4, 2026
de91615
Merge branch 'fix/book-deletion-fast-detect' into develop
benjitobz Sep 4, 2026
af76c14
fix(scanner): downgrade book status when readarr reports files are gone
benjitobz Sep 4, 2026
757a450
Merge branch 'fix/book-status-downgrade' into develop
benjitobz Sep 4, 2026
c604bcc
fix(requests): scope download status to requested seasons on request …
0xSysR3ll Sep 5, 2026
6bf3d04
ci(actions): update github actions (major) (#3471)
renovate[bot] Sep 5, 2026
979978f
chore(deps): update database (#3458)
renovate[bot] Sep 5, 2026
a3dbbd9
ci(actions): update github actions (#3478)
renovate[bot] Sep 5, 2026
5f97227
chore(i18n): update translations from Weblate
weblate Sep 7, 2026
6f5a177
feat(settings): hide already requested media (#1855)
0xSysR3ll Sep 7, 2026
ba412ec
fix(ui): drop unused error binding from media slider
benjitobz Sep 9, 2026
9b86366
Merge branch 'fix/transient-error-grace' into develop
benjitobz Sep 9, 2026
5c83418
style: apply prettier formatting to upstream merge resolutions
benjitobz Sep 9, 2026
298d726
chore(i18n): extract message keys
benjitobz Sep 9, 2026
8659c9a
fix(ui): name books and audiobooks in permission labels
benjitobz Sep 9, 2026
9573220
Merge branch 'fix/book-permission-labels' into develop
benjitobz Sep 9, 2026
6092bed
chore(i18n): extract permission label updates
benjitobz Sep 9, 2026
68c5bc8
chore(i18n): update translations from Weblate
weblate Sep 9, 2026
1dbf19b
fix(requests): skip seasons with no episodes when requesting all seas…
Xyerophyte Sep 11, 2026
4fc265b
docs(helm): fix documentation regarding chart signature verification …
M0NsTeRRR Sep 11, 2026
8ba2380
feat(books): sync ebook and audiobook requests
benjitobz Sep 11, 2026
b17ce80
chore(i18n): extract book request format sync messages
benjitobz Sep 11, 2026
de57e7a
fix(jellyfin-api): update Authorization headers for Jellyfin (#3502)
aussierk Sep 12, 2026
7a76142
test: add scanner update rate override for testing (#3241)
michaelhthomas Sep 12, 2026
a53f49b
fix(server): respond instead of hanging on proxy route errors (#3501)
aussierk Sep 13, 2026
abe2f3b
test: block outbound HTTP in unit tests (#3511)
fallenbagel Sep 14, 2026
d4eeea8
fix(auth): refresh avatar on Quick Connect login (#3504)
aussierk Sep 14, 2026
b211652
refactor(avatarproxy): remove unused auth header from avatarproxy (#3…
aussierk Sep 14, 2026
34b28d0
fix(scanner): confirm orphan candidates against the servers before de…
fallenbagel Sep 14, 2026
2bebae8
fix(db): remap leftover Overseerr DELETED status after migration (#3510)
fallenbagel Sep 15, 2026
6fa7473
ci: remove third party action dawidd6/action-download-artifact (#3480)
M0NsTeRRR Sep 15, 2026
59d5947
fix(webpush): resolve push subscription bugs for multi-device and sha…
fallenbagel Sep 16, 2026
913d176
fix(hardcover): share the rate limiter and retry rate-limited requests
benjitobz Sep 16, 2026
6a34300
Merge branch 'fix/hardcover-rate-limit' into develop
benjitobz Sep 16, 2026
d07aabe
Merge branch 'feature/sync-book-format-requests' into develop
benjitobz Sep 16, 2026
1f1f5d8
feat(books): sync ebook and audiobook requests
benjitobz Sep 11, 2026
c77d412
chore(i18n): extract book request format sync messages
benjitobz Sep 11, 2026
1ec75a1
Merge branch 'feature/sync-book-format-requests' into develop
benjitobz Sep 16, 2026
7afbb29
docs(discord): document the Thread ID notification setting. (#3481)
atilaszsz Sep 21, 2026
38581ca
feat: add a demo feature (#3017)
gauthier-th Sep 21, 2026
794743a
feat(overriderules): apply override rules to advanced requests (#2164)
gauthier-th Sep 21, 2026
8f0a977
fix(requests): enforce the quota when editing a request (#3378)
fallenbagel Sep 23, 2026
10483e2
fix(requests): stop editing a request from re-requesting covered seas…
fallenbagel Sep 23, 2026
cc6f5c7
fix(requests): serialize requests for the same title (#3380)
fallenbagel Sep 23, 2026
f92f44b
chore(deps): update dependency @huggingface/transformers to v4 (#2950)
renovate[bot] Sep 24, 2026
b919443
fix(override-rules): keep values set by advanced requesters (#3539)
fallenbagel Sep 24, 2026
bc6bdbb
fix(readarr): hide the None metadata profile from profile pickers
benjitobz Sep 25, 2026
8f6a19e
fix(ui): label the ebook side of a book request block
benjitobz Sep 25, 2026
88cbf42
Merge branch 'readarr-none-metadata-profile' into develop
benjitobz Sep 25, 2026
1b7895e
fix(ui): name the format on book series status and card chips
benjitobz Sep 25, 2026
b72ef9c
Merge branch 'book-request-format-badge' into develop
benjitobz Sep 25, 2026
9f359ec
Merge branch 'series-book-format-status' into develop
benjitobz Sep 25, 2026
af007e6
feat(books): pick ebook, audiobook or both when requesting a book
benjitobz Sep 25, 2026
116ce25
Merge branch 'feature/book-format-request-picker' into develop
benjitobz Sep 25, 2026
7ab531d
feat(books): choose formats per book when requesting a series
benjitobz Sep 25, 2026
74214a0
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 25, 2026
68e01b9
fix(subscriber): keep issue comment lookups on the owning save's conn…
fallenbagel Sep 25, 2026
103976d
fix(plex): limit concurrent watchlist metadata requests (#3251)
0xSysR3ll Sep 25, 2026
364e224
fix(ui): stack series request formats under each book on small screens
benjitobz Sep 26, 2026
9fa118a
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
ae85712
fix(ui): move the per-book toggle above the cover on small screens
benjitobz Sep 26, 2026
d7d1112
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
4d78c36
fix(ui): centre each book's cover and format rows on small screens
benjitobz Sep 26, 2026
d6a06de
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
989b20b
fix(ui): align each book's cover and format rows in one centred block
benjitobz Sep 26, 2026
ef98e22
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
4fd0da0
ci(duplicate-detector): switch embeddings to bge-small-en-v1.5 (#3541)
fallenbagel Sep 26, 2026
73fa6b2
fix(ui): restructure the series request header on small screens
benjitobz Sep 26, 2026
365f369
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
c942c24
feat(ui): use one series request layout at every width
benjitobz Sep 26, 2026
5de9a4d
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
ca840c7
feat(ui): sit a book's format toggles side by side on wider screens
benjitobz Sep 26, 2026
124e152
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
028cb1a
fix(ui): keep a book's formats when it is left out of a series request
benjitobz Sep 26, 2026
ed223cd
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 26, 2026
b7d2591
fix(images): keep optimized images after a cache refresh
benjitobz Sep 26, 2026
36f8022
Merge branch 'fix/image-proxy-stale-optimize' into develop
benjitobz Sep 26, 2026
53e77bf
Merge commit from fork
fallenbagel Sep 27, 2026
9fda1c6
Merge commit from fork
fallenbagel Sep 27, 2026
cd0fb22
chore(release): prepare 3.5.0 release
fallenbagel Sep 28, 2026
e2f24cb
chore(release): prepare v3.5.0
fallenbagel Sep 28, 2026
af7872a
feat(ui): give the series request the same format table as a single book
benjitobz Sep 28, 2026
808f097
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
4ba7031
fix(ui): lock a series request's formats behind the switch that gover…
benjitobz Sep 28, 2026
149b79f
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
7c85638
fix(ui): show a book's formats only while it is being requested
benjitobz Sep 28, 2026
8908f7d
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
a6f7eb1
fix(ui): let the series formats govern every book, available ones inc…
benjitobz Sep 28, 2026
45c4ad1
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
80d1fba
fix(ui): show what an already available book holds in a series request
benjitobz Sep 28, 2026
1196bfd
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
dcbed61
fix(ui): stop a book detaching from the series formats when switched on
benjitobz Sep 28, 2026
67c1753
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
a589cc4
fix(ui): keep a book's formats and status on show when its switch is off
benjitobz Sep 28, 2026
07bd5cd
Merge branch 'feature/series-format-request-picker' into develop
benjitobz Sep 28, 2026
186d9e0
feat(books): list only a series' own books
benjitobz Sep 28, 2026
eda75cb
Merge branch 'fix/series-primary-books' into develop
benjitobz Sep 28, 2026
7e69409
feat(books): list a series' editions and extras apart from its own books
benjitobz Sep 28, 2026
97138c6
Merge branch 'fix/series-primary-books' into develop
benjitobz Sep 28, 2026
b4e92cb
Merge tag 'v3.5.0' into sync/upstream-main
benjitobz Sep 28, 2026
4b21309
Merge branch 'sync/upstream-main' into develop
benjitobz Sep 28, 2026
088b02c
fix(images): serve the optimized image on the first request
benjitobz Sep 28, 2026
f4b66fa
Merge branch 'fix/image-proxy-first-request-optimize' into develop
benjitobz Sep 28, 2026
6000f39
fix(books): allow removing an audiobook from the manage panel
benjitobz Oct 2, 2026
9a6997d
Merge branch 'fix/book-audiobook-remove' into develop
benjitobz Oct 2, 2026
a2d32c9
fix(books): name the format on the manage panel's remove buttons
benjitobz Oct 2, 2026
d49c414
Merge branch 'fix/book-audiobook-remove' into develop
benjitobz Oct 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
.gitconfig
.github
.gitignore
.pnpm-store
.husky
.next
.prettierignore
Expand Down
90 changes: 47 additions & 43 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,25 @@ jobs:
NUMBER: ${{ github.event.pull_request.number }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Pnpm Setup
uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
- parallel:
- name: Pnpm Setup
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: 'package.json'
- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'

- name: Get pnpm store directory
shell: bash
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

- name: Setup pnpm cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
Expand Down Expand Up @@ -93,20 +94,20 @@ jobs:
container: node:22.22.2-alpine3.23@sha256:8ea2348b068a9544dae7317b4f3aafcdc032df1647bb7d768a05a5cad1a7683f
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Pnpm Setup
uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Get pnpm store directory
shell: sh
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

- name: Setup pnpm cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
Expand All @@ -118,14 +119,15 @@ jobs:
CI: true
run: pnpm install

- name: Lint
run: pnpm lint
- parallel:
- name: Lint
run: pnpm lint

- name: Formatting
run: pnpm format:check
- name: Formatting
run: pnpm format:check

- name: Build
run: pnpm build
- name: Build
run: pnpm build

unit-test:
name: Unit Tests
Expand All @@ -136,20 +138,20 @@ jobs:
checks: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Pnpm Setup
uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Get pnpm store directory
shell: sh
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

- name: Setup pnpm cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
Expand All @@ -167,7 +169,7 @@ jobs:
run: pnpm test

- name: Publish test report
uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6.4.0
uses: mikepenz/action-junit-report@a9170d5795813c01ab4901ffb045b52bab4ab09d # v6.5.0
if: success() || failure() # always run even if the previous step fails
with:
report_paths: 'report.xml'
Expand All @@ -186,20 +188,21 @@ jobs:
arch: arm64
runs-on: ${{ matrix.runner }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- parallel:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4

- name: Commit timestamp
id: ts
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4

- name: Warm cache (no push) — ${{ matrix.platform }}
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
with:
context: .
file: ./Dockerfile
Expand All @@ -222,34 +225,35 @@ jobs:
packages: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Commit timestamp
id: ts
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
- parallel:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4

- name: Log in to Docker Hub
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Log in to GitHub Container Registry
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Commit timestamp
id: ts
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"

- name: Extract metadata
id: meta
uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6
with:
images: |
${{ env.DOCKER_HUB }}
Expand All @@ -261,7 +265,7 @@ jobs:
org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }}

- name: Build & Push (multi-arch, single tag)
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
with:
context: .
file: ./Dockerfile
Expand Down
23 changes: 12 additions & 11 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,22 @@ jobs:
matrix:
language: [actions, javascript]
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- parallel:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
- name: Initialize CodeQL
uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
with:
languages: ${{ matrix.language }}
queries: +security-and-quality

- name: Autobuild
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
uses: github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
with:
category: '/language:${{ matrix.language }}'
2 changes: 1 addition & 1 deletion .github/workflows/conflict_labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
pull-requests: write
steps:
- name: Apply label
uses: eps1lon/actions-label-merge-conflict@1df065ebe6e3310545d4f4c4e862e43bdca146f0 # v3.0.3
uses: eps1lon/actions-label-merge-conflict@0273be72a0bbd58fcd71d0d6c02c209b50d1e5e1 # v3.1.0
with:
dirtyLabel: 'merge conflict'
commentOnDirty: 'This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.'
Expand Down
48 changes: 25 additions & 23 deletions .github/workflows/create-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,17 @@ jobs:
outputs:
tag_version: ${{ steps.git-cliff.outputs.tag_version }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: false
- parallel:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false

- name: Install git-cliff
uses: taiki-e/install-action@481c34c1cf3a84c68b5e46f4eccfc82af798415a # v2.75.23
with:
tool: git-cliff
- name: Install git-cliff
uses: taiki-e/install-action@742a3317eac7bd62f91cd888b4eead5e784ba833 # v2.87.1
with:
tool: git-cliff

- name: Get tag version
id: git-cliff
Expand All @@ -55,25 +56,26 @@ jobs:
TAG_VERSION: ${{ needs.determine-tag-version.outputs.tag_version }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ssh-key: '${{ secrets.COMMIT_KEY }}'

- name: Pnpm Setup
uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
- parallel:
- name: Pnpm Setup
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: 'package.json'
# For workflows with elevated privileges we recommend disabling automatic caching.
# https://github.com/actions/setup-node
package-manager-cache: false
- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'
# For workflows with elevated privileges we recommend disabling automatic caching.
# https://github.com/actions/setup-node
package-manager-cache: false

- name: Configure git
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
- name: Configure git
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor }}@users.noreply.github.com"

- name: Bump package.json
run: npm version ${TAG_VERSION} --no-commit-hooks --no-git-tag-version
Expand Down
26 changes: 13 additions & 13 deletions .github/workflows/cypress.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
- 'cypress.config.ts'
- 'package.json'
- 'pnpm-lock.yaml'
- 'next.config.js'
- 'next.config.ts'
- 'tsconfig.json'
- '.github/workflows/cypress.yml'
push:
Expand All @@ -20,7 +20,7 @@ on:
- 'cypress.config.ts'
- 'package.json'
- 'pnpm-lock.yaml'
- 'next.config.js'
- 'next.config.ts'
- 'tsconfig.json'
- '.github/workflows/cypress.yml'

Expand All @@ -37,24 +37,24 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- parallel:
- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: package.json
package-manager-cache: false

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: package.json
package-manager-cache: false

- name: Pnpm Setup
uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
- name: Pnpm Setup
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Setup cypress cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-store-${{ hashFiles('**/pnpm-lock.yaml') }}
Expand All @@ -67,7 +67,7 @@ jobs:
run: pnpm exec cypress install

- name: Cypress run
uses: cypress-io/github-action@c495c3ddffba403ba11be95fffb67e25203b3799 # v7.1.10
uses: cypress-io/github-action@09090944bd8aaa2a517cefb6e38bf1aae336b42b # v7.4.3
with:
install: false
build: pnpm cypress:build
Expand Down
Loading
Loading