# dranetgh35/personal_site architecture

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

- Interactive diagram: https://gitdiagram.com/dranetgh35/personal_site
- Repository: https://github.com/dranetgh35/personal_site

## Overview

DRADigital is a Flask portfolio and community site. Visitors browse portfolio, blog, and travel pages; account flows support registration, email verification, login, and password reset; signed-in users can post comments, while administrators can delete them. The gallery fetches image URLs from Cloudinary. Source excerpts establish these route-level connections, but do not show template internals or deployment wiring.

Main entry points: [`routes.py`](https://github.com/dranetgh35/personal_site/blob/master/routes.py) (Page and form routes), [`app.py`](https://github.com/dranetgh35/personal_site/blob/master/app.py) (Flask app setup), [`extensions.py`](https://github.com/dranetgh35/personal_site/blob/master/extensions.py) (Account email), [`Cloudinary.py`](https://github.com/dranetgh35/personal_site/blob/master/Cloudinary.py) (Cloudinary image listing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_routes["Page and form routes<br/>[routes.py]"]
  node_templates["Page templates"]
  node_portfolio["Portfolio pages"]
  node_travel["Travel pages"]
  node_blog["Blog pages<br/>[blog.html]"]
  node_app["Flask app setup<br/>[app.py]"]
end

subgraph group_accounts["Accounts"]
  node_accounts_flow["Account workflows<br/>[routes.py]"]
  node_tokens["Reset tokens<br/>[tokens.py]"]
  node_email["Account email<br/>[extensions.py]"]
  node_user_model["User model<br/>[models.py]"]
end

subgraph group_community["Community"]
  node_comments_flow["Comment workflows<br/>[routes.py]"]
  node_comment_model["Comment model<br/>[models.py]"]
  node_database[("SQLite database")]
end

subgraph group_integrations["Integrations"]
  node_gallery_flow["Gallery route<br/>[routes.py]"]
  node_cloudinary["Cloudinary image listing<br/>[Cloudinary.py]"]
  node_smtp["SMTP mail server"]
  node_cloudinary_service["Cloudinary service"]
end

node_visitor(("Visitor"))

node_visitor -->|"requests pages"| node_routes
node_routes -->|"renders pages"| node_templates
node_routes -->|"renders"| node_portfolio
node_routes -->|"renders"| node_travel
node_routes -->|"renders"| node_blog
node_routes -->|"handles account forms"| node_accounts_flow
node_accounts_flow -->|"queries and updates"| node_user_model
node_accounts_flow -->|"reads and writes"| node_database
node_accounts_flow -->|"sends verification and reset mail"| node_email
node_accounts_flow -->|"creates and verifies tokens"| node_tokens
node_email -->|"sends mail"| node_smtp
node_routes -->|"handles comment actions"| node_comments_flow
node_comments_flow -->|"creates and queries"| node_comment_model
node_comments_flow -->|"reads and writes"| node_database
node_routes -->|"handles gallery request"| node_gallery_flow
node_gallery_flow -->|"requests image URLs"| node_cloudinary
node_cloudinary -->|"searches images"| node_cloudinary_service
node_app -->|"configures SQLite and initializes ORM"| node_database
node_app -->|"loads login users"| node_user_model

click node_routes "https://github.com/dranetgh35/personal_site/blob/master/routes.py"
click node_templates "https://github.com/dranetgh35/personal_site/tree/master/templates"
click node_portfolio "https://github.com/dranetgh35/personal_site/tree/master/templates"
click node_travel "https://github.com/dranetgh35/personal_site/tree/master/templates/travel"
click node_blog "https://github.com/dranetgh35/personal_site/blob/master/templates/blog.html"
click node_app "https://github.com/dranetgh35/personal_site/blob/master/app.py"
click node_accounts_flow "https://github.com/dranetgh35/personal_site/blob/master/routes.py"
click node_tokens "https://github.com/dranetgh35/personal_site/blob/master/tokens.py"
click node_email "https://github.com/dranetgh35/personal_site/blob/master/extensions.py"
click node_user_model "https://github.com/dranetgh35/personal_site/blob/master/models.py"
click node_comments_flow "https://github.com/dranetgh35/personal_site/blob/master/routes.py"
click node_comment_model "https://github.com/dranetgh35/personal_site/blob/master/models.py"
click node_gallery_flow "https://github.com/dranetgh35/personal_site/blob/master/routes.py"
click node_cloudinary "https://github.com/dranetgh35/personal_site/blob/master/Cloudinary.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_routes,node_templates,node_portfolio,node_travel,node_blog,node_app toneBlue
class node_accounts_flow,node_tokens,node_email,node_user_model toneAmber
class node_comments_flow,node_comment_model,node_database toneMint
class node_gallery_flow,node_cloudinary,node_smtp,node_cloudinary_service toneRose
class node_visitor toneIndigo
```

## Components

### Web experience

- [Page and form routes](https://github.com/dranetgh35/personal_site/blob/master/routes.py): `routes.py`
- [Page templates](https://github.com/dranetgh35/personal_site/tree/master/templates): `templates`
- [Portfolio pages](https://github.com/dranetgh35/personal_site/tree/master/templates): `templates`
- [Travel pages](https://github.com/dranetgh35/personal_site/tree/master/templates/travel): `templates/travel`
- [Blog pages](https://github.com/dranetgh35/personal_site/blob/master/templates/blog.html): `templates/blog.html`
- [Flask app setup](https://github.com/dranetgh35/personal_site/blob/master/app.py): `app.py`

### Accounts

- [Account workflows](https://github.com/dranetgh35/personal_site/blob/master/routes.py): `routes.py`
- [Reset tokens](https://github.com/dranetgh35/personal_site/blob/master/tokens.py): `tokens.py`
- [Account email](https://github.com/dranetgh35/personal_site/blob/master/extensions.py): `extensions.py`
- [User model](https://github.com/dranetgh35/personal_site/blob/master/models.py): `models.py`

### Community

- [Comment workflows](https://github.com/dranetgh35/personal_site/blob/master/routes.py): `routes.py`
- [Comment model](https://github.com/dranetgh35/personal_site/blob/master/models.py): `models.py`
- **SQLite database**

### Integrations

- [Gallery route](https://github.com/dranetgh35/personal_site/blob/master/routes.py): `routes.py`
- [Cloudinary image listing](https://github.com/dranetgh35/personal_site/blob/master/Cloudinary.py): `Cloudinary.py`
- **SMTP mail server**
- **Cloudinary service**

### Other components

- **Visitor**

## Connections

- Visitor → Page and form routes: requests pages
- Page and form routes → Page templates: renders pages
- Page and form routes → Portfolio pages: renders
- Page and form routes → Travel pages: renders
- Page and form routes → Blog pages: renders
- Page and form routes → Account workflows: handles account forms
- Account workflows → User model: queries and updates
- Account workflows → SQLite database: reads and writes
- Account workflows → Account email: sends verification and reset mail
- Account workflows → Reset tokens: creates and verifies tokens
- Account email → SMTP mail server: sends mail
- Page and form routes → Comment workflows: handles comment actions
- Comment workflows → Comment model: creates and queries
- Comment workflows → SQLite database: reads and writes
- Page and form routes → Gallery route: handles gallery request
- Gallery route → Cloudinary image listing: requests image URLs
- Cloudinary image listing → Cloudinary service: searches images
- Flask app setup → SQLite database: configures SQLite and initializes ORM
- Flask app setup → User model: loads login users
