Pokedex interactiva construida con Next.js, TypeScript y PokeAPI, con una interfaz inspirada en estetica 8-bit para explorar Pokemon de Kanto y Johto.
PokedexIA es un proyecto orientado a portfolio que combina consumo real de datos desde PokeAPI con una UI retro personalizada.
Actualmente permite:
- Explorar
251Pokemon deKantoyJohto - Buscar por nombre o ID
- Filtrar por tipo
- Filtrar por region
- Consultar una vista de detalle con stats, abilities y navegacion entre Pokemon
- Preguntar en lenguaje natural a un chat que responde con los datos reales del catalogo
- Home con estilo 8-bit y navegacion visual retro
- Busqueda por nombre o ID en tiempo real
- Filtros por tipo Pokemon
- Filtro lateral por regiones
KantoyJohto - Tarjetas con sprites clasicos y tipos reales
- Vista de detalle con:
- categoria del Pokemon
- tipos
- stats base con barras de color
- abilities con descripcion real desde
PokeAPI - navegacion entre Pokemon anterior y siguiente
- Chat conversacional (RAG) sobre los
251Pokemon:- responde en lenguaje natural a partir de los datos reales de
PokeAPI, no de conocimiento del modelo - resuelve preguntas de superlativo (
el mas pesado de Johto) ordenando el catalogo completo, no solo las fichas mas parecidas a la pregunta - muestra que Pokemon ha consultado para elaborar cada respuesta
- limitacion de tasa por IP y manejo de errores del proveedor
- responde en lenguaje natural a partir de los datos reales de
- Generacion estatica con revalidacion para reducir llamadas repetidas
Next.js 16React 19TypeScriptAxiosPokeAPICSS Modulesnext/font/googleGemini API(gemini-embedding-001ygemini-3.5-flash-lite) para el chat
pages/
index.tsx Home con filtros y listado principal
pokemon/[name].tsx Vista de detalle de cada Pokemon
api/chat.ts Endpoint del chat conversacional
components/
PokemonCard.tsx Tarjeta reutilizable del listado
PokedexChat.tsx Asistente conversacional de la home
lib/
axios.ts Cliente HTTP base para PokeAPI
gemini.ts Cliente de la API de Gemini (solo servidor)
semanticSearch.ts Busqueda por similitud sobre el corpus
chatPrompt.ts Validacion de la pregunta y armado del prompt
structuredQuery.ts Consultas de superlativo sobre el catalogo completo
rateLimit.ts Limitacion de tasa por IP
scripts/
build-pokedex-corpus.ts Genera el corpus de embeddings
data/
pokedex-corpus.json Corpus vectorizado de los 251 Pokemon
types/
pokemon.ts Tipos principales de datos
docs/
*.md Documentacion tecnica y cambios por featurenpm installEl chat conversacional requiere una clave de la API de Gemini. Copia .env.example a .env.local y rellena el valor:
GEMINI_API_KEY=tu_claveLa clave se obtiene en Google AI Studio y el nivel gratuito basta para el uso de este proyecto. Nunca debe versionarse ni exponerse con el prefijo NEXT_PUBLIC_: solo se usa en codigo de servidor.
El resto de la aplicacion funciona sin esta variable; unicamente el chat quedaria inoperativo.
Inicia el entorno de desarrollo:
npm run devAbre en el navegador:
http://localhost:3000Ejemplo de pagina de detalle:
http://localhost:3000/pokemon/charizardnpm run dev
npm run build
npm run start
npm run lint
npm run test # pruebas de la logica de servidor
npm run build:corpus # regenera el corpus de embeddings del chatbuild:corpus solo hace falta si cambian los datos de origen o el texto de las fichas. Tarda unos 3 minutos, porque el nivel gratuito de Gemini limita a 100 embeddings por minuto.
Este proyecto consume datos desde la API publica oficial no comercial:
https://pokeapi.co/api/v2/
Recursos usados en la aplicacion:
pokemonpokemon-speciesability
- La aplicacion usa
pages/router de Next.js. - El detalle de cada Pokemon se genera con
getStaticPathsygetStaticProps. - La home usa
getStaticPropsy revalida periodicamente. next/imageesta configurado conimages.unoptimized = truepara evitar problemas de timeout con sprites remotos.- La region actual se calcula por rango de ID para el alcance actual:
1-151:Kanto152-251:Johto
- El chat usa RAG con embeddings precalculados en
data/pokedex-corpus.json, no una base de datos vectorial: con251fichas fijas, la similitud coseno en memoria cuesta milisegundos y evita infraestructura innecesaria. - La clave de Gemini solo se usa en
pages/api/chat.tsy en el script del corpus, nunca en codigo de cliente. - Justificacion completa de estas decisiones en
docs/ia-decision.md.
- Anadir mas regiones y generaciones
- Mejorar el acceso al filtro de regiones en movil
- Optimizar la carga de datos de la home si aumenta el numero de generaciones
- Anadir favoritos o comparador de Pokemon
- Datos: PokeAPI
- Franquicia Pokemon: Nintendo / Creatures / Game Freak
Este proyecto se distribuye bajo licencia MIT. Consulta el archivo LICENSE.

