---
title: "Cornerman"
url: https://manvsmidi.com/projects/cornerman/
category: tool
status: playable
date: 2026-07-13
tags: [boxing, web, typescript, sports]
play: https://manvsmidi.com/play/cornerman/
related: [counterpunch, phonyhawk, mario3d, cube, wyrmfall]
---

# Cornerman

> A boxing round timer for your phone that calls out combos while you work. It has a bell, a wood-block warning near the end of each round, and spoken punch numbers. No backend, nothing to sign up for.

Tool · Playable · 2026-07-13

**Play in the browser:** https://manvsmidi.com/play/cornerman/

A mobile-first web app that combines a boxing round timer with a coach who shouts combos at you. You set the number of rounds, the work and rest lengths, a prepare countdown and when the end-of-round warning starts, then press start and leave the phone on the floor.

## What it does

- **Round timer.** A bell starts each round. A wood-block clack sounds every second in the closing window, a buzzer ends the round, and there's a flourish when you finish.
- **Pop-shot mode.** During work, the phone's text-to-speech calls a combo at a cadence you choose. Callouts never talk over the end-of-round warning.
- **Combo library.** A preset library in beginner, intermediate and advanced tiers, plus a tap-to-build editor for your own. Callouts can be numeric ("one, two") or named ("jab, cross").
- **Gym-floor details.** Big high-contrast numbers, a screen wake lock so the phone doesn't sleep mid-round, and home-screen install.

It uses the standard number system: 1 jab, 2 cross, 3 lead hook, 4 rear hook, 5 lead uppercut, 6 rear uppercut, plus modifiers like body, feint, slip and roll. So `1-1 body-2` is spoken as "jab, jab to the body, cross".

![The combo editor with 1, 2, slip, 2, 3 body entered as chips and the spoken preview below them, above a grid of strike buttons](https://manvsmidi.com/_astro/combo-editor.Bv_zslgf.png)
*Building a combo by tapping strikes. The line under the chips is what the phone will say.*

## How it's built

React, Vite and TypeScript, and nothing on a server. Settings and custom combos live in localStorage.

- The timer is a pure state machine (idle, prepare, work, rest, finished) with unit tests.
- The display reads from a wall-clock deadline instead of counting ticks, so it stays accurate when the browser throttles a background tab.
- Every sound is synthesized with the Web Audio API. There are no audio files. The bell is three decaying sine partials and the clack is a short burst of filtered noise.
- Audio and speech unlock on the first tap of Start, which is what mobile browsers require.

## Connected projects

- [Counterpunch](https://manvsmidi.com/projects/counterpunch/index.md): linked
- [Phony Hawk: Faux Skater](https://manvsmidi.com/projects/phonyhawk/index.md): shared tags: typescript, sports
- [mario3d](https://manvsmidi.com/projects/mario3d/index.md): shared tags: typescript
- [Cube Trainer](https://manvsmidi.com/projects/cube/index.md): shared tags: typescript
- [Wyrmfall](https://manvsmidi.com/projects/wyrmfall/index.md): shared tags: typescript
