Skip to content

Overseerr integration (exclude requested/available + request on match) - #18

Merged
valeboth merged 3 commits into
mainfrom
feat/overseerr
Aug 25, 2026
Merged

valeboth merged 3 commits into
mainfrom
feat/overseerr

Conversation

@valeboth

Copy link
Copy Markdown
Owner

Overseerr integration (best-effort, opt-in via secrets)

  • Exclude from deck titles already in the Overseerr pipeline (pending / processing / available), by tmdbId (from GET /api/v1/media), KV-cached ~1h. So "what we already have / already asked for" stops showing up.
  • "Add to Overseerr" on match → POST /api/rooms/:id/request → Overseerr POST /api/v1/request (TV → all seasons). Cache invalidated so it drops out of decks quickly.
  • Secrets: OVERSEERR_URL + OVERSEERR_API_KEY (never in code/frontend). If unset, the feature is inert — no exclusion, request returns not_configured.
  • Auth-gated request route.

Verified local (unconfigured)

  • Deck unaffected (40 cards), request → not_configured (502), stranger → 403 ✅
  • lint/typecheck/build ✅ · health → v3.0

Pending (needs your setup)

Overseerr must be reachable from the internet (the Worker runs in the cloud). Once we confirm reachability and set OVERSEERR_URL + OVERSEERR_API_KEY, I'll run the live test (exclusion + a real request).

… match)

- services/overseerr.ts: best-effort, KV-cached (1h) set of tmdb ids already in the
  Overseerr pipeline (pending/processing/available via /api/v1/media); createRequest
  via POST /api/v1/request (tv -> seasons: all)
- deck: exclude Overseerr requested/available titles from what's served (getDeckForUser)
- POST /api/rooms/:id/request ('Add to Overseerr' on match), auth-gated
- Env: OVERSEERR_URL + OVERSEERR_API_KEY (secrets, optional); feature inert if unset
- frontend: 'Add to Overseerr' button on the match screen
- health -> v3.0

Tested local (unconfigured): deck unaffected, request -> not_configured (502), auth 403.
Live Overseerr test pending reachability + URL/key.
- send CF-Access-Client-Id/Secret when set (for Overseerr behind Cloudflare Access/Zero Trust)
- keeps working without Access (plain tunnel) when unset
- .dev.vars.example: OVERSEERR_URL/KEY + optional CF_ACCESS_CLIENT_ID/SECRET
@valeboth
valeboth merged commit 8c240e5 into main Aug 25, 2026
1 check passed
@valeboth
valeboth deleted the feat/overseerr branch August 25, 2026 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant