One script in your own Chrome tab reads the live lesson, works out the answer, and clicks. No API. No password. Nothing leaves the page.
Live replay of real solved exercises, cycling tracks — no screenshot, it actually plays the move.
Read the sourceDuolingo renders every exercise from a React component, and that component still holds the answer key. pwnlingo walks the fiber tree from the visible widget up to the challenge props, reads the correct answer, and does what a very fast, very bored student would do. A Claude session only appears when an exercise type shows up that the script has never seen.
The whole thing is one file. Solver families for exponentials, geometry, trigonometry, probability, statistics and 3D solids were appended one lesson at a time until the Math course ran out of units.
Puzzles hand over their solution in the same place, as a list of moves. The board is a Rive canvas that ignores synthetic events, so the script converts squares to screen pixels and a real mouse plays them.
Matches against Duolingo's bot get a small engine. It picks a move, then asks itself for a better one at greater depth, and keeps the deeper answer when the two disagree.
A small app polls the runner over the LAN or the open internet. Chess renders as a real animated board with real chess pieces, sliding move to move, not a screenshot; other tracks show a live screenshot instead. Track, XP, streak, hearts, league, and a real per-puzzle progress bar sit in a frosted glass panel below the board. Pause the runner from the app, switch tracks (any of ~35 languages, plus math and music) from its Track menu, no terminal needed.
Native everywhere, no web wrapper: Apple platforms in SwiftUI, Android and Windows and Linux in Compose Multiplatform, plus a terminal client. All of them read the same endpoints on the runner, so there is one source of truth and every client is just a view of it.
Reads are open; pausing, switching track, and the live screenshot need a token, because the tunnel puts all of it on the public internet.
It started as a way to keep a streak alive during a busy week and turned into a study of how much of a gamified app is actually the client grading itself. Automated play is against Duolingo's terms, and the XP still ranks you against real people, so this is a curiosity to read, not a product to run.