Engineering
The technical side of shipping small Android games with web tech: Capacitor, TypeScript, three.js, performance, battery and build tooling.
- Engineering
Stop the Google Play Games sign-in popup at launch: remove PlayGamesInitProvider
Why the Play Games sheet still appears when your game opens even if your code waits, and the AndroidManifest fix that removes PlayGamesInitProvider (with a check).
- Engineering
My puzzle game used more battery than YouTube: an idle screen should draw zero frames
Moonlit Garden drained 7% battery in 38 minutes. Endless CSS animations on blurred layers and an AudioContext that never slept. How I measured and fixed every game.
- Engineering
Closing an ad tapped the game underneath: a tap guard for AdMob in Capacitor games
When the touch that closes a rewarded or interstitial ad lands on your game's buttons. How a capture-phase tap guard fixed it in every game the same day.
- Engineering
Fully animated 3D battles in a mobile web game with three.js and CC0 KayKit models
Animated 3D fights with three.js in a Capacitor game: CC0 KayKit characters on a shared skeleton, meshopt from 23 MB to 2.4 MB, and the bugs on the way.
- Engineering
Emberfall on real phones: fixing an 88 ms frame, pixel-art coastlines, and readable fonts
Technical lessons from Emberfall: a canvas water layer that killed frame rate on phones, blending tile edges, readable pixel fonts, a battle sim, and Bluetooth audio.
- Engineering
Walk cycles that wouldn't walk: animating 2D heroes with a code rig
Why generated sprite-sheet walk cycles failed for Tavern Heroes, and how a cut-out rig posed in code replaced them. Plus the clothing, joint and cache bugs on the way.
- Engineering
Exact offline progress in an idle game: a closed-form solution instead of a replay loop
How Genesis computes offline earnings exactly with a closed-form solution to its producer chain, the soft cap that keeps it fair, and Android WebView canvas traps.
- Engineering
No-guess Minesweeper: generating boards you can always solve by logic
How the Minesweeper app builds no-guess boards with a logic solver, why the first dig is always safe, and why a second-chance rewarded ad suits the genre.
- Engineering
FreeCell: recreating Microsoft's deal numbers, a hint solver, and a store rejection for writing #1
How FreeCell deals are numbered (the LCG behind game #617 and #11982), a best-first hint solver, saving undo with the game, and a Google Play metadata rejection.
- Engineering
Building a word search generator in TypeScript (where every word appears exactly once)
How the Word Search grid generator works: seeded puzzles, overlap scoring, frequency-weighted filler letters, and repairing accidental duplicate words.







