A few years ago, late one night, I was fidgeting at my desk with a couple of bottle caps, one black and one white. I pressed them together and got a two-tone disc: half black, half white, symmetrical, satisfying in the hand. I started flipping it between my fingers and the image that formed in my head was of polar objects stacking on top of each other, attracting or repelling depending on which face was up.
That was the seed of Attrakto.
The First Version of the Idea
The earliest form of the game had two polarities: two colors, two states, and a set of rules about which pieces wanted to sit near each other and which pushed away. Repulsors formed between adjacent pieces with opposing polarities, and the goal was to eliminate them all. Flip a piece to reverse its poles, or switch two adjacent pieces in the same row. The rules were simple and self-contained.
I added blockers to introduce more texture: pieces that move just like any other, but have the same polarity on both sides, so flipping them changes nothing. Their contribution to the board is fixed. You can switch a blocker somewhere else, but you can't change what it does where it stands. For a while, that gave the game enough complexity to stay interesting.
Hitting the Ceiling
Over time, I kept running into an upper bound that I couldn't solve from within the two-polarity model. Even with blockers in the mix, skilled players would exhaust the solution space. The puzzle generator had nowhere new to go.
The Breakthrough
Adding more polarities changed everything. A third and fourth polarity expanded the interaction space in a way I hadn't anticipated. The puzzle generator had room to breathe. Harder puzzles became possible without relying on layout tricks, and solution paths became genuinely varied in a way they hadn't been before.
That was when the game felt sustainable.
The SwiftUI Year
I shipped a SwiftUI version to the App Store, and it spent a year there. Real players used it, and I learned from watching what they did and where they stopped. I also came to understand what the game still needed to fulfill its original vision: cross-platform reach, a proper daily format with multiple board sizes, global rankings, a return-player streak system, and achievements for players who come back every day.
SwiftUI got the concept into the world. It also showed me how much further the game could go.
A Calm Daily Puzzle Game, Built to Last
Attrakto 2.0 is the version I set out to build. I wanted a calm puzzle game with real cross-platform reach, and the Flutter rebuild was the moment to ship everything I'd had in mind for a long time: three daily puzzle sizes with their own leaderboards, streaks and badges for daily players, and premium themes and achievement tracking for players who want to go deeper.
The game is calm by design. No timers, no lives, no urgency mechanics, unlimited undo. Every day the same puzzle goes to every player worldwide. After you solve it, you can see how your move count compares to everyone else's, without any pressure to beat anyone or protect a streak.
Play Today's Puzzle
Attrakto 2.0 is available now. Download Attrakto on the App Store
If you want to follow along as the game grows, Follow Attrakto on LinkedIn for design notes, daily puzzle context, and what comes next.
It started with two bottle caps and a late night at the desk. It took a few years to get here. I'm glad it did.