LiveDaily puzzle web appVisit live site (opens in new tab)

Klued

A daily mini crossword you can play instantly with no account, backed by a server-side pipeline that generates and publishes a fresh puzzle every day.

Timeline
2026
Duration
3 weeks
Client
Personal project, built for my girlfriend
Klued homepage with daily mini crossword call to action

Home

The homepage makes one simple promise. Play today's puzzle, no account needed.

Daily puzzle lifecycle diagram for Klued showing publishing, delivery, and player state flows

Lifecycle

Everything that happens between generating a puzzle and someone finishing it.

Klued puzzle start gate with date, grid size, clue count, and timer

Start

The start gate. The timer doesn't run until you're actually ready.

Klued desktop crossword grid with clue list and helper controls

Desktop

Solving on desktop, with the full clue list sitting beside the grid.

Klued mobile crossword grid with compact controls

Mobile

The same puzzle on a phone, with controls kept within thumb reach.

01 / 05

Outcome

Klued is live at klued.app and publishes a new puzzle every day without anyone authoring it by hand. The generation engine is the part of the build I'm proudest of.

Daily dated routes

Each puzzle has a stable daily URL with start state, timer behavior, progress, and completion feedback.

Server-side generation

Cron-protected generation, cache revalidation, Supabase writes, and quality-scored fill support daily publication.

Template benchmark studio

Reusable grid patterns can be edited, deduped, benchmarked, and preferred when they fill quickly and reliably.

Services
End-to-end product build
Stack
Next.jsSupabaseVercel CronTanStack QueryZustand

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.
Solving on desktop, with the full clue list sitting beside the grid.

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.
Everything that happens between generating a puzzle and someone finishing it.

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.

Next project

All work

Aevum

An operations platform for service teams that connects client work directly to billing, so the path from work performed to money owed stays visible.

View case study
Aevum landing page showing the product positioning and operating dashboard preview