# ziakn/portfolio-new architecture

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

## Overview

This is a personal software-engineering portfolio and publishing site. Visitors browse the profile, resume, projects, and technical blog; they can also submit a contact message. An admin area supports sign-in and management of posts, projects, site content, and messages. The sampled code confirms blog reads, home-content reads, contact submission handling, and session lookup; wiring for other admin and portfolio data operations is inferred only where the file tree identifies the subsystem, so uncertain links are omitted.

Main entry points: [`src/data/posts.ts`](https://github.com/ziakn/portfolio-new/blob/main/src/data/posts.ts) (Post access and CRUD), [`src/data/db.ts`](https://github.com/ziakn/portfolio-new/blob/main/src/data/db.ts) (SQLite database), [`src/data/content.ts`](https://github.com/ziakn/portfolio-new/blob/main/src/data/content.ts) (Site content), [`src/app/blog/page.tsx`](https://github.com/ziakn/portfolio-new/blob/main/src/app/blog/page.tsx) (Blog listing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public site"]
  node_home["Profile home<br/>[page.tsx]"]
  node_resume["Resume<br/>[page.tsx]"]
  node_portfolio["Portfolio<br/>[page.tsx]"]
  node_portfolio_filter["Project filtering"]
  node_contact_route["Contact endpoint<br/>[route.ts]"]
end

subgraph group_publishing["Blog publishing"]
  node_blog_index["Blog listing<br/>[page.tsx]"]
  node_blog_list["Post list UI<br/>[BlogPostList.tsx]"]
  node_blog_article["Blog article<br/>[page.tsx]"]
  node_feed["RSS feed<br/>[route.ts]"]
end

subgraph group_admin["Administration"]
  node_admin_login["Admin login<br/>[page.tsx]"]
  node_admin_panel["Admin panel<br/>[page.tsx]"]
  node_admin_posts["Post management<br/>[actions.ts]"]
  node_admin_projects["Project management<br/>[actions.ts]"]
  node_admin_content["Content editor<br/>[actions.ts]"]
  node_admin_messages["Message management<br/>[actions.ts]"]
  node_session["Session checks<br/>[session.ts]"]
end

subgraph group_data["Data services"]
  node_content_data["Site content<br/>[content.ts]"]
  node_posts_data["Post access and CRUD<br/>[posts.ts]"]
  node_projects_data["Project data<br/>[projects.ts]"]
  node_contact_data["Contact records<br/>[contact.ts]"]
  node_admin_data["Admin accounts<br/>[admin.ts]"]
  node_database[("SQLite database<br/>[db.ts]")]
end

node_visitor(("Visitor"))
node_administrator(("Administrator"))

node_visitor -->|"visits"| node_home
node_visitor -->|"views"| node_resume
node_visitor -->|"views"| node_portfolio
node_visitor -->|"browses"| node_blog_index
node_visitor -->|"opens"| node_blog_article
node_visitor -->|"submits"| node_contact_route
node_home -->|"reads content"| node_content_data
node_resume -->|"reads achievements"| node_content_data
node_portfolio -->|"renders"| node_portfolio_filter
node_blog_index -->|"loads posts"| node_posts_data
node_blog_index -->|"renders"| node_blog_list
node_blog_article -->|"loads article"| node_posts_data
node_feed -->|"loads recent posts"| node_posts_data
node_contact_route -->|"stores submission"| node_contact_data
node_administrator -->|"signs in"| node_admin_login
node_administrator -->|"manages site"| node_admin_panel
node_session -->|"resolves user"| node_admin_data
node_admin_posts -->|"manages posts"| node_posts_data
node_admin_projects -->|"manages projects"| node_projects_data
node_admin_content -->|"manages content"| node_content_data
node_admin_messages -->|"manages messages"| node_contact_data
node_posts_data -->|"reads and writes"| node_database
node_contact_data -->|"reads and writes"| node_database
node_admin_data -->|"reads and writes"| node_database
node_projects_data -->|"reads and writes"| node_database
node_content_data -->|"reads and writes"| node_database

click node_home "https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/page.tsx"
click node_resume "https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/resume/page.tsx"
click node_portfolio "https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/portfolio/page.tsx"
click node_portfolio_filter "https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/portfolio/PortfolioClient.tsx"
click node_contact_route "https://github.com/ziakn/portfolio-new/blob/main/src/app/api/contact/route.ts"
click node_blog_index "https://github.com/ziakn/portfolio-new/blob/main/src/app/blog/page.tsx"
click node_blog_list "https://github.com/ziakn/portfolio-new/blob/main/src/components/BlogPostList.tsx"
click node_blog_article "https://github.com/ziakn/portfolio-new/blob/main/src/app/blog/%5Bslug%5D/page.tsx"
click node_feed "https://github.com/ziakn/portfolio-new/blob/main/src/app/feed.xml/route.ts"
click node_admin_login "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/login/page.tsx"
click node_admin_panel "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/page.tsx"
click node_admin_posts "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/posts/actions.ts"
click node_admin_projects "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/projects/actions.ts"
click node_admin_content "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/content/actions.ts"
click node_admin_messages "https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/messages/actions.ts"
click node_session "https://github.com/ziakn/portfolio-new/blob/main/src/lib/session.ts"
click node_content_data "https://github.com/ziakn/portfolio-new/blob/main/src/data/content.ts"
click node_posts_data "https://github.com/ziakn/portfolio-new/blob/main/src/data/posts.ts"
click node_projects_data "https://github.com/ziakn/portfolio-new/blob/main/src/data/projects.ts"
click node_contact_data "https://github.com/ziakn/portfolio-new/blob/main/src/data/contact.ts"
click node_admin_data "https://github.com/ziakn/portfolio-new/blob/main/src/data/admin.ts"
click node_database "https://github.com/ziakn/portfolio-new/blob/main/src/data/db.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_home,node_resume,node_portfolio,node_portfolio_filter,node_contact_route toneBlue
class node_blog_index,node_blog_list,node_blog_article,node_feed toneAmber
class node_admin_login,node_admin_panel,node_admin_posts,node_admin_projects,node_admin_content,node_admin_messages,node_session toneMint
class node_content_data,node_posts_data,node_projects_data,node_contact_data,node_admin_data,node_database toneRose
class node_visitor,node_administrator toneIndigo
```

## Components

### Public site

- [Profile home](https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/page.tsx): `src/app/(site)/page.tsx`
- [Resume](https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/resume/page.tsx): `src/app/(site)/resume/page.tsx`
- [Portfolio](https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/portfolio/page.tsx): `src/app/(site)/portfolio/page.tsx`
- [Project filtering](https://github.com/ziakn/portfolio-new/blob/main/src/app/(site)/portfolio/PortfolioClient.tsx): `src/app/(site)/portfolio/PortfolioClient.tsx`
- [Contact endpoint](https://github.com/ziakn/portfolio-new/blob/main/src/app/api/contact/route.ts): `src/app/api/contact/route.ts`

### Blog publishing

- [Blog listing](https://github.com/ziakn/portfolio-new/blob/main/src/app/blog/page.tsx): `src/app/blog/page.tsx`
- [Post list UI](https://github.com/ziakn/portfolio-new/blob/main/src/components/BlogPostList.tsx): `src/components/BlogPostList.tsx`
- [Blog article](https://github.com/ziakn/portfolio-new/blob/main/src/app/blog/%5Bslug%5D/page.tsx): `src/app/blog/[slug]/page.tsx`
- [RSS feed](https://github.com/ziakn/portfolio-new/blob/main/src/app/feed.xml/route.ts): `src/app/feed.xml/route.ts`

### Administration

- [Admin login](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/login/page.tsx): `src/app/admin/login/page.tsx`
- [Admin panel](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/page.tsx): `src/app/admin/(panel)/page.tsx`
- [Post management](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/posts/actions.ts): `src/app/admin/(panel)/posts/actions.ts`
- [Project management](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/projects/actions.ts): `src/app/admin/(panel)/projects/actions.ts`
- [Content editor](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/content/actions.ts): `src/app/admin/(panel)/content/actions.ts`
- [Message management](https://github.com/ziakn/portfolio-new/blob/main/src/app/admin/(panel)/messages/actions.ts): `src/app/admin/(panel)/messages/actions.ts`
- [Session checks](https://github.com/ziakn/portfolio-new/blob/main/src/lib/session.ts): `src/lib/session.ts`

### Data services

- [Site content](https://github.com/ziakn/portfolio-new/blob/main/src/data/content.ts): `src/data/content.ts`
- [Post access and CRUD](https://github.com/ziakn/portfolio-new/blob/main/src/data/posts.ts): `src/data/posts.ts`
- [Project data](https://github.com/ziakn/portfolio-new/blob/main/src/data/projects.ts): `src/data/projects.ts`
- [Contact records](https://github.com/ziakn/portfolio-new/blob/main/src/data/contact.ts): `src/data/contact.ts`
- [Admin accounts](https://github.com/ziakn/portfolio-new/blob/main/src/data/admin.ts): `src/data/admin.ts`
- [SQLite database](https://github.com/ziakn/portfolio-new/blob/main/src/data/db.ts): `src/data/db.ts`

### Other components

- **Visitor**
- **Administrator**

## Connections

- Visitor → Profile home: visits
- Visitor → Resume: views
- Visitor → Portfolio: views
- Visitor → Blog listing: browses
- Visitor → Blog article: opens
- Visitor → Contact endpoint: submits
- Profile home → Site content: reads content
- Resume → Site content: reads achievements
- Portfolio → Project filtering: renders
- Blog listing → Post access and CRUD: loads posts
- Blog listing → Post list UI: renders
- Blog article → Post access and CRUD: loads article
- RSS feed → Post access and CRUD: loads recent posts
- Contact endpoint → Contact records: stores submission
- Administrator → Admin login: signs in
- Administrator → Admin panel: manages site
- Session checks → Admin accounts: resolves user
- Post management → Post access and CRUD: manages posts
- Project management → Project data: manages projects
- Content editor → Site content: manages content
- Message management → Contact records: manages messages
- Post access and CRUD → SQLite database: reads and writes
- Contact records → SQLite database: reads and writes
- Admin accounts → SQLite database: reads and writes
- Project data → SQLite database: reads and writes
- Site content → SQLite database: reads and writes
