# gank8818-bit/photography-portfolio architecture

> Architecture diagram of the GitHub repository gank8818-bit/photography-portfolio, 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/gank8818-bit/photography-portfolio
- Repository: https://github.com/gank8818-bit/photography-portfolio

## Overview

Kiros Gan is a static photography portfolio. Visitors browse and filter the curated gallery, open and navigate image details in a lightbox, and can contact the photographer through a validated email-composing form. The page also provides theme selection with remembered preferences, responsive navigation, and motion effects. The map is based on the README and partial script excerpts; some markup and implementation details were not sampled.

Main entry points: [`script.js`](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js) (Page interactions), [`index.html`](https://github.com/gank8818-bit/photography-portfolio/blob/main/index.html) (Portfolio page), [`assets/thumbs`](https://github.com/gank8818-bit/photography-portfolio/tree/main/assets/thumbs) (Thumbnails), [`assets/data.js`](https://github.com/gank8818-bit/photography-portfolio/blob/main/assets/data.js) (Photo metadata)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Portfolio experience"]
  node_page["Portfolio page<br/>[index.html]"]
  node_styles["Themes and layout<br/>[styles.css]"]
  node_interactions["Page interactions<br/>[script.js]"]
  node_hero["Hero and motion<br/>[script.js]"]
  node_navigation["Mobile navigation<br/>[script.js]"]
  node_contact["Contact form<br/>[script.js]"]
end

subgraph group_gallery["Photography collection"]
  node_photo_data["Photo metadata<br/>[data.js]"]
  node_manifest["Photo manifest<br/>[photos.json]"]
  node_gallery_view["Filtered gallery<br/>[script.js]"]
  node_lightbox["Photo lightbox<br/>[script.js]"]
  node_thumbnails["Thumbnails"]
  node_full_photos["Full-size photos"]
end

subgraph group_browser["Browser capabilities"]
  node_theme_memory[("Theme preferences")]
  node_email_app(("Email application"))
end

node_visitor(("Visitor"))

node_visitor -->|"opens"| node_page
node_page -->|"loads"| node_interactions
node_page -->|"uses styles"| node_styles
node_photo_data -->|"provides photo data"| node_interactions
node_manifest -.->|"documents selection"| node_visitor
node_visitor -->|"filters and browses"| node_gallery_view
node_interactions -->|"renders and filters"| node_gallery_view
node_gallery_view -->|"loads thumbnails"| node_thumbnails
node_gallery_view -->|"opens photo"| node_lightbox
node_lightbox -->|"loads preview"| node_thumbnails
node_lightbox -->|"loads full image"| node_full_photos
node_visitor -->|"navigates photos"| node_lightbox
node_interactions -->|"animates and reveals"| node_hero
node_interactions -->|"toggles menu"| node_navigation
node_visitor -->|"submits inquiry"| node_contact
node_contact -->|"composes email"| node_email_app
node_visitor -->|"chooses theme"| node_interactions
node_interactions -->|"reads and saves"| node_theme_memory

click node_page "https://github.com/gank8818-bit/photography-portfolio/blob/main/index.html"
click node_styles "https://github.com/gank8818-bit/photography-portfolio/blob/main/styles.css"
click node_interactions "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_hero "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_navigation "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_contact "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_photo_data "https://github.com/gank8818-bit/photography-portfolio/blob/main/assets/data.js"
click node_manifest "https://github.com/gank8818-bit/photography-portfolio/blob/main/photos.json"
click node_gallery_view "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_lightbox "https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js"
click node_thumbnails "https://github.com/gank8818-bit/photography-portfolio/tree/main/assets/thumbs"
click node_full_photos "https://github.com/gank8818-bit/photography-portfolio/tree/main/assets/photos"

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_page,node_styles,node_interactions,node_hero,node_navigation,node_contact toneBlue
class node_photo_data,node_manifest,node_gallery_view,node_lightbox,node_thumbnails,node_full_photos toneAmber
class node_theme_memory,node_email_app toneMint
class node_visitor toneIndigo
```

## Components

### Portfolio experience

- [Portfolio page](https://github.com/gank8818-bit/photography-portfolio/blob/main/index.html): `index.html`
- [Themes and layout](https://github.com/gank8818-bit/photography-portfolio/blob/main/styles.css): `styles.css`
- [Page interactions](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`
- [Hero and motion](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`
- [Mobile navigation](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`
- [Contact form](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`

### Photography collection

- [Photo metadata](https://github.com/gank8818-bit/photography-portfolio/blob/main/assets/data.js): `assets/data.js`
- [Photo manifest](https://github.com/gank8818-bit/photography-portfolio/blob/main/photos.json): `photos.json`
- [Filtered gallery](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`
- [Photo lightbox](https://github.com/gank8818-bit/photography-portfolio/blob/main/script.js): `script.js`
- [Thumbnails](https://github.com/gank8818-bit/photography-portfolio/tree/main/assets/thumbs): `assets/thumbs`
- [Full-size photos](https://github.com/gank8818-bit/photography-portfolio/tree/main/assets/photos): `assets/photos`

### Browser capabilities

- **Theme preferences**
- **Email application**

### Other components

- **Visitor**

## Connections

- Visitor → Portfolio page: opens
- Portfolio page → Page interactions: loads
- Portfolio page → Themes and layout: uses styles
- Photo metadata → Page interactions: provides photo data
- Photo manifest → Visitor: documents selection
- Visitor → Filtered gallery: filters and browses
- Page interactions → Filtered gallery: renders and filters
- Filtered gallery → Thumbnails: loads thumbnails
- Filtered gallery → Photo lightbox: opens photo
- Photo lightbox → Thumbnails: loads preview
- Photo lightbox → Full-size photos: loads full image
- Visitor → Photo lightbox: navigates photos
- Page interactions → Hero and motion: animates and reveals
- Page interactions → Mobile navigation: toggles menu
- Visitor → Contact form: submits inquiry
- Contact form → Email application: composes email
- Visitor → Page interactions: chooses theme
- Page interactions → Theme preferences: reads and saves
