# v-fidelusaleksander/ghcertified architecture

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

- Interactive diagram: https://gitdiagram.com/v-fidelusaleksander/ghcertified
- Repository: https://github.com/v-fidelusaleksander/ghcertified

## Overview

GitHub Certified is a multilingual study and exam-practice website. Visitors browse certification questions or take mock exams; the site also offers timed challenge modes, leaderboards, and optional account-backed result saving. The question loader and Gauntlet/Time Trial hooks are sampled; several route and data-layer connections are inferred only from the file tree, so uncertain calls are omitted.

Main entry points: [`app/src/lib/questions.ts`](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/questions.ts) (Question Loader), [`app/src/components/AuthProvider.tsx`](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/AuthProvider.tsx) (Auth Provider), [`app/src/components/challenges/SaveResultButton.tsx`](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/SaveResultButton.tsx) (Save Result), [`app/src/app/[locale]/practice-tests/[cert]/page.tsx`](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/%5Bcert%5D/page.tsx) (Certification Exam)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_learning["Study and Exams"]
  node_catalog["Practice Catalog<br/>[page.tsx]"]
  node_certpractice["Certification Exam<br/>[page.tsx]"]
  node_quizwrapper["Quiz Wrapper<br/>[quiz-wrapper.tsx]"]
  node_quiz["Practice Quiz<br/>[Quiz.tsx]"]
  node_questionsroute["Question Library<br/>[page.tsx]"]
  node_browser["Question Browser"]
end

subgraph group_challenges["Challenges"]
  node_challengecatalog["Challenge Catalog<br/>[page.tsx]"]
  node_gauntletpage["Gauntlet Page<br/>[page.tsx]"]
  node_gauntletmode["Gauntlet Mode<br/>[GauntletMode.tsx]"]
  node_gauntletengine["Gauntlet Engine<br/>[useGauntletMode.ts]"]
  node_trialpage["Time Trial Page<br/>[page.tsx]"]
  node_trialmode["Time Trial Mode<br/>[TimeTrialMode.tsx]"]
  node_trialengine["Time Trial Engine"]
  node_leaderboardpage["Leaderboard Page<br/>[page.tsx]"]
  node_savebutton["Save Result"]
end

subgraph group_platform["Shared Platform"]
  node_home["Home Page<br/>[page.tsx]"]
end

subgraph group_data["Data and Accounts"]
  node_questiondata["Question Loader<br/>[questions.ts]"]
  node_leaderboard["Leaderboard Data<br/>[leaderboard.ts]"]
  node_auth["Auth Provider<br/>[AuthProvider.tsx]"]
  node_supabaseclient["Supabase Client<br/>[supabase.ts]"]
end

node_visitor(("Visitor"))
node_supabase[("Supabase")]
node_github(("GitHub OAuth"))

node_visitor -->|"opens"| node_home
node_visitor -->|"browses"| node_catalog
node_visitor -->|"browses"| node_questionsroute
node_visitor -->|"opens"| node_challengecatalog
node_home -->|"reads catalog"| node_questiondata
node_catalog -->|"selects exam"| node_certpractice
node_certpractice -->|"loads questions"| node_questiondata
node_certpractice -->|"starts exam"| node_quizwrapper
node_quizwrapper -->|"renders"| node_quiz
node_questionsroute -->|"loads questions"| node_questiondata
node_questionsroute -->|"renders"| node_browser
node_challengecatalog -->|"opens mode"| node_gauntletpage
node_challengecatalog -->|"opens mode"| node_trialpage
node_gauntletpage -->|"loads questions"| node_questiondata
node_gauntletpage -->|"renders"| node_gauntletmode
node_gauntletmode -->|"runs game"| node_gauntletengine
node_trialpage -->|"loads questions"| node_questiondata
node_trialpage -->|"renders"| node_trialmode
node_trialmode -->|"runs game"| node_trialengine
node_visitor -->|"views scores"| node_leaderboardpage
node_leaderboardpage -->|"reads scores"| node_leaderboard
node_gauntletmode -->|"offers saving"| node_savebutton
node_trialmode -->|"offers saving"| node_savebutton
node_savebutton -->|"checks account"| node_auth
node_auth -->|"uses client"| node_supabaseclient
node_supabaseclient -->|"connects"| node_supabase
node_auth -.->|"OAuth sign-in"| node_github
node_auth -->|"consumes pending result"| node_savebutton

click node_home "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/page.tsx"
click node_catalog "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/page.tsx"
click node_certpractice "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/%5Bcert%5D/page.tsx"
click node_quizwrapper "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/%5Bcert%5D/quiz-wrapper.tsx"
click node_quiz "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/quiz/Quiz.tsx"
click node_questionsroute "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/questions/%5Bcert%5D/page.tsx"
click node_browser "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/questions/%5Bcert%5D/question-browser.tsx"
click node_questiondata "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/questions.ts"
click node_challengecatalog "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/page.tsx"
click node_gauntletpage "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/gauntlet/page.tsx"
click node_gauntletmode "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/GauntletMode.tsx"
click node_gauntletengine "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/hooks/useGauntletMode.ts"
click node_trialpage "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/time-trial/page.tsx"
click node_trialmode "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/TimeTrialMode.tsx"
click node_trialengine "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/hooks/useTimeTrialMode.ts"
click node_leaderboardpage "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/leaderboard/page.tsx"
click node_leaderboard "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/leaderboard.ts"
click node_savebutton "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/SaveResultButton.tsx"
click node_auth "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/AuthProvider.tsx"
click node_supabaseclient "https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/supabase.ts"

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_catalog,node_certpractice,node_quizwrapper,node_quiz,node_questionsroute,node_browser toneBlue
class node_challengecatalog,node_gauntletpage,node_gauntletmode,node_gauntletengine,node_trialpage,node_trialmode,node_trialengine,node_leaderboardpage,node_savebutton,node_supabase toneAmber
class node_home toneMint
class node_questiondata,node_leaderboard,node_auth,node_supabaseclient toneRose
class node_visitor,node_github toneIndigo
```

## Components

### Study and Exams

- [Practice Catalog](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/page.tsx): `app/src/app/[locale]/practice-tests/page.tsx`
- [Certification Exam](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/%5Bcert%5D/page.tsx): `app/src/app/[locale]/practice-tests/[cert]/page.tsx`
- [Quiz Wrapper](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/practice-tests/%5Bcert%5D/quiz-wrapper.tsx): `app/src/app/[locale]/practice-tests/[cert]/quiz-wrapper.tsx`
- [Practice Quiz](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/quiz/Quiz.tsx): `app/src/components/quiz/Quiz.tsx`
- [Question Library](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/questions/%5Bcert%5D/page.tsx): `app/src/app/[locale]/questions/[cert]/page.tsx`
- [Question Browser](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/questions/%5Bcert%5D/question-browser.tsx): `app/src/app/[locale]/questions/[cert]/question-browser.tsx`

### Challenges

- [Challenge Catalog](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/page.tsx): `app/src/app/[locale]/challenges/page.tsx`
- [Gauntlet Page](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/gauntlet/page.tsx): `app/src/app/[locale]/challenges/gauntlet/page.tsx`
- [Gauntlet Mode](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/GauntletMode.tsx): `app/src/components/challenges/GauntletMode.tsx`
- [Gauntlet Engine](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/hooks/useGauntletMode.ts): `app/src/hooks/useGauntletMode.ts`
- [Time Trial Page](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/time-trial/page.tsx): `app/src/app/[locale]/challenges/time-trial/page.tsx`
- [Time Trial Mode](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/TimeTrialMode.tsx): `app/src/components/challenges/TimeTrialMode.tsx`
- [Time Trial Engine](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/hooks/useTimeTrialMode.ts): `app/src/hooks/useTimeTrialMode.ts`
- [Leaderboard Page](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/challenges/leaderboard/page.tsx): `app/src/app/[locale]/challenges/leaderboard/page.tsx`
- [Save Result](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/challenges/SaveResultButton.tsx): `app/src/components/challenges/SaveResultButton.tsx`

### Shared Platform

- [Home Page](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/app/%5Blocale%5D/page.tsx): `app/src/app/[locale]/page.tsx`

### Data and Accounts

- [Question Loader](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/questions.ts): `app/src/lib/questions.ts`
- [Leaderboard Data](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/leaderboard.ts): `app/src/lib/leaderboard.ts`
- [Auth Provider](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/components/AuthProvider.tsx): `app/src/components/AuthProvider.tsx`
- [Supabase Client](https://github.com/v-fidelusaleksander/ghcertified/blob/main/app/src/lib/supabase.ts): `app/src/lib/supabase.ts`

### Other components

- **Visitor**
- **Supabase**
- **GitHub OAuth**

## Connections

- Visitor → Home Page: opens
- Visitor → Practice Catalog: browses
- Visitor → Question Library: browses
- Visitor → Challenge Catalog: opens
- Home Page → Question Loader: reads catalog
- Practice Catalog → Certification Exam: selects exam
- Certification Exam → Question Loader: loads questions
- Certification Exam → Quiz Wrapper: starts exam
- Quiz Wrapper → Practice Quiz: renders
- Question Library → Question Loader: loads questions
- Question Library → Question Browser: renders
- Challenge Catalog → Gauntlet Page: opens mode
- Challenge Catalog → Time Trial Page: opens mode
- Gauntlet Page → Question Loader: loads questions
- Gauntlet Page → Gauntlet Mode: renders
- Gauntlet Mode → Gauntlet Engine: runs game
- Time Trial Page → Question Loader: loads questions
- Time Trial Page → Time Trial Mode: renders
- Time Trial Mode → Time Trial Engine: runs game
- Visitor → Leaderboard Page: views scores
- Leaderboard Page → Leaderboard Data: reads scores
- Gauntlet Mode → Save Result: offers saving
- Time Trial Mode → Save Result: offers saving
- Save Result → Auth Provider: checks account
- Auth Provider → Supabase Client: uses client
- Supabase Client → Supabase: connects
- Auth Provider → GitHub OAuth: OAuth sign-in
- Auth Provider → Save Result: consumes pending result
