Work / 05 of 06
pokehelper.gr
Web app · Pokédex & battles
A Pokédex that grew into a battle platform: team builder, daily puzzles, and live battles with friends, simulated in the browser.
Visit pokehelper.gr- Role
- Solo: design, front end, back end and CI
- Years
- 2025 to 2026
- Status
- Live
- Stack
- React · Vite · Supabase

394
commits
6
product areas
15
stages in a Battle Run
2
cache layers in front of PokeAPI
The brief
My friends and I were hooked on a Pokémon grid puzzle: fill a 3×3 board where every answer has to match its row and its column, and the rarer the pick, the better. I built pokehelper's filters so I could find the rarest, least obvious answers. Call it cheating. Then I built a daily grid of our own inside pokehelper, so we could keep playing. We loved battling each other too, so the battles came next.
What I built
- A Pokédex with filters built for cheating at grid puzzles: types, moves, generation, height, weight and evolution, all combined.
- PokéGrid, our own daily 3×3 puzzle: a new grid every day, guaranteed solvable, with rarity-aware scoring and leaderboards for friends and everyone else.
- A battle engine, and VS battles so friends can fight each other in real time.
- Battle Run, a hardcore survival mode: 15 stages, three checkpoint bosses and a final champion. A Pokémon that faints is gone for good, and one lost battle ends the run. Between stages you draft recruits, take on bounties and evolve your partners.
- A team builder with moves, abilities, items, natures, EVs, IVs and Tera types, plus accounts, friends and realtime notifications on Supabase.
Decisions
- 01
A real simulator, off the main thread
Pokémon Showdown's simulator runs in a Web Worker, and its own client renders the scene. Results are released only when the scene's animation queue is idle, so the game never runs ahead of what the player sees.
- 02
Multiplayer by lockstep
Both players simulate the same seeded battle locally, and Supabase acts as the meeting point and reconnect log for their choices. The trade-off is stated: a modified client can't be trusted, so VS stays casual and unranked.
- 03
Two cache layers before the API
Requests check Upstash Redis, then a Postgres cache, and reach PokeAPI only when neither cache has the data.
- 04
Shipping on every merge
CI runs lint, tests with coverage, a dependency audit, strict type-checking and a production build, then publishes a semantic release and deploys to Netlify.