Game · 2026

Phrasey

A daily phrase-guessing game. Everyone gets the same hidden phrase each day and uncovers it one letter at a time; fewer letters is better.

Built with React, TypeScript, Vite, Vitest, Vercel

Phrasey: a row of letter tiles, some revealed

What it is

One hidden phrase per day (an idiom, saying or everyday expression) with a category as the only hint. Players guess letters or try to solve outright; six strikes and you’re out. Results share as a spoiler-free emoji grid, Wordle-style.

How it’s built

  • Fully static. No backend and no database: the day’s puzzle is picked from the player’s local date, and progress, stats and streaks live in localStorage. If storage is blocked the game still works, it just doesn’t persist.
  • Game rules are pure functions in src/lib/, unit tested with Vitest, so rule changes can’t silently break scoring.
  • The phrase list is validated at build time, so a malformed entry fails the deploy instead of breaking someone’s daily puzzle.

Design decisions

  • Score is letters used, lower is better. Every guess counts the same, right or wrong, which keeps the scoring easy to explain in one line.
  • Solving compares letters only. Case, spaces and punctuation are ignored, so dont and Don't both match. A guess with the wrong number of letters is rejected for free, since the board already shows the count.
  • A rapid-tap guard. Players were spelling out the answer on the letter keys, which inflated their score. Taps within 0.5 s of the previous one are now ignored, with a hint pointing to the answer box.