JavaScript Playground

AI loops: who pays for the tokens?

Jack Franklin |
A recent trend in AI has become this idea of "loops". Rather than you doing prompting and working with the AI to design and implement, you instead give it a higher level goal and let it roll. You build a system to let the AI make decisions, build and verify its work, all with the aim of completing ... read more

ai-review: reviewing AI code before it lands

Jack Franklin |
Over the years I have become very comfortable as a developer who spends most of his time in the terminal. I've spent far too long tweaking my dotfiles to make things just how I like, and I have been a Vim/Neovim user for the best part of fifteen years. This trend has continued into the AI era. I've... read more

Tracking feedback with Claude Code

Jack Franklin |
I've been using Claude Code as a pair programmer, debugger, and feedback collector while I playtest my game, OnTrack. The setup has worked so well that I ended up building a small custom skill to make it scale and in this post I'll take you through how it works. (That last DevBlog was in 2024 (!),... read more

Using AirPod Pros 3 with Android

Jack Franklin |
I wear headphones a lot and I like the option of wearing over-ear and in-ear headphones at any one time; I find that I prefer my over-ear for deep work sessions but in-ear are much easier for video calls or casual listening as I'm cooking dinner, walking the dog or on the train to the office. One t... read more

Augmented engineering: learnings of an AI skeptic

Jack Franklin |
Since ChatGPT burst onto the scene in November 2022 it and its competitors have taken software development by storm. We've seen companies go all in on AI and set expectations that new hires will only be prioritised if AI can't do the job. This has caused a general level of anxiety amongst software ... read more

Goals for 2025

Jack Franklin |
As 2024 comes to a close, I wanted to take a moment to reflect on what has been the most incredible and challenging year of my life. In January our child Leo was born and our lifes as we knew them were changed forever. There is plenty to be written on the highs and lows of being new parents and wit... read more

TypeScript enums and falsy values

Jack Franklin |
I recently lost an evening to debugging a subtle issue which highlights a potential pitfall in the interaction between TypeScript enums and "falsy" values in JavaScript. Let’s look at a scenario that illustrates this problem: Spot the Bug Consider the following code where a function returns either ... read more

performance.wow() 2024

Jack Franklin |
As I write this blog post I am sat in an AirBnB in Utrecht reflecting on two incredibly inspiring days at performance.now() 2024. I was not only fortunate to attend but to be asked to talk, and it was a real privilege to get the chance to update the attendees on all our recent work updating the per... read more

OnTrack devlog 1

Jack Franklin |
If you were to look at my Steam library you would see that most of my games are strategy and logistics based (think Factorio) but with a healthy dose of transport methods and networks (think Transport Fever 2 and OpenTTD). I've always wanted a very specific, niche game focusing on building passenge... read more

Exhaustive branch checks with TypeScript

Jack Franklin |
It's very common when working with TypeScript that you will have a type that declares a list of values, such as an enum or union type: enum SupportedColour1 {RED,YELLOW,BLUE,}type SupportedColour2 = 'RED' | 'YELLOW' | 'BLUE' And then you will often have functions that need to run differently or ret... read more