The Games catalog under Apps is six titles: Blank Fill, Pair Flip, Stack Drop, Word Hunt, Tile Slide, and Light Flip. None of them need a native install. None of them need an account. That constraint drives the tech more than any framework preference.
Shared catalog, separate loops
Each game is its own folder with its own CSS and script. The catalog page is only a map with preview strips so you can tell games apart before clicking. I would rather duplicate a little styling than glue six mechanics into one mega-bundle that invalidates cache when one puzzle changes.
Details that actually hurt
Word Hunt taught me that rebuilding the whole letter grid on every pointer move is a bad idea. Selection has to paint over a stable grid, track the pointer with capture, and resolve cells with elementFromPoint. Connectors are SVG lines; found words turn green and stay found. Small stuff — but it is the difference between “broken on mobile” and “playable on a phone between meetings.”
Stack Drop is intentional physics lite: drop, land, stack, miss. It replaced a heavier merge prototype that did not earn its complexity. Light Flip is classic lights-out: toggle a cell and its neighbors. Old puzzle, still a clean teaching loop for state.
What I am not optimizing for
Leaderboards, seasons, and battle passes. Those features demand backends and moderation. The current bar is: readable rules, stable layout (no jumping chrome when you select letters), and a next-puzzle path that does not reload the whole site.
Play the set: apps.mydailydose.site/games.