I started KJ’s Games because I wanted to make something I’d enjoy using, with enough going on underneath to learn from. A browser game seemed a good place to begin: you can put it online, play it and find out fairly quickly whether what you thought made sense actually does.
The collection now has six games: Solitaire, Pyramid, Pairs, Scrambled, Signal Grid and Stillwater Array. The last of those involves restoring a research station on a tidal island, so we’ve travelled a little way from laying out a deck of cards.
When a few games become a collection
At first, each game was its own problem to solve. As more arrived, I found myself thinking about what they ought to share and what needed to stay separate. A hint in Solitaire isn’t the same as a clue in Scrambled, but people still need to recognise the controls and understand what has happened when they use them.
The site and games now live in one repository, with four local packages for card, word, logic and strategy games. Astro looks after the pages, navigation, loading and analytics; the packages hold the gameplay and its tests. Within the card games, things such as deck helpers and common controls can be reused without trying to make every set of rules fit the same mould.
That gives me a fairly straightforward place to make a change. It also means someone browsing the collection doesn’t have to load every game: the playable code arrives when they select Play. The shared structure has grown out of maintaining the games, rather than being an elaborate plan I needed to finish before making the first one.
The little things you notice while playing
Scrambled was a good example of a game that worked but still needed attention. The answer boxes looked ready to type into before the real input had focus, while hints and feedback could shift the controls around. None of that changed whether the answer was correct, but it interrupted the thing you were there to do.
I gave it a visible answer input, reserved space for feedback and a more compact word trail. Focus now returns to the input when you start a round, ask for a hint or move to another word, without dragging the page along with it. An incorrect answer stays there to edit rather than disappearing. Taken together, those changes make the sequence of playing feel much less fussy.
The clues needed the same care. Every playable word has an authored clue, and the build checks for missing hints, repeated wording and clues that accidentally give away the answer. Keyboard behaviour, labels, announcements and smaller layouts are checked alongside the rules.
Giving Stillwater Array room to surprise me
For Stillwater, I tried a more open starting point. I wanted a desktop-first game I’d personally enjoy, but I didn’t want to settle every detail before anything existed. I used ChatGPT to help shape the brief, then gave Astra in Codex room to explore a direction, with the intention of playing the result and steering it from there.
What came back was a remote research station to restore, with machinery to connect, resources to manage and an island to explore. Each shift normally gives you three orders, so there’s a reason to think about what you do next. Machines need power, suitable ground and a dry connection to the station; the tide follows a pattern, which makes planning a route rather more interesting than simply finding the shortest one.
The important part is being able to read those consequences. The forecast shows expected production, and a stopped machine tells you whether it’s flooded, disconnected or short of power. Discoveries also affect how buildings work together, so exploring the island feeds back into the decisions you’re making at the station.
I played the game through and liked it enough to release the first version as a starting point to grow from. My first obvious piece of feedback was about the expanded view: the game needed to sit properly in the space it had been given. That became a centred modal, with further keyboard-focus fixes before release. Sometimes the next useful improvement is considerably less mysterious than the island.
A game you can put down
Time only advances when you end a shift. Nothing deteriorates because you’ve gone to make dinner, and basic station jobs give you a way back from a shortage. Progress saves in the current browser, with a previous-save backup and file export and import. There are no accounts or cloud saves.
It’s primarily a desktop game. Keyboard controls and explicit discovery choices support playing without a mouse, while narrow screens retain the controls but need more scrolling. I would rather be clear about that than describe the experience as identical everywhere.
The tests cover rules, power priorities, interrupted connections, invalid actions and restoring an expedition. Browser checks look at the opening, discoveries, focus, reloads and storage failures. Automated expeditions help establish that the game can be completed, but enjoying it is still a question for somebody actually playing.
Finding out what gets used
Maintaining the collection also led to KJ’s Counter. I wanted to count useful actions without building profiles of the people playing. The site sends a reviewed selection of events, including page views, game starts, completions and supported hint or undo actions; the game packages don’t send analytics themselves.
Those are event counts, not counts of individual players or sessions. Leaving a game doesn’t become a loss, and Stillwater’s saves, station layout and discoveries stay out of Counter, along with hidden answers and raw game state elsewhere. Coarse country totals provide a little context, but none of this tells me why someone played or whether they enjoyed it.
Keeping it going
Codex does substantial implementation work across the collection. My part is providing context, deciding what to pursue, reviewing the changes and spending time with the result. Stillwater’s open brief was one way of doing that; other changes, such as fixing Scrambled’s input behaviour, are much more specific.
That review also catches things a local build can miss. Staging checks found that Play could accept a click before its handler was ready on a slow connection, so the launcher now waits until it’s ready and has a regression check for the delay.
There are more games I’d like to make, but I don’t need a new one every time I come back to the project. Improving an opening, removing an awkward interaction or making an existing game a little nicer to return to is satisfying in its own right.