# gpbsumido/paul-explore architecture

> Architecture diagram of the GitHub repository gpbsumido/paul-explore, 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/gpbsumido/paul-explore
- Repository: https://github.com/gpbsumido/paul-explore
- Video tour (about a minute): https://gitdiagram.com/gpbsumido/paul-explore/video

## Overview

paul-explore is a personal portfolio and interactive playground: visitors explore featured apps, experiments, and technical write-ups. The main journey begins at the landing page or Discover, then branches into domain tools and learning content; authenticated users also use personal and administrative features. Server routes provide feature APIs and proxy selected external services. The README documents capabilities beyond the sampled source, so those appear as product areas without speculative implementation links; detailed wiring is shown only where the excerpts support it.

Main entry points: [`src/app/operator/OperatorDashboard.tsx`](https://github.com/gpbsumido/paul-explore/blob/main/src/app/operator/OperatorDashboard.tsx) (Fleet operator), [`src/app/flags/FlagsConsole.tsx`](https://github.com/gpbsumido/paul-explore/blob/main/src/app/flags/FlagsConsole.tsx) (Feature flags), [`src/app/research/ResearchContent.tsx`](https://github.com/gpbsumido/paul-explore/blob/main/src/app/research/ResearchContent.tsx) (Research explorer), [`src/hooks/useRestockSession.ts`](https://github.com/gpbsumido/paul-explore/blob/main/src/hooks/useRestockSession.ts) (Restock session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portfolio["Portfolio and discovery"]
  node_landing["Landing page<br/>[LandingContent.tsx]"]
  node_discover["Discover<br/>[page.tsx]"]
  node_world["Explore Toronto<br/>[engine.ts]"]
  node_work["Work portfolio"]
end

subgraph group_tools["Interactive tools"]
  node_design["Design system<br/>[page.tsx]"]
  node_flags["Feature flags<br/>[FlagsConsole.tsx]"]
end

subgraph group_domain["Domain applications"]
  node_research["Research explorer"]
  node_operator["Fleet operator"]
  node_restock["Restock session"]
  node_checkin["Volunteer check-in<br/>[CheckInContent.tsx]"]
  node_calendar["Calendar"]
  node_fantasy["Fantasy sports"]
  node_tcg["Pokémon TCG<br/>[BrowseContent.tsx]"]
  node_graphql["Pokédex<br/>[GraphQLContent.tsx]"]
  node_vitals["Web Vitals<br/>[route.ts]"]
end

subgraph group_platform["API and integrations"]
  node_flagsapi["Flags API<br/>[route.ts]"]
  node_flagengine["Flag evaluation<br/>[flags-engine.ts]"]
  node_researchapi["Research API<br/>[route.ts]"]
  node_europepmc["Europe PMC"]
  node_restockapi["Restock API<br/>[route.ts]"]
  node_graphqlapi["GraphQL proxy<br/>[route.ts]"]
  node_pokeapi["PokeAPI"]
  node_backend["Portfolio API"]
end

subgraph group_content["Learning and writing"]
  node_learn["Learn<br/>[LearnHub.tsx]"]
  node_thoughts["Thoughts"]
end

node_visitor(("Visitor"))
node_member(("Signed-in member"))

node_visitor -->|"visits"| node_landing
node_visitor -->|"explores"| node_discover
node_visitor -->|"explores"| node_world
node_visitor -->|"views"| node_work
node_visitor -->|"explores"| node_design
node_visitor -->|"uses"| node_research
node_visitor -->|"evaluates"| node_flags
node_visitor -->|"views"| node_operator
node_visitor -->|"checks in"| node_checkin
node_visitor -->|"plays"| node_fantasy
node_visitor -->|"browses"| node_tcg
node_visitor -->|"explores"| node_graphql
node_visitor -->|"studies"| node_learn
node_visitor -->|"reads"| node_thoughts
node_member -->|"manages"| node_calendar
node_member -->|"checks in"| node_checkin
node_member -->|"operates"| node_operator
node_flags -->|"manages flags"| node_flagsapi
node_flagsapi -->|"evaluates"| node_flagengine
node_research -->|"requests papers"| node_researchapi
node_researchapi -->|"searches"| node_europepmc
node_operator -->|"starts restocking"| node_restock
node_restock -->|"fetches and updates"| node_restockapi
node_graphql -->|"requests data"| node_graphqlapi
node_graphqlapi -->|"forwards query"| node_pokeapi
node_vitals -->|"forwards beacons; reads aggregates"| node_backend

click node_landing "https://github.com/gpbsumido/paul-explore/blob/main/src/app/LandingContent.tsx"
click node_discover "https://github.com/gpbsumido/paul-explore/blob/main/src/app/discover/page.tsx"
click node_world "https://github.com/gpbsumido/paul-explore/blob/main/src/app/world/audio/engine.ts"
click node_work "https://github.com/gpbsumido/paul-explore/blob/main/src/app/work-portfolio/demos/ai-content-engine.tsx"
click node_design "https://github.com/gpbsumido/paul-explore/blob/main/src/app/design-system/page.tsx"
click node_flags "https://github.com/gpbsumido/paul-explore/blob/main/src/app/flags/FlagsConsole.tsx"
click node_flagsapi "https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/flags/%5BflagKey%5D/route.ts"
click node_flagengine "https://github.com/gpbsumido/paul-explore/blob/main/src/lib/flags-engine.ts"
click node_research "https://github.com/gpbsumido/paul-explore/blob/main/src/app/research/ResearchContent.tsx"
click node_researchapi "https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/research/journal-club/route.ts"
click node_operator "https://github.com/gpbsumido/paul-explore/blob/main/src/app/operator/OperatorDashboard.tsx"
click node_restock "https://github.com/gpbsumido/paul-explore/blob/main/src/hooks/useRestockSession.ts"
click node_restockapi "https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/operator/restock-sessions/%5BsessionId%5D/route.ts"
click node_checkin "https://github.com/gpbsumido/paul-explore/blob/main/src/app/check-in/CheckInContent.tsx"
click node_calendar "https://github.com/gpbsumido/paul-explore/blob/main/src/app/calendar/CalendarContent.tsx"
click node_fantasy "https://github.com/gpbsumido/paul-explore/blob/main/src/app/fantasy/nba/FantasyHubContent.tsx"
click node_tcg "https://github.com/gpbsumido/paul-explore/blob/main/src/app/tcg/pokemon/BrowseContent.tsx"
click node_graphql "https://github.com/gpbsumido/paul-explore/blob/main/src/app/graphql/GraphQLContent.tsx"
click node_graphqlapi "https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/graphql/route.ts"
click node_vitals "https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/vitals/route.ts"
click node_learn "https://github.com/gpbsumido/paul-explore/blob/main/src/app/learn/LearnHub.tsx"
click node_thoughts "https://github.com/gpbsumido/paul-explore/blob/main/src/app/thoughts/ThoughtsIndexContent.tsx"

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_landing,node_discover,node_world,node_work toneBlue
class node_design,node_flags toneAmber
class node_research,node_operator,node_restock,node_checkin,node_calendar,node_fantasy,node_tcg,node_graphql,node_vitals toneMint
class node_flagsapi,node_flagengine,node_researchapi,node_europepmc,node_restockapi,node_graphqlapi,node_pokeapi,node_backend toneRose
class node_learn,node_thoughts,node_visitor,node_member toneIndigo
```

## Components

### Portfolio and discovery

- [Landing page](https://github.com/gpbsumido/paul-explore/blob/main/src/app/LandingContent.tsx): `src/app/LandingContent.tsx`
- [Discover](https://github.com/gpbsumido/paul-explore/blob/main/src/app/discover/page.tsx): `src/app/discover/page.tsx`
- [Explore Toronto](https://github.com/gpbsumido/paul-explore/blob/main/src/app/world/audio/engine.ts): `src/app/world/audio/engine.ts`
- [Work portfolio](https://github.com/gpbsumido/paul-explore/blob/main/src/app/work-portfolio/demos/ai-content-engine.tsx): `src/app/work-portfolio/demos/ai-content-engine.tsx`

### Interactive tools

- [Design system](https://github.com/gpbsumido/paul-explore/blob/main/src/app/design-system/page.tsx): `src/app/design-system/page.tsx`
- [Feature flags](https://github.com/gpbsumido/paul-explore/blob/main/src/app/flags/FlagsConsole.tsx): `src/app/flags/FlagsConsole.tsx`

### Domain applications

- [Research explorer](https://github.com/gpbsumido/paul-explore/blob/main/src/app/research/ResearchContent.tsx): `src/app/research/ResearchContent.tsx`
- [Fleet operator](https://github.com/gpbsumido/paul-explore/blob/main/src/app/operator/OperatorDashboard.tsx): `src/app/operator/OperatorDashboard.tsx`
- [Restock session](https://github.com/gpbsumido/paul-explore/blob/main/src/hooks/useRestockSession.ts): `src/hooks/useRestockSession.ts`
- [Volunteer check-in](https://github.com/gpbsumido/paul-explore/blob/main/src/app/check-in/CheckInContent.tsx): `src/app/check-in/CheckInContent.tsx`
- [Calendar](https://github.com/gpbsumido/paul-explore/blob/main/src/app/calendar/CalendarContent.tsx): `src/app/calendar/CalendarContent.tsx`
- [Fantasy sports](https://github.com/gpbsumido/paul-explore/blob/main/src/app/fantasy/nba/FantasyHubContent.tsx): `src/app/fantasy/nba/FantasyHubContent.tsx`
- [Pokémon TCG](https://github.com/gpbsumido/paul-explore/blob/main/src/app/tcg/pokemon/BrowseContent.tsx): `src/app/tcg/pokemon/BrowseContent.tsx`
- [Pokédex](https://github.com/gpbsumido/paul-explore/blob/main/src/app/graphql/GraphQLContent.tsx): `src/app/graphql/GraphQLContent.tsx`
- [Web Vitals](https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/vitals/route.ts): `src/app/api/vitals/route.ts`

### API and integrations

- [Flags API](https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/flags/%5BflagKey%5D/route.ts): `src/app/api/flags/[flagKey]/route.ts`
- [Flag evaluation](https://github.com/gpbsumido/paul-explore/blob/main/src/lib/flags-engine.ts): `src/lib/flags-engine.ts`
- [Research API](https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/research/journal-club/route.ts): `src/app/api/research/journal-club/route.ts`
- **Europe PMC**
- [Restock API](https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/operator/restock-sessions/%5BsessionId%5D/route.ts): `src/app/api/operator/restock-sessions/[sessionId]/route.ts`
- [GraphQL proxy](https://github.com/gpbsumido/paul-explore/blob/main/src/app/api/graphql/route.ts): `src/app/api/graphql/route.ts`
- **PokeAPI**
- **Portfolio API**

### Learning and writing

- [Learn](https://github.com/gpbsumido/paul-explore/blob/main/src/app/learn/LearnHub.tsx): `src/app/learn/LearnHub.tsx`
- [Thoughts](https://github.com/gpbsumido/paul-explore/blob/main/src/app/thoughts/ThoughtsIndexContent.tsx): `src/app/thoughts/ThoughtsIndexContent.tsx`

### Other components

- **Visitor**
- **Signed-in member**

## Connections

- Visitor → Landing page: visits
- Visitor → Discover: explores
- Visitor → Explore Toronto: explores
- Visitor → Work portfolio: views
- Visitor → Design system: explores
- Visitor → Research explorer: uses
- Visitor → Feature flags: evaluates
- Visitor → Fleet operator: views
- Visitor → Volunteer check-in: checks in
- Visitor → Fantasy sports: plays
- Visitor → Pokémon TCG: browses
- Visitor → Pokédex: explores
- Visitor → Learn: studies
- Visitor → Thoughts: reads
- Signed-in member → Calendar: manages
- Signed-in member → Volunteer check-in: checks in
- Signed-in member → Fleet operator: operates
- Feature flags → Flags API: manages flags
- Flags API → Flag evaluation: evaluates
- Research explorer → Research API: requests papers
- Research API → Europe PMC: searches
- Fleet operator → Restock session: starts restocking
- Restock session → Restock API: fetches and updates
- Pokédex → GraphQL proxy: requests data
- GraphQL proxy → PokeAPI: forwards query
- Web Vitals → Portfolio API: forwards beacons; reads aggregates
