Commit Graph

  • 5db6a44b60 refactor: remove haptic feedback on menu open for header avatar, stats card, and sort menu components expo-57 jake 2026-07-12 18:27:44 -04:00
  • 77af611490 remove zeego jake 2026-07-12 18:17:19 -04:00
  • bd8ae4ccf9 New Crowdin translations by GitHub Action main Crowdin Botandjake 2026-07-12 21:31:52 +00:00
  • 7b5d681370 fix native deps jake 2026-07-12 17:04:12 -04:00
  • 733eaec212 chore: remove expo-build-properties plugin, upgrade Sentry to v8, drop avatar aria-label jake 2026-07-06 17:21:16 -04:00
  • 05ed270602 fix: refactor duplicate active job constraint assertion in import processor test jake 2026-07-06 17:12:48 -04:00
  • 0d0256134c fix: use createOpenAPIPage from fumadocs-openapi jake 2026-07-06 17:09:09 -04:00
  • 5cf0293220 chore: upgrade Expo SDK 55 → 57 and React Native 0.83 → 0.86 jake 2026-07-06 17:00:47 -04:00
  • 553fe98013 feat: add "Mark Unwatched" toggle for movies on web and native (#52) jakeandGitHub 2026-07-12 16:53:52 -04:00
  • 0c747a9275 fix(webhooks): ignore episode-level Plex TMDB GUIDs when parsing scrobble events (#53) jakeandGitHub 2026-07-12 16:53:04 -04:00
  • 801b7cd8a5 Add renovate.json renovate/configure renovate[bot]andGitHub 2026-04-03 01:31:03 +00:00
  • bb3b7891d4 v0.2.0 v0.2.0 jake 2026-03-27 15:52:22 -04:00
  • dce333e128 refactor: organize API around operation domains (#24) 2026-03-26 15:44:05 -04:00
  • 3906f6021d v0.1.3 v0.1.3 jake 2026-03-24 21:02:45 -04:00
  • 213977d7f8 New Crowdin translations by GitHub Action Crowdin Botandjake 2026-03-25 01:01:22 +00:00
  • b0172a2b25 feat: refactor platforms to support multiple TMDB provider IDs per platform jake 2026-03-24 20:54:34 -04:00
  • 7fedccb4fd v0.1.2 v0.1.2 jake 2026-03-24 16:08:33 -04:00
  • c940e4cdc9 chore(docs): sync API spec jake 2026-03-24 16:07:34 -04:00
  • 02f2c51f72 New Crowdin translations by GitHub Action Crowdin Botandjake 2026-03-24 20:03:43 +00:00
  • 66d2de3020 fix(i18n): wrap remaining hardcoded strings in web and native with LingUI macros - Wrap star rating and decade labels in library screen/filter-sheet with t macro so they're translatable (and move decade labels out of static const into a reactive map) - Wrap accessibility labels in integration-card, swipeable-row with t macro - Refactor SHORTCUT_DESCRIPTIONS in command-palette into SHORTCUT_GROUPS with msg descriptors; render scope/description/connector via i18n._() and <Trans> so all shortcut help text is extractable - Wrap "Command Palette" dialog title, media type badges, and "then" connector in <Trans>/t - Fix system-health-section backup count string: move plural() outside <Trans> to avoid untranslatable interpolation - Wrap sr-only strings ("More", "Close") in breadcrumb, dialog, pagination, sheet, and sidebar with <Trans> - Wrap setup route strings with <Trans>/t macros - Update en.po with newly extracted message IDs jake 2026-03-24 14:38:12 -04:00
  • b8f3468283 fix(native): add Apple privacy manifest and fix Sentry metro config jake 2026-03-24 13:39:00 -04:00
  • 34b9ae3620 fix(native): fix widget image management and add tests jake 2026-03-24 11:13:09 -04:00
  • 1bf12d3884 fix: update Dockerfile and turbo.json to include APP_VERSION and GIT_COMMIT_SHA as environment variables jake 2026-03-24 11:08:30 -04:00
  • 2cd1964ca8 fix(native): overhaul library screen, fix upcoming filters, improve SelectModal jakeandClaude Opus 4.6 2026-03-24 10:17:26 -04:00
  • 647784d8fc feat(native): add Sentry native crash reporting with privacy-conscious defaults jakeandClaude Opus 4.6 2026-03-24 09:38:53 -04:00
  • 4fc6b2f8d1 feat: add filtering and sorting across library, explore, and upcoming (#21) 2026-03-24 09:07:14 -04:00
  • d1b0d952bd v0.1.1 v0.1.1 jake 2026-03-23 16:39:36 -04:00
  • fe8c652b4a New Crowdin translations by GitHub Action Crowdin Botandjake 2026-03-23 20:33:28 +00:00
  • eb9c7ae6df fix(i18n): comprehensive audit of translated strings across web and native jakeandClaude Opus 4.6 2026-03-23 16:21:54 -04:00
  • b289b7abed refactor: optimize cron scheduling, DB maintenance, and TMDB reliability jake 2026-03-23 13:59:31 -04:00
  • d9be566863 refactor: clean up orphaned cached images on cache purge and metadata updates - Add deleteOrphanedImage(category, path) helper to image-cache.ts for fire-and-forget unlink of stale cached files - Extend purgeShellTitlesTransaction to collect poster, backdrop, still, and profile image paths from deleted titles/persons before cascade deletes, returning them as orphanedImages in PurgeResult - Wire orphaned image cleanup into purgeMetadataCache (cache purge), batchUpsertPersons (profile path changes), updateTitleWithArtInvalidation (poster/backdrop changes), and refreshTvChildren (season posters and episode stills) - Remove getTitlesWithMissingThumbhashes, getTitleIdsWithMissingSeasonThumbhashes, getTitleIdsWithMissingEpisodeThumbhashes, and getTitleIdsWithMissingProfileThumbhashes from @sofa/db/queries/crongetThumbhashBackfillTitleIds now delegates to getLibraryTitleIds only - Fix episode still cleanup to call deleteOrphanedImage even when stillThumbHash is null (previously skipped) jake 2026-03-23 13:18:06 -04:00
  • cc8909d64e fix: remove @sofa/core and @sofa/api deps from public-api to fix Vercel runtime compatibility - Drop @sofa/core and @sofa/api from apps/public-api — importing workspace packages with DB/Node dependencies broke the Vercel edge runtime - fetchUserData on Trakt and Simkl importers now returns raw unknown API responses; parsing is deferred to the self-hosted server - Add source + rawPayload fields to ParsePayloadInput; parsePayload procedure now dispatches to parseTraktPayload/parseSimklPayload and returns full warnings + diagnostics - Export ProviderEnum from apps/public-api/src/importers/index.ts instead of defining it inline in app.ts jake 2026-03-23 12:48:04 -04:00
  • 9df1075040 fix: remove App Tracking Transparency (ATT) from native analytics flow v0.1.0 jake 2026-03-22 19:03:28 -04:00
  • ddaa194f5d fix: close cache purge dialogs on success and disable actions while pending jake 2026-03-22 19:00:13 -04:00
  • 91ca6ab3c0 fix(native): add podspec to sofa-widgets-support module to resolve CocoaPods module map build failure jake 2026-03-22 18:40:36 -04:00
  • f2f5e823f4 fix: UX polish across web and native — error boundaries, query tuning, and i18n improvements jake 2026-03-22 16:46:39 -04:00
  • 1d67b201a0 chore: extract shared tsconfig, move display-status to core, add i18n tests - Add @sofa/tsconfig package with a shared base.json (target, lib, strict, moduleResolution, etc.) and migrate all packages/apps to "extends": "@sofa/tsconfig/base.json" to eliminate duplicated compiler options - Move display-status.ts (and its DisplayStatus type + getDisplayStatus fn) from @sofa/api to @sofa/core; remove the ./display-status export from @sofa/api and update all import sites in discovery.ts and tracking.ts - Add packages/core/test/display-status.test.ts: 15 tests covering ONGOING_TMDB_STATUSES and all getDisplayStatus branches (movie, TV watchlist/in_progress/caught_up/completed, edge cases) - Add packages/i18n/vitest.config.ts and two new test files: date-buckets.test.ts and format.test.ts covering date bucketing and locale formatting utilities jake 2026-03-22 14:46:25 -04:00
  • 6be586bd53 chore: dependency updates and minor refactors jake 2026-03-22 14:11:45 -04:00
  • 2c7068ced3 chore: migrate oxlint config to e18e plugin and fix lint violations - Replace root eslint-plugin-lingui jsPlugin with @e18e/eslint-plugin; move lingui rules into per-app .oxlintrc.json overrides for native and web - Add jsx-a11y, react-hooks-js (native), and expanded lingui rule sets to per-app configs - Add oxc/no-barrel-file warning at threshold 0 to root config - Fix e18e/prefer-url-canparse: replace try { new URL() } catch with URL.canParse() in server-url screen and server lib - Fix e18e/prefer-timer-args: pass callback args directly to setTimeout instead of wrapping in arrow functions (use-debounce, integration-card) - Fix e18e/prefer-static-regex: hoist /\/+$/ to module-level constant in server-url screen - Fix react-hooks-js/refs and react-hooks-js/set-state-in-effect: convert useRef tracking patterns to useState + render-time derived updates in use-server-connection, expandable-text, and settings screen - Fix react-hooks-js/immutability: extract stable palette sub-values before useMemo deps in title detail screen - Apply e18e and other rule fixes across core, tmdb, web components, and i18n packages jake 2026-03-22 13:50:24 -04:00
  • 373a5d3caf test: add integrations, cache, cron, and telemetry tests jakeandClaude Opus 4.6 2026-03-22 12:39:04 -04:00
  • 554271a888 test: add webhook, credits, image-cache, and metadata tests jakeandClaude Opus 4.6 2026-03-22 12:23:50 -04:00
  • 5f3e14b415 feat: migrate test runner from Bun to Vitest jakeandClaude Opus 4.6 2026-03-22 12:03:06 -04:00
  • 3f05e08fea fix: misc bug fixes and reliability improvements jake 2026-03-22 10:57:48 -04:00
  • 72f26f822c fix: harden stale import job detection and cancellation cleanup jake 2026-03-22 10:17:17 -04:00
  • fd4a8119ce feat(native): add iOS home screen widgets for continue watching and upcoming jake 2026-03-21 21:03:58 -04:00
  • 61013ee41f feat: add user data export and sofa export re-import support jake 2026-03-21 17:12:15 -04:00
  • 58cf2e689f fix: harden backup restore, first-user race, and several reliability issues jake 2026-03-21 16:16:37 -04:00
  • f676cea237 fix: throw notFound() for missing titles/people and improve error handling jake 2026-03-21 16:02:59 -04:00
  • 37c35488fd feat(analytics): proxy PostHog ingestion through public-api on Vercel - Add Vercel rewrites to proxy /ingest/* and /ingest/static/* to PostHog's US endpoints - Update native .env.example to point EXPO_PUBLIC_POSTHOG_HOST at the self-hosted proxy URL jake 2026-03-21 15:39:56 -04:00
  • ef90e57f19 New Crowdin translations by GitHub Action Crowdin Botandjake 2026-03-21 17:02:42 +00:00
  • 31572816aa chore(ci): simplify Crowdin workflow and bump checkout action - Upgrade actions/checkout from v4 → v6 in both upload and download jobs - Remove manual bun install + compile + git commit steps from the download job — Crowdin's own action now handles committing updated PO files via push_translations: true - Allow the download job to run on schedule events in addition to workflow_dispatch jake 2026-03-21 13:02:01 -04:00
  • 1a503df2ae feat: add upcoming episodes and movies timeline (#17) jakeandGitHub 2026-03-21 12:31:53 -04:00
  • 5aaf88591b feat(i18n): add RTL layout support for Arabic and other RTL locales jake 2026-03-20 19:25:04 -04:00
  • b540a9111a refactor(i18n): replace compiled .ts catalogs with direct .po imports - Remove lingui compile / i18n:compile script — Vite and Metro LingUI plugins now compile .po files on the fly at dev/build time; no manual compile step needed - Import .po files directly in @sofa/i18n (./po/en.po etc.) and add po.d.ts ambient module declaration so TypeScript accepts them - Add fallbackLocales: { default: "en" } and lineNumbers: false to lingui.config.ts; prefix catalog paths with <rootDir> for correctness - Derive SupportedLocale and SUPPORTED_LOCALES from LOCALE_INFO in locales.ts to eliminate the circular import between index.ts and locales.ts - Update Crowdin config to use project_id_env instead of a hardcoded ID, drop languages_mapping (no longer needed), and add preserve_hierarchy: true - Add a daily cron trigger (0 6 * * *) to the Crowdin GitHub Actions workflow and drop the now-redundant compile step from it - Update docs and AGENTS.md to reflect that no compile step is required after i18n:extract jake 2026-03-20 16:36:02 -04:00
  • 5c70d29fac refactor: consolidate watchlist states (#18) jakeandGitHub 2026-03-20 15:31:31 -04:00
  • 4b4d35ce31 perf(native): memoize list headers and card components to reduce unnecessary re-renders - Wrap ContinueWatchingCard with memo() so it only re-renders when its item prop changes - Extract ListHeaderComponent in RecentlyViewedList into a useMemo to avoid recreating the JSX tree on every render - Move listHeader in the person detail screen from a plain JSX variable to useMemo, and relocate departmentLabels inside it so the t reference is stable - Store the "copied" reset timer in a useRef in IntegrationCard and clear it on unmount to prevent setState-after-unmount warnings jake 2026-03-19 16:53:14 -04:00
  • 1670c6f494 feat(web): add page titles, staleTime, and lift auth redirect into layout - Add head() with document titles to dashboard, explore, settings, setup, login, register, and person detail routes - Return personName from the person detail loader so the title can be set server-side instead of after data loads - Add staleTime to all loader routes (30s for dashboard/settings, 60s for explore/titles/people) - Move the "redirect if already authenticated" beforeLoad guard from individual login/register routes into the shared _auth layout so it runs once for all unauthenticated routes - Add a Cloud deploy section to the README with a one-click Railway button jake 2026-03-19 16:47:23 -04:00
  • e7da1e5109 chore: bump deps jake 2026-03-19 15:15:39 -04:00
  • 78266cf202 feat(native): internationalize tab bar labels and improve recently-viewed row jake 2026-03-19 15:06:02 -04:00
  • fb4b521450 fix(native): fix modal close button behind status bar on Android jakeandClaude Opus 4.6 2026-03-19 12:16:47 -04:00
  • 98aa7326d5 fix(server): store raw TMDB paths in browse upserts to prevent double-resolution jakeandClaude Opus 4.6 2026-03-19 12:00:45 -04:00
  • 885b594a97 fix(native): inline department labels and dim age text in person detail screen - Move getDepartmentLabels helper inline as departmentLabels object inside the component so t from useLingui() is already in scope - Wrap the birthday age/death annotation in a nested <Text> with text-muted-foreground/60 to visually de-emphasise it jake 2026-03-19 11:57:27 -04:00
  • 8d1cc46875 fix(db): use (tmdbId, type) composite keys for title lookups jakeandClaude Opus 4.6 2026-03-19 11:47:14 -04:00
  • 1f8b3d8f37 feat: redesign dashboard stats cards with sparklines, icons, and period selection jake 2026-03-19 11:42:30 -04:00
  • 1050a0de00 feat: redesign dashboard stats cards with sparklines, icons, and period selection jake 2026-03-19 11:31:15 -04:00
  • f4c6b27cd9 refactor(web): replace ProgressProvider context with a self-contained NavigationProgress component driven by TanStack Router lifecycle events jake 2026-03-19 11:05:33 -04:00
  • 320852b035 fix(web): import globals.css directly instead of as a URL stylesheet link jake 2026-03-19 10:55:01 -04:00
  • d94ec16fae feat(web): add route loaders to prefetch dashboard, explore, and settings queries jake 2026-03-18 22:04:19 -04:00
  • 9db4285bc9 fix(core): validate SQLite magic bytes before opening backup database files jake 2026-03-18 21:12:10 -04:00
  • 7b0c07ad3c chore(i18n): add Claude-powered translation script and fill missing PO translations - Add packages/i18n/scripts/claude.ts — a Bun script that translates empty PO entries via the Claude Code CLI, supporting batch mode, dry-run, optional AI context from crowdin-context.jsonl, and structured JSON output validation - Add i18n:claude root script (bun packages/i18n/scripts/claude.ts) as a convenience alias - Fill all previously empty msgstr entries across de, es, fr, it, pt PO catalogs and recompile .ts catalogs - Polish README with badges (license, CI status, release, language, Crowdin localization) and minor formatting fixes jake 2026-03-18 20:42:01 -04:00
  • 9b2d7caa3f fix(native): add .js extensions to all @formatjs polyfill imports for Metro compatibility jake 2026-03-18 17:42:44 -04:00
  • 466aa5464e fix(native): rename DetailStackHeader to ModalStackHeader and remove hero fade-in animation and continue-watching overlay jake 2026-03-18 17:36:45 -04:00
  • 3c1b7cfe11 refactor: enforce layered architecture by extracting all DB queries into @sofa/db/queries/* jake 2026-03-18 17:31:18 -04:00
  • 3a0374c825 chore(lint): add perf category to oxlint and fix resulting warnings jake 2026-03-18 15:48:47 -04:00
  • 2b0c683b7b refactor: replace Biome with oxlint + oxfmt jakeandClaude Opus 4.6 2026-03-18 13:26:50 -04:00
  • a80c8c9a0c fix(docker): include lingui.config.ts in production image jake 2026-03-18 12:20:12 -04:00
  • ad0497ccd6 feat: add i18n with LingUI, Crowdin integration, and typed error codes (#16) 2026-03-18 12:16:10 -04:00
  • e50ab44783 refactor(native): consolidate server utilities into a single lib/server.ts module - Merge auth-client.ts, cached-session.ts, server-reachability.ts, and server-url.ts into lib/server.ts; update all import sites to use @/lib/server - Replace the standalone registerServer + setServerUrl calls with a serverManager.connectToServer() method and expose serverManager.normalizeUrl, serverManager.validateServerUrl, and serverManager.hasStoredServerUrl - Move use-server-connection.ts from lib/ to hooks/ and remove the seedSessionFromCache export; replace with an initialize() helper called at module scope in the root layout - Add getScopeKey() to derive the TanStack Query persistence scope key, removing the inline computation from QueryProvider - Clear the query cache on server URL change inside useServerConnection jake 2026-03-17 20:57:50 -04:00
  • f4199b595b fix(native): change person detail screen presentation from slide animation to modal jake 2026-03-17 20:19:57 -04:00
  • b2a5c298c5 refactor(native): centralize title mutations into useTitleActions, extract server-connection logic, and unify hero banner - Add useTitleActions hook that owns all title mutation side-effects (toast messages, query invalidation) and replace inline useMutation calls in the title detail, search, and person screens, as well as usePosterActions, with it - Extract the server URL watching, instance-ID provisioning, storage-scope management, reachability monitor, and session-reconciliation logic from _layout.tsx into a useServerConnection hook and a seedSessionFromCache helper in use-server-connection.ts; AppContent now calls a single hook - Delete the iOS-only hero-banner.ios.tsx and consolidate into hero-banner.tsx - Extract usePressAnimation into its own hook file - Move shared action helpers (quick-add, watch-movie, etc.) into lib/title-actions.ts jake 2026-03-17 20:01:03 -04:00
  • 1257a485e9 feat(native): add context menus to poster cards, hero banners, and continue-watching cards; remove failedKey error state jake 2026-03-17 19:32:00 -04:00
  • c6ae58f41d refactor(native): overhaul auth screens, add ModalStackHeader, and bump Expo patch releases jake 2026-03-17 18:33:11 -04:00
  • daf90a4f39 fix(native): prevent iOS black screen by avoiding provider tree remount on login (#14) jakeandGitHub 2026-03-17 14:40:04 -04:00
  • ca44354240 refactor: move system health procedure from system to admin router jake 2026-03-17 11:14:03 -04:00
  • 710c43a01f feat: add watch history import from Trakt, Simkl, and Letterboxd (#13) jakeandGitHub 2026-03-17 11:02:58 -04:00
  • 25736f684a refactor: return pre-resolved internal IDs from all listing endpoints and remove client-side resolve mutations jake 2026-03-16 16:35:50 -04:00
  • ccc7922737 refactor(native): centralize navigation header configuration into dedicated stack components jake 2026-03-16 15:14:32 -04:00
  • e5fc18178b docs: add privacy policy page and footer link jake 2026-03-16 14:17:31 -04:00
  • d8711b09c4 chore(native): remove unstable Metro optimize flags from EAS production build jake 2026-03-16 14:06:38 -04:00
  • ed3fd54896 refactor(native): replace hardcoded pixel font sizes with semantic Tailwind classes and add ScaledIcon jake 2026-03-16 12:46:55 -04:00
  • 923651a7ae refactor(native): bundle fonts locally and replace @expo-google-fonts packages jake 2026-03-16 12:02:14 -04:00
  • 753bd2d0cc refactor(native): extract shared RecentlyViewedRowContent and polish iOS search list jake 2026-03-16 11:54:54 -04:00
  • 32cfbc2e86 fix(native): change background color to pure black for OLED screens jake 2026-03-16 11:42:16 -04:00
  • 1d1555ccf7 fix(native): clear transparent header titles and minor UI polish jake 2026-03-16 11:21:59 -04:00
  • 1c3c74fb0a fix(native): make person filmography grid responsive to screen width jake 2026-03-16 11:07:49 -04:00
  • 3e9d7efd94 refactor(native): replace polling-based server reachability with passive fetch interception jake 2026-03-16 11:03:24 -04:00
  • 88780c337e fix(native): enhance horizontal list components with consistent spacing jake 2026-03-16 10:58:18 -04:00
  • 639fa34585 fix(native): add change password screen and update navigation jake 2026-03-16 10:49:40 -04:00
  • 8dfa54a60c refactor(native): polish UI, add accessibility labels, and improve auth navigation jake 2026-03-16 00:15:35 -04:00
  • 7995790864 chore(deps): upgrade vite 8, @vitejs/plugin-react 6, @base-ui/react 1.3, hono 4.12.8, and related packages jake 2026-03-15 20:07:39 -04:00