Surf

Games and software on autopilot. Duolingo first, more to come.

Real solved exercises, replayed live and cycling tracks. Not a screenshot: it plays the move.

It reads the answer key

Duolingo draws every exercise from a React component, and that component still holds the answer. Surf walks the component tree from the visible widget up to the challenge, reads the right answer and clicks it. A shape it has never seen gets logged and skipped, never guessed.

Driver

A real browser

One Node runner drives Chromium, signed in as you. Drags and chess moves use a real mouse, because Duolingo ignores synthetic ones.

Chess

Puzzles hand over the moves

A puzzle carries its solution. Bot matches are played by Stockfish, with a bundled engine as the fallback.

Math

Solvers for every unit

Expressions go through math.js. A short list of stubborn levels is still open.

Languages

Every course, unattended

Choice, word bank, typed, cloze, pairs, translate and stories. It walks the whole tree on its own.

Streak guard

The streak survives

If it is evening and no XP has landed, it finishes a language lesson, even through a pause.

Pace

The fastest track wins

It measures XP per hour for every course and moves to the best earner when one finishes or stalls.

Native everywhere

A small app polls the runner over the LAN or the tunnel. Chess is a real animated board. Language and math show the actual prompt and answer. Pause it or switch tracks from the menu, no terminal needed. Reads are open. Pausing and switching need a token.

macOSSwiftUI. Live board, Track menu, pause. The menu bar shows live XP without opening a window.
iOSThe same screen over the LAN or the tunnel, with a home screen widget for XP and streak.
watchOSA glance: XP, track, paused or stuck.
AndroidCompose Multiplatform. Sideloadable APK from CI.
Windows, LinuxCompose Desktop, packaged as an .msi and a .deb.
Terminalsurf-tui prints the current state and exits. Check from anywhere over SSH.

A study, not a product

It started as a way to keep a streak alive in a busy week and turned into a study of how much of a gamified app is the client grading itself. Automated play is against Duolingo's terms, and the XP still ranks you against real people. Read it, don't run it.