gitextract_udf17ict/ ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── config.yml │ │ ├── documentation.yml │ │ ├── enhancement.yml │ │ └── maintenance.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── cliff.toml │ ├── renovate/ │ │ ├── actions.json5 │ │ ├── docker.json5 │ │ ├── groups.json5 │ │ ├── helm.json5 │ │ ├── labels.json5 │ │ ├── pnpm.json5 │ │ └── semanticCommits.json5 │ ├── renovate.json5 │ └── workflows/ │ ├── ci.yml │ ├── codeql.yml │ ├── conflict_labeler.yml │ ├── create-tag.yml │ ├── cypress.yml │ ├── detect-duplicate.yml │ ├── docs-deploy.yml │ ├── docs-link-check.yml │ ├── helm.yml │ ├── lint-helm-charts.yml │ ├── preview.yml │ ├── rebuild-issue-index.yml │ ├── release.yml │ ├── renovate-helm-custom-hooks.yml │ ├── seerr-labeller.yml │ ├── semantic-pr.yml │ ├── stale.yml │ ├── test-docs-deploy.yml │ └── trivy-scan.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ ├── pre-commit │ └── prepare-commit-msg ├── .npmrc ├── .prettierignore ├── .prettierrc.js ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── Dockerfile.local ├── LICENSE ├── README.md ├── SECURITY.md ├── bin/ │ ├── check-i18n.js │ ├── duplicate-detector/ │ │ ├── .gitignore │ │ ├── build-index.mjs │ │ ├── detect.mjs │ │ ├── package.json │ │ └── utils.mjs │ └── prepare.js ├── charts/ │ └── seerr-chart/ │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── README.md.gotmpl │ ├── artifacthub-repo.yml │ ├── templates/ │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── ingress.yaml │ │ ├── persistentvolumeclaim.yaml │ │ ├── route.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ ├── statefulset.yaml │ │ └── tests/ │ │ └── test-connection.yaml │ └── values.yaml ├── compose.postgres.yaml ├── compose.yaml ├── config/ │ ├── .gitkeep │ ├── db/ │ │ └── .gitkeep │ └── logs/ │ └── .gitkeep ├── cypress/ │ ├── config/ │ │ └── settings.cypress.json │ ├── e2e/ │ │ ├── discover.cy.ts │ │ ├── login.cy.ts │ │ ├── movie-details.cy.ts │ │ ├── providers/ │ │ │ └── tvdb.cy.ts │ │ ├── pull-to-refresh.cy.ts │ │ ├── settings/ │ │ │ ├── discover-customization.cy.ts │ │ │ └── general-settings.cy.ts │ │ ├── tv-details.cy.ts │ │ └── user/ │ │ ├── auto-request-settings.cy.ts │ │ ├── profile.cy.ts │ │ └── user-list.cy.ts │ ├── fixtures/ │ │ └── watchlist.json │ ├── support/ │ │ ├── commands.ts │ │ ├── e2e.ts │ │ └── index.ts │ └── tsconfig.json ├── cypress.config.ts ├── docs/ │ ├── README.md │ ├── extending-seerr/ │ │ ├── _category_.json │ │ ├── database-config.mdx │ │ └── reverse-proxy.mdx │ ├── getting-started/ │ │ ├── _category_.json │ │ ├── buildfromsource.mdx │ │ ├── docker.mdx │ │ ├── index.mdx │ │ ├── kubernetes.mdx │ │ └── third-parties/ │ │ ├── aur.mdx │ │ ├── index.mdx │ │ ├── nixpkg.mdx │ │ ├── synology.mdx │ │ ├── truenas.mdx │ │ └── unraid.mdx │ ├── migration-guide.mdx │ ├── troubleshooting.mdx │ └── using-seerr/ │ ├── _category_.json │ ├── advanced/ │ │ ├── index.mdx │ │ └── verifying-signed-artifacts.mdx │ ├── backups.md │ ├── notifications/ │ │ ├── discord.md │ │ ├── email.md │ │ ├── gotify.md │ │ ├── index.mdx │ │ ├── ntfy.md │ │ ├── pushbullet.md │ │ ├── pushover.md │ │ ├── slack.md │ │ ├── telegram.md │ │ ├── webhook.md │ │ └── webpush.md │ ├── plex/ │ │ ├── _category_.json │ │ ├── index.md │ │ └── watchlist-auto-request.md │ ├── settings/ │ │ ├── _category_.json │ │ ├── dns-caching.md │ │ ├── general.md │ │ ├── jobs&cache.md │ │ ├── mediaserver.mdx │ │ ├── notifications.mdx │ │ ├── services.md │ │ └── users.md │ └── users/ │ ├── _category_.json │ ├── adding-users.mdx │ ├── deleting-users.md │ ├── editing-users.md │ └── owner.md ├── eslint.config.mts ├── gen-docs/ │ ├── .gitignore │ ├── README.md │ ├── babel.config.js │ ├── blog/ │ │ ├── 2025-09-29-introducing-seerr-blog.md │ │ ├── 2026-02-10/ │ │ │ └── seerr-release.md │ │ ├── 2026-02-28-seerr-security-fix-release.md │ │ └── authors.yml │ ├── docusaurus.config.ts │ ├── package.json │ ├── sidebars.ts │ ├── src/ │ │ ├── components/ │ │ │ └── SeerrVersion/ │ │ │ └── index.tsx │ │ └── css/ │ │ └── custom.css │ ├── static/ │ │ ├── .nojekyll │ │ └── CNAME │ ├── tailwind.config.js │ └── tsconfig.json ├── next-env.d.ts ├── next.config.js ├── package.json ├── postcss.config.js ├── public/ │ ├── offline.html │ ├── robots.txt │ ├── site.webmanifest │ └── sw.js ├── seerr-api.yml ├── server/ │ ├── api/ │ │ ├── animelist.ts │ │ ├── externalapi.ts │ │ ├── github.ts │ │ ├── jellyfin.ts │ │ ├── metadata.ts │ │ ├── plexapi.ts │ │ ├── plextv.ts │ │ ├── provider.ts │ │ ├── pushover.ts │ │ ├── rating/ │ │ │ ├── imdbRadarrProxy.ts │ │ │ └── rottentomatoes.ts │ │ ├── ratings.ts │ │ ├── servarr/ │ │ │ ├── base.ts │ │ │ ├── radarr.ts │ │ │ └── sonarr.ts │ │ ├── tautulli.ts │ │ ├── themoviedb/ │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ └── interfaces.ts │ │ └── tvdb/ │ │ ├── index.ts │ │ └── interfaces.ts │ ├── constants/ │ │ ├── discover.ts │ │ ├── error.ts │ │ ├── issue.ts │ │ ├── media.ts │ │ ├── server.ts │ │ └── user.ts │ ├── datasource.ts │ ├── entity/ │ │ ├── Blocklist.ts │ │ ├── DiscoverSlider.ts │ │ ├── Issue.ts │ │ ├── IssueComment.ts │ │ ├── Media.ts │ │ ├── MediaRequest.ts │ │ ├── OverrideRule.ts │ │ ├── Season.ts │ │ ├── SeasonRequest.ts │ │ ├── Session.ts │ │ ├── User.ts │ │ ├── UserPushSubscription.ts │ │ ├── UserSettings.ts │ │ └── Watchlist.ts │ ├── index.ts │ ├── interfaces/ │ │ └── api/ │ │ ├── blocklistInterfaces.ts │ │ ├── common.ts │ │ ├── discoverInterfaces.ts │ │ ├── issueInterfaces.ts │ │ ├── mediaInterfaces.ts │ │ ├── overrideRuleInterfaces.ts │ │ ├── personInterfaces.ts │ │ ├── plexInterfaces.ts │ │ ├── requestInterfaces.ts │ │ ├── serviceInterfaces.ts │ │ ├── settingsInterfaces.ts │ │ ├── userInterfaces.ts │ │ ├── userSettingsInterfaces.ts │ │ └── watchlistCreate.ts │ ├── job/ │ │ ├── blocklistedTagsProcessor.ts │ │ └── schedule.ts │ ├── lib/ │ │ ├── availabilitySync.ts │ │ ├── cache.ts │ │ ├── downloadtracker.ts │ │ ├── email/ │ │ │ ├── index.ts │ │ │ └── openpgpEncrypt.ts │ │ ├── imageproxy.ts │ │ ├── notifications/ │ │ │ ├── agents/ │ │ │ │ ├── agent.ts │ │ │ │ ├── discord.ts │ │ │ │ ├── email.ts │ │ │ │ ├── gotify.ts │ │ │ │ ├── ntfy.ts │ │ │ │ ├── pushbullet.ts │ │ │ │ ├── pushover.ts │ │ │ │ ├── slack.ts │ │ │ │ ├── telegram.ts │ │ │ │ ├── webhook.ts │ │ │ │ └── webpush.ts │ │ │ └── index.ts │ │ ├── overseerrMerge.ts │ │ ├── permissions.ts │ │ ├── refreshToken.ts │ │ ├── scanners/ │ │ │ ├── baseScanner.ts │ │ │ ├── jellyfin/ │ │ │ │ └── index.ts │ │ │ ├── plex/ │ │ │ │ └── index.ts │ │ │ ├── radarr/ │ │ │ │ └── index.ts │ │ │ └── sonarr/ │ │ │ └── index.ts │ │ ├── search.ts │ │ ├── settings/ │ │ │ ├── index.ts │ │ │ ├── migrations/ │ │ │ │ ├── 0001_migrate_hostname.ts │ │ │ │ ├── 0002_migrate_apitokens.ts │ │ │ │ ├── 0003_emby_media_server_type.ts │ │ │ │ ├── 0004_migrate_region_setting.ts │ │ │ │ ├── 0005_migrate_network_settings.ts │ │ │ │ ├── 0006_remove_lunasea.ts │ │ │ │ ├── 0007_migrate_arr_tags.ts │ │ │ │ └── 0008_migrate_blacklist_to_blocklist.ts │ │ │ └── migrator.ts │ │ └── watchlistsync.ts │ ├── logger.ts │ ├── middleware/ │ │ ├── auth.ts │ │ ├── clearcookies.ts │ │ └── deprecation.ts │ ├── migration/ │ │ ├── postgres/ │ │ │ ├── 1734786061496-InitialMigration.ts │ │ │ ├── 1734786596045-AddTelegramMessageThreadId.ts │ │ │ ├── 1734805738349-AddOverrideRules.ts │ │ │ ├── 1734809898562-FixNullFields.ts │ │ │ ├── 1737320080282-AddBlacklistTagsColumn.ts │ │ │ ├── 1743023615532-UpdateWebPush.ts │ │ │ ├── 1743107707465-AddUserAvatarCacheFields.ts │ │ │ ├── 1745492376568-UpdateWebPush.ts │ │ │ ├── 1746811308203-FixIssueTimestamps.ts │ │ │ ├── 1765233385034-AddUniqueConstraintToPushSubscription.ts │ │ │ ├── 1770627987304-AddPerformanceIndexes.ts │ │ │ ├── 1771080196816-RenameBlacklistToBlocklist.ts │ │ │ ├── 1771259406751-AddForeignKeyIndexes.ts │ │ │ ├── 1771337333450-RecoveryLinkExpirationDateTime.ts │ │ │ ├── 1772000000000-FixBlocklistIdDefault.ts │ │ │ └── 1772048000333-AddMediaTypeToUniqueConstraints.ts │ │ └── sqlite/ │ │ ├── 1603944374840-InitialMigration.ts │ │ ├── 1605085519544-SeasonStatus.ts │ │ ├── 1606730060700-CascadeMigration.ts │ │ ├── 1607928251245-DropImdbIdConstraint.ts │ │ ├── 1608217312474-AddUserRequestDeleteCascades.ts │ │ ├── 1608477467935-AddLastSeasonChangeMedia.ts │ │ ├── 1608477467936-ForceDropImdbUniqueConstraint.ts │ │ ├── 1609236552057-RemoveTmdbIdUniqueConstraint.ts │ │ ├── 1610070934506-LocalUsers.ts │ │ ├── 1610370640747-Add4kStatusFields.ts │ │ ├── 1610522845513-AddMediaAddedFieldToMedia.ts │ │ ├── 1611508672722-AddDisplayNameToUser.ts │ │ ├── 1611757511674-SonarrRadarrSyncServiceFields.ts │ │ ├── 1611801511397-AddRatingKeysToMedia.ts │ │ ├── 1612482778137-AddResetPasswordGuidAndExpiryDate.ts │ │ ├── 1612571545781-AddLanguageProfileId.ts │ │ ├── 1613379909641-AddJellyfinUserParams.ts │ │ ├── 1613412948344-ServerTypeEnum.ts │ │ ├── 1613615266968-CreateUserSettings.ts │ │ ├── 1613670041760-AddJellyfinDeviceId.ts │ │ ├── 1613955393450-UpdateUserSettingsRegions.ts │ │ ├── 1614334195680-AddTelegramSettingsToUserSettings.ts │ │ ├── 1615333940450-AddPGPToUserSettings.ts │ │ ├── 1616576677254-AddUserQuotaFields.ts │ │ ├── 1617624225464-CreateTagsFieldonMediaRequest.ts │ │ ├── 1617730837489-AddUserSettingsNotificationAgentsField.ts │ │ ├── 1618912653565-CreateUserPushSubscriptions.ts │ │ ├── 1619239659754-AddUserSettingsLocale.ts │ │ ├── 1619339817343-AddUserSettingsNotificationTypes.ts │ │ ├── 1634904083966-AddIssues.ts │ │ ├── 1635079863457-AddPushbulletPushoverUserSettings.ts │ │ ├── 1660632269368-AddWatchlistSyncUserSetting.ts │ │ ├── 1660714479373-AddMediaRequestIsAutoRequestedField.ts │ │ ├── 1672041273674-AddDiscoverSlider.ts │ │ ├── 1682608634546-AddWatchlists.ts │ │ ├── 1697393491630-AddUserPushoverSound.ts │ │ ├── 1699901142442-AddBlacklist.ts │ │ ├── 1727907530757-AddUserSettingsStreamingRegion.ts │ │ ├── 1734287582736-AddTelegramMessageThreadId.ts │ │ ├── 1734805733535-AddOverrideRules.ts │ │ ├── 1737320080282-AddBlacklistTagsColumn.ts │ │ ├── 1743023610704-UpdateWebPush.ts │ │ ├── 1743107645301-AddUserAvatarCacheFields.ts │ │ ├── 1745492372230-UpdateWebPush.ts │ │ ├── 1765233385034-AddUniqueConstraintToPushSubscription.ts │ │ ├── 1770627968781-AddPerformanceIndexes.ts │ │ ├── 1771080196816-RenameBlacklistToBlocklist.ts │ │ ├── 1771259394105-AddForeignKeyIndexes.ts │ │ ├── 1771337037917-RecoveryLinkExpirationDateTime.ts │ │ └── 1772047972752-AddMediaTypeToUniqueConstraints.ts │ ├── models/ │ │ ├── Collection.ts │ │ ├── Movie.ts │ │ ├── Person.ts │ │ ├── Search.ts │ │ ├── Tv.ts │ │ └── common.ts │ ├── repositories/ │ │ └── watchlist.repository.ts │ ├── routes/ │ │ ├── auth.test.ts │ │ ├── auth.ts │ │ ├── avatarproxy.ts │ │ ├── blocklist.ts │ │ ├── collection.ts │ │ ├── discover.ts │ │ ├── imageproxy.ts │ │ ├── index.ts │ │ ├── issue.ts │ │ ├── issueComment.ts │ │ ├── media.ts │ │ ├── movie.ts │ │ ├── overrideRule.ts │ │ ├── person.ts │ │ ├── request.ts │ │ ├── search.ts │ │ ├── service.ts │ │ ├── settings/ │ │ │ ├── discover.ts │ │ │ ├── index.ts │ │ │ ├── metadata.ts │ │ │ ├── notifications.ts │ │ │ ├── radarr.ts │ │ │ └── sonarr.ts │ │ ├── tv.ts │ │ ├── user/ │ │ │ ├── index.ts │ │ │ └── usersettings.ts │ │ └── watchlist.ts │ ├── scripts/ │ │ └── prepareTestDb.ts │ ├── subscriber/ │ │ ├── IssueCommentSubscriber.ts │ │ ├── IssueSubscriber.ts │ │ ├── MediaRequestSubscriber.ts │ │ └── MediaSubscriber.ts │ ├── templates/ │ │ └── email/ │ │ ├── generatedpassword/ │ │ │ ├── html.pug │ │ │ └── subject.pug │ │ ├── media-issue/ │ │ │ ├── html.pug │ │ │ └── subject.pug │ │ ├── media-request/ │ │ │ ├── html.pug │ │ │ └── subject.pug │ │ ├── resetpassword/ │ │ │ ├── html.pug │ │ │ └── subject.pug │ │ └── test-email/ │ │ ├── html.pug │ │ └── subject.pug │ ├── test/ │ │ ├── db.ts │ │ ├── index.mts │ │ └── setup.ts │ ├── tsconfig.json │ ├── types/ │ │ ├── custom.d.ts │ │ ├── error.ts │ │ ├── express-session.d.ts │ │ ├── express.d.ts │ │ └── languages.d.ts │ └── utils/ │ ├── DbColumnHelper.ts │ ├── appDataVolume.ts │ ├── appVersion.ts │ ├── asyncLock.ts │ ├── customProxyAgent.ts │ ├── dateHelpers.ts │ ├── dnsCache.ts │ ├── getHostname.ts │ ├── jellyfin.ts │ ├── profileMiddleware.ts │ ├── restartFlag.ts │ ├── seedTestDb.ts │ └── typeHelpers.ts ├── src/ │ ├── components/ │ │ ├── AirDateBadge/ │ │ │ └── index.tsx │ │ ├── AppDataWarning/ │ │ │ └── index.tsx │ │ ├── Blocklist/ │ │ │ └── index.tsx │ │ ├── BlocklistBlock/ │ │ │ └── index.tsx │ │ ├── BlocklistModal/ │ │ │ └── index.tsx │ │ ├── BlocklistedTagsBadge/ │ │ │ └── index.tsx │ │ ├── BlocklistedTagsSelector/ │ │ │ └── index.tsx │ │ ├── CollectionDetails/ │ │ │ └── index.tsx │ │ ├── Common/ │ │ │ ├── Accordion/ │ │ │ │ └── index.tsx │ │ │ ├── Alert/ │ │ │ │ └── index.tsx │ │ │ ├── Badge/ │ │ │ │ └── index.tsx │ │ │ ├── Button/ │ │ │ │ └── index.tsx │ │ │ ├── ButtonWithDropdown/ │ │ │ │ └── index.tsx │ │ │ ├── CachedImage/ │ │ │ │ └── index.tsx │ │ │ ├── ConfirmButton/ │ │ │ │ └── index.tsx │ │ │ ├── Dropdown/ │ │ │ │ └── index.tsx │ │ │ ├── Header/ │ │ │ │ └── index.tsx │ │ │ ├── ImageFader/ │ │ │ │ └── index.tsx │ │ │ ├── LabeledCheckbox/ │ │ │ │ └── index.tsx │ │ │ ├── List/ │ │ │ │ └── index.tsx │ │ │ ├── ListView/ │ │ │ │ └── index.tsx │ │ │ ├── LoadingSpinner/ │ │ │ │ └── index.tsx │ │ │ ├── Modal/ │ │ │ │ └── index.tsx │ │ │ ├── MultiRangeSlider/ │ │ │ │ └── index.tsx │ │ │ ├── PageTitle/ │ │ │ │ └── index.tsx │ │ │ ├── PlayButton/ │ │ │ │ └── index.tsx │ │ │ ├── ProgressCircle/ │ │ │ │ └── index.tsx │ │ │ ├── SensitiveInput/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsTabs/ │ │ │ │ └── index.tsx │ │ │ ├── SlideCheckbox/ │ │ │ │ └── index.tsx │ │ │ ├── SlideOver/ │ │ │ │ └── index.tsx │ │ │ ├── StatusBadgeMini/ │ │ │ │ └── index.tsx │ │ │ ├── Table/ │ │ │ │ └── index.tsx │ │ │ ├── Tag/ │ │ │ │ └── index.tsx │ │ │ └── Tooltip/ │ │ │ └── index.tsx │ │ ├── CompanyCard/ │ │ │ └── index.tsx │ │ ├── CompanyTag/ │ │ │ └── index.tsx │ │ ├── Discover/ │ │ │ ├── CreateSlider/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverMovieGenre/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverMovieKeyword/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverMovieLanguage/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverMovies/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverNetwork/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverSliderEdit/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverStudio/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverTv/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverTvGenre/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverTvKeyword/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverTvLanguage/ │ │ │ │ └── index.tsx │ │ │ ├── DiscoverTvUpcoming.tsx │ │ │ ├── DiscoverWatchlist/ │ │ │ │ └── index.tsx │ │ │ ├── FilterSlideover/ │ │ │ │ └── index.tsx │ │ │ ├── MovieGenreList/ │ │ │ │ └── index.tsx │ │ │ ├── MovieGenreSlider/ │ │ │ │ └── index.tsx │ │ │ ├── NetworkSlider/ │ │ │ │ └── index.tsx │ │ │ ├── PlexWatchlistSlider/ │ │ │ │ └── index.tsx │ │ │ ├── RecentRequestsSlider/ │ │ │ │ └── index.tsx │ │ │ ├── RecentlyAddedSlider/ │ │ │ │ └── index.tsx │ │ │ ├── StudioSlider/ │ │ │ │ └── index.tsx │ │ │ ├── Trending.tsx │ │ │ ├── TvGenreList/ │ │ │ │ └── index.tsx │ │ │ ├── TvGenreSlider/ │ │ │ │ └── index.tsx │ │ │ ├── Upcoming.tsx │ │ │ ├── constants.ts │ │ │ └── index.tsx │ │ ├── DownloadBlock/ │ │ │ └── index.tsx │ │ ├── ExternalLinkBlock/ │ │ │ └── index.tsx │ │ ├── GenreCard/ │ │ │ └── index.tsx │ │ ├── GenreTag/ │ │ │ └── index.tsx │ │ ├── IssueBlock/ │ │ │ └── index.tsx │ │ ├── IssueDetails/ │ │ │ ├── IssueComment/ │ │ │ │ └── index.tsx │ │ │ ├── IssueDescription/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── IssueList/ │ │ │ ├── IssueItem/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── IssueModal/ │ │ │ ├── CreateIssueModal/ │ │ │ │ └── index.tsx │ │ │ ├── constants.ts │ │ │ └── index.tsx │ │ ├── JSONEditor/ │ │ │ └── index.tsx │ │ ├── KeywordTag/ │ │ │ └── index.tsx │ │ ├── LanguageSelector/ │ │ │ └── index.tsx │ │ ├── Layout/ │ │ │ ├── LanguagePicker/ │ │ │ │ └── index.tsx │ │ │ ├── MobileMenu/ │ │ │ │ └── index.tsx │ │ │ ├── Notifications/ │ │ │ │ └── index.tsx │ │ │ ├── PullToRefresh/ │ │ │ │ └── index.tsx │ │ │ ├── SearchInput/ │ │ │ │ └── index.tsx │ │ │ ├── Sidebar/ │ │ │ │ └── index.tsx │ │ │ ├── UserDropdown/ │ │ │ │ ├── MiniQuotaDisplay/ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── UserWarnings/ │ │ │ │ └── index.tsx │ │ │ ├── VersionStatus/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── LoadingBar/ │ │ │ └── index.tsx │ │ ├── Login/ │ │ │ ├── AddEmailModal.tsx │ │ │ ├── JellyfinLogin.tsx │ │ │ ├── LocalLogin.tsx │ │ │ ├── PlexLoginButton.tsx │ │ │ └── index.tsx │ │ ├── ManageSlideOver/ │ │ │ └── index.tsx │ │ ├── MediaSlider/ │ │ │ ├── ShowMoreCard/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── MetadataSelector/ │ │ │ └── index.tsx │ │ ├── MovieDetails/ │ │ │ ├── MovieCast/ │ │ │ │ └── index.tsx │ │ │ ├── MovieCrew/ │ │ │ │ └── index.tsx │ │ │ ├── MovieRecommendations.tsx │ │ │ ├── MovieSimilar.tsx │ │ │ └── index.tsx │ │ ├── NotificationTypeSelector/ │ │ │ ├── NotificationType/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── PWAHeader/ │ │ │ └── index.tsx │ │ ├── PermissionEdit/ │ │ │ └── index.tsx │ │ ├── PermissionOption/ │ │ │ └── index.tsx │ │ ├── PersonCard/ │ │ │ └── index.tsx │ │ ├── PersonDetails/ │ │ │ └── index.tsx │ │ ├── QuotaSelector/ │ │ │ └── index.tsx │ │ ├── RegionSelector/ │ │ │ └── index.tsx │ │ ├── RequestBlock/ │ │ │ └── index.tsx │ │ ├── RequestButton/ │ │ │ └── index.tsx │ │ ├── RequestCard/ │ │ │ └── index.tsx │ │ ├── RequestList/ │ │ │ ├── RequestItem/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── RequestModal/ │ │ │ ├── AdvancedRequester/ │ │ │ │ └── index.tsx │ │ │ ├── CollectionRequestModal.tsx │ │ │ ├── MovieRequestModal.tsx │ │ │ ├── QuotaDisplay/ │ │ │ │ └── index.tsx │ │ │ ├── SearchByNameModal/ │ │ │ │ └── index.tsx │ │ │ ├── TvRequestModal.tsx │ │ │ └── index.tsx │ │ ├── ResetPassword/ │ │ │ ├── RequestResetLink.tsx │ │ │ └── index.tsx │ │ ├── Search/ │ │ │ └── index.tsx │ │ ├── Selector/ │ │ │ ├── CertificationSelector.tsx │ │ │ ├── USCertificationSelector.tsx │ │ │ └── index.tsx │ │ ├── ServiceWorkerSetup/ │ │ │ └── index.tsx │ │ ├── Settings/ │ │ │ ├── CopyButton.tsx │ │ │ ├── LibraryItem.tsx │ │ │ ├── Notifications/ │ │ │ │ ├── NotificationsDiscord.tsx │ │ │ │ ├── NotificationsEmail.tsx │ │ │ │ ├── NotificationsGotify/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── NotificationsNtfy/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── NotificationsPushbullet/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── NotificationsPushover/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── NotificationsSlack/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── NotificationsTelegram.tsx │ │ │ │ ├── NotificationsWebPush/ │ │ │ │ │ └── index.tsx │ │ │ │ └── NotificationsWebhook/ │ │ │ │ └── index.tsx │ │ │ ├── OverrideRule/ │ │ │ │ ├── OverrideRuleModal.tsx │ │ │ │ └── OverrideRuleTiles.tsx │ │ │ ├── RadarrModal/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsAbout/ │ │ │ │ ├── Releases/ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── SettingsBadge.tsx │ │ │ ├── SettingsJellyfin.tsx │ │ │ ├── SettingsJobsCache/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsLayout.tsx │ │ │ ├── SettingsLogs/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsMain/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsMetadata.tsx │ │ │ ├── SettingsNetwork/ │ │ │ │ └── index.tsx │ │ │ ├── SettingsNotifications.tsx │ │ │ ├── SettingsPlex.tsx │ │ │ ├── SettingsServices.tsx │ │ │ ├── SettingsUsers/ │ │ │ │ └── index.tsx │ │ │ └── SonarrModal/ │ │ │ └── index.tsx │ │ ├── Setup/ │ │ │ ├── JellyfinSetup.tsx │ │ │ ├── LoginWithPlex.tsx │ │ │ ├── SetupLogin.tsx │ │ │ ├── SetupSteps.tsx │ │ │ └── index.tsx │ │ ├── Slider/ │ │ │ └── index.tsx │ │ ├── StatusBadge/ │ │ │ └── index.tsx │ │ ├── StatusChecker/ │ │ │ └── index.tsx │ │ ├── TitleCard/ │ │ │ ├── ErrorCard.tsx │ │ │ ├── Placeholder.tsx │ │ │ ├── TmdbTitleCard.tsx │ │ │ └── index.tsx │ │ ├── Toast/ │ │ │ └── index.tsx │ │ ├── ToastContainer/ │ │ │ └── index.tsx │ │ ├── TvDetails/ │ │ │ ├── Season/ │ │ │ │ └── index.tsx │ │ │ ├── TvCast/ │ │ │ │ └── index.tsx │ │ │ ├── TvCrew/ │ │ │ │ └── index.tsx │ │ │ ├── TvRecommendations.tsx │ │ │ ├── TvSimilar.tsx │ │ │ └── index.tsx │ │ ├── UserList/ │ │ │ ├── BulkEditModal.tsx │ │ │ ├── JellyfinImportModal.tsx │ │ │ ├── PlexImportModal.tsx │ │ │ └── index.tsx │ │ └── UserProfile/ │ │ ├── ProfileHeader/ │ │ │ └── index.tsx │ │ ├── UserSettings/ │ │ │ ├── UserGeneralSettings/ │ │ │ │ └── index.tsx │ │ │ ├── UserLinkedAccountsSettings/ │ │ │ │ ├── LinkJellyfinModal.tsx │ │ │ │ └── index.tsx │ │ │ ├── UserNotificationSettings/ │ │ │ │ ├── UserNotificationsDiscord.tsx │ │ │ │ ├── UserNotificationsEmail.tsx │ │ │ │ ├── UserNotificationsPushbullet.tsx │ │ │ │ ├── UserNotificationsPushover.tsx │ │ │ │ ├── UserNotificationsTelegram.tsx │ │ │ │ ├── UserNotificationsWebPush/ │ │ │ │ │ ├── DeviceItem.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── UserPasswordChange/ │ │ │ │ └── index.tsx │ │ │ ├── UserPermissions/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── context/ │ │ ├── InteractionContext.tsx │ │ ├── LanguageContext.tsx │ │ ├── SettingsContext.tsx │ │ └── UserContext.tsx │ ├── hooks/ │ │ ├── useClickOutside.ts │ │ ├── useDebouncedState.ts │ │ ├── useDeepLinks.ts │ │ ├── useDiscover.ts │ │ ├── useInteraction.ts │ │ ├── useIsTouch.ts │ │ ├── useLocale.ts │ │ ├── useLockBodyScroll.ts │ │ ├── usePlexLogin.ts │ │ ├── useRequestOverride.ts │ │ ├── useRouteGuard.ts │ │ ├── useSearchInput.ts │ │ ├── useSettings.ts │ │ ├── useUpdateQueryParams.ts │ │ ├── useUser.ts │ │ └── useVerticalScroll.ts │ ├── i18n/ │ │ ├── extractMessages.ts │ │ ├── globalMessages.ts │ │ └── locale/ │ │ ├── ar.json │ │ ├── bg.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── el.json │ │ ├── en.json │ │ ├── es.json │ │ ├── es_MX.json │ │ ├── et.json │ │ ├── eu.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── he.json │ │ ├── hi.json │ │ ├── hr.json │ │ ├── hu.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── ko.json │ │ ├── lb.json │ │ ├── lt.json │ │ ├── nb_NO.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt_BR.json │ │ ├── pt_PT.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── sk.json │ │ ├── sl.json │ │ ├── sq.json │ │ ├── sr.json │ │ ├── sv.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── vi.json │ │ ├── zh_Hans.json │ │ └── zh_Hant.json │ ├── pages/ │ │ ├── 404.tsx │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── _error.tsx │ │ ├── blocklist/ │ │ │ └── index.tsx │ │ ├── collection/ │ │ │ └── [collectionId]/ │ │ │ └── index.tsx │ │ ├── discover/ │ │ │ ├── movies/ │ │ │ │ ├── genre/ │ │ │ │ │ └── [genreId]/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── genres.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── keyword/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── language/ │ │ │ │ │ └── [language]/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── studio/ │ │ │ │ │ └── [studioId]/ │ │ │ │ │ └── index.tsx │ │ │ │ └── upcoming.tsx │ │ │ ├── trending.tsx │ │ │ ├── tv/ │ │ │ │ ├── genre/ │ │ │ │ │ └── [genreId]/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── genres.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── keyword/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── language/ │ │ │ │ │ └── [language]/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── network/ │ │ │ │ │ └── [networkId]/ │ │ │ │ │ └── index.tsx │ │ │ │ └── upcoming.tsx │ │ │ └── watchlist.tsx │ │ ├── index.tsx │ │ ├── issues/ │ │ │ ├── [issueId]/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── login/ │ │ │ ├── index.tsx │ │ │ └── plex/ │ │ │ └── loading.tsx │ │ ├── movie/ │ │ │ └── [movieId]/ │ │ │ ├── cast.tsx │ │ │ ├── crew.tsx │ │ │ ├── index.tsx │ │ │ ├── recommendations.tsx │ │ │ └── similar.tsx │ │ ├── person/ │ │ │ └── [personId]/ │ │ │ └── index.tsx │ │ ├── profile/ │ │ │ ├── index.tsx │ │ │ ├── settings/ │ │ │ │ ├── index.tsx │ │ │ │ ├── linked-accounts.tsx │ │ │ │ ├── main.tsx │ │ │ │ ├── notifications/ │ │ │ │ │ ├── discord.tsx │ │ │ │ │ ├── email.tsx │ │ │ │ │ ├── pushbullet.tsx │ │ │ │ │ ├── pushover.tsx │ │ │ │ │ ├── telegram.tsx │ │ │ │ │ └── webpush.tsx │ │ │ │ ├── password.tsx │ │ │ │ └── permissions.tsx │ │ │ └── watchlist.tsx │ │ ├── requests/ │ │ │ └── index.tsx │ │ ├── resetpassword/ │ │ │ ├── [guid]/ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── search.tsx │ │ ├── settings/ │ │ │ ├── about.tsx │ │ │ ├── index.tsx │ │ │ ├── jellyfin.tsx │ │ │ ├── jobs.tsx │ │ │ ├── logs.tsx │ │ │ ├── main.tsx │ │ │ ├── metadata.tsx │ │ │ ├── network.tsx │ │ │ ├── notifications/ │ │ │ │ ├── discord.tsx │ │ │ │ ├── email.tsx │ │ │ │ ├── gotify.tsx │ │ │ │ ├── ntfy.tsx │ │ │ │ ├── pushbullet.tsx │ │ │ │ ├── pushover.tsx │ │ │ │ ├── slack.tsx │ │ │ │ ├── telegram.tsx │ │ │ │ ├── webhook.tsx │ │ │ │ └── webpush.tsx │ │ │ ├── plex.tsx │ │ │ ├── services.tsx │ │ │ └── users.tsx │ │ ├── setup.tsx │ │ ├── tv/ │ │ │ └── [tvId]/ │ │ │ ├── cast.tsx │ │ │ ├── crew.tsx │ │ │ ├── index.tsx │ │ │ ├── recommendations.tsx │ │ │ └── similar.tsx │ │ └── users/ │ │ ├── [userId]/ │ │ │ ├── index.tsx │ │ │ ├── requests.tsx │ │ │ ├── settings/ │ │ │ │ ├── index.tsx │ │ │ │ ├── linked-accounts.tsx │ │ │ │ ├── main.tsx │ │ │ │ ├── notifications/ │ │ │ │ │ ├── discord.tsx │ │ │ │ │ ├── email.tsx │ │ │ │ │ ├── pushbullet.tsx │ │ │ │ │ ├── pushover.tsx │ │ │ │ │ ├── telegram.tsx │ │ │ │ │ └── webpush.tsx │ │ │ │ ├── password.tsx │ │ │ │ └── permissions.tsx │ │ │ └── watchlist.tsx │ │ └── index.tsx │ ├── styles/ │ │ └── globals.css │ ├── types/ │ │ ├── custom.d.ts │ │ └── react-intl-auto.d.ts │ └── utils/ │ ├── creditHelpers.ts │ ├── defineMessages.ts │ ├── jellyfin.ts │ ├── numberHelpers.ts │ ├── plex.ts │ ├── polyfillIntl.ts │ ├── pushSubscriptionHelpers.ts │ ├── refreshIntervalHelper.ts │ ├── typeHelpers.ts │ └── urlValidationHelper.ts ├── stylelint.config.js ├── tailwind.config.js └── tsconfig.json