# otahina/powerpoint-generator-python-project architecture

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

- Interactive diagram: https://gitdiagram.com/otahina/powerpoint-generator-python-project
- Repository: https://github.com/otahina/powerpoint-generator-python-project

## Overview

PowerPoint Generator is a Flask web app that turns a user’s topic, slide count, and theme choice into a downloadable presentation. The main flow runs from the browser’s generator form through the Flask route, GPT content generation, response parsing, and PowerPoint assembly; optional Pexels image search supplies slide images. The app also supports account registration, login, profiles, and logout backed by SQLite. These links follow the sampled route and utility calls; broader UI and feature details are based on the README and tree.

Main entry points: [`myapp/flaskapp.py`](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/flaskapp.py) (Flask routes), [`myapp/utils/text_pp.py`](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/text_pp.py) (PowerPoint builder), [`myapp/static/JS/main.js`](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/static/JS/main.js) (Browser form), [`myapp/models.py`](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/models.py) (User model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_browser["Browser form<br/>[main.js]"]
  node_templates["Page templates"]
  node_routes["Flask routes<br/>[flaskapp.py]"]
end

subgraph group_accounts["Accounts and data"]
  node_forms["Account forms<br/>[forms.py]"]
  node_user_model["User model<br/>[models.py]"]
  node_db_extension["Database extension<br/>[database.py]"]
  node_sqlite[("SQLite database<br/>[site.db]")]
end

subgraph group_generation["Presentation generation"]
  node_gpt_client["GPT generation<br/>[gpt_generate.py]"]
  node_parser["Slide parser<br/>[text_pp.py]"]
  node_ppt_builder["PowerPoint builder<br/>[text_pp.py]"]
  node_themes["Presentation themes"]
  node_generated_files["Generated presentations"]
end

subgraph group_integrations["External services"]
  node_openai{{"OpenAI API"}}
  node_pexels{{"Pexels image API"}}
end

node_visitor(("Visitor"))

node_visitor -->|"uses"| node_browser
node_browser -->|"POSTs form"| node_routes
node_routes -->|"renders pages"| node_templates
node_routes -->|"validates accounts"| node_forms
node_routes -->|"queries and creates"| node_user_model
node_user_model -->|"uses mapping"| node_db_extension
node_db_extension -->|"persists records"| node_sqlite
node_routes -->|"requests slide ideas"| node_gpt_client
node_gpt_client -->|"requests completion"| node_openai
node_routes -->|"parses response"| node_parser
node_routes -->|"builds presentation"| node_ppt_builder
node_ppt_builder -->|"loads selected theme"| node_themes
node_ppt_builder -.->|"searches images"| node_pexels
node_ppt_builder -->|"saves presentation"| node_generated_files
node_visitor -->|"requests download"| node_routes

click node_browser "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/static/JS/main.js"
click node_templates "https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/templates"
click node_routes "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/flaskapp.py"
click node_forms "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/forms.py"
click node_user_model "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/models.py"
click node_db_extension "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/database.py"
click node_sqlite "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/instance/site.db"
click node_gpt_client "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/gpt_generate.py"
click node_parser "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/text_pp.py"
click node_ppt_builder "https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/text_pp.py"
click node_themes "https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/static/presentations"
click node_generated_files "https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/generated"

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_browser,node_templates,node_routes toneBlue
class node_forms,node_user_model,node_db_extension,node_sqlite toneAmber
class node_gpt_client,node_parser,node_ppt_builder,node_themes,node_generated_files toneMint
class node_openai,node_pexels toneRose
class node_visitor toneIndigo
```

## Components

### Web interface

- [Browser form](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/static/JS/main.js): `myapp/static/JS/main.js`
- [Page templates](https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/templates): `myapp/templates`
- [Flask routes](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/flaskapp.py): `myapp/flaskapp.py`

### Accounts and data

- [Account forms](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/forms.py): `myapp/forms.py`
- [User model](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/models.py): `myapp/models.py`
- [Database extension](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/database.py): `myapp/database.py`
- [SQLite database](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/instance/site.db): `myapp/instance/site.db`

### Presentation generation

- [GPT generation](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/gpt_generate.py): `myapp/utils/gpt_generate.py`
- [Slide parser](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/text_pp.py): `myapp/utils/text_pp.py`
- [PowerPoint builder](https://github.com/otahina/powerpoint-generator-python-project/blob/main/myapp/utils/text_pp.py): `myapp/utils/text_pp.py`
- [Presentation themes](https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/static/presentations): `myapp/static/presentations`
- [Generated presentations](https://github.com/otahina/powerpoint-generator-python-project/tree/main/myapp/generated): `myapp/generated`

### External services

- **OpenAI API**
- **Pexels image API**

### Other components

- **Visitor**

## Connections

- Visitor → Browser form: uses
- Browser form → Flask routes: POSTs form
- Flask routes → Page templates: renders pages
- Flask routes → Account forms: validates accounts
- Flask routes → User model: queries and creates
- User model → Database extension: uses mapping
- Database extension → SQLite database: persists records
- Flask routes → GPT generation: requests slide ideas
- GPT generation → OpenAI API: requests completion
- Flask routes → Slide parser: parses response
- Flask routes → PowerPoint builder: builds presentation
- PowerPoint builder → Presentation themes: loads selected theme
- PowerPoint builder → Pexels image API: searches images
- PowerPoint builder → Generated presentations: saves presentation
- Visitor → Flask routes: requests download
