Skip to main content
Back to Work

Klew

Crossword puzzle marketplace with Apple Pencil support via iOS Scribble

Live
SwiftUI Next.js Rust/WASM Supabase StoreKit 2

Overview

A two-sided crossword puzzle marketplace. Constructors build and publish puzzles through a web editor with an autofill engine. Solvers play them on iOS with Apple Pencil support (via native Scribble) or on the web. Cross-platform progress sync, in-app purchases, and a credits-based marketplace economy.

The Problem

Crossword puzzle creation tools are either expensive professional software or bare-bones web apps. Solvers are stuck with a few major publishers. There's no open marketplace where independent constructors can publish puzzles and earn revenue, and no solver that lets you write answers with Apple Pencil the way you would on a newspaper.

What I Built

  • iOS solver with Apple Pencil input via native Scribble — a single persistent ScribbleTextField 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 400k+ word dictionary
  • Cross-platform solver with smart cursor navigation, pencil mode for uncertain answers, and check/reveal functionality
  • Credits-based marketplace with StoreKit 2 in-app purchases, server-side receipt validation via Supabase Edge Functions, and idempotent transaction processing
  • Real-time progress sync across devices using Supabase with local-first architecture and last-write-wins conflict resolution
  • Full authentication with Sign in with Apple and magic link email, constructor profiles, ratings, reviews, and follow system

Key Decisions

The Scribble integration uses one persistent UITextField positioned over the active cell rather than per-cell text fields — this 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 in Rust compiled to WebAssembly for near-native performance in the browser. Monetization is purely through Apple IAP — no external payment processor — keeping the stack simple and compliant.

Back to all projects