Skip to main content
LinkedIn Games Solver screenshot

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.

Role: Solo developer — extension architecture, solver algorithms, DOM parsing, and Debugger API integration
Timeline: April 2026 — Complete
TypeScriptChrome ExtensionVitestManifest V3

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