BE AWESOME
Settings
Games
📅 September 5, 2026 · ⏱️ 5 min read

Perfect Color Finally Got the Modes I Promised in March

Memory Challenge, Precision Match, and Speed Rush, sharing one RGB-matching core — and per-mode leaderboards so 'top score' stays honest.

This post is about Perfect Color Finally Got the Modes I Promised in March
Play Perfect Color →

Back in March, I wrote that this game was "never supposed to have modes" and left a note that a memory variant and a timed variant were both already on my mind, just not built. Today they got built: Memory Challenge, Precision Match, and Speed Rush, three distinct modes sharing one RGB-matching core. Same sliders, same per-channel scoring, three genuinely different ways to test them.

Splitting into three modes meant isolating what was actually shared

The March version had exactly one loop — see a swatch, match it. Turning that into three modes meant first identifying precisely what's actually common across all three: the slider input, the per-channel accuracy scoring, the stepper fine-tuning. Everything else — whether the target stays visible or disappears, whether there's a time limit, how results get presented — is mode-specific. Getting that boundary right mattered more than it might sound like it should, since drawing it in the wrong place would have meant either duplicating the shared matching logic three times or tangling mode-specific behavior into code that's supposed to be common across all three, either of which would make adding a fourth mode later meaningfully harder than it needs to be.

Memory Challenge had to reuse March's per-channel scoring honestly

Memory Challenge hides the target after a preview window, which sounds like it should change the scoring entirely, and it doesn't — the per-channel accuracy math from the original March version applies completely unchanged once you submit your attempt. What actually changes is purely the display state, not the underlying judgment of how close your mix is. That reuse is exactly the payoff of having built clean, well-isolated per-channel scoring back in March instead of something more tangled — Memory Challenge became almost entirely a presentation-layer feature on top of logic that already existed and already worked, rather than a parallel scoring system I'd have needed to build and validate from scratch.

Leaderboards had to be tracked per mode, not pooled together

With three modes measuring fundamentally different things — memory accuracy, precision under no time pressure, speed under a hard clock — a single pooled leaderboard would compare scores that don't actually mean the same thing against each other. A great Speed Rush score and a great Memory Challenge score aren't measuring the same skill, so ranking them together would produce a leaderboard that's technically sortable but not actually meaningful. Splitting leaderboard tracking per mode from the start was the only way to keep "top score" honest once there was more than one genuinely different way to earn one.

Speed Rush needed its own definition of "good enough"

A 60-second sprint mode changes what optimal play actually looks like compared to the untimed original. Under Speed Rush's clock, chasing a slow, perfect match on every single swatch is the wrong strategy — a fast near-match that lets you move to the next swatch sooner scores better over the full 60 seconds than a handful of perfect ones. That's a genuinely different skill from the patient, careful matching the original March version rewarded, and I had to make sure the mode's own scoring reflected that "good enough, keep moving" philosophy rather than just importing the original's patient-precision scoring wholesale into a timed context where it doesn't actually fit the mode's own pacing.

Precision Match is the closest thing to the original, and that's deliberate

Precision Match — side-by-side visual discrimination, no memory component, no timer — is essentially the March version with a proper name attached to it now that it's one of three options instead of the only one. Keeping it recognizably unchanged rather than "improving" it to feel more distinct from the other two modes was intentional. Someone who liked the original game specifically as it was should still be able to find that exact experience here, just now sitting alongside two siblings instead of standing alone. Not every piece of a revamp needs to change just because everything around it did.

Mode selection had to be obvious without cluttering a simple game

The March version had no menu at all — you loaded it and you were immediately matching a color. Adding three modes meant introducing a selection step that game genuinely never needed before, and I was wary of that selection screen becoming its own piece of friction standing between a visitor and actually playing. I kept the mode picker to three clearly labeled options with a one-line description each, rather than anything more elaborate, since the whole point of this game has always been getting into the actual color-matching quickly. Whatever complexity three modes add to the game's total surface area shouldn't cost a single extra click beyond genuinely necessary.

What today confirms about writing these devlog posts as I go

Having an actual written record from March of exactly what I was planning to build eventually made today's work noticeably easier to scope. I wasn't guessing at what modes might make sense — I already had my own notes on it, written down before I'd second-guess or forget the original reasoning. That's turning out to be one of the real practical benefits of keeping this devlog going beyond just having something to publish: future me gets to read past me's actual intentions instead of reconstructing them from memory months later.

This is also the second revamp landing this same week, right after Blink's overhaul, and both share the exact same shape of story: a deliberately small first version, a devlog post admitting what was left out and why, and a later return once the foundation had proven itself. I don't think that's a coincidence anymore. It's becoming the actual way I build things I'm not yet sure about, and I expect the same shape of story to show up again the next time something ships deliberately small, waiting quietly for its own eventual moment to come back around and finally get the treatment it was always going to earn, sooner or later.

Hello!