# aadarsh-guru/create-portfolio architecture

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

## Overview

Create Portfolio is a hosted portfolio-building platform. Owners authenticate, manage profile information, skills, social links, projects and branding in the dashboard, then publish a portfolio for visitors to browse; premium accounts can use custom domains and caching. The public portfolio route loads published content, records views and renders contact and project sections. Admin pages manage site settings and analytics. The tree and README establish these product areas, while sampled code confirms public-page caching/view tracking and project mutations; some dashboard and integration wiring is not sampled.

Main entry points: [`src/app/(private)/dashboard/page.tsx`](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/page.tsx) (Owner dashboard), [`src/app/[identifier]/page.tsx`](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/%5Bidentifier%5D/page.tsx) (Public portfolio), [`src/actions/project.ts`](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/project.ts) (Project mutations), [`src/lib/auth.ts`](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/auth.ts) (Auth configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Portfolio authoring"]
  node_dashboard["Owner dashboard<br/>[page.tsx]"]
  node_info["Profile editing<br/>[page.tsx]"]
  node_projects["Project editing<br/>[project.ts]"]
  node_skills["Skills editing<br/>[skill.ts]"]
  node_customize["Brand and domain<br/>[page.tsx]"]
  node_social["Social links<br/>[page.tsx]"]
end

subgraph group_publishing["Portfolio publishing"]
  node_portfolio["Public portfolio<br/>[page.tsx]"]
  node_projectpage["Project detail<br/>[page.tsx]"]
  node_contact["Visitor contact<br/>[ContactForm.tsx]"]
end

subgraph group_platform["Platform operations"]
  node_adminpanel["Admin console<br/>[page.tsx]"]
  node_authroute["Authentication endpoint<br/>[route.tsx]"]
  node_auth["Auth configuration<br/>[auth.ts]"]
  node_projectactions["Project mutations<br/>[project.ts]"]
end

subgraph group_services["External services"]
  node_database[("Portfolio database<br/>[prisma.ts]")]
  node_cache[("Redis cache<br/>[redis.ts]")]
  node_oauth["OAuth providers"]
  node_storage["AWS media storage<br/>[media.ts]"]
  node_mail["Email delivery<br/>[mail.ts]"]
end

node_owner(("Portfolio owner"))
node_visitor(("Portfolio visitor"))
node_admin(("Site admin"))

node_owner -->|"manages portfolio"| node_dashboard
node_dashboard -->|"edits profile"| node_info
node_dashboard -->|"manages projects"| node_projects
node_dashboard -->|"manages skills"| node_skills
node_dashboard -->|"configures branding"| node_customize
node_dashboard -->|"manages links"| node_social
node_projects -->|"submits changes"| node_projectactions
node_projectactions -->|"creates and updates"| node_database
node_projectactions -->|"deletes media"| node_storage
node_projectactions -->|"invalidates cache"| node_cache
node_visitor -->|"opens portfolio"| node_portfolio
node_portfolio -->|"loads profile and views"| node_database
node_portfolio -->|"reads and writes cache"| node_cache
node_portfolio -->|"opens project"| node_projectpage
node_portfolio -->|"submits inquiry"| node_contact
node_admin -->|"manages site"| node_adminpanel
node_authroute -->|"dispatches auth"| node_auth
node_auth -->|"configures sign-in"| node_oauth
node_auth -->|"finds or creates user"| node_database
node_contact -.->|"sends inquiry"| node_mail

click node_dashboard "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/page.tsx"
click node_info "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/info/page.tsx"
click node_projects "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/project.ts"
click node_skills "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/skill.ts"
click node_customize "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/customize/page.tsx"
click node_social "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/social/page.tsx"
click node_portfolio "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/%5Bidentifier%5D/page.tsx"
click node_projectpage "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/%5Bidentifier%5D/projects/%5BprojectId%5D/page.tsx"
click node_contact "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/components/site/ContactForm.tsx"
click node_adminpanel "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/admin/page.tsx"
click node_authroute "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/api/auth/%5B...nextauth%5D/route.tsx"
click node_auth "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/auth.ts"
click node_projectactions "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/project.ts"
click node_database "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/prisma.ts"
click node_cache "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/redis.ts"
click node_storage "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/media.ts"
click node_mail "https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/mail.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_dashboard,node_info,node_projects,node_skills,node_customize,node_social toneBlue
class node_portfolio,node_projectpage,node_contact toneAmber
class node_adminpanel,node_authroute,node_auth,node_projectactions toneMint
class node_database,node_cache,node_oauth,node_storage,node_mail toneRose
class node_owner,node_visitor,node_admin toneIndigo
```

## Components

### Portfolio authoring

- [Owner dashboard](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/page.tsx): `src/app/(private)/dashboard/page.tsx`
- [Profile editing](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/info/page.tsx): `src/app/(private)/dashboard/info/page.tsx`
- [Project editing](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/project.ts): `src/actions/project.ts`
- [Skills editing](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/skill.ts): `src/actions/skill.ts`
- [Brand and domain](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/customize/page.tsx): `src/app/(private)/dashboard/customize/page.tsx`
- [Social links](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/dashboard/social/page.tsx): `src/app/(private)/dashboard/social/page.tsx`

### Portfolio publishing

- [Public portfolio](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/%5Bidentifier%5D/page.tsx): `src/app/[identifier]/page.tsx`
- [Project detail](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/%5Bidentifier%5D/projects/%5BprojectId%5D/page.tsx): `src/app/[identifier]/projects/[projectId]/page.tsx`
- [Visitor contact](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/components/site/ContactForm.tsx): `src/components/site/ContactForm.tsx`

### Platform operations

- [Admin console](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/(private)/admin/page.tsx): `src/app/(private)/admin/page.tsx`
- [Authentication endpoint](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/app/api/auth/%5B...nextauth%5D/route.tsx): `src/app/api/auth/[...nextauth]/route.tsx`
- [Auth configuration](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Project mutations](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/actions/project.ts): `src/actions/project.ts`

### External services

- [Portfolio database](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [Redis cache](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/redis.ts): `src/lib/redis.ts`
- **OAuth providers**
- [AWS media storage](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/media.ts): `src/lib/media.ts`
- [Email delivery](https://github.com/aadarsh-guru/create-portfolio/blob/main/src/lib/mail.ts): `src/lib/mail.ts`

### Other components

- **Portfolio owner**
- **Portfolio visitor**
- **Site admin**

## Connections

- Portfolio owner → Owner dashboard: manages portfolio
- Owner dashboard → Profile editing: edits profile
- Owner dashboard → Project editing: manages projects
- Owner dashboard → Skills editing: manages skills
- Owner dashboard → Brand and domain: configures branding
- Owner dashboard → Social links: manages links
- Project editing → Project mutations: submits changes
- Project mutations → Portfolio database: creates and updates
- Project mutations → AWS media storage: deletes media
- Project mutations → Redis cache: invalidates cache
- Portfolio visitor → Public portfolio: opens portfolio
- Public portfolio → Portfolio database: loads profile and views
- Public portfolio → Redis cache: reads and writes cache
- Public portfolio → Project detail: opens project
- Public portfolio → Visitor contact: submits inquiry
- Site admin → Admin console: manages site
- Authentication endpoint → Auth configuration: dispatches auth
- Auth configuration → OAuth providers: configures sign-in
- Auth configuration → Portfolio database: finds or creates user
- Visitor contact → Email delivery: sends inquiry
