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 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 had the pleasure of working closely with John Kavanagh at Selfridges. He is an exceptional programmer who consistently delivered high‑quality work. John possesses a deep understanding of exceptional front‑end development skills and has a remarkable ability to tackle complex problems with creative and effective solutions.
What sets John apart is not only his technical expertise but also his strong work ethic and dedication to delivering results. He is a reliable and proactive team player, always willing to go the extra mile to ensure project success. I was particularly impressed with his ability to help with issues and make the explanations simple and succinct.
Beyond his technical skills, John is a pleasure to work with. He communicates effectively, collaborates seamlessly with team members, and approaches challenges with a positive and solution‑oriented mindset."
- "
Worked with John Kavanagh on a big Nando’s project, moving a legacy site off of Drupal and onto Vercel and Next.js.
His work and attitude are both stellar! Highly recommended."
- "
John Kavanagh is one of the most professional developers I have worked with. Add to this a synergy between some of the values which Underwired holds in high regard (perfectionism, creativity in all skillets and future facing) and you have someone I wouldn't hesitate to recommend for front‑end development work."
- "
John Kavanagh is a very talented front‑end web developer. He is enthusiastic, up‑beat, very knowledgeable in his field and has a great eye for detail. He brought a lot to our team and to the product, I would be happy to work with him again."
