Linkudo
Sole freelance full‑stack developer for Linkudo, rebuilding a classic Flash word association game as a modern mobile‑first product with Next.js, Node.js, Supabase, Redis, and Python.

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 game‑generation 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, share‑card generation, and deployment.
This created two distinct technical challenges:
Generating Daily Game Configurations:
a complex Python‑based back‑end process precomputes daily word‑association puzzles using a graph‑based Breadth‑First 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 graph‑based Breadth‑First 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 back‑end device recognition, while theme choices are tracked to help understand engagement patterns.





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.

