# mayachakra/pokeportal architecture

> Architecture diagram of the GitHub repository mayachakra/pokeportal, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mayachakra/pokeportal
- Repository: https://github.com/mayachakra/pokeportal

## Overview

PokePortal is a Pokémon web app with account signup/login, a Pokédex, battles, and a quiz that assigns a Pokémon. The main workflow runs from a browser through Express routes to page rendering or API responses; quiz and battle handlers use Pokémon data and the database. The graph includes the documented Pokédex capability, but the supplied excerpts do not show its implementation or route wiring. Frontend scripts and templates are shown as product surfaces; their client-to-API connections are not evidenced in the excerpts.

Main entry points: [`models/index.js`](https://github.com/mayachakra/pokeportal/blob/main/models/index.js) (Model associations), [`controllers/api/index.js`](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/index.js) (API dispatcher), [`server.js`](https://github.com/mayachakra/pokeportal/blob/main/server.js) (Express server), [`controllers/api/quiz-routes.js`](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/quiz-routes.js) (Quiz assignment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_server["Express server<br/>[server.js]"]
  node_view_routes["Page routes<br/>[home-routes.js]"]
  node_api_routes["API dispatcher<br/>[index.js]"]
  node_pages["Rendered pages"]
  node_browser_scripts["Browser scripts"]
end

subgraph group_identity["Accounts and sessions"]
  node_signup_login["Signup and login<br/>[user-routes.js]"]
  node_login_routes["Login routes<br/>[login-routes.js]"]
  node_sessions["Session handling<br/>[server.js]"]
end

subgraph group_pokemon["Pokémon features"]
  node_quiz["Quiz assignment<br/>[quiz-routes.js]"]
  node_battle["Battle simulation<br/>[battle-routes.js]"]
  node_pokedex["Pokédex<br/>[Pokemon.js]"]
end

subgraph group_data["Persistence"]
  node_models["Model associations<br/>[index.js]"]
  node_users[("User records<br/>[User.js]")]
  node_pokemon_records[("Pokémon records<br/>[Pokemon.js]")]
end

node_browser(("Trainer browser"))
node_pokeapi["PokéAPI"]
node_postgres[("PostgreSQL")]

node_browser -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_view_routes
node_server -->|"mounts routes"| node_api_routes
node_view_routes -->|"renders pages"| node_pages
node_browser -.->|"uses features"| node_browser_scripts
node_api_routes -->|"dispatches requests"| node_signup_login
node_api_routes -->|"dispatches requests"| node_login_routes
node_api_routes -->|"dispatches requests"| node_quiz
node_api_routes -->|"dispatches requests"| node_battle
node_server -->|"configures sessions"| node_sessions
node_signup_login -->|"uses models"| node_models
node_login_routes -->|"uses models"| node_models
node_quiz -->|"uses models"| node_models
node_battle -->|"uses models"| node_models
node_models -->|"associates records"| node_users
node_models -->|"associates records"| node_pokemon_records
node_users -.->|"persists via"| node_postgres
node_pokemon_records -.->|"persists via"| node_postgres
node_battle -->|"fetches Pokémon"| node_pokeapi
node_quiz -->|"fetches species"| node_pokeapi
node_browser -.->|"explores species"| node_pokedex

click node_server "https://github.com/mayachakra/pokeportal/blob/main/server.js"
click node_view_routes "https://github.com/mayachakra/pokeportal/blob/main/controllers/home-routes.js"
click node_api_routes "https://github.com/mayachakra/pokeportal/blob/main/controllers/api/index.js"
click node_pages "https://github.com/mayachakra/pokeportal/tree/main/views"
click node_browser_scripts "https://github.com/mayachakra/pokeportal/tree/main/public/js"
click node_signup_login "https://github.com/mayachakra/pokeportal/blob/main/controllers/api/user-routes.js"
click node_login_routes "https://github.com/mayachakra/pokeportal/blob/main/controllers/api/login-routes.js"
click node_sessions "https://github.com/mayachakra/pokeportal/blob/main/server.js"
click node_quiz "https://github.com/mayachakra/pokeportal/blob/main/controllers/api/quiz-routes.js"
click node_battle "https://github.com/mayachakra/pokeportal/blob/main/controllers/api/battle-routes.js"
click node_pokedex "https://github.com/mayachakra/pokeportal/blob/main/models/Pokemon.js"
click node_models "https://github.com/mayachakra/pokeportal/blob/main/models/index.js"
click node_users "https://github.com/mayachakra/pokeportal/blob/main/models/User.js"
click node_pokemon_records "https://github.com/mayachakra/pokeportal/blob/main/models/Pokemon.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_view_routes,node_api_routes,node_pages,node_browser_scripts,node_browser toneBlue
class node_signup_login,node_login_routes,node_sessions,node_postgres toneAmber
class node_quiz,node_battle,node_pokedex,node_pokeapi toneMint
class node_models,node_users,node_pokemon_records toneRose
```

## Components

### Web application

- [Express server](https://github.com/mayachakra/pokeportal/blob/main/server.js): `server.js`
- [Page routes](https://github.com/mayachakra/pokeportal/blob/main/controllers/home-routes.js): `controllers/home-routes.js`
- [API dispatcher](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/index.js): `controllers/api/index.js`
- [Rendered pages](https://github.com/mayachakra/pokeportal/tree/main/views): `views`
- [Browser scripts](https://github.com/mayachakra/pokeportal/tree/main/public/js): `public/js`

### Accounts and sessions

- [Signup and login](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/user-routes.js): `controllers/api/user-routes.js`
- [Login routes](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/login-routes.js): `controllers/api/login-routes.js`
- [Session handling](https://github.com/mayachakra/pokeportal/blob/main/server.js): `server.js`

### Pokémon features

- [Quiz assignment](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/quiz-routes.js): `controllers/api/quiz-routes.js`
- [Battle simulation](https://github.com/mayachakra/pokeportal/blob/main/controllers/api/battle-routes.js): `controllers/api/battle-routes.js`
- [Pokédex](https://github.com/mayachakra/pokeportal/blob/main/models/Pokemon.js): `models/Pokemon.js`

### Persistence

- [Model associations](https://github.com/mayachakra/pokeportal/blob/main/models/index.js): `models/index.js`
- [User records](https://github.com/mayachakra/pokeportal/blob/main/models/User.js): `models/User.js`
- [Pokémon records](https://github.com/mayachakra/pokeportal/blob/main/models/Pokemon.js): `models/Pokemon.js`

### Other components

- **Trainer browser**
- **PokéAPI**
- **PostgreSQL**

## Connections

- Trainer browser → Express server: sends requests (evidence: `README.md`)
- Express server → Page routes: mounts routes (evidence: `server.js`)
- Express server → API dispatcher: mounts routes (evidence: `server.js`)
- Page routes → Rendered pages: renders pages (evidence: `controllers/home-routes.js`)
- Trainer browser → Browser scripts: uses features
- API dispatcher → Signup and login: dispatches requests (evidence: `controllers/api/index.js`)
- API dispatcher → Login routes: dispatches requests (evidence: `controllers/api/index.js`)
- API dispatcher → Quiz assignment: dispatches requests (evidence: `controllers/api/index.js`)
- API dispatcher → Battle simulation: dispatches requests (evidence: `controllers/api/index.js`)
- Express server → Session handling: configures sessions (evidence: `server.js`)
- Signup and login → Model associations: uses models (evidence: `controllers/api/user-routes.js`)
- Login routes → Model associations: uses models (evidence: `controllers/api/login-routes.js`)
- Quiz assignment → Model associations: uses models (evidence: `controllers/api/quiz-routes.js`)
- Battle simulation → Model associations: uses models (evidence: `controllers/api/battle-routes.js`)
- Model associations → User records: associates records (evidence: `models/index.js`)
- Model associations → Pokémon records: associates records (evidence: `models/index.js`)
- User records → PostgreSQL: persists via
- Pokémon records → PostgreSQL: persists via
- Battle simulation → PokéAPI: fetches Pokémon (evidence: `controllers/api/battle-routes.js`)
- Quiz assignment → PokéAPI: fetches species (evidence: `controllers/api/quiz-routes.js`)
- Trainer browser → Pokédex: explores species
