Back to Journal
ProductionTurnstone

Turnstone: What If Minesweeper Had a Soul?

How a childhood classic became a nature exploration game with real species, hand-illustrated biomes, and a guaranteed-solvable algorithm.

February 9, 20266 min read

Minesweeper is one of the most elegant puzzle designs ever made. Pure logic, zero luck (when done right), infinitely replayable. It's also, visually, a war crime. Gray squares. Red mines. A smiley face that judges you.

I kept asking one question: what if each tile you revealed told a story?

The Name Came First

The Ruddy Turnstone is a shorebird that flips over rocks along the shoreline to find food underneath. The core mechanic IS the name. You're turning stones, flipping logs, brushing aside leaves. Deducing where hidden dangers lurk while discovering the wildlife hiding beneath safe tiles.

I didn't plan the name. I was reading about shorebirds for unrelated reasons and the connection was instant. Sometimes the best product decisions happen when you're not trying to make product decisions.

SwiftUI Meets SpriteKit

The tech stack is a hybrid. SwiftUI handles menus, screens, and navigation. SpriteKit powers the tile grid where gameplay happens. It's the best of both worlds: SwiftUI's declarative UI for rapid iteration, and SpriteKit's sprite-based rendering for smooth tile animations, particle effects, and that satisfying cascade when you tap a zero-adjacent tile and the board blooms open.

The cascade is the moment. If that doesn't feel good, nothing else matters.

Guaranteed Solvable

Every board is guaranteed solvable. No guessing required. A custom solvability checker validates each generated puzzle before it reaches the player.

Classic Minesweeper's dirty secret is that sometimes you just have to guess. And guessing isn't fun. It's frustrating. If you lose in Turnstone, it's because you made a logic mistake, not because the random number generator decided to ruin your day.

The Gear System

Before each level, you equip gear cards. Binoculars to safely peek at a tile, a Compass to highlight a guaranteed-safe spot, Bug Spray to neutralize a flagged danger. Twelve cards total, limited charges that reset every level.

The design rule: cards enhance deduction, never replace it. Every puzzle is solvable without gear. The cards just give you tools to play smarter or recover from a mistake. Strategic training wheels, not cheat codes.

And critically: no pay-to-win. Seven cards are free, five are premium. Premium cards aren't more powerful, just different tools for different playstyles. Everything is earnable through play.

Scope Discipline

The hardest part wasn't the solvability algorithm or the SpriteKit animations or the SwiftData persistence layer. It was scope discipline.

When you're solo, ideas are free and time is expensive. I had designs for eight biomes, equipment crafting, multiplayer racing, seasonal events. The roadmap was enormous.

So I cut. Ruthlessly.

The launch version ships with two biomes (Creekside and Forest Floor), 50 hand-tuned levels, 24 real species to discover, 12 gear cards, and a daily puzzle with shareable results. Everything else goes in the backlog.

A polished game with two biomes beats a buggy game with eight. Every time.

Making It Feel Like Nature

The visual identity draws from National Park poster art and vintage field guides. Warm wood tones, hand-illustrated tiles, organic shapes. When you open Turnstone, it should feel like opening a well-worn trail journal, not launching a puzzle game.

Every discovery is a real species with real names, real habitats, and real behaviors described in the Field Journal. Water striders walk on water using surface tension. Red foxes can hear a mouse under two feet of snow. I wanted players to walk away knowing something they didn't before.

The game teaches without teaching. No pop-ups, no quizzes. Just a Field Journal that fills up as you play.

// The core question that started everything
enum Tile {
    case stone      // Safe: reveals a species
    case danger     // Rattlesnake, wasp nest, poison ivy
    case numbered   // Adjacent danger count (the logic layer)
}
// What if each .stone told a story?
// That's the whole game.