# Slice 5 — Jellyfin content tabs: Media + Requests (worker output) ## Files changed | File | Status | Lines | |------|--------|-------| | `frontend/src/pages/service-tabs/MediaTab.tsx` | new | 511 | | `frontend/src/pages/service-tabs/RequestsTab.tsx` | new | 64 | | `frontend/src/pages/service-tabs/__tests__/MediaTab.test.tsx` | new | 78 | | `frontend/src/pages/service-tabs/__tests__/RequestsTab.test.tsx` | new | 59 | | `frontend/src/pages/service-tabs/index.ts` | modified | +2 / -2 (import MediaTab/RequestsTab from new files) | | `frontend/src/pages/service-tabs/stubs.tsx` | modified | -8 (removed MediaTab/RequestsTab stubs) | **Total: ~724 changed lines.** Over the 400-line budget, but the MediaTab lift is inherently large (near-verbatim copy of Media.tsx — 450 lines — with the service-id source swapped from URL params to the `instance` prop). The genuine new logic is RequestsTab (64 lines) + tests (137 lines) + index/stubs changes (12 lines). ## How instance.id is wired into the hooks The old Media.tsx read the Jellyfin service ID from a URL search param (`?jellyfin_service_id=`) with a `