Empty gym, two court lines, a phone left on the floor watching the 20 metre lane

Working notes · lukestephens.com

One number two people will believe.

The beep test is already a cultural object. What it does not have is a globally governed result. This page is the history, the decisions, and the ways a phone might earn that trust — or fail to.

Not a launched product. A sanctioning idea with an app attached. Draft 2026-08-15.

Thesis

The product is a trusted 20.0 m result

Not an AI gym camera. Not a Guinness stunt. Those are tactics. If a level-plus-shuttle is trusted, leaderboards, 50c official stamps, gym nights, friend challenges, and a world-record day all sit on top. If it is not trusted, none of that matters.

Official, here, means reviewable — 20.0 m course, the app’s own beep track, a claimed athlete, a one-foot line touch before the beep, and a clip you can argue about. Unsupervised YOLO is not v1.

History

How the beep test became several tests

Luc Léger’s maximal 20 m shuttle is simple: run, turn, touch the line with the beep. The forks that followed changed the clock, the start speed, and what “the score” even is. Mixed laps and levels are not the same number.

1982
Léger & Lambert — first published maximal multistage 20 m shuttle. Two-minute stages from 8 km/h, +0.5 km/h every two minutes. Built to estimate VO2max without a lab.
1988
Léger 1-minute protocol — the version most people mean. Start 8.5 km/h, +0.5 km/h each minute. Score is the last announced stage, then converted to speed and (optionally) VO2max. This is the protocol we would lock.
1988–
Ramsbottom et al. — progressive shuttle with a level-plus-shuttle VO2 look-up. Sample means around level 12.6 / 121 shuttles (men) and 9.6 / 85 (women). Still a look-up, not an adult age×sex percentile chart.
1990s
Eurofit / PACER / QUB — same 20 m idea, different start speeds and scoring. PACER-style often starts 8.0 then 9.0 km/h and scores last completed lap. FITNESSGRAM wording of the miss rule is not identical to “two consecutive.”
2017
Tomkinson et al. — international 20 m SRT centiles for ages 9–17 from 1,142,026 youth in 50 countries. They convert mixed protocols to speed at last completed stage so the numbers can be compared. That conversion is the lesson: lock course, cadence, fail rule, and metric, or do not compare.
now
Beep-test timer apps exist. A globally governed leaderboard does not. Adult originator percentiles by age and sex do not. The gap is legitimacy, not awareness.

What is actually judged

A legal shuttle is a timed one-foot line touch before the beep, not “a person-box arrived.” Turning short of the line is a named error. The folk stop rule is two consecutive misses (sometimes “not within 3 m”). Léger 1988 itself only says stop when the subject can no longer follow the pace. KIT’s administration uses a foot-on-line standard and a three-successive-miss variant. So “official” is a choice we have to publish — the literature will not hand us one wording.

Version Stage Start / increment What is scored
1982 Léger & Lambert 2 min 8.0 km/h, +0.5 / 2 min Two-minute stage
1988 Léger 1 min 8.5 km/h, +0.5 / min Last announced stage → speed → VO2
Eurofit / PACER-style 1 min 8.0 then 9.0, then +0.5 Last completed lap
QUB 1 min 8.0 km/h, +0.5 / min Protocol-specific

Léger speed at stage is often written X = 8 + 0.5 × stage, then VO2max Y = 31.025 + 3.238X − 3.248A + 0.1536AX with adult age A fixed at 18. Use it as a derived field, not the public score. The public score is level + shuttle.

Decisions

What we would lock before writing code

These are the calls in the notes after sitting with the conversation dump. They are product law until we replace them in writing.

  1. Protocol = 1988 Léger. Start 8.5 km/h, one-minute stages, +0.5 km/h. Score last completed level + shuttle. Convert anything else to last-stage speed before comparing.
  2. Fail rule = two consecutive misses, foot on the line. Publish it. Do not silently mix PACER’s two-total-misses wording.
  3. Distance is tape-certified. AR may walk and draw the court. A steel tape (or laser disto) makes the metre official. GPS never does.
  4. Audio is ours. The recording device plays the beep track. YouTube + a Bluetooth speaker is not a result.
  5. Identity is claimed before the test (name, lane, bib). No stranger re-ID mid-shuttle in v1.
  6. Judging is a reviewable assist. Line-crossing timestamps + human confirm + failure clip. Automatic DQ is a later privilege we have not earned.
  7. 50c is a stamp, not the business. It marks “this one counts.” Club nights and season packs are where money might live.
  8. Web first, one room, 6–12 people. Native is for camera control and background audio once the ritual is boring in a good way.
  9. We are a sanctioning body with an app attached. An API to existing beep apps comes after we own the evidence standard, not instead of it.
  10. Guinness is a campaign, not Phase 3. A 24-hour global day is the right shape of stunt, and only after 100 rooms run without us in them.
  11. Say the data out loud. Percentile vs self, then vs age/sex/region. No Tesla-shadow story.

Concepts

Walk the court, then leave the phone to watch

The strongest phone application is not “point YOLO at a gym.” It is a two-act ritual: map a true 20.0 m while the device is moving, then park it so both lines stay in frame.

Hands holding a phone while walking a gym, amber AR line drawn along the floor between two end marks
Act 1 — Walk. Visual-inertial odometry needs motion and texture. Hit-test the floor, drop an anchor at each end, read the translation in metres, then confirm with tape.
20.0 m · two anchors, one near each line park A B Map while moving · officiate while still

1. Map

ARKit / ARCore tracks the phone with visual-inertial odometry. Hit-test the floor, create an ARAnchor at line A, walk, anchor line B. Snapshot an ARWorldMap once mapping status is mapped.

2. Certify

Lay a steel tape (or fire a laser disto) between the same marks. The official length is the tape. AR is how the camera understands where those marks are in its image.

3. Watch

Place the phone so both lines stay in view. Play the app beep. Claim each runner. Record geometry, an audio hash, and a clip of every miss.

Low phone-level view of an athlete reaching a white tape line with one foot
The actual call — did this foot reach this line before this beep? A person-box arriving is not that question.

What pose models can see, and what they cannot officiate

Stationary camera + official beep audio Person box COCO-17 to ankles BlazePose 33 + toes Box bottom ≠ foot No toe · no line call Gait / contact timing Assist timestamps + human + clip Official result Health data (cadence, contact, drop-off) can be stored. It is not the reason the first 10 people pay 50c. Occlusion, ID-swap, wide-angle warp, and <100 fps at late stages all break unsupervised DQ.

Competence · design fit

How you know it is 20.0 m

A 2% error on this court is 40 cm — enough to turn a legal touch into a miss, or the reverse. The method that draws the pretty overlay is not automatically the method that certifies the metre.

Gym floor with a steel tape along a marked shuttle lane and phones at each end
Preferred kit picture: tape (or laser) owns the metre. Phones sit on the certified lines and watch feet, not invent the distance.
Method Error on a 20 m course Indoor Bare gym floor Official metre Design fit
Phone GPS (L1) 3–15 m outdoors; often no lock indoors No No Fail ●○○○○ None. Error is a large fraction of the court.
Dual-frequency GNSS (L1/L5) ~1–5 m outdoors; still indoor-blind No No Fail ●○○○○ Better hike GPS. Still not a shuttle court.
ARKit VIO walk (Measure-style) Often ~1–5% (20–100 cm); drift on the order of cm/s in lab VIO work. Apple publishes no accuracy spec. If textured Poor Assist only ●●●○○ Best setup UX. Not the official metre. Shiny wood is a worst case.
ARCore VIO walk Same order as ARKit. Keep virtual objects within ~8 m of their anchor — so a 20 m court needs two end anchors, not one. If textured Poor Assist only ●●●○○ Android parity for the walk. Same honesty problem.
LiDAR / depth, phone parked Most accurate roughly 0.5–5 m. A still phone cannot “see” a trusted 20.0 m with depth. Partial Partial Fail ●●○○○ Floor plane and near-line geometry. Not course length.
ARKit/ARCore walk + steel tape Tape ± ~5 mm–2 cm. AR only has to stay registered to those two marks. Yes Yes Pass ●●●●● Preferred official path. AR draws; tape certifies.
Steel tape only Class II tape is millimetres over 20 m. Yes Yes Pass ●●●●○ Perfect metre, no camera model. Fine for a human-judged night.
Two phones on taped lines Tape owns distance. New risk is clock sync, not metres. Yes Yes Pass ●●●●● Best line-call geometry. Each camera is close to a foot.
Laser disto / survey wheel Disto typically ±1–3 mm; wheel about 0.1% if used well. Yes Yes Pass ●●●●○ Faster certify step than a floppy 20 m tape. Still not a product.

ARKit drift figure from published VIO comparisons (e.g. Kim et al., relative pose error on the order of 0.02 m/s). Scale error in the wild is commonly single-digit percent and worse on feature-poor floors. Treat every AR-only centimetre as untrusted until a tape or disto agrees.

Implementation

Four paths that can merge

Do not start four companies. Start the smallest night that produces a number. The other paths are how that night grows, or how it dies cheaply.

A · Web ritual camera + audio + tape B · iOS ARKit walk · map · park C · Dual phone one camera per line D · Evidence spec then an ingest API Sanctioning body app is a client
Path A · now

Web ritual kit

Browser camera + built-in speaker + a setup wizard. Measure with tape, type 20.0, place one wide phone, claim 6–12 runners, human-confirm misses, 50c stamp. Learn whether anyone cares before ARKit.

Path B · iOS

Walk · map · park

ARKit world tracking, plane hit-tests, two ARAnchors, ARWorldMap snapshot, then a parked session that keeps both lines in view. Android follows with ARCore if A and B feel like a sport.

Path C · fidelity

One phone per line

Far-line pixels-per-centimetre is the silent killer of a single wide camera. Two phones sitting on taped lines see feet. They must share one audio clock.

Path D · later

Publish, then ingest

Once the evidence standard exists — audio hash, geometry, identity, failure clip — other beep apps may submit. That is the Strava move, inverted: we are the sanction, they are clients.

Suggested sequence

  1. Phase 0 — 10 official tests from people you can text. Charge the 50c.
  2. Phase 1 — one recurring room. Friend-challenge only after they come back unprompted.
  3. Phase 2 — one vertical (club preseason, PT studio, school sport). Not “gyms” as a category.
  4. Phase 3 — publish the protocol, then an API.
  5. Phase 4 — a 24-hour global beep day. Guinness only if a category exists without eating a year.

Failure modes

Problems, and which path they actually hurt

A 90% automatic judge will be treated as 0% official. Most of these are design problems, not model-zoo problems.

Problem Why it matters A Web B ARKit C Dual cam Mitigation
Course is not 20.0 m Every later number is fan fiction. High High Med Tape or disto lock. Never GPS. AR walk is UX only.
Feature-poor gym floor VIO loses scale and anchors on shiny wood / rubber. Low High Low Add cones, bibs, tape crosses. Do not trust a parked AR session in the dark.
Far-line resolution Ultrawide warp + few px/cm at 20 m. Cannot see a toe. High High Low Path C, or human confirm of the far miss.
COCO-17 has no toe Ankle ≠ line touch. Box-bottom midpoint is not a foot. Med Med Med BlazePose-class toes for assist only. Human on the call.
Two-miss rule disagreement Léger / PACER / KIT do not say the same thing. Med Med Med Publish 1988 + two consecutive + foot-on-line.
Audio latency BT speaker + YouTube is a different test. High Med High Device speaker. Hash the track. Log beep-to-frame time.
Phone-to-phone clock Dual cameras without one clock invent misses. n/a n/a High One audio master. Others slave to the beep, not NTP hopes.
Occlusion / ID swap Overlapping kids in the same kit exchange identities. High High Med Lanes + bibs claimed before the start. One athlete in v0 is allowed.
Late-stage frame rate Contact timing at ≥14 km/h may want ~100 fps. Med Med Med Do not claim millisecond DQ from 30 fps video.
Parked-phone tracking loss ARKit/ARCore do not promise a still official camera once a body fills the frame. n/a High Low Freeze the line pixels after certify. Treat live AR pose as advisory.
Cheating & generous mates 18 m courts, early starts, kind line calls. High Med Med Evidence pack on every official stamp. Assume bad faith on the public board.
No adult percentile table Tomkinson/Zhang are youth. Ramsbottom is a VO2 look-up. Med Med Med Ship vs-self first. Build the adult table from our own official tests.
Protocol soup Ingesting other apps without conversion poisons the board. Low Low Low Path D only after the spec. Convert to last-stage speed.

Documentation

ARKit (and the ARCore twins)

Path B is an Apple world-tracking app: move to measure, anchor both ends, snapshot the map, then try to keep those anchors while the device is still. Read these first, in this order.

Protocol and comparison sources