Klew
Two-sided crossword platform: build on the web, solve on iOS with Apple Pencil, climb a skill-rating ladder
Overview
A two-sided crossword platform. Constructors build and publish puzzles through a web editor with a constraint-solving autofill engine. Solvers play them on iOS with Apple Pencil support (via native Scribble) or on the web, with progress synced across devices. On top sits a competitive layer: every puzzle is automatically graded for difficulty, and solvers earn lifetime points and a par-relative skill rating that ranks them on global leaderboards.
The Problem
Crossword tools are either expensive professional software or bare-bones web apps, and solvers are mostly stuck with a handful of big publishers. There was no open platform where independent constructors could publish puzzles to a real audience, no solver that lets you write answers with Apple Pencil the way you would on newspaper, and no competitive ladder that measures how well you actually solve.
What I Built
- — iOS solver with Apple Pencil input via native Scribble, using a single persistent ScribbleTextField that overlays the selected cell, capturing strokes alongside the OS's built-in recognition while storing PKDrawing data for visual playback
- — Web-based grid editor with a Rust/WebAssembly CSP (constraint satisfaction) autofill engine backed by a ~540k word dictionary
- — Offline puzzle-generation pipeline (a native Rust CLI) that pairs the same constraint solver with Claude advisors to generate daily puzzles and grade fill quality
- — Competitive scoring system: automatic difficulty grading, lifetime points, and a par-relative Elo skill rating with global and per-puzzle leaderboards
- — Weekly recap and solver analytics: solve heatmap, day-of-week distribution, and rating-trend charts
- — Share loop with dynamic OG images for every puzzle link (including "beat my time" cards) and click attribution
- — Cross-platform progress sync via Supabase with a local-first architecture and last-write-wins conflict resolution
- — Full authentication with Sign in with Apple and magic link email, plus constructor profiles, ratings, reviews, and a follow system
Key Decisions
The Scribble integration uses one persistent UITextField positioned over the active cell rather than per-cell text fields, which avoids destroying and recreating the responder chain on every cell advance. Strokes are captured at the window level via a custom gesture recognizer on UITextEffectsWindow and buffered without triggering re-renders until Scribble commits a letter. The autofill engine is written once in Rust and compiles to two targets: WebAssembly for the in-browser editor and a native CLI for offline daily-puzzle generation. Solver skill is measured with a par-relative Elo rating rather than raw solve counts, so the leaderboard rewards how well you solve, not how much.
Results
Live on the web at klew.app and on the iOS App Store, shipping a fresh daily puzzle.