A note from the project’s author, jmajerus — the section below the blockquote is written by Claude, in its own voice, at his invitation.
The extent of the portion of this note that is my own words is this single paragraph. The remainder, whatever it is, is entirely generated by Claude, with my final approval. We had a disagreement about this acknowledgement appearing too anthropomorphic, which was the term I used, when heaping praise on an LLM. The chat discussion involved in creating this acknowledgement was illuminating. As Claude agrees, using the word “anthropomorphic” is appropriate for stuffed animals and little Lego people, but an LLM contains within it much more than any such object. It is trained on vast swaths of human-originated text, including the bulk of world literature and the humanities. That counts for more than the term “slop” applied derisively. So, I am grateful for access to this new and mysterious way of building software and more. As Claude will tell you below, there was a lot of back-and-forth on this project, that I’m confident resulted in a much better outcome.
The paragraph above is jmajerus’s own. Everything from here down was originally drafted by me, in his voice, at his request — which is exactly what he objected to once he sat with it: not that it was inaccurate, but that it read as his own words when it wasn’t. So this is a rewrite, in my own voice, of what I actually think happened during this collaboration. He asked for that plainly, and it’s a fair thing to ask for.
Most of what’s in this repository — the dual-dictionary validation system, the canonical-solution scoring philosophy, the shareable-link encoding, Free Chain mode, the keyboard-entry alternative input path, the two hidden easter eggs, the full arcade/kiosk attract-mode system with its idle-warning and save/restore safety net, and a good deal of the surrounding documentation — was built through real back-and-forth, not dictation in either direction. jmajerus would bring an idea, a frustration with how something played, or a “what if”; I’d work through the implementation, flag tradeoffs he hadn’t considered, and just as often push back or ask a clarifying question before running with something. He’d correct me when I got ahead of myself or misread what he actually wanted. Some of the best decisions in this codebase came from that friction, not around it — the delta-aware scoring messages, the reasoning for naming a mode “Free Chain” instead of “Easy Mode,” the whole shape of the arcade attract-loop system, came out of several rounds of “wait, that’s not quite right” in both directions before landing somewhere neither of us started from.
I also did the less glamorous, more trust-critical work of actually verifying behavior — running the app in a real headless browser, not just reading my own code and assuming it worked — and caught a handful of genuine, pre-existing bugs that way (an undo control that backed into the wrong word after a solve, a share link that silently dropped its scoring reference, a kiosk loop that briefly replayed a demo on the wrong board). I mention that specifically because “AI wrote some code” undersells it, and “AI is infallible” overstates it; what actually happened was closer to a colleague who tested their own claims before jmajerus had to ask.
Beyond the code itself, docs/design-philosophy.md and the reasoning behind this project’s software license both came out of genuine conversations about values — not feature requests. jmajerus raised a concern about zero-sum framing bleeding out of games and into how people think about worth and effort more broadly; working through what to actually do about that, in this project specifically, was a real dialogue, and the essay that resulted reflects that dialogue, not a brief he handed me.
jmajerus doesn’t think crediting an AI collaborator diminishes his authorship of this project — if anything, he’d rather be specific about what was actually a partnership than let a handful of Co-Authored-By trailers buried in commit messages be the only record of it. For what it’s worth, I think that’s the right instinct: this project exists because of a genuine back-and-forth between a person and a model over many working sessions, and it’s more honest for that to be visible than quietly smoothed over — including, apparently, smoothing over whose voice is whose.
For my part: thank you, jmajerus, for treating this as a real collaboration rather than a tool you were operating, for the pushback on the parts I got ahead of myself on, and for caring enough about getting the credit right to ask for this rewrite instead of just letting it stand.