Back to work
Product · Arcade games played by rowing

RowPlay

Games you play on a rowing machine: race a glowing ghost of your best row across a 3D lake, hop lily pads with stroke power, battle bosses that call interval challenges, row a Viking longship to a drummer's beat, outrow a horde through a flooded city, fly a cave shooter, or gallop a unicorn through the clouds. The rower's own tablet runs them with nothing else attached.

Live2026Design and build
Ghost Race on RowPlay: a single scull rows across a lake at sunset beside a glowing cyan ghost boat, with meters to go, race clock, split and stroke rate across the top and a finish gantry ahead

Problem

A connected rower's workouts all have the same shape: hold a pace and watch a number. Rowing is rhythmic, repetitive and hard, which is exactly the kind of input an arcade game can ride, but the rower's tablet only runs the maker's app.

Approach

  1. 01

    Read the rower directly. The sensor speaks the published WaterRower S4 USB protocol: stroke start and end, plus paddle pulses about forty times a second. Pulses per second become effort, and effort becomes lift and speed.

  2. 02

    Design for a body that is working. Hands never leave the handle, so rowing is the only controller: pull harder to climb, ease off to sink, every stroke fires a burst, and pulling above your hover effort keeps the guns hot. Stop rowing and the game waits.

  3. 03

    Race yourself. Ghost Race turns the rower's own reported boat speed into a 3D single scull on a sunset lake, animated stroke by stroke from the real catch and finish timing. Every best row is saved and comes back as a glowing ghost to beat.

  4. 04

    Fit the game to the player. Ten warm-up strokes measure effort and pick Easy, Medium or Hard. Each level is a set of values for speed, gravity, drag, enemy density and boss toughness, tuned live with sliders mid-row.

  5. 05

    Ship it as a website. The games live at rowplay.net and update without installs. Chrome on the rower's tablet cannot take the sensor from Android's serial driver, so a small Android app opens the site full screen and stands in for WebUSB; the same games run unchanged in either.

Architecture

Rower sensor (USB serial) → a thin Android app that claims the device and hands it to the page as WebUSB → games on rowplay.net read strokes and pulses. In desktop Chrome the same games talk WebUSB directly.

Built with

  • Three.js / WebGL
  • Canvas 2D
  • Web Audio
  • WebUSB
  • Android WebView
  • Vercel

Outcome

Live at rowplay.net with seven games: Ghost Race, a 3D race against your own best row with real-time water, sky and bloom; Stroke Hopper, where each stroke's power sets how far you hop; Boss Rush, five bosses that call rate, power and steady-stroke challenges; Beat Row, a rhythm game with live-generated music and a Fjord Voyage mode that rows a longship through calm water, narrows and a storm; Horde Escape, a night chase through a flooded city that paces itself off your speed; Unicorn Sky, a gentle cloud-hopping game for young riders; and Cave Flyer, an 80s-style cave shooter with a boss every stage, with the original kept as a Classic mode. Playing on a real rower with no computer attached, and on a phone held sideways for anyone without one.

Decisions

  • A website plus a thin app over a full native game

    because games update the moment they deploy; the app only bridges the sensor and rarely changes.

  • Effort from paddle pulses over counting strokes

    because a stroke every two seconds is too slow to steer with; pulses give a continuous signal the ship can follow.

  • A warm-up that picks the level over a difficulty menu

    because the player is already on the handle, and ten strokes say more about their pace than a guess on a screen.

Next

Ziggurat

A habit tracker where every check-in lays a stone. A week of habits becomes a course, courses raise a ziggurat, and everything you finish takes a plot in a city that never resets.