← Projects Built, awaiting launch

Wordbridge

Linxicon, but the validation actually understands meaning

What it is

Wordbridge is a daily word puzzle. You get two anchor words and you build a bridge between them by adding intermediate words. An edge forms automatically when two words are semantically close enough. The goal is to connect the anchors in as few words as possible. Golf scoring: lower is better.

The game knows that "fashion" and "mode" are related. Linxicon doesn't. That's the whole pitch.

Validation runs against ConceptNet Numberbatch embeddings. Any two words with cosine similarity above the threshold form an edge. No hardcoded word lists, no string matching. The graph knows what words mean, roughly, because it was trained against human-curated semantic relationships.

How I got here

I played Linxicon for a while and kept hitting the same wall: a move that was obviously correct got rejected because the validator didn't see the connection. "Fashion" to "mode" is a real semantic step. Any person would accept it. The game wouldn't, because it uses a general-purpose sentence transformer with a fixed threshold and no ConceptNet grounding.

The core mechanic is good. The frustration was purely the validator. Numberbatch retrofits embeddings against ConceptNet's human-curated edges, which fixes exactly that class of failure. I wanted to find out if the mechanic was actually fun once the validator got out of the way.

fashion vs. mode similarity in Numberbatch: 0.353. In a Linxicon-style validator at the 41% threshold, that move gets rejected. In Wordbridge at 0.40, it's borderline. The validation is tunable in a way that string-match systems aren't.

I also wanted to build something in the Next.js App Router that had real database needs -- pgvector for the embeddings, Drizzle for the schema, Auth.js for identity. This was a good forcing function for all of it.

Where it's at

The build is essentially done. Daily puzzles, anonymous play via device ID, magic-link auth to save your history, Wordle-style share cards, 70+ unit and integration tests, Playwright E2E suite passing. The production deployment isn't live yet (billing accounts still being sorted), but the code is in good shape.

The curated puzzle set has 50 puzzles seeded, with a daily generator that auto-creates new ones from the vocabulary. The schema includes Numberbatch vectors for around 73,000 words (top-100k Norvig vocabulary with long-tail garbage dropped).

  • Anonymous-first: play without an account via httpOnly cookie + localStorage device ID
  • Identity layer: magic-link signup via Resend; anonymous game history migrates to your account
  • Share cards: PNG share card via next/og (Crimson Text, Wordle-style grid)
  • Scoring: golf par system with bird names (birdie, eagle) for good rounds
  • Practice mode: play outside the daily puzzle to explore the graph

Async friend duels were scoped out. Practice mode is the Phase 6 deliverable that stayed. The edge threshold is currently 0.40, with an open question about tuning it down to 0.35 to catch the fashion-mode case explicitly.