CAPE SURF

Drop in, find the pocket, make the section.

Play itcapesurf.hobel.dev

CAPE SURF in play

Drag anywhere and the drag vector is the direction you point the board on the wave face. Up climbs toward the lip, down drops to the trough, forward trims, back swings into a cutback. Bottom turns, snaps, floaters, cutbacks, airs and barrels are all consequences of that one gesture plus where you happen to be on the wave. There is nothing to memorise.

There is no accelerate control, and that is the whole design. Speed is the integral of five forces the player cannot press: gravity down the slope, thrust from the advancing wave scaled by steepness and proximity to the breaking lip, drive from your own legs extending against the load in a turn, quadratic and linear drag, and rail drag that costs speed quadratically in how hard you turn.

The wave peels. The Cape's outer bar has a peak, a bowl, a long racetrack that peels faster than you can trim on the shoulder, a fat spot where the push disappears, and an inside bowl. Fall behind the foam and the wave is over.

Worth knowing

The physics validator is where correctness actually lives

It runs the simulation headless at a fixed timestep, thousands of waves a second, with no GPU, and asserts on things that matter: identical input in the pocket and on the shoulder produce decisively different speed; sawing at the rail bleeds speed against holding a line; the same seed reproduces the same ride exactly; 240 waves of random input produce no NaN and no runaway speed.

A test that asserts a constant the fix moved is not a test

Before one gate, standing still on a wave scored 5.6 and actually surfing it scored 0.9, and the difficulty ramp had become mathematically unwinnable from wave 8 — invisible because the suite only tested one point in the middle of the curve it was responsible for. The first fix was then found to be incomplete in the same way: its guard test hardcoded the old trim height. The check now searches the space rather than assuming a point, and the whole ramp is swept.

Honest about what the model does and does not buy

A pump cycle in the pocket comes out slightly slower than it went in — on a fast, hollow section the quickest thing is a clean high trim, which is true of real surfing too. The validator measures that unflattering case specifically. What the force model buys is that turning no longer kills you, which it emphatically did in an earlier build.

Screens

Built with

Three.jsViteHeadless physics validatorPointer eventsStatic bundle behind Caddy

Play CAPE SURF