A self-hosted web app that controls your TV (specifically for Netflix) from your phone/browser. Runs on your local network.
- Next.js 14 (App Router) — React frontend + API routes backend
- Tailwind CSS 3 — Styling (dark Netflix theme)
- TypeScript 5 — Type safety
- lgtv2 — LG webOS TV control via WebSocket/SSAP
- ws — WebSocket for Samsung TV control
- node-ssdp — SSDP network discovery for finding TVs
- Browser → HTTP → Next.js API routes → TV-specific protocol → Smart TV
- Backend is required because browsers can't connect to TV protocols (CORS, raw TCP, UDP)
- Singleton TV connection managed in
src/lib/tv-manager.ts - Config persisted to
~/.netflixremote/config.json
src/lib/adapters/types.ts— UnifiedTVAdapterinterfacesrc/lib/adapters/lg-webos.ts— LG webOS (SSAP over WebSocket port 3000)src/lib/adapters/samsung.ts— Samsung Tizen (WebSocket port 8001/8002)src/lib/adapters/roku.ts— Roku (HTTP REST on port 8060)src/lib/adapters/stub.ts— Placeholder for unimplemented platformssrc/lib/adapters/index.ts— Factory function + brand list
src/app/page.tsx— Root redirect (auto-connect or setup)src/app/setup/page.tsx— TV selection, IP entry, pairing flowsrc/app/remote/page.tsx— Main remote UI (d-pad + keyboard tabs)src/app/api/tv/*/route.ts— All TV control API endpointssrc/lib/tv-manager.ts— Singleton connection managersrc/lib/config.ts— Config file read/writesrc/lib/discovery.ts— SSDP network scanner
- LG webOS — Full support (remote, keyboard via IME, media, volume, apps)
- Samsung — Full support (remote, keyboard via SendInputString, media, volume)
- Roku — Full support (remote, keyboard via Lit_ prefix, media, volume)
- Others — Stub adapters ready for implementation
npm run dev # Development on http://localhost:3000
npm run build # Production build
npm start # Start production server- LG webOS:
netflix - Samsung: uses KEY_HDMI or Smart View SDK
- Roku:
12