1 comments

  • oug-t 2 hours ago

    I built ZSweep because I wanted a Minesweeper experience that actually respects Vim grammar, not just a remapping of arrow keys to HJKL.

    Using a mouse for grid navigation kept breaking my flow during short breaks, so I set out to design a game that is 100% keyboard-centric, where movement and actions feel composable in the same way Vim motions do.

    Technical highlights:

    Vim grammar engine: A custom state machine handles real Vim-like motions, including numeric prefixes (5j), search (/ + digit to jump to that number), and context-aware word motions (w / b) that skip revealed safe cells and land on unrevealed ones.

    Svelte 5 & performance: Built with SvelteKit using the new Svelte 5 runes. Input latency was a hard constraint—if movement doesn’t feel as immediate as a terminal editor, the Vim feel completely falls apart.

    Backend & stats: Powered by Supabase. I recently refactored the global stats dashboard from client-side counting to server-side aggregation (RPC) after hitting the classic 1,000-row select cap, which caused total time-swept stats to drift. Aggregates now reflect the full dataset correctly.

    Security: Uses Row Level Security (RLS) so users can only modify their own game results, while keeping the global leaderboard public.

    Why I’m sharing now: The project has crossed 1,000+ started games, and I’m looking for technical contributors to help polish the experience. I’ve opened GitHub issues around sound system customization and performance optimizations for larger boards (e.g. 30×16).

    Play: https://zsweep.com

    Source: https://github.com/oug-t/zsweep