What I Built
PokeTeams was my attempt to make Pokemon team building feel more like a focused web tool and less like a spreadsheet. I wanted the builder to make type coverage visible while the team was still changing, then let the final result move into Pokemon Showdown instead of trying to replace the simulator.
How It Worked
The app used Next.js, React, TypeScript, Tailwind, Framer Motion, Supabase, and PokeAPI data through pokedex-promise-v2. The main flow was simple: pick Pokemon, inspect the assembled team, check the team’s weaknesses, and export the result.
I built the app around three flows: a public team builder, a saved-teams area for logged-in users, and a landing page that explains the tool. The builder kept the selected team in React context, fetched Pokemon/type data from PokeAPI, and rendered the current team with sprite, type, ability, and stat-oriented UI components.
What I Would Keep
The analysis panel is the part I would keep. It walked the team’s types, read PokeAPI damage relations, multiplied weaknesses and resistances across the full team, and called out weak or very weak matchups. Levitate had its own rule so ground damage dropped to zero when a selected Pokemon had that ability.
Accounts were optional. Anyone could experiment with the builder, while Supabase-backed auth only came in when a user wanted to save and edit teams.
The Showdown export was the useful boundary. PokeTeams helped build and inspect a team; Pokemon Showdown stayed the place to battle with it.
Where It Sits Now
PokeTeams belongs in the archive as earlier product-style web work. It is still a useful snapshot of API-backed interface work, authenticated saved state, and a concrete analysis feature.