PokeNav is a game-first Pokemon encyclopedia built as a local-first React app. It is meant to feel closer to a research tool than a simple Pokedex list: browse by game, inspect Pokemon articles, compare species, study trainer battles, and move laterally through related entities without depending on heavy live client-side API hydration.
The current product direction is centered around three browse paths:
GamesPokemonTrainer Battles
Everything else in the encyclopedia is meant to support those flows:
- game hubs with scoped Pokemon, trainer, and location views
- cross-linked Pokemon, move, ability, item, region, type, and location pages
- trainer person pages and game-specific trainer appearance pages
- search, compare, and filter-heavy browsing
- Local generated encyclopedia data under
public/data - National Dex browsing with filters, sorting, and search
- Game-aware browsing and persistent game context
- Pokemon article pages with forms, learnsets, locations, stats, and cross-links
- Separate full learnset pages to avoid overloading main Pokemon articles
- Trainer archive with:
- trainer overview pages
- trainer appearance pages
- trainer battle browser
- imported local trainer portraits
- Import/export support for custom team sets
- Tests for formatting, storage, security, encyclopedia helpers, and trainer data
PokeNav is schema-first.
The app is built around normalized encyclopedia entities and route helpers so it can keep expanding without turning into page-specific hardcoded data.
Important areas:
src/pages/encyclopedia/Route-level pagessrc/components/encyclopedia/Shared shell, article, and browse componentssrc/lib/Schema, helpers, storage, and security logicsrc/hooks/Data access and route data loadingsrc/data/Curated and generated data helpersscripts/Export and generation tooling
PokeNav uses multiple sources with different jobs:
PokeAPIStructured machine data and IDsBulbapediaCanon and game-specific validationPokemon DatabaseMechanics cross-checksPokebaseSecondary browse/reference validation
More detail lives in docs/source-policy.md.
Install dependencies:
npm installGenerate runtime datasets:
npm run generate:trainers
npm run generate:encyclopediaStart the local dev server:
npm run dev:localOpen http://127.0.0.1:4173/.
If the local SQLite database or artwork cache changes, rebuild the raw Pokemon dataset too:
npm run generate:dataThat export writes runtime JSON into public/data.
npm test
npm run build| Command | Purpose |
|---|---|
npm run dev |
Start Vite in normal development mode |
npm run dev:local |
Start local-only dev server on 127.0.0.1:4173 |
npm run preview:local |
Preview the production build locally on 127.0.0.1:4173 |
npm run generate:data |
Export Pokemon runtime JSON from the local SQLite database |
npm run generate:trainers |
Export trainer reference JSON |
npm run generate:encyclopedia |
Generate the encyclopedia dataset |
npm test |
Run Vitest |
npm run build |
Type-check and build for production |
PokeNav is already usable and deployable, but it is still being shaped toward a stronger public release.
Current strengths:
- game-first browse flows
- trainer battle browsing
- local-first runtime data
- stronger security and import hardening
- route-level chunk splitting and lighter initial load
Still being improved:
- mobile density and navigation compression
- completeness of some article sections
- deeper game-aware related navigation
- richer normalized trainer and location data
The public-release direction is tracked in ROADMAP.md and docs/public-release-plan.md.
- docs/README.md Full docs index
- ROADMAP.md Product direction and next milestones
- docs/data-pipeline.md Runtime JSON generation and loading
- docs/pokemon-system.md Pokemon species pages, forms, learnsets, game context, and data flow
- docs/routes-and-pages.md Route overview
- docs/trainer-system.md Trainer identity, appearance pages, and archive data
- docs/security-hardening.md Dependency, link, import, and browser-policy hardening
- The app name is
PokeNav. - The project is intentionally local-first and does not depend on mass browser-side live hydration from PokeAPI.
- Missing data should be treated honestly in the UI with partial/planned states rather than implied completeness.



