Case Studies

Linkudo

Sole freelance fullstack developer for Linkudo, rebuilding a classic Flash word association game as a modern mobilefirst product with Next.js, Node.js, Supabase, Redis, and Python.

Screenshot of the Linkudo website; part of John Kavanagh's selected project work.

In Brief

Originally launched as a Flash application nearly nineteen years ago, Linkudo ("Link you do") is a browserbased word association game that challenges players to connect two words through related, rhyming, and thematic links in the shortest number of steps. The 2025 rebuild brought the game back to the web as a modern, mobilefirst product.

My Role

As the sole developer, I was responsible for architecting and building the new version of Linkudo, modernising its gameplay on a scalable, cloudbased infrastructure. Working from clientprovided designs, I developed the back end with Node.js, Supabase, Redis, and Python, while implementing the gameplay experience with Next.js, React, TypeScript, and SCSS. The result was a completely new product that preserved the spirit of the original game while making it viable for modern web and mobile users.

Technologies

linkudo.com
  1. Next.js & React
  2. TypeScript & SCSS
  3. Supabase & PostgreSQL
  4. Node.js & Python
  5. Redis

In Detail

Bringing Linkudo back to the web required more than a straightforward rewrite. The original Flash version was no longer viable, and the original codebase and gameplay mechanics had effectively been lost. The rebuild needed to preserve the simplicity and competitive feel of the original game while making it work for modern web and mobile users.

That meant rethinking both the gamegeneration system and the player experience. The client provided the visual design direction, while my work covered the full technical build: puzzle generation, APIs, data storage, caching, gameplay logic, theming, sharecard generation, and deployment.

This created two distinct technical challenges:

  • Generating Daily Game Configurations:

    a complex Pythonbased backend process precomputes daily wordassociation puzzles using a graphbased BreadthFirst Search algorithm.
  • Delivering the Game Experience:

    a fast, responsive, themable Next.js and React front end lets players solve puzzles, track performance, persist preferences, and share results.

Game Configuration Generation

Each day, Linkudo presents players with a new challenge. A Python process precomputes daily puzzles using a graphbased BreadthFirst Search algorithm to identify valid word pairs and balanced solution paths.

Because of the size of the word dataset, generation is computationally expensive. Configurations are created in batches, automatically assigned to future dates, reviewed editorially, and then imported into the game for instant daily play.

The Next.js application includes Node.js and TypeScript API endpoints for gameplay logic, user preferences, daily configuration retrieval, and theme handling.

The word dataset is a little over 13MB, so it is loaded into the server at startup and held in hot cache rather than repeatedly fetched from a database or external cache. Other API routes act as a middle tier between the player and data stored in Supabase/PostgreSQL, with Redis used aggressively to keep responses close to instantaneous.

The API layer also handles CORS, method validation, request rate limiting, and a unique API key regenerated automatically on every application rebuild.

The gameplay interface itself uses a combination of React and SCSS with a small component library to realise a player experience as close as possible to the client's vision. This is clean and crisp with fast and simple interactions to avoid distraction from the gameplay itself.

Customisable Player Preferences

Linkudo supports five selectable themes, allowing players to personalise the game without changing the underlying mechanics. Preferences persist across sessions through localStorage and backend device recognition, while theme choices are tracked to help understand engagement patterns.

A screenshot of the Linkudo game, displaying the default dark blue theme, and showing the first step in the game.A screenshot of the Linkudo game, displaying the optional light blue theme, and showing the second step in the game (having chosen 'Arranger' in the first step).A screenshot of the Linkudo game, displaying the optional pink theme, and showing the third step in the game (having chosen 'Arranger' in the first step, and 'Engineer' for the second step).A screenshot of the Linkudo game, displaying the optional green theme, and showing the fourth step in the game (having chosen 'Arranger' in the first step, 'Engineer' for the second step, and 'Agitator' for the third step).A screenshot of the Linkudo game, displaying the optional sage theme, and showing the fifth step in the game (having chosen 'Arranger' in the first step, 'Engineer' for the second step, 'Agitator' for the third step, and 'Campaign' for the fourth step).

Automated Social Share Image Generation

When a player completes a puzzle, Linkudo can generate a unique social share image showing that day's challenge, the player's step count, and their selected theme. A standalone Node.js service generates these Open Graph images from the daily game configuration data.

Using Puppeteer, Express, and Vite, the service renders a React component across all five themes, captures the output, and produces branded share images for each valid result state. Those images are uploaded into the game and used when a player shares a completed puzzle.

A grid of share images for Linkudo, showing all thirty different possible combinations of steps and themes for each individual game.

Relevant Services

Looking for
technical direction?

For platform changes, recovery work, and highstakes delivery, I can help define the approach and stay handson where the hard problems are.