Sandbox Sinkhole
Blog Apps About Contact
  • A Playable URL for Every Pull Request

    May 30, 2026

    When I open a pull request on the nonogram app, a bot comments back within a couple of minutes:

  • Shipping a Flutter Web Game to TestFlight: the iOS Tax

    May 28, 2026

    The nonogram ran on the web for two years before it ran on an iPhone. Same Dart, same widgets, same game loop. Getting that identical code through Apple’s front door...

  • Teaching CI to Approve My Screenshots

    May 26, 2026

    Golden tests are the reason my nonogram app survived contact with more than one screen size. I wrote about that — render the UI at five viewports, commit the resulting...

  • Building a Nonogram, From 3×3 to TestFlight

    April 11, 2026

    I started this project on November 4, 2023 with a 3×3 grid of colored squares. The first commit isn’t a hello-world Flutter app; it already has cell selection, drag-to-fill, a...

  • Making a Puzzle Solver Fast Enough to Disappear

    April 9, 2026

    A reset button that takes two seconds to reset feels broken. You press it, the board sits there, you press it again, maybe you swear at your phone. This is...

  • Shipping a Co-op Card Game in 17 Days

    April 8, 2026

    Four browser windows arranged in a 2×2 grid, each logged in as a different player, silently passing cards to a Cloud Run server and watching the state snap back. No...

  • Why I Rewrote Countdown

    April 7, 2026

    Joel Spolsky has a famous essay called “Things You Should Never Do, Part I” where he argues that rewriting software from scratch is the single worst strategic mistake a company...

  • Welcome to Sandbox Sinkhole

    April 6, 2026

    This is the first post on Sandbox Sinkhole. I’ll be using this blog to share the apps and games I’m building, along with links so you can try them out....

© 2026 Sandbox Sinkhole