How ckeen302/pokeiq works
PokéIQ serves live-generated Pokémon quizzes, then records results for personal progression and competition. The main path runs from a player choosing a quiz through the shared quiz controller, question API, category engine and PokéAPI-backed data, then returns sealed questions for server-verified answers. Daily Gauntlet uses a separate seeded challenge endpoint; accounts, Trainer Cards, badges and leaderboards form progression branches. Some UI and storage wiring is inferred from the README and file tree where source excerpts were not provided.
Main entry points: index.ts Engine registry · QuizController.tsx Quiz controller · QuizResults.tsx Quiz results · pokeapi.ts PokéAPI client
Components 28
Player experience
- Quiz pages
src/app/quiz/[category]/page.tsx - Daily page
src/app/daily/page.tsx - Quiz controller
src/components/quiz/QuizController.tsx - Quiz results
src/components/quiz/QuizResults.tsx - Leaderboard page
src/app/leaderboard/page.tsx - Trainer page
src/app/trainer/page.tsx - Account form
src/components/AuthForm.tsx
Quiz runtime
- Question API
src/app/api/questions/[category]/route.ts - Daily API
src/app/api/daily/route.ts - Engine registry
src/engines/index.ts - Who's That engine
src/engines/whos-that/engine.ts - Type Detective engine
src/engines/type-detective/engine.ts - Move Master engine
src/engines/move-master/engine.ts - Stat Showdown engine
src/engines/stat-showdown/engine.ts - Question validation
src/engines/validate.ts - Answer tokens
src/lib/answer-token.ts - Daily challenge
src/lib/daily.ts
Progression
- Leaderboard API
src/app/api/leaderboard/route.ts - Leaderboard store
src/lib/leaderboard-store.ts - Stats API
src/app/api/stats/route.ts - Account APIs
src/app/api/auth - Account store
src/lib/auth-store.ts - Gym badges
src/lib/achievements.ts
Data services
- PokéAPI client
src/lib/pokeapi.ts
Other components
- Player
- PokéAPI
- Supabase
- Browser storage
Connections 39
- Player → Quiz pages: chooses quiz
- Player → Daily page: starts daily
- Quiz pages → Quiz controller: renders
- Daily page → Quiz controller: renders
- Quiz controller → Question API: requests questions
- Question API → Engine registry: generates batch
- Engine registry → Who's That engine: dispatches
- Engine registry → Type Detective engine: dispatches
- Engine registry → Move Master engine: dispatches
- Engine registry → Stat Showdown engine: dispatches
- Engine registry → Question validation: validates output
- Who's That engine → PokéAPI client: fetches Pokémon
- Type Detective engine → PokéAPI client: fetches type data
- Move Master engine → PokéAPI client: fetches move data
- Stat Showdown engine → PokéAPI client: fetches stats
- PokéAPI client → PokéAPI: requests resources
- Question API → Answer tokens: seals answers
- Quiz controller → Question API: submits answer
- Daily page → Daily API: requests challenge
- Daily API → Daily challenge: gets seeded run
- Daily API → Answer tokens: seals answers
- Quiz controller → Daily API: submits answer
- Quiz controller → Quiz results: shows results
- Quiz results → Stats API: records run
- Quiz results → Leaderboard API: submits score
- Quiz results → Gym badges: checks badges
- Quiz results → Browser storage: stores guest stats
- Player → Leaderboard page: views rankings
- Leaderboard page → Leaderboard API: loads scores
- Leaderboard API → Leaderboard store: reads and writes
- Leaderboard store → Supabase: persists scores
- Player → Account form: signs in
- Account form → Account APIs: sends credentials
- Account APIs → Account store: manages accounts
- Account store → Supabase: persists accounts
- Account store → Browser storage: uses local fallback
- Player → Trainer page: views profile
- Trainer page → Stats API: loads progress
- Stats API → Account store: records and ranks