# ibagaturiya/bagaturiya architecture

> Architecture diagram of the GitHub repository ibagaturiya/bagaturiya, 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/ibagaturiya/bagaturiya
- Repository: https://github.com/ibagaturiya/bagaturiya

## Overview

This repository is a static creative portfolio site plus a local tool for tailoring CV and portfolio exports to job applications. The public workflow turns project and CV content into browsable pages and downloadable documents; visitors browse/filter projects and open project galleries. The tailored workflow accepts vacancy details, previews ranked projects, allows selection, and generates an application package. Edges reflect the README and shown excerpts; unsampled implementation details are not inferred.

Main entry points: [`tools/site_generator.py`](https://github.com/ibagaturiya/bagaturiya/blob/main/tools/site_generator.py) (Site generator), [`portfolio-export/app.py`](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/app.py) (Local dashboard server), [`portfolio-export/generate.py`](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate.py) (Tailored export engine), [`generate.py`](https://github.com/ibagaturiya/bagaturiya/blob/main/generate.py) (Site command)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Public portfolio"]
  node_site_index["Portfolio index<br/>[index.html]"]
  node_site_scripts["Browser interactions<br/>[site.js]"]
  node_drone_gallery["Drone gallery<br/>[drone-gallery.js]"]
  node_project_pages["Project pages"]
  node_site_generator["Site generator<br/>[site_generator.py]"]
  node_site_command["Site command<br/>[generate.py]"]
end

subgraph group_content["Portfolio content"]
  node_project_content[("Project library")]
  node_page_templates["Page templates"]
  node_cv_data["CV source<br/>[cv.json]"]
end

subgraph group_tailored["Tailored exports"]
  node_dashboard["Application dashboard<br/>[app.js]"]
  node_app_server["Local dashboard server<br/>[app.py]"]
  node_tailored_engine["Tailored export engine<br/>[generate.py]"]
  node_tailored_outputs["Application package"]
end

subgraph group_documents["Public documents"]
  node_public_cv["Public CV PDF"]
  node_public_portfolio["Public portfolio export"]
  node_downloads["Public downloads"]
end

node_visitor(("Site visitor"))
node_applicant(("Applicant"))

node_visitor -->|"browses"| node_site_index
node_site_index -->|"loads filters"| node_site_scripts
node_visitor -->|"opens project"| node_project_pages
node_project_pages -.->|"uses gallery"| node_drone_gallery
node_site_command -->|"calls"| node_site_generator
node_site_generator -->|"reads projects"| node_project_content
node_site_generator -->|"reads templates"| node_page_templates
node_site_generator -->|"reads CV"| node_cv_data
node_site_generator -->|"writes index"| node_site_index
node_site_generator -->|"writes pages"| node_project_pages
node_site_command -->|"runs export"| node_public_cv
node_site_command -->|"runs export"| node_public_portfolio
node_public_cv -->|"reads CV"| node_cv_data
node_public_cv -->|"writes CV PDF"| node_downloads
node_public_portfolio -->|"writes portfolio"| node_downloads
node_applicant -->|"enters vacancy"| node_dashboard
node_dashboard -->|"posts preview"| node_app_server
node_dashboard -->|"requests generation"| node_app_server
node_app_server -->|"generates package"| node_tailored_engine
node_app_server -->|"ranks projects"| node_tailored_engine
node_tailored_engine -->|"reads projects"| node_project_content
node_tailored_engine -->|"uses CV data"| node_cv_data
node_tailored_engine -->|"writes package"| node_tailored_outputs
node_app_server -->|"serves downloads"| node_tailored_outputs

click node_site_index "https://github.com/ibagaturiya/bagaturiya/blob/main/index.html"
click node_site_scripts "https://github.com/ibagaturiya/bagaturiya/blob/main/assets/js/site.js"
click node_drone_gallery "https://github.com/ibagaturiya/bagaturiya/blob/main/assets/js/drone-gallery.js"
click node_project_pages "https://github.com/ibagaturiya/bagaturiya/tree/main/projecthtml"
click node_site_generator "https://github.com/ibagaturiya/bagaturiya/blob/main/tools/site_generator.py"
click node_project_content "https://github.com/ibagaturiya/bagaturiya/tree/main/projects"
click node_page_templates "https://github.com/ibagaturiya/bagaturiya/tree/main/templates"
click node_cv_data "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/data/cv.json"
click node_site_command "https://github.com/ibagaturiya/bagaturiya/blob/main/generate.py"
click node_dashboard "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/ui/app.js"
click node_app_server "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/app.py"
click node_tailored_engine "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate.py"
click node_tailored_outputs "https://github.com/ibagaturiya/bagaturiya/tree/main/portfolio-export"
click node_public_cv "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate_public_cv.py"
click node_public_portfolio "https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate_public_portfolio.py"
click node_downloads "https://github.com/ibagaturiya/bagaturiya/tree/main/assets/downloads"

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_site_index,node_site_scripts,node_drone_gallery,node_project_pages,node_site_generator,node_site_command toneBlue
class node_project_content,node_page_templates,node_cv_data toneAmber
class node_dashboard,node_app_server,node_tailored_engine,node_tailored_outputs toneMint
class node_public_cv,node_public_portfolio,node_downloads toneRose
class node_visitor,node_applicant toneIndigo
```

## Components

### Public portfolio

- [Portfolio index](https://github.com/ibagaturiya/bagaturiya/blob/main/index.html): `index.html`
- [Browser interactions](https://github.com/ibagaturiya/bagaturiya/blob/main/assets/js/site.js): `assets/js/site.js`
- [Drone gallery](https://github.com/ibagaturiya/bagaturiya/blob/main/assets/js/drone-gallery.js): `assets/js/drone-gallery.js`
- [Project pages](https://github.com/ibagaturiya/bagaturiya/tree/main/projecthtml): `projecthtml`
- [Site generator](https://github.com/ibagaturiya/bagaturiya/blob/main/tools/site_generator.py): `tools/site_generator.py`
- [Site command](https://github.com/ibagaturiya/bagaturiya/blob/main/generate.py): `generate.py`

### Portfolio content

- [Project library](https://github.com/ibagaturiya/bagaturiya/tree/main/projects): `projects`
- [Page templates](https://github.com/ibagaturiya/bagaturiya/tree/main/templates): `templates`
- [CV source](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/data/cv.json): `portfolio-export/data/cv.json`

### Tailored exports

- [Application dashboard](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/ui/app.js): `portfolio-export/ui/app.js`
- [Local dashboard server](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/app.py): `portfolio-export/app.py`
- [Tailored export engine](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate.py): `portfolio-export/generate.py`
- [Application package](https://github.com/ibagaturiya/bagaturiya/tree/main/portfolio-export): `portfolio-export`

### Public documents

- [Public CV PDF](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate_public_cv.py): `portfolio-export/generate_public_cv.py`
- [Public portfolio export](https://github.com/ibagaturiya/bagaturiya/blob/main/portfolio-export/generate_public_portfolio.py): `portfolio-export/generate_public_portfolio.py`
- [Public downloads](https://github.com/ibagaturiya/bagaturiya/tree/main/assets/downloads): `assets/downloads`

### Other components

- **Site visitor**
- **Applicant**

## Connections

- Site visitor → Portfolio index: browses (evidence: `README.md`)
- Portfolio index → Browser interactions: loads filters (evidence: `README.md`)
- Site visitor → Project pages: opens project (evidence: `README.md`)
- Project pages → Drone gallery: uses gallery
- Site command → Site generator: calls (evidence: `generate.py`)
- Site generator → Project library: reads projects (evidence: `README.md`)
- Site generator → Page templates: reads templates (evidence: `README.md`)
- Site generator → CV source: reads CV (evidence: `README.md`)
- Site generator → Portfolio index: writes index (evidence: `README.md`)
- Site generator → Project pages: writes pages (evidence: `README.md`)
- Site command → Public CV PDF: runs export (evidence: `generate.py`)
- Site command → Public portfolio export: runs export (evidence: `generate.py`)
- Public CV PDF → CV source: reads CV (evidence: `README.md`)
- Public CV PDF → Public downloads: writes CV PDF (evidence: `README.md`)
- Public portfolio export → Public downloads: writes portfolio (evidence: `README.md`)
- Applicant → Application dashboard: enters vacancy (evidence: `README.md`)
- Application dashboard → Local dashboard server: posts preview (evidence: `portfolio-export/ui/app.js`)
- Application dashboard → Local dashboard server: requests generation (evidence: `portfolio-export/ui/app.js`)
- Local dashboard server → Tailored export engine: generates package (evidence: `portfolio-export/app.py`)
- Local dashboard server → Tailored export engine: ranks projects (evidence: `portfolio-export/app.py`)
- Tailored export engine → Project library: reads projects (evidence: `README.md`)
- Tailored export engine → CV source: uses CV data (evidence: `README.md`)
- Tailored export engine → Application package: writes package (evidence: `README.md`)
- Local dashboard server → Application package: serves downloads (evidence: `portfolio-export/app.py`)
