Challenge
Klued started as a three-week side project for my girlfriend, who loves word games and crossword puzzles. It still had to handle the real system work underneath a quick daily game: reliable puzzle generation, dated publishing, responsive solving, progress persistence, and repeatable template management.
Approach
Keep the player's loop dead simple and push all the complexity into the publishing pipeline. That split is what made the product work.
- Separated the public play loop from the generation pipeline so players get a simple dated puzzle experience while daily publishing runs through server-side jobs and cache revalidation.
- Built the crossword interaction model around fast solving: smart direction selection, keyboard shortcuts, mobile controls, date navigation, helper actions, and a completion modal with streak context.
- Added persistence paths for anonymous local progress and authenticated remote progress so users can start without an account but still keep history when they sign in.
- Created a template studio and benchmarking flow to manage reusable grid patterns and prefer layouts that generate reliably.
Player experience
Klued is designed to get someone from the homepage into a playable puzzle quickly. The public flow supports no-sign-in play, dated puzzle routes, previous/next date navigation, a start gate, a running timer, keyboard shortcuts, error checking, hints, reveals, and completion feedback. The mascot and branding were not strictly necessary for a free daily puzzle. I added them because the project deserved to feel finished.
- Daily puzzle routes use date keys so each puzzle has a stable URL and metadata.
- React Query prefetches neighboring dates so browsing previous and next puzzles feels responsive.
- The solving UI adapts between a full desktop clue panel and a compact mobile layout.
Generation system
The publishing side is built around a server-only crossword engine rather than hand-authored static puzzles. Daily generation chooses formats from the date difficulty, races seeds against time budgets, uses benchmarked templates when available, fills from quality-scored word candidates, rewrites clues through an AI-assisted validation pass, and revalidates cached puzzle routes after successful writes.
- Vercel Cron calls the protected daily route with a shared secret.
- Supabase stores daily puzzles, templates, progress, streaks, and play-start counts under the Klued schema.
- Word quality scoring combines crossword frequency with English usage signals to avoid low-quality fill.
Template tooling
Klued includes an internal template studio for creating reusable grid patterns. The tool supports adjustable grid dimensions, black-square editing, crossword numbering, duplicate detection across rotated forms, template deletion, and benchmark stats so generation can prefer layouts that fill quickly and reliably.
Persistence and growth
The product keeps the first session lightweight while leaving a path for retention. Anonymous users get local progress, signed-in users can sync remote progress through Supabase RPCs, and completions can update streak state. Puzzle-start tracking also gives the homepage a simple public usage signal.

