# flowz5/portfolio-leodupont architecture

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

- Interactive diagram: https://gitdiagram.com/flowz5/portfolio-leodupont
- Repository: https://github.com/flowz5/portfolio-leodupont

## Overview

This repository is a personal portfolio site with a public-facing profile and project showcase, CV and stage-report pages, plus a Firebase-backed admin and visitor features. Visitors browse the portfolio and its supporting pages; the browser scripts provide interactive navigation, language/theme behavior, and dynamic content, while the admin manages site data. The source and public JavaScript trees contain parallel implementations. Relationships for sampled scripts are shown where imports or calls are evidenced; unsampled page wiring is not inferred.

Main entry points: [`src/js/admin.js`](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/admin.js) (Admin logic (source)), [`public/js/admin.js`](https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/admin.js) (Admin logic (public)), [`src/js/firebase-client.js`](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/firebase-client.js) (Portfolio data client (source)), [`public/js/firebase-client.js`](https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/firebase-client.js) (Portfolio data client (public))

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Portfolio experience"]
  node_portfolio["Portfolio site<br/>[index.html]"]
  node_interactions["Site interactions<br/>[script.js]"]
end

subgraph group_content["Portfolio content"]
  node_stagepage["Stage reports<br/>[stage.html]"]
  node_stagei18n["Stage translations<br/>[stage-i18n.js]"]
  node_cv["CV materials<br/>[index.html]"]
end

subgraph group_operations["Site operations"]
  node_adminpage["Admin console<br/>[admin.html]"]
  node_admin_src["Admin logic &#40;source&#41;<br/>[admin.js]"]
  node_admin_public["Admin logic &#40;public&#41;<br/>[admin.js]"]
  node_client_src["Portfolio data client &#40;source&#41;<br/>[firebase-client.js]"]
  node_client_public["Portfolio data client &#40;public&#41;<br/>[firebase-client.js]"]
end

subgraph group_platform["Persistence"]
  node_init_src["Firebase setup &#40;source&#41;<br/>[firebase-init.js]"]
  node_init_public["Firebase setup &#40;public&#41;<br/>[firebase-init.js]"]
  node_firestore[("Cloud Firestore")]
end

node_visitor(("Visitor"))

node_visitor -->|"browses"| node_portfolio
node_visitor -->|"views reports"| node_stagepage
node_visitor -->|"views CV"| node_cv
node_stagei18n -->|"listens for language changes"| node_interactions
node_admin_src -->|"imports setup"| node_init_src
node_admin_public -->|"imports setup"| node_init_public
node_client_src -->|"imports setup"| node_init_src
node_client_public -->|"imports setup"| node_init_public
node_client_src -->|"reads and writes"| node_firestore
node_client_public -->|"reads and writes"| node_firestore
node_admin_src -->|"reads and writes"| node_firestore
node_admin_public -->|"reads and writes"| node_firestore

click node_portfolio "https://github.com/flowz5/portfolio-leodupont/blob/main/public/index.html"
click node_interactions "https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/script.js"
click node_stagepage "https://github.com/flowz5/portfolio-leodupont/blob/main/public/stage.html"
click node_stagei18n "https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/stage-i18n.js"
click node_cv "https://github.com/flowz5/portfolio-leodupont/blob/main/public/CV/index.html"
click node_adminpage "https://github.com/flowz5/portfolio-leodupont/blob/main/public/admin.html"
click node_admin_src "https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/admin.js"
click node_admin_public "https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/admin.js"
click node_client_src "https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/firebase-client.js"
click node_client_public "https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/firebase-client.js"
click node_init_src "https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/firebase-init.js"
click node_init_public "https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/firebase-init.js"

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_portfolio,node_interactions toneBlue
class node_stagepage,node_stagei18n,node_cv toneAmber
class node_adminpage,node_admin_src,node_admin_public,node_client_src,node_client_public toneMint
class node_init_src,node_init_public,node_firestore toneRose
class node_visitor toneIndigo
```

## Components

### Portfolio experience

- [Portfolio site](https://github.com/flowz5/portfolio-leodupont/blob/main/public/index.html): `public/index.html`
- [Site interactions](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/script.js): `src/js/script.js`

### Portfolio content

- [Stage reports](https://github.com/flowz5/portfolio-leodupont/blob/main/public/stage.html): `public/stage.html`
- [Stage translations](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/stage-i18n.js): `src/js/stage-i18n.js`
- [CV materials](https://github.com/flowz5/portfolio-leodupont/blob/main/public/CV/index.html): `public/CV/index.html`

### Site operations

- [Admin console](https://github.com/flowz5/portfolio-leodupont/blob/main/public/admin.html): `public/admin.html`
- [Admin logic (source)](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/admin.js): `src/js/admin.js`
- [Admin logic (public)](https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/admin.js): `public/js/admin.js`
- [Portfolio data client (source)](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/firebase-client.js): `src/js/firebase-client.js`
- [Portfolio data client (public)](https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/firebase-client.js): `public/js/firebase-client.js`

### Persistence

- [Firebase setup (source)](https://github.com/flowz5/portfolio-leodupont/blob/main/src/js/firebase-init.js): `src/js/firebase-init.js`
- [Firebase setup (public)](https://github.com/flowz5/portfolio-leodupont/blob/main/public/js/firebase-init.js): `public/js/firebase-init.js`
- **Cloud Firestore**

### Other components

- **Visitor**

## Connections

- Visitor → Portfolio site: browses (evidence: `README.md`)
- Visitor → Stage reports: views reports (evidence: `README.md`)
- Visitor → CV materials: views CV (evidence: `README.md`)
- Stage translations → Site interactions: listens for language changes (evidence: `src/js/stage-i18n.js`)
- Admin logic (source) → Firebase setup (source): imports setup (evidence: `src/js/admin.js`)
- Admin logic (public) → Firebase setup (public): imports setup (evidence: `public/js/admin.js`)
- Portfolio data client (source) → Firebase setup (source): imports setup (evidence: `src/js/firebase-client.js`)
- Portfolio data client (public) → Firebase setup (public): imports setup (evidence: `public/js/firebase-client.js`)
- Portfolio data client (source) → Cloud Firestore: reads and writes (evidence: `src/js/firebase-client.js`)
- Portfolio data client (public) → Cloud Firestore: reads and writes (evidence: `public/js/firebase-client.js`)
- Admin logic (source) → Cloud Firestore: reads and writes (evidence: `src/js/admin.js`)
- Admin logic (public) → Cloud Firestore: reads and writes (evidence: `public/js/admin.js`)
