# nataniella-o/personal-website architecture

> Architecture diagram of the GitHub repository nataniella-o/personal-website, 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/nataniella-o/personal-website
- Repository: https://github.com/nataniella-o/personal-website

## Overview

This is a personal portfolio website: visitors browse the owner’s profile, experience, and project work, with project detail pages and a downloadable resume. The runtime mounts a React app, routes URLs to page components, and renders portfolio content from reusable components and data modules. The README documents the overall page and data structure; sampled source confirms route dispatch, app mounting, the About activity scroller, and project inventory, but not every page’s internal wiring.

Main entry points: [`src/App.jsx`](https://github.com/nataniella-o/personal-website/blob/main/src/App.jsx) (Route dispatcher), [`src/main.jsx`](https://github.com/nataniella-o/personal-website/blob/main/src/main.jsx) (React entry), [`src/pages/About.jsx`](https://github.com/nataniella-o/personal-website/blob/main/src/pages/About.jsx) (About page), [`src/pages/Experience.jsx`](https://github.com/nataniella-o/personal-website/blob/main/src/pages/Experience.jsx) (Experience page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["App runtime"]
  node_entry["React entry<br/>[main.jsx]"]
  node_router["Route dispatcher<br/>[App.jsx]"]
end

subgraph group_pages["Portfolio pages"]
  node_home["Home page<br/>[Home.jsx]"]
  node_about["About page<br/>[About.jsx]"]
  node_experience["Experience page<br/>[Experience.jsx]"]
  node_projects["Projects page<br/>[Projects.jsx]"]
  node_project_detail["Project detail<br/>[ProjectDetail.jsx]"]
  node_not_found["Not found<br/>[NotFound.jsx]"]
end

subgraph group_content["Portfolio content"]
  node_project_data["Project inventory<br/>[projects.js]"]
  node_experience_data["Experience records<br/>[experience.js]"]
end

subgraph group_ui["Shared presentation"]
  node_activity_scroller["Activity scroller"]
  node_header["Site navigation<br/>[Header.jsx]"]
  node_footer["Site footer<br/>[Footer.jsx]"]
  node_scroll_top["Scroll reset<br/>[ScrollToTop.jsx]"]
end

node_visitor(("Site visitor"))
node_resume["Resume PDF"]

node_visitor -->|"opens site"| node_entry
node_entry -->|"mounts app"| node_router
node_router -->|"renders"| node_scroll_top
node_router -->|"routes to"| node_home
node_router -->|"routes to"| node_about
node_router -->|"routes to"| node_experience
node_router -->|"routes to"| node_projects
node_router -->|"routes to"| node_project_detail
node_router -->|"fallback route"| node_not_found
node_about -->|"renders"| node_activity_scroller
node_header -->|"links to"| node_resume
node_experience -->|"uses records"| node_experience_data
node_projects -->|"uses records"| node_project_data
node_project_detail -->|"uses records"| node_project_data

click node_entry "https://github.com/nataniella-o/personal-website/blob/main/src/main.jsx"
click node_router "https://github.com/nataniella-o/personal-website/blob/main/src/App.jsx"
click node_home "https://github.com/nataniella-o/personal-website/blob/main/src/pages/Home.jsx"
click node_about "https://github.com/nataniella-o/personal-website/blob/main/src/pages/About.jsx"
click node_experience "https://github.com/nataniella-o/personal-website/blob/main/src/pages/Experience.jsx"
click node_projects "https://github.com/nataniella-o/personal-website/blob/main/src/pages/Projects.jsx"
click node_project_detail "https://github.com/nataniella-o/personal-website/blob/main/src/pages/ProjectDetail.jsx"
click node_not_found "https://github.com/nataniella-o/personal-website/blob/main/src/pages/NotFound.jsx"
click node_project_data "https://github.com/nataniella-o/personal-website/blob/main/src/data/projects.js"
click node_experience_data "https://github.com/nataniella-o/personal-website/blob/main/src/data/experience.js"
click node_activity_scroller "https://github.com/nataniella-o/personal-website/blob/main/src/components/about/ActivityScroller.jsx"
click node_header "https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/Header.jsx"
click node_footer "https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/Footer.jsx"
click node_scroll_top "https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/ScrollToTop.jsx"
click node_resume "https://github.com/nataniella-o/personal-website/blob/main/public/assets/Nataniella_Ogogo_Resume.pdf"

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_entry,node_router toneBlue
class node_home,node_about,node_experience,node_projects,node_project_detail,node_not_found toneAmber
class node_project_data,node_experience_data toneMint
class node_activity_scroller,node_header,node_footer,node_scroll_top toneRose
class node_visitor toneIndigo
class node_resume toneTeal
```

## Components

### App runtime

- [React entry](https://github.com/nataniella-o/personal-website/blob/main/src/main.jsx): `src/main.jsx`
- [Route dispatcher](https://github.com/nataniella-o/personal-website/blob/main/src/App.jsx): `src/App.jsx`

### Portfolio pages

- [Home page](https://github.com/nataniella-o/personal-website/blob/main/src/pages/Home.jsx): `src/pages/Home.jsx`
- [About page](https://github.com/nataniella-o/personal-website/blob/main/src/pages/About.jsx): `src/pages/About.jsx`
- [Experience page](https://github.com/nataniella-o/personal-website/blob/main/src/pages/Experience.jsx): `src/pages/Experience.jsx`
- [Projects page](https://github.com/nataniella-o/personal-website/blob/main/src/pages/Projects.jsx): `src/pages/Projects.jsx`
- [Project detail](https://github.com/nataniella-o/personal-website/blob/main/src/pages/ProjectDetail.jsx): `src/pages/ProjectDetail.jsx`
- [Not found](https://github.com/nataniella-o/personal-website/blob/main/src/pages/NotFound.jsx): `src/pages/NotFound.jsx`

### Portfolio content

- [Project inventory](https://github.com/nataniella-o/personal-website/blob/main/src/data/projects.js): `src/data/projects.js`
- [Experience records](https://github.com/nataniella-o/personal-website/blob/main/src/data/experience.js): `src/data/experience.js`

### Shared presentation

- [Activity scroller](https://github.com/nataniella-o/personal-website/blob/main/src/components/about/ActivityScroller.jsx): `src/components/about/ActivityScroller.jsx`
- [Site navigation](https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/Header.jsx): `src/components/layout/Header.jsx`
- [Site footer](https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/Footer.jsx): `src/components/layout/Footer.jsx`
- [Scroll reset](https://github.com/nataniella-o/personal-website/blob/main/src/components/layout/ScrollToTop.jsx): `src/components/layout/ScrollToTop.jsx`

### Other components

- **Site visitor**
- [Resume PDF](https://github.com/nataniella-o/personal-website/blob/main/public/assets/Nataniella_Ogogo_Resume.pdf): `public/assets/Nataniella_Ogogo_Resume.pdf`

## Connections

- Site visitor → React entry: opens site
- React entry → Route dispatcher: mounts app
- Route dispatcher → Scroll reset: renders
- Route dispatcher → Home page: routes to
- Route dispatcher → About page: routes to
- Route dispatcher → Experience page: routes to
- Route dispatcher → Projects page: routes to
- Route dispatcher → Project detail: routes to
- Route dispatcher → Not found: fallback route
- About page → Activity scroller: renders
- Site navigation → Resume PDF: links to
- Experience page → Experience records: uses records
- Projects page → Project inventory: uses records
- Project detail → Project inventory: uses records
