pwnlingo icon

Duolingo on autopilot.

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.

Read the source

How it works

Duolingo 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.

Chess

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.

When you see a good move, look for a better one.Emanuel Lasker

Where it stands

MathCourse complete. 411 units, one open list of stubborn levels.
ChessPuzzles and bot matches both solved. 27 puzzles, 0 misses, first match won in 19 moves.
LanguagesChoice, word bank, typed, cloze, pairs and stories. First live lesson passed 2026-09-08; langBoot walks the whole tree.
AudioListen and speak exercises are skipped, not guessed.

Why

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.