2026Nuxt.js

Wordpace

  • Nuxt.js

About the project

Wordpace reworks the familiar five-letter guessing game into an endless run against the clock. You guess the hidden word in six tries, with each letter marked green, yellow, or grey; solving a word advances a level, banks points, and hands you a fresh word. Every level runs on a countdown that starts at five minutes and decays exponentially toward a thirty-second floor, so the pressure keeps climbing. Each guess rewards time for the useful letters it reveals, ten seconds per new green and five per new yellow, but only the first time you discover each one, so you can't farm time by retyping. When you get stuck you can spend points on hints that reveal part of the word, or burn one of three per-run skips at an escalating price; both are designed so that being stuck costs something. The run ends when you run out of guesses or time, and a top-ten score prompts you for a nickname. What sets it apart from a plain Wordle clone is that every word is explained after you play it: part of speech, IPA pronunciation with a button that speaks it aloud through the browser's own speech synthesis, a frequency label, a definition, and an example sentence, so a run doubles as vocabulary practice. That dictionary holds 2,315 entries, generated once by Claude against a JSON schema and then validated by a separate script, and it never reaches the browser: a ~440 KB file is imported only by a server route that hands back one entry at a time. The pure game rules, evaluating a guess, validating a word, and the timer decay formula, live in a shared module imported via the #shared alias and reused on both sides: the client runs them for instant feedback, the server re-runs them as the source of truth. The leaderboard is a single Redis sorted set on Upstash (ZADD to record, ZRANGE to read the top ten), with no accounts and no database. Built on Nuxt 4 and Vue 3 with script setup and vanilla scoped CSS in BEM, no UI framework.

Highlights

  • Endless arcade mode: levels, banked score, and an exponential-decay countdown timer with time rewarded only on a letter's first discovery
  • A dictionary entry after every word (part of speech, IPA, definition, example) turns each run into vocabulary practice
  • Spoken pronunciation via the browser's built-in speechSynthesis, with a voice picker that avoids the novelty macOS voices
  • 2,315-entry dictionary generated against a JSON schema and validated separately, served one entry at a time so the 440 KB file never reaches the browser
  • Points-based hints and escalating per-run skips, so being stuck always costs something
  • Pure game rules in shared/ (via #shared) run on the client and re-validated on the server; global leaderboard as one Upstash Redis sorted set, no accounts