diff --git a/README.md b/README.md
index 504cf99c..5167f9bc 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
- Container status (Running / Stopped) & statistics (CPU, Memory, Network)
- Automatic service discovery (via labels)
* Service Integration
- - Currently supports Sonarr, Radarr, Ombi, Emby, Jellyfin, Tautulli (Plex), Jellyseerr ([ilusi0n](https://github.com/benphelps/homepage/pull/34)), NZBGet, ruTorrent
+ - Currently supports Sonarr, Radarr, Ombi, Emby, Jellyfin, Tautulli (Plex), Overseerr, Jellyseerr ([ilusi0n](https://github.com/benphelps/homepage/pull/34)), NZBGet, ruTorrent
- Portainer, Traefik, Speedtest Tracker, PiHole, Nginx Proxy Manager ([aidenpwnz](https://github.com/benphelps/homepage/pull/45))
* Information & Utility Widgets
- System Stats (Disk, CPU, Memory)
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 2276009e..72c0e02a 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -78,6 +78,11 @@
"approved": "Approved",
"available": "Available"
},
+ "overseerr": {
+ "pending": "Pending",
+ "approved": "Approved",
+ "available": "Available"
+ },
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx
index 199dbd5d..41257a5c 100644
--- a/src/components/services/widget.jsx
+++ b/src/components/services/widget.jsx
@@ -13,6 +13,7 @@ import Jellyfin from "./widgets/service/jellyfin";
import Speedtest from "./widgets/service/speedtest";
import Traefik from "./widgets/service/traefik";
import Jellyseerr from "./widgets/service/jellyseerr";
+import Overseerr from "./widgets/service/overseerr";
import Npm from "./widgets/service/npm";
import Tautulli from "./widgets/service/tautulli";
@@ -30,6 +31,7 @@ const widgetMappings = {
speedtest: Speedtest,
traefik: Traefik,
jellyseerr: Jellyseerr,
+ overseerr: Overseerr,
npm: Npm,
tautulli: Tautulli,
};
diff --git a/src/components/services/widgets/service/overseerr.jsx b/src/components/services/widgets/service/overseerr.jsx
new file mode 100644
index 00000000..2e97d5a9
--- /dev/null
+++ b/src/components/services/widgets/service/overseerr.jsx
@@ -0,0 +1,37 @@
+import useSWR from "swr";
+import { useTranslation } from "react-i18next";
+
+import Widget from "../widget";
+import Block from "../block";
+
+import { formatApiUrl } from "utils/api-helpers";
+
+export default function Overseerr({ service }) {
+ const { t } = useTranslation();
+
+ const config = service.widget;
+
+ const { data: statsData, error: statsError } = useSWR(formatApiUrl(config, `request/count`));
+
+ if (statsError) {
+ return ;
+ }
+
+ if (!statsData) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js
index 970008e1..c4ef2b3b 100644
--- a/src/pages/api/services/proxy.js
+++ b/src/pages/api/services/proxy.js
@@ -17,6 +17,7 @@ const serviceProxyHandlers = {
// uses X-API-Key header auth
portainer: credentialedProxyHandler,
jellyseerr: credentialedProxyHandler,
+ overseerr: credentialedProxyHandler,
ombi: credentialedProxyHandler,
// super specific handlers
rutorrent: rutorrentProxyHandler,
diff --git a/src/utils/api-helpers.js b/src/utils/api-helpers.js
index a889487e..c8953a82 100644
--- a/src/utils/api-helpers.js
+++ b/src/utils/api-helpers.js
@@ -10,6 +10,7 @@ const formats = {
portainer: `{url}/api/endpoints/{env}/{endpoint}`,
rutorrent: `{url}/plugins/httprpc/action.php`,
jellyseerr: `{url}/api/v1/{endpoint}`,
+ overseerr: `{url}/api/v1/{endpoint}`,
ombi: `{url}/api/v1/{endpoint}`,
npm: `{url}/api/{endpoint}`,
};