Proyecto web de Pokédex con datos de la PokéAPI, construido con HTML/CSS + TypeScript compilado a JavaScript para ejecutarse en navegador.
- Frontend: HTML, CSS, TypeScript
- Datos: PokéAPI
- Gráficas: Chart.js (radar de estadísticas)
- Servidor de desarrollo: live-server
- Persistencia local: localStorage (Dream Team)
Pagina/
estructura/
pokedex.html
pokemon.html
dreamteam.html
funcionalidad/
cartas.ts
createPokemon.ts
dreamTeamStore.ts
dramTeam.ts
Diseño/estilo/
pokeCard.css
pokeinfo.css
pokeDream.css
...
dist/
Pagina/funcionalidad/
cartas.js
createPokemon.js
dreamTeamStore.js
dramTeam.js
El código fuente está en Pagina/funcionalidad/*.ts y se compila a dist/ para ser cargado desde HTML.
Configuración clave en tsconfig.json:
"noEmit": falsepara generar archivos JS"outDir": "./dist"para separar código compilado"strict": truey chequeos estrictos para mayor seguridad de tipos"moduleResolution": "bundler"y"module": "Preserve"para módulos ES
En package.json:
npm run dev-> levantalive-serveren puerto 3000npm run build-> compila TypeScript contscnpm run watch-> compila en modo observación
Flujo recomendado:
npm installnpm run buildnpm run dev
Si estás editando .ts, usa en paralelo:
npm run watchnpm run dev
- Carga Pokémon por generación usando PokéAPI (
/generation/{id}+/pokemon/{name}) - Renderiza tarjetas en la Pokédex
- Gestiona búsqueda en vivo
- Controla la estrella de favorito para añadir/quitar del Dream Team
- Navega al detalle con query param:
pokemon.html?name={pokemon}
- Carga datos del Pokémon seleccionado por query param
name - Renderiza header, tipos, info física, línea evolutiva, habilidades y movimientos
- Genera tabla completa de movimientos con método/nivel/fuente
- Dibuja gráfico radar de stats con Chart.js
- Hidrata datos persistidos
- Renderiza la vista del Dream Team
- Muestra estado vacío si no hay Pokémon guardados
La persistencia se centraliza en dreamTeamStore.ts para que distintas páginas compartan el mismo estado.
Interfaz base:
export interface DreamTeamPokemon {
id: number;
name: string;
sprite: string;
}Estado compartido:
dreamTeam: DreamTeamPokemon[](array exportado)
Clave de almacenamiento:
STORAGE_KEY = "dreamTeam"
-
hydrateDreamTeam()- Lee
localStorage - Parsea JSON
- Rellena
dreamTeamen memoria - Si hay error de parseo, limpia el array para evitar estado corrupto
- Lee
-
addDreamTeamPokemon(pokemon)- Evita duplicados por
name - Límite máximo: 10 Pokémon
- Si añade correctamente, persiste con
saveDreamTeam()
- Evita duplicados por
-
removeDreamTeamPokemon(name)- Elimina por nombre
- Persiste el nuevo estado
-
hasDreamTeamPokemon(name)- Devuelve si ese Pokémon ya está en el equipo
-
En
cartas.ts:- Al cargar, llama
hydrateDreamTeam() - La estrella de cada card refleja
hasDreamTeamPokemon(name) - Click en estrella: alterna entre
addDreamTeamPokemon/removeDreamTeamPokemon
- Al cargar, llama
-
En
dramTeam.ts:- Al cargar, llama
hydrateDreamTeam() - Renderiza las miniaturas e imágenes principales a partir del mismo
dreamTeam
- Al cargar, llama
Resultado: el Dream Team se mantiene aunque recargues la página o cambies entre vistas.
pokemon.htmlypokedex.htmlapuntan a scripts compilados endist/.../*.js- Se añadieron ajustes visuales de detalle en
pokeinfo.css:- mejor jerarquía visual
- sección evolutiva más clara
- control de overflow horizontal
- scroll en listas de movimientos
pokeDream.cssdefine el layout central de Dream Team- Se integró navbar compartida entre páginas
npm install
npm run build
npm run devModo desarrollo continuo:
# terminal 1
npm run watch
# terminal 2
npm run dev- 404 en scripts: revisa que el
srcdel<script type="module">apunte adist/...y quenpm run buildhaya generado el archivo. - Cambios TS no se reflejan: faltó compilar (
build) o ejecutarwatch. - Dream Team no persiste: verifica en DevTools que exista la clave
dreamTeamen localStorage del mismo origen (host/puerto).