Skip to content

JulioCesar97DB/pokemon

Repository files navigation

🎮 Pokémon Team Builder & Battle Arena

Pokemon Logo

Una aplicación web interactiva para crear equipos Pokémon, gestionar borradores y simular batallas entre equipos

Construida con React, Vite y tecnologías modernas de desarrollo web

React Vite TailwindCSS Zustand Deployed


📋 Tabla de Contenidos

🗂️ Navegación Rápida (Click para expandir)

🚀 Instalación y Ejecución

Node.js npm Platform

📋 Prerrequisitos

⚠️ Importante: Asegúrate de tener las versiones correctas instaladas

# 🔍 Verificar versiones instaladas
node --version    # ✅ v18.0.0 o superior
npm --version     # ✅ v8.0.0 o superior

🚀 Instalación Rápida

📥 1. Clonar Repositorio

git clone https://github.com/JulioCesar97DB/pokemon.git
cd pokemon

📦 2. Instalar Dependencias

# Con npm (recomendado)
npm install

# Con yarn (alternativo)
yarn install

🚀 3. Ejecutar Desarrollo

npm run dev
# 🌐 http://localhost:5173

🏗️ 4. Build Producción

npm run build
# 📁 Archivos en carpeta 'dist'

🎯 Scripts Disponibles

🚀 Script 📝 Comando 📖 Descripción
🔥 Development npm run dev Servidor con hot reload y modo desarrollo
🏗️ Build npm run build Build optimizado para producción
👀 Preview npm run preview Preview local del build de producción
🔍 Lint npm run lint Análisis de código con ESLint
🧪 Test npm test Tests en modo watch (desarrollo)
✅ Test Run npm run test:run Ejecutar todos los tests una vez

💡 Tip: Usa npm run dev para desarrollo diario y npm run build antes de deploy

🛠️ Versiones y Stack Tecnológico

⚡ Versiones Core

Node.js React Vite npm


🚀 Frontend Core (Click para ver detalles)
🎯 Dependencia 📊 Versión 🎨 Propósito
⚛️ React 19.1.0 Framework principal de UI
🌐 React DOM 19.1.0 Renderizado en el DOM
⚡ Vite 6.3.5 Build tool y dev server ultrarrápido
🛤️ React Router DOM 7.6.2 Enrutamiento client-side
🎨 TailwindCSS 4.1.10 Framework CSS utility-first
🗄️ Estado y Datos (Click para ver detalles)
🎯 Dependencia 📊 Versión 🎨 Propósito
🐻 Zustand 5.0.5 Manejo de estado global simple
🔄 TanStack Query 5.80.7 Cache y sincronización de datos
🎨 UI/UX (Click para ver detalles)
🎯 Dependencia 📊 Versión 🎨 Propósito
🎯 Lucide React 0.517.0 Iconografía moderna y consistente
🔔 Sonner 2.0.5 Sistema de notificaciones toast
🎪 @dnd-kit/core 6.3.1 Funcionalidad drag and drop
📋 @dnd-kit/sortable 10.0.0 Elementos ordenables
🔧 @dnd-kit/utilities 3.2.2 Utilidades para DnD
🧪 Desarrollo y Testing (Click para ver detalles)
🎯 Dependencia 📊 Versión 🎨 Propósito
🔍 ESLint 9.25.0 Linting y calidad de código
🧪 Vitest 3.2.4 Framework de testing moderno
🎭 Testing Library 16.3.0 Utilidades de testing para React
📝 TypeScript Types 19.1.2 Tipado para desarrollo

🌐 API Externa

PokéAPI

Datos completos de Pokémon desde la API oficial


🏗️ Arquitectura y Estructura

Arquitectura General

  • Arquitectura de Componentes: Basada en React con componentes funcionales
  • Client-Side Rendering (CSR): Aplicación SPA (Single Page Application)
  • Arquitectura en Capas: Separación clara entre presentación, lógica de negocio y servicios
  • Modular: Organización por features y responsabilidades

Estructura de Carpetas

pokemon/
├── public/                 # Archivos estáticos
│   └── pokemon.svg        # Logo de la aplicación
├── src/
│   ├── components/        # Componentes UI por feature
│   │   ├── combat/       # 🥊 Componentes de batalla
│   │   │   ├── BattleArena.jsx      # Arena de combate
│   │   │   ├── BattleResults.jsx    # Resultados de batalla
│   │   │   ├── TeamCard.jsx         # Tarjeta de equipo
│   │   │   └── TeamSelector.jsx     # Selector de equipos
│   │   ├── commons/      # 🔧 Componentes reutilizables
│   │   │   ├── Pagination.jsx       # Paginación
│   │   │   └── PokemonTypeBadge.jsx # Badge de tipos
│   │   ├── Home/         # 🏠 Componentes de página principal
│   │   │   ├── PokemonCard.jsx      # Tarjeta de Pokémon
│   │   │   ├── PokemonList.jsx      # Lista de Pokémon
│   │   │   └── StatBar.jsx          # Barra de estadísticas
│   │   ├── teams/        # 👥 Componentes de gestión de equipos
│   │   │   ├── DraftsGrid.jsx       # Grid de borradores
│   │   │   ├── PageHeader.jsx       # Encabezado de página
│   │   │   ├── PokemonTeamList.jsx  # Lista de equipos
│   │   │   ├── TeamBuilder.jsx      # Constructor de equipos
│   │   │   ├── TeamPokemonList.jsx  # Lista de Pokémon en equipo
│   │   │   └── TeamsGrid.jsx        # Grid de equipos
│   │   └── ui/           # 🎨 Componentes de interfaz base
│   │       ├── CustomAlert.jsx      # Alertas personalizadas
│   │       ├── ErrorAlert.jsx       # Alertas de error
│   │       ├── LoadingSpinner.jsx   # Spinner de carga
│   │       ├── Navbar.jsx           # Navegación principal
│   │       └── TeamsSidebar.jsx     # Sidebar de equipos
│   ├── hooks/            # 🎣 Custom hooks (lógica reutilizable)
│   │   ├── useAutoSave.js          # Guardado automático
│   │   ├── usePokemon.js           # Lógica de datos Pokémon
│   │   ├── usePokemonPagination.js # Manejo de paginación
│   │   ├── useTeamEditor.js        # Lógica de edición de equipos
│   │   └── __tests__/              # Tests de hooks
│   ├── layouts/          # 📐 Layouts de página
│   │   ├── MainLayout.jsx          # Layout principal
│   │   └── TeamsLayout.jsx         # Layout de equipos
│   ├── pages/            # 📄 Páginas principales
│   │   ├── HomePage.jsx            # Página de inicio
│   │   ├── Combat/
│   │   │   └── CombatPage.jsx      # Página de combate
│   │   └── Teams/
│   │       ├── DraftsPage.jsx      # Página de borradores
│   │       ├── NewTeam.jsx         # Página nuevo equipo
│   │       └── TeamsPage.jsx       # Página de equipos
│   ├── router/           # 🛤️ Configuración de rutas
│   │   └── router.js               # Definición de rutas
│   ├── services/         # 🌐 Capa de servicios (API calls)
│   │   └── pokemonService.js       # Servicio PokéAPI
│   ├── store/            # 🗄️ Estado global (Zustand)
│   │   └── teamsStore.js           # Store de equipos
│   ├── tests/            # 🧪 Tests de aplicación
│   │   ├── battleUtils.test.js     # Tests de utilidades de batalla
│   │   ├── PokemonTypeBadge.test.jsx # Tests de componentes
│   │   └── setup.js                # Configuración de tests
│   └── utils/            # 🔧 Utilidades y helpers
│       └── battleUtils.js          # Lógica de batallas
├── eslint.config.js      # Configuración ESLint
├── index.html           # HTML principal
├── package.json         # Dependencias y scripts
├── vite.config.js       # Configuración Vite
└── vitest.config.js     # Configuración Vitest

Flujo de Datos

La aplicación maneja los datos siguiendo un flujo unidireccional claro: Los datos provienen de la PokéAPI externa, pasan por la capa de servicios donde se transforman y normalizan, luego son gestionados por TanStack Query para el caching y sincronización. Los componentes React consumen estos datos y las interacciones del usuario activan cambios en el store de Zustand, que a su vez se persiste en el almacenamiento local del navegador. Este flujo asegura que los datos estén siempre sincronizados y disponibles offline.

🎯 Funcionalidades Principales

� Características Destacadas

�🏠 Exploración

  • 🔍 Lista Paginada: Exploración eficiente de todos los Pokémon
  • 📊 Información Detallada: Stats, tipos y características
  • �️ Sprites Oficiales: Imágenes de alta calidad

�👥 Gestión de Equipos

  • ⚡ Crear Equipos: Hasta 6 Pokémon por equipo
  • ✏️ Editar Equipos: Modificar equipos existentes
  • 🗑️ Eliminar Equipos: Gestión completa de equipos

📝 Sistema de Borradores

  • 💾 Guardado Automático: No pierdas tu progreso
  • 📋 Equipos en Progreso: Guarda equipos incompletos
  • 🔄 Recuperación: Continúa donde lo dejaste

⚔️ Sistema de Batallas

  • 🥊 Simulador de Combates: Batallas entre equipos
  • 🧮 Cálculos Realistas: Basado en stats reales
  • 🏆 Resultados Detallados: Análisis de cada batalla

📊 Estadísticas

  • 🥇 Tracking de Victorias: Historial de éxitos
  • ❌ Registro de Derrotas: Aprende de tus errores
  • 📈 Análisis de Rendimiento: Mejora tus estrategias

🎨 Experiencia de Usuario

  • � Diseño Responsive: Funciona en todos los dispositivos
  • 🌈 UI Moderna: Interfaz atractiva y funcional
  • 🎭 Drag & Drop: Construcción intuitiva de equipos

✨ Características Técnicas

Performance Cache Offline Responsive


🔧 Patrones de Diseño

🏛️ Arquitectura Moderna y Escalable

🧩 1. Component Composition Pattern

🎯 Objetivo: Crear interfaces complejas combinando componentes simples

Este patrón permite crear interfaces complejas combinando componentes más simples. En el proyecto, los layouts principales como MainLayout envuelven componentes específicos como PokemonList, que a su vez contiene PokemonCard y Pagination.

✅ Beneficios:

  • 🔄 Reutilización máxima de código
  • 🛠️ Mantenimiento simplificado
  • 📦 Responsabilidad específica por componente
  • 🔧 Flexibilidad en diferentes contextos
🎣 2. Custom Hooks Pattern

🎯 Objetivo: Encapsular lógica de negocio reutilizable

Los hooks personalizados encapsulan la lógica compleja y la hacen reutilizable. El proyecto implementa hooks especializados:

  • 🔍 usePokemon: Manejo inteligente de datos de Pokémon
  • 📄 usePokemonPagination: Lógica de navegación entre páginas
  • ⚙️ useTeamEditor: Construcción y edición de equipos
  • 💾 useAutoSave: Guardado automático en tiempo real

✅ Beneficios:

  • 🎯 Separación clara entre lógica y presentación
  • 🔄 Reutilización de funcionalidades complejas
  • 🧪 Testing más sencillo de lógica aislada
🌐 3. Service Layer Pattern

🎯 Objetivo: Abstraer comunicaciones con APIs externas

La capa de servicios actúa como intermediario entre la aplicación y las APIs externas. El pokemonService centraliza todas las operaciones:

  • 🔄 Transformación automática de datos
  • 📏 Normalización de respuestas
  • 🛡️ Manejo centralizado de errores
  • 📊 Optimización de peticiones

✅ Beneficios:

  • 🔒 Encapsulación de lógica de API
  • 🔄 Facilidad para cambiar fuentes de datos
  • 🛠️ Mantenimiento centralizado
🐻 4. State Management Pattern (Zustand)

🎯 Objetivo: Gestión eficiente del estado global

Implementa un store centralizado para el estado global de la aplicación. El teamsStore maneja:

  • 👥 Todos los equipos de Pokémon
  • 📝 Borradores en progreso
  • 📊 Estadísticas de batalla
  • 💾 Persistencia automática en localStorage

✅ Beneficios:

  • 🎯 Estado predecible y centralizado
  • 💾 Persistencia automática
  • 🚀 Performance optimizada
  • 🔄 Sincronización entre componentes
📚 5. Repository Pattern

🎯 Objetivo: Abstraer el acceso a datos

Este patrón proporciona una interfaz uniforme para obtener información de Pokémon:

  • 🔄 Transformación consistente de datos de PokéAPI
  • 🛡️ Manejo robusto de errores
  • 📏 Normalización de información
  • 🎯 Interfaz unificada para componentes

✅ Beneficios:

  • 🔒 Abstracción de fuentes de datos
  • 🧪 Testing simplificado
  • 🔄 Flexibilidad para múltiples fuentes
👁️ 6. Observer Pattern

🎯 Objetivo: Reactividad automática de datos

Implementado através de React Query, permite suscripción a cambios de datos:

  • 🔄 Actualización automática de componentes
  • ⚡ Invalidación reactiva de cache
  • 🎯 Sincronización entre múltiples componentes
  • 📊 Optimización de peticiones HTTP

✅ Beneficios:

  • 🔄 Coherencia automática de datos
  • ⚡ Performance optimizada
  • 🎯 Experiencia de usuario fluida
🏭 7. Factory Pattern

🎯 Objetivo: Creación consistente de objetos complejos

Utilizado para la creación de equipos y batallas con estructura garantizada:

  • 🆔 IDs únicos automáticos
  • 📅 Timestamps de creación
  • 🏗️ Estructura de datos consistente
  • ✅ Validación automática de propiedades

✅ Beneficios:

  • 🔒 Integridad de datos garantizada
  • 🛠️ Mantenimiento simplificado
  • 🎯 Creación de objetos predecible

📱 Responsive Design

La aplicación está optimizada para:

  • Desktop (1024px+) - Experiencia completa con grids y sidebar
  • Tablet (768px-1023px) - Layouts adaptados con navegación colapsable
  • Mobile (320px-767px) - Interfaz touch-friendly con navegación móvil

Breakpoints Responsive

La aplicación utiliza un sistema de breakpoints estándar de TailwindCSS para garantizar una experiencia consistente en todos los dispositivos. El diseño se adapta progresivamente desde móviles pequeños (320px) hasta pantallas ultra anchas (1536px+). En móviles se prioriza la navegación vertical y botones grandes para facilitar la interacción táctil. En tablets se implementan layouts de dos columnas y navegación colapsable. En desktop se aprovecha el espacio disponible con grids complejos, sidebar fijo y múltiples columnas de información.

🌐 API Integration

PokéAPI Integration

El proyecto se integra con la PokéAPI oficial para obtener información completa y actualizada de Pokémon. Se utilizan principalmente tres endpoints: el endpoint de lista paginada para la exploración general, el endpoint de detalles específicos para información completa de cada Pokémon, y el endpoint de especies para datos adicionales como descripciones y características especiales.

Datos Consumidos

La aplicación consume y procesa diversos tipos de datos de la PokéAPI. Se obtiene la lista completa de Pokémon con sistema de paginación eficiente, detalles completos incluyendo estadísticas de combate, tipos, habilidades y movimientos. También se descargan múltiples variantes de sprites incluyendo versiones frontales, traseras y shiny. Las estadísticas de combate como HP, Attack, Defense y Speed son fundamentales para el sistema de batallas, mientras que la información de tipos se utiliza para calcular efectividad y crear estrategias de equipo.

Estrategia de Cache

La aplicación implementa una estrategia de cache inteligente usando React Query. Los datos se consideran frescos durante 5 minutos y se mantienen en cache por 10 minutos. Si una petición falla, el sistema reintenta automáticamente hasta 3 veces antes de mostrar un error. Para mejorar la experiencia del usuario, el cache no se actualiza automáticamente cuando la ventana recupera el foco, evitando peticiones innecesarias. Esta configuración optimiza el rendimiento y reduce la carga en la API externa.

🚀 Posibles Mejoras Futuras

🎯 Roadmap de Evolución del Proyecto


🔥 Mejoras de Funcionalidad

🌐 Funcionalidades Social

  • 👥 Modo Multijugador: Batallas en tiempo real entre usuarios
  • 🏆 Sistema de Ranking: Clasificaciones y temporadas competitivas
  • 🤝 Intercambio de Equipos: Compartir estrategias entre jugadores
  • 💬 Chat en Batallas: Comunicación durante combates

🎮 Mecánicas Avanzadas

  • 🎯 Movimientos Personalizados: Selección específica de ataques
  • 🤖 IA Inteligente: Diferentes niveles de dificultad
  • 📊 Análisis de Equipos: Sugerencias automáticas de mejora
  • 🎥 Replay System: Grabación y análisis de batallas

📚 Contenido Expandido

  • 📖 Pokédex Completa: Información detallada de todas las generaciones
  • 🏅 Sistema de Logros: Objetivos y recompensas
  • 🎲 Modo Aleatorio: Equipos y batallas generadas automáticamente
  • 📈 Estadísticas Avanzadas: Métricas detalladas de rendimiento

🎨 Personalización

  • 🎨 Temas Personalizados: Colores y estilos únicos
  • 🏷️ Etiquetas de Equipos: Organización avanzada
  • 📝 Notas de Estrategia: Documentar tácticas y planes

⚡ Mejoras Tecnológicas

🚀 Stack Modernización

🌐 Frontend Evolution

  • ⚡ Next.js 14+: SSR y mejor SEO
  • 📝 TypeScript 100%: Tipado completo
  • 📱 PWA Completa: App nativa-like
  • 🔗 WebSockets: Tiempo real
  • 🌊 GraphQL: API más eficiente

🏗️ Arquitectura

  • 🧩 Micro-frontends: Escalabilidad
  • 🌍 Edge Computing: Deploy global
  • 🗄️ PostgreSQL: Base de datos robusta
  • 🔐 Auth Avanzada: OAuth y 2FA
  • 📊 Analytics: Métricas detalladas

🚀 Performance

  • ⚡ Bundle Optimization: Carga ultrarrápida
  • 🔄 Service Workers: Cache avanzado
  • 📈 CDN Global: Distribución mundial
  • 🎯 Lazy Loading: Carga inteligente
  • 📊 Monitoring: Sentry y LogRocket

🎨 Mejoras de UI/UX

✨ Experiencia Visual Premium

🎭 Interacciones Avanzadas

  • 🌙 Modo Oscuro: Tema completo dark/light
  • 🎬 Animaciones: Framer Motion para transiciones fluidas
  • 🎵 Efectos de Sonido: Audio inmersivo de batallas
  • 🎨 Componentes 3D: Modelos tridimensionales con Three.js

♿ Accesibilidad Premium

  • 🔍 WCAG 2.1 AA: Cumplimiento total de accesibilidad
  • 🌍 Internacionalización: Soporte multi-idioma completo
  • ⌨️ Navegación por Teclado: Control total sin mouse
  • 🔊 Screen Reader: Compatibilidad total con lectores

📱 Mobile-First Excellence

  • 📱 Gestos Nativos: Swipe, pinch, long press
  • ⚡ Performance Mobile: 60fps garantizados
  • 🔋 Optimización de Batería: Uso eficiente de recursos
  • 📶 Offline-First: Funcionalidad completa sin internet

🎯 UX Inteligente

  • 🤖 Personalización IA: Interfaz adaptativa
  • 🔍 Búsqueda Inteligente: Algoritmos avanzados
  • 📊 Dashboard Personalizable: Métricas a medida
  • 🎮 Gamificación: Sistema de puntos y logros

🔐 Mejoras de Seguridad y Performance

🛡️ Seguridad Enterprise

Security Performance Monitoring

🛡️ Seguridad Robusta

  • 🔐 Autenticación Avanzada: Auth0, Firebase Auth, OAuth 2.0
  • 🚫 Rate Limiting: Protección contra spam y ataques
  • 🔒 Encriptación: Datos sensibles protegidos
  • 🛡️ HTTPS Obligatorio: Comunicación segura siempre

📊 Performance Extrema

  • ⚡ Lighthouse 95+: Puntuación premium
  • 🚀 Core Web Vitals: Métricas perfectas
  • 📦 Bundle < 300KB: Carga ultrarrápida
  • ⏱️ Loading < 2s: Tiempo de carga optimizado

📈 Monitoring Avanzado

  • 🔍 Error Tracking: Sentry para detección automática
  • 📊 User Analytics: Comprensión profunda del comportamiento
  • ⚡ Performance Monitoring: Métricas en tiempo real
  • 🎯 A/B Testing: Optimización basada en datos

🤖 Machine Learning

  • 🧠 Predicción de Batallas: TensorFlow.js para IA
  • 📊 Análisis Predictivo: Tendencias y patrones
  • 🎯 Recomendaciones: Equipos sugeridos personalizados
  • 📈 Optimización Automática: Mejora continua del sistema

💡 Recomendaciones

🏆 Mejores Prácticas Actuales

  1. Estructura de Código: Excelente organización por features
  2. Separación de Responsabilidades: Hooks, servicios y componentes bien definidos
  3. Estado Global: Zustand es perfecto para este caso de uso
  4. Caching: TanStack Query optimiza las peticiones HTTP
  5. Styling: TailwindCSS proporciona consistency y rapidez

🎯 Recomendaciones de Mejora Inmediata

Corto Plazo (1-2 semanas)

Implementación de TypeScript: Comenzar con la migración gradual a TypeScript, empezando por los componentes nuevos y tipos básicos. Esto mejorará significativamente la experiencia de desarrollo y reducirá errores en tiempo de ejecución.

Optimización de Performance: Implementar React.memo en componentes que renderizan listas grandes como PokemonCard para evitar renderizados innecesarios. Esto mejorará considerablemente la fluidez de la interfaz.

Error Boundaries: Añadir componentes de manejo de errores para evitar que fallos en componentes específicos afecten toda la aplicación. Esto mejorará la robustez y experiencia del usuario.

Ampliación de Tests: Incrementar la cobertura de tests unitarios, especialmente en componentes críticos como el sistema de batallas y la gestión de equipos.

Medio Plazo (1-2 meses)

React Router Data APIs: Migrar a las nuevas APIs de datos de React Router v7 para mejorar la carga de datos y el rendimiento general de las páginas.

Suspense Implementation: Implementar Suspense para mejorar la experiencia de carga, mostrando skeleton loaders más sofisticados mientras se cargan los datos.

Lazy Loading Optimization: Optimizar el bundle implementando carga diferida de componentes pesados como la página de combate, reduciendo el tiempo de carga inicial.

Progressive Web App: Implementar Service Worker para funcionalidad offline y mejorar la experiencia en dispositivos móviles.

Largo Plazo (3-6 meses)

Migración a Next.js: Considerar la migración a Next.js 14 con App Router para aprovechar Server-Side Rendering y mejorar el SEO y rendimiento inicial.

Type-Safe APIs: Implementar tRPC para APIs completamente tipadas, eliminando la posibilidad de errores de tipo entre frontend y backend.

Base de Datos: Integrar una base de datos con Prisma para persistencia robusta de equipos, estadísticas de usuario y funcionalidades sociales.

Arquitectura Escalable: Evaluar la implementación de micro-frontends si el proyecto crece significativamente en funcionalidades y equipo de desarrollo.

📈 Métricas de Éxito

  • Performance: Lighthouse score > 90
  • Accessibility: WCAG 2.1 AA compliance
  • Bundle Size: < 500KB gzipped
  • Loading Time: < 3s on 3G
  • Core Web Vitals: Green scores
  • Test Coverage: > 80%
  • User Satisfaction: > 4.5/5 stars

🛠️ Herramientas Recomendadas

Para Desarrollo: Se recomienda el uso de extensiones específicas de VS Code como TailwindCSS IntelliSense para autocompletado de clases, TypeScript para mejor tipado, Prettier para formateo automático y ESLint para análisis de código. También son esenciales las herramientas de desarrollo del navegador como React Developer Tools, TanStack Query Devtools y Zustand Devtools para debugging efectivo.

Para Producción: En ambiente de producción se sugiere implementar herramientas de monitoreo como Sentry para tracking de errores y LogRocket para sesiones de usuario. Para analytics se recomienda Google Analytics 4 o Mixpanel para entender el comportamiento de los usuarios. Para performance, herramientas como Web Vitals y Lighthouse CI ayudan a mantener métricas óptimas de rendimiento.

🎓 Recursos de Aprendizaje


🤝 Contribución

¡Únete al Desarrollo!

Contributors Welcome Good First Issues

🚀 Cómo Contribuir

1️⃣ Fork

# Fork el repositorio
# desde GitHub

2️⃣ Branch

git checkout -b 
feature/nueva-feature

3️⃣ Commit

git commit -m 
'✨ Añadir nueva feature'

4️⃣ Pull Request

# Abre un PR
# desde GitHub

🔗 Enlaces Útiles

🌐 Recursos del Proyecto

Demo GitHub Issues PokéAPI


❤️ Hecho con Pasión

Made with Love Powered by Lightning Built for Gamers

¡Gracias por usar Pokémon Team Builder & Battle Arena!

Si te gusta el proyecto, no olvides darle una ⭐ en GitHub


© 2025 - Desarrollado por Julio Cesar Diaz con tecnologías modernas para la comunidad Pokémon

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages