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 whilst 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, whilst 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, whilst 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.

- "
John Kavanagh's biggest strength is his ability to deal with conflicting priorities in high‑pressure situations. Along with his excellent development skills, John's ability to manage difficult stakeholders and requirements is one of the key reasons that the projects he led were completed on time without too many problems."
- "
I worked with John Kavanagh on a high profile, large‑scale project at a digital agency. John was great to work with, solving problems without any input and contributing to the project way beyond what was expected. I'd happily work with him again and would easily recommend his talent to everyone!"
- "
John Kavanagh is a highly intelligent and truly senior front‑end web developer, who's surprisingly well versed in the arcana of CSS. For Macmillan he was initially churning out static templates on an SCSS BEM architecture, but soon moved on to managing the team (three developers), assigning and tracking tasks using a Trello board he introduced, and helping me nudge the team towards an integrated, Web Components based production pipeline. I enjoyed John's productivity and attitude, and I very much look forward to working together again."
- "
John Kavanagh was undoubtedly the best UI developer on the programme (often carrying the burden of his team) and played a crucial role in rebuilding the look and feel of the bank's global online platforms. John was always articulate, willing to speak his mind, helpful and always did an amazing job ‑ he clearly takes immense pride in his work (and rightly so!). His attention to detail and perfectionist attitude helped produce a product that we could be proud of, despite the extremely difficult environment we had to work in.
John would suit any senior or lead UI developer roles and I would have no hesitation in recommending him."
- "
I initially worked with John Kavanagh at Style.com where we built an e‑commerce site for Condé Nast. We built numerous versions of the site for prototypal purposes and finally went live with a version that contained the majority of work from John and his team. Always punctual, proactive and willing, he's definitely one to have in any development team. Since then we went on to work together again at HSBC where we built a number of key React components. He's a great team player who takes a lot of pride in his work, I'd highly recommend him."
