Skip to content
All projects
In development

Remote-First Photo and Video Viewer

A photo and video viewer for Android TV and Google TV, designed around the D-pad.

Role
Designer and developer
Year
2026

What it is

A Flutter app for Android TV and Google TV that browses large photo and video collections with a remote control. Version 0.1 is an offline demo with sample media.

The problem

TV apps are driven by a five-button remote on a large screen, and big libraries must scroll smoothly on low-memory devices.

Architecture

Requests flow left to right. Hover a component for its role.

Remote-First Photo and Video Viewer architectureD-pad remoteD-pad remoteFlutter UI: written focus contractFlutter UIRiverpod stateRiverpod stateVirtualised media grid: 64 MiB decode capVirtualised mediagridPlayback controller: serialised seeksPlayback controllerKotlin bridge: MediaSession, audio focusKotlin bridge
Solid line: synchronous callDashed line: through a queueDashed box: external or infrastructure
  • D-pad remote client
  • Flutter UI service, written focus contract
  • Riverpod state service
  • Virtualised media grid data, 64 MiB decode cap
  • Playback controller service, serialised seeks
  • Kotlin bridge infrastructure, MediaSession, audio focus

Key decisions

  • The remote is the spec

    A written remote-control contract defines what every button does on every screen before any screen is built.

  • Intent separate from effect

    The playback controller separates what the user asked for from side effects and serialises seeks, so rapid button presses cannot corrupt playback.

Highlights

  • Paginated grid that drops stale requests.
  • Image decode and cache capped at 64 MiB and 100 entries.
  • Architecture decision record, privacy notes, unit and integration tests.

Stack

FlutterDartRiverpodgo_routerKotlinAndroid TV
Welcome screen of the TV viewer running in the Android TV emulator
Welcome screen of the TV viewer running in the Android TV emulator