# treymouledoux/portfolio architecture

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

## Overview

This repository implements a personal portfolio website with a Rust service that serves the site and accepts contact submissions. Visitors browse the profile, projects, experience, and social links, then can submit a contact form; the browser posts it to the service, which validates and stores accepted submissions. The frontend also provides responsive navigation, theme switching, and a submission cooldown. Source excerpts show the main rendering, form, and service paths; other integrations or data flows are not inferred.

Main entry points: [`portfolio-static/app/page.tsx`](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/page.tsx) (Portfolio Page), [`portfolio-static/components/portfolio/sections.tsx`](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/sections.tsx) (Portfolio Sections), [`portfolio-static/lib/contact.ts`](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/contact.ts) (Contact Client), [`portfolio-static/components/portfolio/glass-nav.tsx`](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/glass-nav.tsx) (Glass Navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Portfolio UI"]
  node_portfolio_page["Portfolio Page<br/>[page.tsx]"]
  node_site_shell["Site Shell<br/>[layout.tsx]"]
  node_portfolio_sections["Portfolio Sections<br/>[sections.tsx]"]
  node_glass_navigation["Glass Navigation<br/>[glass-nav.tsx]"]
  node_glass_effects["Glass Effects<br/>[GlassFilters.tsx]"]
  node_site_styles["Site Styles<br/>[globals.css]"]
  node_ui_helpers["UI Helpers<br/>[portfolio-utils.ts]"]
end

subgraph group_content["Portfolio Content"]
  node_portfolio_content["Portfolio Content<br/>[portfolio-data.ts]"]
end

subgraph group_contact["Contact Submission"]
  node_contact_form["Contact Form UI<br/>[sections.tsx]"]
  node_contact_client["Contact Client<br/>[contact.ts]"]
  node_web_service["Web Service<br/>[main.rs]"]
  node_contact_handler["Contact Handler<br/>[main.rs]"]
  node_submission_store[("Submission Log<br/>[main.rs]")]
end

node_visitor(("Visitor"))

node_visitor -->|"browses"| node_portfolio_page
node_portfolio_page -->|"renders"| node_glass_navigation
node_portfolio_page -->|"renders"| node_portfolio_sections
node_portfolio_page -->|"checks cooldown"| node_contact_client
node_site_shell -->|"renders"| node_glass_effects
node_site_shell -->|"loads"| node_site_styles
node_portfolio_sections -->|"reads"| node_portfolio_content
node_portfolio_sections -->|"uses"| node_ui_helpers
node_glass_navigation -->|"reads navigation"| node_portfolio_content
node_glass_navigation -->|"uses"| node_ui_helpers
node_portfolio_sections -->|"submits form"| node_contact_client
node_contact_client -->|"posts contact"| node_web_service
node_web_service -->|"routes POST"| node_contact_handler
node_contact_handler -->|"appends record"| node_submission_store
node_contact_handler -->|"returns response"| node_contact_client

click node_portfolio_page "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/page.tsx"
click node_site_shell "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/layout.tsx"
click node_portfolio_sections "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/sections.tsx"
click node_glass_navigation "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/glass-nav.tsx"
click node_glass_effects "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/GlassFilters.tsx"
click node_site_styles "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/globals.css"
click node_portfolio_content "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/portfolio-data.ts"
click node_ui_helpers "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/portfolio-utils.ts"
click node_contact_form "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/sections.tsx"
click node_contact_client "https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/contact.ts"
click node_web_service "https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs"
click node_contact_handler "https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs"
click node_submission_store "https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs"

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_page,node_site_shell,node_portfolio_sections,node_glass_navigation,node_glass_effects,node_site_styles,node_ui_helpers toneBlue
class node_portfolio_content toneAmber
class node_contact_form,node_contact_client,node_web_service,node_contact_handler,node_submission_store toneMint
class node_visitor toneIndigo
```

## Components

### Portfolio UI

- [Portfolio Page](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/page.tsx): `portfolio-static/app/page.tsx`
- [Site Shell](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/layout.tsx): `portfolio-static/app/layout.tsx`
- [Portfolio Sections](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/sections.tsx): `portfolio-static/components/portfolio/sections.tsx`
- [Glass Navigation](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/glass-nav.tsx): `portfolio-static/components/portfolio/glass-nav.tsx`
- [Glass Effects](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/GlassFilters.tsx): `portfolio-static/components/GlassFilters.tsx`
- [Site Styles](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/app/globals.css): `portfolio-static/app/globals.css`
- [UI Helpers](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/portfolio-utils.ts): `portfolio-static/lib/portfolio-utils.ts`

### Portfolio Content

- [Portfolio Content](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/portfolio-data.ts): `portfolio-static/lib/portfolio-data.ts`

### Contact Submission

- [Contact Form UI](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/components/portfolio/sections.tsx): `portfolio-static/components/portfolio/sections.tsx`
- [Contact Client](https://github.com/treymouledoux/portfolio/blob/main/portfolio-static/lib/contact.ts): `portfolio-static/lib/contact.ts`
- [Web Service](https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs): `portfolio-serve/src/main.rs`
- [Contact Handler](https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs): `portfolio-serve/src/main.rs`
- [Submission Log](https://github.com/treymouledoux/portfolio/blob/main/portfolio-serve/src/main.rs): `portfolio-serve/src/main.rs`

### Other components

- **Visitor**

## Connections

- Visitor → Portfolio Page: browses
- Portfolio Page → Glass Navigation: renders (evidence: `portfolio-static/app/page.tsx`)
- Portfolio Page → Portfolio Sections: renders (evidence: `portfolio-static/app/page.tsx`)
- Portfolio Page → Contact Client: checks cooldown (evidence: `portfolio-static/app/page.tsx`)
- Site Shell → Glass Effects: renders (evidence: `portfolio-static/app/layout.tsx`)
- Site Shell → Site Styles: loads (evidence: `portfolio-static/app/layout.tsx`)
- Portfolio Sections → Portfolio Content: reads (evidence: `portfolio-static/components/portfolio/sections.tsx`)
- Portfolio Sections → UI Helpers: uses (evidence: `portfolio-static/components/portfolio/sections.tsx`)
- Glass Navigation → Portfolio Content: reads navigation (evidence: `portfolio-static/components/portfolio/glass-nav.tsx`)
- Glass Navigation → UI Helpers: uses (evidence: `portfolio-static/components/portfolio/glass-nav.tsx`)
- Portfolio Sections → Contact Client: submits form (evidence: `portfolio-static/components/portfolio/sections.tsx`)
- Contact Client → Web Service: posts contact (evidence: `portfolio-static/lib/contact.ts`)
- Web Service → Contact Handler: routes POST (evidence: `portfolio-serve/src/main.rs`)
- Contact Handler → Submission Log: appends record (evidence: `portfolio-serve/src/main.rs`)
- Contact Handler → Contact Client: returns response (evidence: `portfolio-static/lib/contact.ts`)
