
Case Study
LinkedIn Games Solver
Chrome extension (Manifest V3) that automatically solves LinkedIn's daily puzzle games — Queens, Zip, Tango, and Patches. Parses each board directly from the DOM, runs a pure TypeScript backtracking solver, and injects the solution via the Chrome Debugger API to dispatch trusted mouse events that bypass LinkedIn's isTrusted checks.
01
The Problem
LinkedIn ships four daily puzzle games but provides no way to verify or study optimal solutions. Writing a solver that actually works inside the page is non-trivial: LinkedIn checks event.isTrusted on every click so standard dispatchEvent calls are silently ignored, and the DOM is obfuscated with rebuild-hashed class names that break naive parsers every time a new bundle ships.
02
The Approach
I built a Manifest V3 extension with a content script per game. Each game has an independent parser (DOM → typed board state), a pure backtracking solver (zero browser dependency, fully unit-tested), and an injector that drives the UI. LinkedIn clicks go through a background service worker that uses chrome.debugger to dispatch trusted mouse events. Zip paths are drawn via mousePressed → mouseMoved → mouseReleased drags. Parsers derive structural info from stable signals (cell count, aria-labels) instead of obfuscated CSS hashes, so they survive LinkedIn rebuilds.
03
Technical Highlights
- Four independent backtracking solvers (Queens, Zip, Tango, Patches) written as pure functions with full Vitest coverage
- Chrome Debugger API integration to dispatch event.isTrusted mouse events that LinkedIn actually accepts
- Parsers derive grid size from cell count (sqrt) and use aria-labels + geometric fallbacks — resilient to LinkedIn's obfuscated class-name rebuilds
- Multi-site support: separate content scripts for LinkedIn and archivedqueens.com with site-appropriate input methods (debugger vs. plain mousedown)
- Drag-based input synthesis for Zip paths and Patches rectangles via sequenced mousePressed/moved/released events
04
Results
All four LinkedIn games solve end-to-end
22 passing unit tests across solvers and parsers
Adaptable parser architecture that survives LinkedIn bundle rebuilds
Open source on GitHub