# nikkita18/tvd-quiz-app architecture

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

- Interactive diagram: https://gitdiagram.com/nikkita18/tvd-quiz-app
- Repository: https://github.com/nikkita18/tvd-quiz-app

## Overview

Mystic Falls is a Flask-based Vampire Diaries fan experience centered on tiered trivia: visitors create and verify accounts, sign in, choose a difficulty, answer questions, and view scores and rankings. The app also provides lore pages, a character archive, player profiles, and an admin portal for managing questions and viewing hunters. The graph reflects documented UI capabilities as well as sampled route and operation code; unsampled templates and client behavior limit certainty about their internal wiring.

Main entry points: [`app.py`](https://github.com/nikkita18/tvd-quiz-app/blob/main/app.py) (Flask routes), [`user.py`](https://github.com/nikkita18/tvd-quiz-app/blob/main/user.py) (Player operations), [`myEmail.py`](https://github.com/nikkita18/tvd-quiz-app/blob/main/myEmail.py) (Verification email), [`admin.py`](https://github.com/nikkita18/tvd-quiz-app/blob/main/admin.py) (Admin operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_app["Flask routes<br/>[app.py]"]
  node_public["Public pages"]
  node_lore["Lore &amp; characters<br/>[about.html]"]
  node_ui["Interactive UI<br/>[script.js]"]
  node_styles["Gothic design<br/>[style.css]"]
end

subgraph group_players["Player journeys"]
  node_playerpages["Player pages<br/>[userPlayQuiz.html]"]
  node_signup["Signup &amp; verify<br/>[userSignup.html]"]
  node_scores["Scores &amp; leaderboard"]
  node_profile["Player profile<br/>[userProfile.html]"]
end

subgraph group_council["Council portal"]
  node_adminpages["Admin portal<br/>[adminDash.html]"]
end

subgraph group_services["Application services"]
  node_userops["Player operations<br/>[user.py]"]
  node_validation["Input validation<br/>[validation.py]"]
  node_hashing["Password hashing<br/>[encryption.py]"]
  node_email["Verification email<br/>[myEmail.py]"]
  node_adminops["Admin operations<br/>[admin.py]"]
end

subgraph group_state["Persistent state"]
  node_database[("MySQL data<br/>[db.py]")]
  node_session[("Web session<br/>[app.py]")]
end

node_visitor(("Visitor"))
node_mailservice["SMTP service"]

node_visitor -->|"requests pages"| node_app
node_app -->|"renders pages"| node_public
node_app -->|"renders lore"| node_lore
node_app -->|"serves scripts"| node_ui
node_app -->|"serves styles"| node_styles
node_app -->|"renders signup"| node_signup
node_app -->|"renders quiz"| node_playerpages
node_app -->|"renders scores"| node_scores
node_app -->|"renders profile"| node_profile
node_app -->|"renders admin"| node_adminpages
node_app -->|"validates input"| node_validation
node_app -->|"hashes passwords"| node_hashing
node_app -->|"sends verification"| node_email
node_email -->|"sends mail"| node_mailservice
node_app -->|"handles player actions"| node_userops
node_app -->|"handles admin actions"| node_adminops
node_app -->|"stores login &amp; OTP"| node_session
node_userops -->|"reads &amp; writes"| node_database
node_adminops -->|"reads &amp; writes"| node_database

click node_app "https://github.com/nikkita18/tvd-quiz-app/blob/main/app.py"
click node_public "https://github.com/nikkita18/tvd-quiz-app/tree/main/templates"
click node_lore "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/about.html"
click node_ui "https://github.com/nikkita18/tvd-quiz-app/blob/main/static/js/script.js"
click node_styles "https://github.com/nikkita18/tvd-quiz-app/blob/main/static/css/style.css"
click node_playerpages "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userPlayQuiz.html"
click node_signup "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userSignup.html"
click node_scores "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userScoreBoard.html"
click node_profile "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userProfile.html"
click node_userops "https://github.com/nikkita18/tvd-quiz-app/blob/main/user.py"
click node_validation "https://github.com/nikkita18/tvd-quiz-app/blob/main/validation.py"
click node_hashing "https://github.com/nikkita18/tvd-quiz-app/blob/main/encryption.py"
click node_email "https://github.com/nikkita18/tvd-quiz-app/blob/main/myEmail.py"
click node_adminpages "https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/adminDash.html"
click node_adminops "https://github.com/nikkita18/tvd-quiz-app/blob/main/admin.py"
click node_database "https://github.com/nikkita18/tvd-quiz-app/blob/main/db.py"
click node_session "https://github.com/nikkita18/tvd-quiz-app/blob/main/app.py"

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_app,node_public,node_lore,node_ui,node_styles toneBlue
class node_playerpages,node_signup,node_scores,node_profile toneAmber
class node_adminpages toneMint
class node_userops,node_validation,node_hashing,node_email,node_adminops toneRose
class node_database,node_session,node_visitor,node_mailservice toneIndigo
```

## Components

### Web experience

- [Flask routes](https://github.com/nikkita18/tvd-quiz-app/blob/main/app.py): `app.py`
- [Public pages](https://github.com/nikkita18/tvd-quiz-app/tree/main/templates): `templates`
- [Lore & characters](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/about.html): `templates/about.html`
- [Interactive UI](https://github.com/nikkita18/tvd-quiz-app/blob/main/static/js/script.js): `static/js/script.js`
- [Gothic design](https://github.com/nikkita18/tvd-quiz-app/blob/main/static/css/style.css): `static/css/style.css`

### Player journeys

- [Player pages](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userPlayQuiz.html): `templates/userPlayQuiz.html`
- [Signup & verify](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userSignup.html): `templates/userSignup.html`
- [Scores & leaderboard](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userScoreBoard.html): `templates/userScoreBoard.html`
- [Player profile](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/userProfile.html): `templates/userProfile.html`

### Council portal

- [Admin portal](https://github.com/nikkita18/tvd-quiz-app/blob/main/templates/adminDash.html): `templates/adminDash.html`

### Application services

- [Player operations](https://github.com/nikkita18/tvd-quiz-app/blob/main/user.py): `user.py`
- [Input validation](https://github.com/nikkita18/tvd-quiz-app/blob/main/validation.py): `validation.py`
- [Password hashing](https://github.com/nikkita18/tvd-quiz-app/blob/main/encryption.py): `encryption.py`
- [Verification email](https://github.com/nikkita18/tvd-quiz-app/blob/main/myEmail.py): `myEmail.py`
- [Admin operations](https://github.com/nikkita18/tvd-quiz-app/blob/main/admin.py): `admin.py`

### Persistent state

- [MySQL data](https://github.com/nikkita18/tvd-quiz-app/blob/main/db.py): `db.py`
- [Web session](https://github.com/nikkita18/tvd-quiz-app/blob/main/app.py): `app.py`

### Other components

- **Visitor**
- **SMTP service**

## Connections

- Visitor → Flask routes: requests pages
- Flask routes → Public pages: renders pages
- Flask routes → Lore & characters: renders lore
- Flask routes → Interactive UI: serves scripts
- Flask routes → Gothic design: serves styles
- Flask routes → Signup & verify: renders signup
- Flask routes → Player pages: renders quiz
- Flask routes → Scores & leaderboard: renders scores
- Flask routes → Player profile: renders profile
- Flask routes → Admin portal: renders admin
- Flask routes → Input validation: validates input
- Flask routes → Password hashing: hashes passwords
- Flask routes → Verification email: sends verification
- Verification email → SMTP service: sends mail
- Flask routes → Player operations: handles player actions
- Flask routes → Admin operations: handles admin actions
- Flask routes → Web session: stores login & OTP
- Player operations → MySQL data: reads & writes
- Admin operations → MySQL data: reads & writes
