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
pokehelper.gr on desktop and mobile

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.