All work

Full-stack engineering · Realtime systems · Interaction design · 2026

PlayAgain

A browser gaming application that connects a TV or desktop screen with phones as controllers.

Web application · Personal project

Next.jsWebRTCWebSockets
PlayAgain interface
Live website, host room, paired phone controller and built-in Demo Arena, captured in September 2026.

The problem

Playing together across a shared screen and personal phones requires a clear pairing flow, responsive input and reliable connection handling. I built PlayAgain around a host screen, mobile controllers and browser-based emulation, bringing those separate device roles into one application.

Engineering

Next.js and TypeScript provide the host, controller and API routes. Browser clients handle emulation, rendering and audio; the realtime layer connects room membership and controller input through WebSockets, WebRTC and Redis pub/sub. QR pairing, room tokens, input protocols and connection state management support the interaction between devices.

Device experience

The host interface supports large screens and gamepad navigation, while the mobile interface provides touch controls and paired gamepad input. A controller-run mode lets the phone run the emulator and stream video and audio to the host. Authentication, Google Drive library routes and save-state handling sit alongside the gameplay interface.

Verification

The repository includes tests for binary input protocols, connection state, host and controller behavior, and transport switching. The screenshots show the live landing page, host room, paired phone controller and the built-in controller demo.

Project visuals

Select an image to view it at full size.

Current product landing page on the live website.
Current product landing page on the live website.
Live host room with QR pairing and console choices.
Live host room with QR pairing and console choices.
Phone controller paired to the live room over WebSocket.
Phone controller paired to the live room over WebSocket.
Built-in Demo Arena for testing controller input.
Built-in Demo Arena for testing controller input.