# adrian-adams/dev-portfolio architecture

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

- Interactive diagram: https://gitdiagram.com/adrian-adams/dev-portfolio
- Repository: https://github.com/adrian-adams/dev-portfolio

## Overview

This repository is a personal developer portfolio: visitors browse an introduction and skills, explore project listings and detail pages, and can reach the contact page. The shared layout supplies navigation and footer; project metadata is centralized for the homepage and detail view. Contact form, action, and schema modules are present, but their wiring is not shown in the sampled source, so no submission flow is asserted. The tree and samples do not establish the project-listing or contact-page internals.

Main entry points: [`app/home/homepage.tsx`](https://github.com/adrian-adams/dev-portfolio/blob/main/app/home/homepage.tsx) (Homepage), [`components/blocks/socials.tsx`](https://github.com/adrian-adams/dev-portfolio/blob/main/components/blocks/socials.tsx) (Social links), [`app/projects/[slug]/page.tsx`](https://github.com/adrian-adams/dev-portfolio/blob/main/app/projects/%5Bslug%5D/page.tsx) (Project detail), [`app/layout.tsx`](https://github.com/adrian-adams/dev-portfolio/blob/main/app/layout.tsx) (Shared layout)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Site experience"]
  node_layout["Shared layout<br/>[layout.tsx]"]
  node_navigation["Navigation<br/>[navigation.tsx]"]
  node_mobilemenu["Mobile menu<br/>[mobile-menu.tsx]"]
  node_footer["Footer<br/>[footer.tsx]"]
  node_home["Homepage<br/>[homepage.tsx]"]
  node_hero["Hero<br/>[hero.tsx]"]
  node_about["About page<br/>[page.tsx]"]
  node_socials["Social links<br/>[socials.tsx]"]
end

subgraph group_projects["Project portfolio"]
  node_projectlist["Project listing<br/>[page.tsx]"]
  node_projectdata["Project content<br/>[projects.ts]"]
  node_projectcard["Project card<br/>[project-card.tsx]"]
  node_projectdetail["Project detail<br/>[page.tsx]"]
  node_projectthumbnail["Project thumbnail<br/>[thumbnail.tsx]"]
end

subgraph group_contact["Contact"]
  node_contactpage["Contact page<br/>[page.tsx]"]
  node_contactform["Contact form<br/>[contact-form.tsx]"]
  node_contactaction["Contact action<br/>[contactForm.ts]"]
  node_contactvalidation["Form validation<br/>[contactForm.ts]"]
end

node_visitor(("Visitor"))
node_github(("GitHub"))
node_resume["Resume document"]

node_visitor -->|"visits"| node_home
node_visitor -->|"visits"| node_about
node_visitor -->|"visits"| node_projectlist
node_visitor -->|"opens project"| node_projectdetail
node_visitor -->|"visits"| node_contactpage
node_layout -->|"renders"| node_navigation
node_layout -->|"renders"| node_footer
node_navigation -->|"renders"| node_mobilemenu
node_home -->|"renders"| node_hero
node_home -->|"reads"| node_projectdata
node_home -->|"renders"| node_projectcard
node_about -->|"renders"| node_socials
node_projectdetail -->|"reads"| node_projectdata
node_projectdetail -->|"renders"| node_projectthumbnail
node_socials -->|"links to"| node_github
node_socials -->|"links to"| node_resume

click node_layout "https://github.com/adrian-adams/dev-portfolio/blob/main/app/layout.tsx"
click node_navigation "https://github.com/adrian-adams/dev-portfolio/blob/main/components/navigation/navigation.tsx"
click node_mobilemenu "https://github.com/adrian-adams/dev-portfolio/blob/main/components/navigation/mobile-menu.tsx"
click node_footer "https://github.com/adrian-adams/dev-portfolio/blob/main/components/footer/footer.tsx"
click node_home "https://github.com/adrian-adams/dev-portfolio/blob/main/app/home/homepage.tsx"
click node_hero "https://github.com/adrian-adams/dev-portfolio/blob/main/components/hero/hero.tsx"
click node_about "https://github.com/adrian-adams/dev-portfolio/blob/main/app/about/page.tsx"
click node_socials "https://github.com/adrian-adams/dev-portfolio/blob/main/components/blocks/socials.tsx"
click node_projectlist "https://github.com/adrian-adams/dev-portfolio/blob/main/app/projects/page.tsx"
click node_projectdata "https://github.com/adrian-adams/dev-portfolio/blob/main/lib/content/projects.ts"
click node_projectcard "https://github.com/adrian-adams/dev-portfolio/blob/main/components/blocks/project-card.tsx"
click node_projectdetail "https://github.com/adrian-adams/dev-portfolio/blob/main/app/projects/%5Bslug%5D/page.tsx"
click node_projectthumbnail "https://github.com/adrian-adams/dev-portfolio/blob/main/components/app/projects/thumbnail.tsx"
click node_contactpage "https://github.com/adrian-adams/dev-portfolio/blob/main/app/contact/page.tsx"
click node_contactform "https://github.com/adrian-adams/dev-portfolio/blob/main/components/app/contact/contact-form.tsx"
click node_contactaction "https://github.com/adrian-adams/dev-portfolio/blob/main/lib/actions/contactForm.ts"
click node_contactvalidation "https://github.com/adrian-adams/dev-portfolio/blob/main/lib/zod/contactForm.ts"

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_layout,node_navigation,node_mobilemenu,node_footer,node_home,node_hero,node_about,node_socials toneBlue
class node_projectlist,node_projectdata,node_projectcard,node_projectdetail,node_projectthumbnail toneAmber
class node_contactpage,node_contactform,node_contactaction,node_contactvalidation toneMint
class node_visitor,node_github,node_resume toneIndigo
```

## Components

### Site experience

- [Shared layout](https://github.com/adrian-adams/dev-portfolio/blob/main/app/layout.tsx): `app/layout.tsx`
- [Navigation](https://github.com/adrian-adams/dev-portfolio/blob/main/components/navigation/navigation.tsx): `components/navigation/navigation.tsx`
- [Mobile menu](https://github.com/adrian-adams/dev-portfolio/blob/main/components/navigation/mobile-menu.tsx): `components/navigation/mobile-menu.tsx`
- [Footer](https://github.com/adrian-adams/dev-portfolio/blob/main/components/footer/footer.tsx): `components/footer/footer.tsx`
- [Homepage](https://github.com/adrian-adams/dev-portfolio/blob/main/app/home/homepage.tsx): `app/home/homepage.tsx`
- [Hero](https://github.com/adrian-adams/dev-portfolio/blob/main/components/hero/hero.tsx): `components/hero/hero.tsx`
- [About page](https://github.com/adrian-adams/dev-portfolio/blob/main/app/about/page.tsx): `app/about/page.tsx`
- [Social links](https://github.com/adrian-adams/dev-portfolio/blob/main/components/blocks/socials.tsx): `components/blocks/socials.tsx`

### Project portfolio

- [Project listing](https://github.com/adrian-adams/dev-portfolio/blob/main/app/projects/page.tsx): `app/projects/page.tsx`
- [Project content](https://github.com/adrian-adams/dev-portfolio/blob/main/lib/content/projects.ts): `lib/content/projects.ts`
- [Project card](https://github.com/adrian-adams/dev-portfolio/blob/main/components/blocks/project-card.tsx): `components/blocks/project-card.tsx`
- [Project detail](https://github.com/adrian-adams/dev-portfolio/blob/main/app/projects/%5Bslug%5D/page.tsx): `app/projects/[slug]/page.tsx`
- [Project thumbnail](https://github.com/adrian-adams/dev-portfolio/blob/main/components/app/projects/thumbnail.tsx): `components/app/projects/thumbnail.tsx`

### Contact

- [Contact page](https://github.com/adrian-adams/dev-portfolio/blob/main/app/contact/page.tsx): `app/contact/page.tsx`
- [Contact form](https://github.com/adrian-adams/dev-portfolio/blob/main/components/app/contact/contact-form.tsx): `components/app/contact/contact-form.tsx`
- [Contact action](https://github.com/adrian-adams/dev-portfolio/blob/main/lib/actions/contactForm.ts): `lib/actions/contactForm.ts`
- [Form validation](https://github.com/adrian-adams/dev-portfolio/blob/main/lib/zod/contactForm.ts): `lib/zod/contactForm.ts`

### Other components

- **Visitor**
- **GitHub**
- **Resume document**

## Connections

- Visitor → Homepage: visits
- Visitor → About page: visits
- Visitor → Project listing: visits
- Visitor → Project detail: opens project
- Visitor → Contact page: visits
- Shared layout → Navigation: renders
- Shared layout → Footer: renders
- Navigation → Mobile menu: renders
- Homepage → Hero: renders
- Homepage → Project content: reads
- Homepage → Project card: renders
- About page → Social links: renders
- Project detail → Project content: reads
- Project detail → Project thumbnail: renders
- Social links → GitHub: links to
- Social links → Resume document: links to
