# sudan-pandey/portfolio-forge architecture

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

## Overview

Portfolio Forge is a PHP portfolio-building application. The main user journey is account creation, resume-assisted or manual content entry, section and design customization, preview, then public sharing; visitors’ views are tracked. Separate branches provide template rendering and administration of users, templates, and system metrics. The README documents several capabilities whose exact call sites are not present in the sampled excerpts, so those links reflect documented behavior and are limited to clear subsystem relationships.

Main entry points: [`config/database.php`](https://github.com/sudan-pandey/portfolio-forge/blob/main/config/database.php) (Application database), [`portfolio/view.php`](https://github.com/sudan-pandey/portfolio-forge/blob/main/portfolio/view.php) (Public portfolio router), [`user/resume.php`](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/resume.php) (Resume import), [`user/preview.php`](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/preview.php) (Owner preview)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_accounts["Accounts &amp; access"]
  node_register["Registration<br/>[register.php]"]
  node_login["User login<br/>[login.php]"]
  node_user_guard["User access guard<br/>[auth.php]"]
  node_admin_guard["Admin access guard<br/>[admin-auth.php]"]
  node_logout["User logout<br/>[logout.php]"]
end

subgraph group_authoring["Portfolio authoring"]
  node_user_dashboard["User dashboard<br/>[dashboard.php]"]
  node_resume_upload["Resume import<br/>[resume.php]"]
  node_section_editor["Section editor<br/>[sections.php]"]
  node_profile_editor["Profile editor<br/>[profile.php]"]
  node_portfolio_editor["Portfolio settings<br/>[edit-portfolio.php]"]
  node_template_picker["Template selection<br/>[templates.php]"]
  node_resume_files[("Uploaded resumes")]
  node_utilities["Shared utilities<br/>[functions.php]"]
end

subgraph group_publishing["Publishing &amp; display"]
  node_preview["Owner preview<br/>[preview.php]"]
  node_public_router["Public portfolio router<br/>[view.php]"]
  node_template_renderers["Five template renderers"]
  node_visits["View analytics<br/>[statistics.php]"]
end

subgraph group_administration["Administration"]
  node_admin_dashboard["Admin metrics<br/>[dashboard.php]"]
  node_admin_users["User management<br/>[users.php]"]
  node_admin_templates["Template management<br/>[templates.php]"]
end

node_visitor(("Visitor"))
node_user(("Portfolio user"))
node_admin_actor(("Administrator"))
node_database[("Application database<br/>[database.php]")]
node_pdf_tool["pdftotext"]

node_user -->|"creates account"| node_register
node_user -->|"signs in"| node_login
node_admin_actor -->|"requests access"| node_admin_guard
node_register -->|"stores account"| node_database
node_login -->|"checks credentials"| node_database
node_user_guard -->|"checks account status"| node_database
node_admin_guard -->|"checks admin"| node_database
node_user -->|"manages portfolio"| node_user_dashboard
node_user_dashboard -->|"requires login"| node_user_guard
node_resume_upload -->|"uses extraction helpers"| node_utilities
node_resume_upload -->|"stores upload"| node_resume_files
node_resume_upload -->|"saves resume data"| node_database
node_utilities -.->|"extracts PDF text"| node_pdf_tool
node_section_editor -->|"saves sections"| node_database
node_profile_editor -->|"saves profile"| node_database
node_portfolio_editor -->|"saves settings"| node_database
node_template_picker -->|"updates selection"| node_database
node_preview -->|"loads preview"| node_public_router
node_preview -->|"gets portfolio"| node_database
node_visitor -->|"opens portfolio"| node_public_router
node_public_router -->|"loads portfolio data"| node_database
node_public_router -->|"renders selected design"| node_template_renderers
node_public_router -->|"records public visit"| node_database
node_user -->|"views analytics"| node_visits
node_visits -->|"reads visit metrics"| node_database
node_admin_dashboard -->|"reads system metrics"| node_database
node_admin_users -->|"manages accounts"| node_database
node_admin_templates -->|"manages availability"| node_database
node_admin_actor -->|"reviews metrics"| node_admin_dashboard
node_admin_actor -->|"manages users"| node_admin_users
node_admin_actor -->|"manages templates"| node_admin_templates
node_user -->|"ends session"| node_logout

click node_register "https://github.com/sudan-pandey/portfolio-forge/blob/main/register.php"
click node_login "https://github.com/sudan-pandey/portfolio-forge/blob/main/login.php"
click node_user_guard "https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/auth.php"
click node_admin_guard "https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/admin-auth.php"
click node_logout "https://github.com/sudan-pandey/portfolio-forge/blob/main/logout.php"
click node_user_dashboard "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/dashboard.php"
click node_resume_upload "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/resume.php"
click node_section_editor "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/sections.php"
click node_profile_editor "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/profile.php"
click node_portfolio_editor "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/edit-portfolio.php"
click node_template_picker "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/templates.php"
click node_preview "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/preview.php"
click node_public_router "https://github.com/sudan-pandey/portfolio-forge/blob/main/portfolio/view.php"
click node_template_renderers "https://github.com/sudan-pandey/portfolio-forge/tree/main/templates"
click node_visits "https://github.com/sudan-pandey/portfolio-forge/blob/main/user/statistics.php"
click node_resume_files "https://github.com/sudan-pandey/portfolio-forge/tree/main/uploads/resumes"
click node_utilities "https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/functions.php"
click node_admin_dashboard "https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/dashboard.php"
click node_admin_users "https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/users.php"
click node_admin_templates "https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/templates.php"
click node_database "https://github.com/sudan-pandey/portfolio-forge/blob/main/config/database.php"

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_register,node_login,node_user_guard,node_admin_guard,node_logout,node_user toneBlue
class node_user_dashboard,node_resume_upload,node_section_editor,node_profile_editor,node_portfolio_editor,node_template_picker,node_resume_files,node_utilities,node_database toneAmber
class node_preview,node_public_router,node_template_renderers,node_visits toneMint
class node_admin_dashboard,node_admin_users,node_admin_templates toneRose
class node_visitor,node_admin_actor,node_pdf_tool toneIndigo
```

## Components

### Accounts & access

- [Registration](https://github.com/sudan-pandey/portfolio-forge/blob/main/register.php): `register.php`
- [User login](https://github.com/sudan-pandey/portfolio-forge/blob/main/login.php): `login.php`
- [User access guard](https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/auth.php): `includes/auth.php`
- [Admin access guard](https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/admin-auth.php): `includes/admin-auth.php`
- [User logout](https://github.com/sudan-pandey/portfolio-forge/blob/main/logout.php): `logout.php`

### Portfolio authoring

- [User dashboard](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/dashboard.php): `user/dashboard.php`
- [Resume import](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/resume.php): `user/resume.php`
- [Section editor](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/sections.php): `user/sections.php`
- [Profile editor](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/profile.php): `user/profile.php`
- [Portfolio settings](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/edit-portfolio.php): `user/edit-portfolio.php`
- [Template selection](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/templates.php): `user/templates.php`
- [Uploaded resumes](https://github.com/sudan-pandey/portfolio-forge/tree/main/uploads/resumes): `uploads/resumes`
- [Shared utilities](https://github.com/sudan-pandey/portfolio-forge/blob/main/includes/functions.php): `includes/functions.php`

### Publishing & display

- [Owner preview](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/preview.php): `user/preview.php`
- [Public portfolio router](https://github.com/sudan-pandey/portfolio-forge/blob/main/portfolio/view.php): `portfolio/view.php`
- [Five template renderers](https://github.com/sudan-pandey/portfolio-forge/tree/main/templates): `templates`
- [View analytics](https://github.com/sudan-pandey/portfolio-forge/blob/main/user/statistics.php): `user/statistics.php`

### Administration

- [Admin metrics](https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/dashboard.php): `admin/dashboard.php`
- [User management](https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/users.php): `admin/users.php`
- [Template management](https://github.com/sudan-pandey/portfolio-forge/blob/main/admin/templates.php): `admin/templates.php`

### Other components

- **Visitor**
- **Portfolio user**
- **Administrator**
- [Application database](https://github.com/sudan-pandey/portfolio-forge/blob/main/config/database.php): `config/database.php`
- **pdftotext**

## Connections

- Portfolio user → Registration: creates account
- Portfolio user → User login: signs in
- Administrator → Admin access guard: requests access
- Registration → Application database: stores account
- User login → Application database: checks credentials
- User access guard → Application database: checks account status
- Admin access guard → Application database: checks admin
- Portfolio user → User dashboard: manages portfolio
- User dashboard → User access guard: requires login
- Resume import → Shared utilities: uses extraction helpers
- Resume import → Uploaded resumes: stores upload
- Resume import → Application database: saves resume data
- Shared utilities → pdftotext: extracts PDF text
- Section editor → Application database: saves sections
- Profile editor → Application database: saves profile
- Portfolio settings → Application database: saves settings
- Template selection → Application database: updates selection
- Owner preview → Public portfolio router: loads preview
- Owner preview → Application database: gets portfolio
- Visitor → Public portfolio router: opens portfolio
- Public portfolio router → Application database: loads portfolio data
- Public portfolio router → Five template renderers: renders selected design
- Public portfolio router → Application database: records public visit
- Portfolio user → View analytics: views analytics
- View analytics → Application database: reads visit metrics
- Admin metrics → Application database: reads system metrics
- User management → Application database: manages accounts
- Template management → Application database: manages availability
- Administrator → Admin metrics: reviews metrics
- Administrator → User management: manages users
- Administrator → Template management: manages templates
- Portfolio user → User logout: ends session
