Commit Graph
415 Commits
Author SHA1 Message Date
jakeandClaude Opus 5.5 6b56e3eff3 fix(stats): align count windows with chart buckets and fix month rollover
Window starts now equal the first chart bucket, and year buckets are built from the 1st of each month so the 29th-31st no longer repeat or skip months.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:31:32 -04:00
jakeandClaude Opus 5.5 fcd8731a6a fix(web): settings toggles refresh cache, backup next-run from server, update toast once
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:28:20 -04:00
jakeandClaude Opus 5.5 436c463cc8 fix(web): show change-password validation messages and failure reason
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:27:30 -04:00
jakeandClaude Opus 5.5 a6d642616b fix(cron): start manual jobs in the background and report busy jobs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:23:28 -04:00
jakeandClaude Opus 5.5 085b681d8a fix(native): explain change-password failures and block double submit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:15:57 -04:00
jakeandClaude Opus 5.5 ea9cb3de8d fix(native): skip recently-viewed and theming in link previews
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:12:30 -04:00
jakeandClaude Opus 5.5 ee53f33a79 fix(native): load more titles in Explore rows
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:10:14 -04:00
jakeandClaude Sonnet 5.5 ecf119c98e fix(native): show errors for Explore rows, failed pages and Register
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 22:06:42 -04:00
jakeandClaude Sonnet 5.5 669fc74653 fix(native): report SSO sign-in failures
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 22:03:06 -04:00
jakeandClaude Sonnet 5.5 8a6c32f376 fix(native): translate the recently viewed row's accessibility label
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 21:57:24 -04:00
jakeandClaude Sonnet 5.5 3d219ed638 chore(cron): remove query helpers replaced by checked-at stamps
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 21:56:49 -04:00
jakeandClaude Sonnet 5.5 911dc7e5f1 fix(tracking): clamp same-day log-a-watch time to now
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 21:50:57 -04:00
jakeandClaude Sonnet 5.5 cb5e0c19e7 feat(tracking): remove a single watch and log a watch on a date
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 21:50:56 -04:00
jakeandClaude Sonnet 5.5 4669d3b76d feat(native): add a watch history screen and trim the web phone tab bar
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 21:50:53 -04:00
jakeandClaude Opus 5.5 6f0b3b597f fix(public-api): allowlist telemetry features and keep /v1/version cacheable
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 21:45:43 -04:00
jakeandClaude Sonnet 5.5 b292fe37ab feat(tracking): add a paginated watch history and Last watched library sort
Adds tracking.history (cursor-paginated, movies and episodes merged), a
last_watched library sort, and a /history web page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:36:44 -04:00
jakeandClaude Sonnet 5.5 6cd99a39a9 fix(upcoming): omit direction in the default view so the loader prefetch key matches
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:30:44 -04:00
jakeandClaude Sonnet 5.5 e625f319a2 feat(upcoming): add a "Recently aired" view of unwatched episodes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:29:47 -04:00
jakeandClaude Sonnet 5.5 e3f7ccca07 fix(dashboard): block duplicate quick-watch clicks until refetch and use logical end inset
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:21:47 -04:00
jakeandClaude Sonnet 5.5 04bcb66436 feat(dashboard): mark episodes watched from Continue Watching and Upcoming
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:20:09 -04:00
jakeandClaude Sonnet 5.5 899be96316 fix(cron): judge stale seasons by the latest season fetch
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:15:05 -04:00
jakeandClaude Sonnet 5.5 6576f21235 perf(cron): refresh ended titles less often and only recent seasons of returning shows
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:13:28 -04:00
jakeandClaude Sonnet 5.5 66a5e80544 fix(imports): skip specials and refresh shows once for new episodes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:09:14 -04:00
jakeandClaude Sonnet 5.5 e7f55d30e9 chore(native): define the root error fallback outside RootLayout
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:06:01 -04:00
jakeandClaude Sonnet 5.5 51d193b411 perf(metadata): remember empty TMDB lookups instead of refetching every view
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 14:01:22 -04:00
jakeandClaude Sonnet 5.5 edd6eb541d fix(imports): keep date-only values on their calendar day
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:51:49 -04:00
jakeandClaude Sonnet 5.5 1ccc138144 test(i18n): cover month labels when Intl defaults to UTC like the native polyfill
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:48:29 -04:00
jakeandClaude Sonnet 5.5 c40b6844a0 fix(i18n): format Upcoming month headers in UTC so native shows the right month
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:47:15 -04:00
jakeandClaude Sonnet 5.5 b7887eef70 fix(native): make select sheets and row actions usable with VoiceOver and TalkBack
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:43:21 -04:00
jakeandClaude Sonnet 5.5 851a188f00 fix(native): recover from render errors and let Close leave deep-linked titles
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:40:39 -04:00
jakeandClaude Sonnet 5.5 9d0bede536 fix(native): keep Android headers from covering Upcoming filters and the modal Close button
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:37:47 -04:00
jakeandClaude Sonnet 5.5 9209214e98 fix(native): clear every episode's pending state and block taps during Mark All
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:35:27 -04:00
jakeandClaude Sonnet 5.5 7770e1a697 fix(native): let Android menus open from their trigger
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:33:15 -04:00
jakeandClaude Opus 5.5 ccaacfeae5 feat(native): follow the system language instead of an in-app picker
Declare the app's 12 languages to iOS and Android via expo-localization,
resolve the language from the device's preferred languages at start-up and
on Android runtime changes, and make Settings > Language open the system
settings page. Drops the MMKV-stored locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:24:59 -04:00
jakeandClaude Sonnet 5.5 d012280f20 fix(native): add a local-network usage description for LAN servers
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:17:20 -04:00
jakeandClaude Sonnet 5.5 55552cd1bf chore(native): require iOS 17
Raise ios.deploymentTarget from 16.4 to 17.0 (app and widget extension) and state the requirement in the mobile app docs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:13:28 -04:00
jake 12294de522 chore(vscode): update TypeScript settings for improved path resolution and enable experimental features 2026-10-05 13:13:04 -04:00
jakeandClaude Sonnet 5.5 0afc60f28c fix(native): show account edits immediately and save name on first tap
Bypass the 5-minute session cookie cache when refetching after name/avatar edits, keep taps on Save/Cancel working with the keyboard open, add Return-to-save, trim the name, and guard against double submit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:07:54 -04:00
jakeandClaude Sonnet 5.5 fbc6ac90a3 fix(native): show "Session expired" for every session loss the user didn't start
Replace the session-rejected / server-change / cached-session-seeded flags with a single
session-end reason that deliberate sign-outs mark before signing out. The session-loss
effect now toasts only when no reason was recorded.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 13:03:35 -04:00
jakeandClaude Sonnet 5.5 786a4ba7c5 fix(native): re-probe the server on retry and rebuild the auth client before marking a new server reachable
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 12:59:59 -04:00
jakeandClaude Sonnet 5.5 b46bc4cdcb fix(native): make the server-URL check reactive so the reachability monitor and banner work after first setup
With the React Compiler, hasServerUrl read from MMKV during render was
memoized forever at the root. Read it through useSyncExternalStore instead.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 12:54:17 -04:00
jakeandClaude Sonnet 5.5 8f4cd03715 fix(native): persist the query cache per server+user and clear it with the session
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 12:51:00 -04:00
jakeandClaude Opus 5.5 870d130261 chore(i18n): extract catalogs after sharing client helpers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:28:17 -04:00
jakeandClaude Opus 5.5 778a1356d5 refactor(api): share tracking-dependent query key lists between web and native
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:27:43 -04:00
jakeandClaude Opus 5.5 88e777d5ce refactor(api): share sparkline path and luminance helpers between web and native
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:27:15 -04:00
jakeandClaude Opus 5.5 4b38303404 refactor(i18n): re-export error helpers by name to satisfy no-barrel-file
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:27:12 -04:00
jakeandClaude Opus 5.5 01a14157c6 refactor(i18n): share integration status text between web and native
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:26:05 -04:00
jakeandClaude Opus 5.5 4adaa4a73b refactor(i18n): share error message maps between web and native
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:25:28 -04:00
jakeandClaude Opus 5.5 d874ae9198 refactor(web): share one import-job flow between import dialogs
Extract the job loop into runImportJob (with tests), hold its UI state in
useImportJob, and move the importing/done steps and stat/option components
into import-dialog-parts. Both dialogs now close when an import continues in
the background or the connection drops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:11:48 -04:00
b63fbce60d feat(search): find titles by IMDb ID
Search queries that look like an IMDb ID (e.g. tt0133093) are now resolved
through TMDB's find endpoint, respecting the movie/tv type filter.

Supersedes #60.

Co-authored-by: Gonçalo Fonseca <gcare.fonseca99@outlook.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 03:57:00 -04:00