# maxim-coder-arch/personal-website architecture

> Architecture diagram of the GitHub repository maxim-coder-arch/personal-website, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/maxim-coder-arch/personal-website
- Repository: https://github.com/maxim-coder-arch/personal-website

## Overview

This is a personal portfolio website with an administrative backend: visitors browse project and article content, while an administrator manages content and reviews audience analytics. The backend also collects and aggregates visit data, and the frontend provides the public pages, admin views, and analytics tracker. The README contains no product description, and most frontend wiring and the analytics ingestion controller were not sampled; those relationships are therefore omitted or marked unverified rather than asserted as confirmed calls.

Main entry points: [`backend/backend/Data/ApplicationDBContext.cs`](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Data/ApplicationDBContext.cs) (Application database), [`frontend/src/(views)`](https://github.com/maxim-coder-arch/personal-website/tree/main/frontend/src/(views)) (Portfolio pages), [`frontend/src/(views)/articles-page/ui/layer/articles-page.tsx`](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/articles-page/ui/layer/articles-page.tsx) (Articles pages), [`backend/backend/Controllers/Admin/AdminAnalyticsController.cs`](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/Admin/AdminAnalyticsController.cs) (Analytics endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public Portfolio"]
  node_public_pages["Portfolio pages"]
  node_projects_page["Projects page<br/>[projects-page.tsx]"]
  node_articles_page["Articles pages<br/>[articles-page.tsx]"]
  node_article_reader["Article reader"]
  node_tracker["Analytics tracker<br/>[tracker.ts]"]
end

subgraph group_admin["Admin Experience"]
  node_admin_login["Admin login"]
  node_admin_dashboard["Analytics dashboard<br/>[admin-page.tsx]"]
  node_audience_view["Audience view"]
  node_admin_auth_api["Admin auth client<br/>[admin-auth-api.ts]"]
  node_analytics_client["Analytics client<br/>[analytics-api.ts]"]
end

subgraph group_api["Backend API"]
  node_content_api["Content endpoints"]
  node_projects_api["Project endpoints"]
  node_auth_api["Admin auth endpoints"]
  node_analytics_api["Analytics endpoints"]
end

subgraph group_data["Persistence and Analytics"]
  node_analytics_collector["Analytics collector"]
  node_analytics_reader["Analytics reader<br/>[AnalyticsReader.cs]"]
  node_geo_locator["Geolocation lookup<br/>[GeoLocator.cs]"]
  node_seed_data["Development data seeder<br/>[DevDataSeeder.cs]"]
  node_database[("Application database")]
end

node_visitor(("Site visitor"))
node_administrator(("Administrator"))

node_visitor -.->|"browses"| node_public_pages
node_public_pages -.->|"shows projects"| node_projects_page
node_public_pages -.->|"shows articles"| node_articles_page
node_articles_page -.->|"opens article"| node_article_reader
node_public_pages -.->|"tracks visits"| node_tracker
node_tracker -.->|"sends events"| node_analytics_collector
node_projects_page -.->|"requests projects"| node_projects_api
node_articles_page -.->|"requests articles"| node_content_api
node_administrator -.->|"signs in"| node_admin_login
node_admin_login -.->|"submits credentials"| node_admin_auth_api
node_admin_auth_api -.->|"calls"| node_auth_api
node_administrator -.->|"reviews metrics"| node_admin_dashboard
node_administrator -.->|"reviews audience"| node_audience_view
node_admin_dashboard -.->|"requests metrics"| node_analytics_client
node_audience_view -.->|"requests audience"| node_analytics_client
node_analytics_client -.->|"calls"| node_analytics_api
node_content_api -->|"reads and writes"| node_database
node_projects_api -->|"reads and writes"| node_database
node_auth_api -->|"reads and writes"| node_database
node_analytics_api -->|"queries"| node_analytics_reader
node_analytics_api -->|"seeds data"| node_seed_data
node_analytics_reader -->|"reads analytics"| node_database
node_seed_data -->|"writes sample data"| node_database

click node_public_pages "https://github.com/maxim-coder-arch/personal-website/tree/main/frontend/src/(views)"
click node_projects_page "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/projects-page/ui/layer/projects-page.tsx"
click node_articles_page "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/articles-page/ui/layer/articles-page.tsx"
click node_article_reader "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/widgets/sections/article-page/article-reader/ui/layer/article-page-reader.tsx"
click node_tracker "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/features/analytics-tracker/lib/helpers/tracker.ts"
click node_admin_login "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/features/admin-auth/ui/layer/admin-login-form.tsx"
click node_admin_dashboard "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/admin-page/ui/layer/admin-page.tsx"
click node_audience_view "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/admin-audience-page/ui/layer/admin-audience-page.tsx"
click node_admin_auth_api "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/entities/api/admin-auth/admin-auth-api.ts"
click node_analytics_client "https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/entities/api/analytics/analytics-api.ts"
click node_content_api "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/ArticlesController.cs"
click node_projects_api "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/ProjectsController.cs"
click node_auth_api "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/Admin/AdminAuthController.cs"
click node_analytics_api "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/Admin/AdminAnalyticsController.cs"
click node_analytics_collector "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/AnalyticsCollector.cs"
click node_analytics_reader "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/AnalyticsReader.cs"
click node_geo_locator "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/GeoLocator.cs"
click node_seed_data "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Dtos/Analytics/DevDataSeeder.cs"
click node_database "https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Data/ApplicationDBContext.cs"

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_public_pages,node_projects_page,node_articles_page,node_article_reader,node_tracker toneBlue
class node_admin_login,node_admin_dashboard,node_audience_view,node_admin_auth_api,node_analytics_client toneAmber
class node_content_api,node_projects_api,node_auth_api,node_analytics_api toneMint
class node_analytics_collector,node_analytics_reader,node_geo_locator,node_seed_data,node_database toneRose
class node_visitor,node_administrator toneIndigo
```

## Components

### Public Portfolio

- [Portfolio pages](https://github.com/maxim-coder-arch/personal-website/tree/main/frontend/src/(views)): `frontend/src/(views)`
- [Projects page](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/projects-page/ui/layer/projects-page.tsx): `frontend/src/(views)/projects-page/ui/layer/projects-page.tsx`
- [Articles pages](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/articles-page/ui/layer/articles-page.tsx): `frontend/src/(views)/articles-page/ui/layer/articles-page.tsx`
- [Article reader](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/widgets/sections/article-page/article-reader/ui/layer/article-page-reader.tsx): `frontend/src/widgets/sections/article-page/article-reader/ui/layer/article-page-reader.tsx`
- [Analytics tracker](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/features/analytics-tracker/lib/helpers/tracker.ts): `frontend/src/features/analytics-tracker/lib/helpers/tracker.ts`

### Admin Experience

- [Admin login](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/features/admin-auth/ui/layer/admin-login-form.tsx): `frontend/src/features/admin-auth/ui/layer/admin-login-form.tsx`
- [Analytics dashboard](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/admin-page/ui/layer/admin-page.tsx): `frontend/src/(views)/admin-page/ui/layer/admin-page.tsx`
- [Audience view](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/(views)/admin-audience-page/ui/layer/admin-audience-page.tsx): `frontend/src/(views)/admin-audience-page/ui/layer/admin-audience-page.tsx`
- [Admin auth client](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/entities/api/admin-auth/admin-auth-api.ts): `frontend/src/entities/api/admin-auth/admin-auth-api.ts`
- [Analytics client](https://github.com/maxim-coder-arch/personal-website/blob/main/frontend/src/entities/api/analytics/analytics-api.ts): `frontend/src/entities/api/analytics/analytics-api.ts`

### Backend API

- [Content endpoints](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/ArticlesController.cs): `backend/backend/Controllers/ArticlesController.cs`
- [Project endpoints](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/ProjectsController.cs): `backend/backend/Controllers/ProjectsController.cs`
- [Admin auth endpoints](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/Admin/AdminAuthController.cs): `backend/backend/Controllers/Admin/AdminAuthController.cs`
- [Analytics endpoints](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Controllers/Admin/AdminAnalyticsController.cs): `backend/backend/Controllers/Admin/AdminAnalyticsController.cs`

### Persistence and Analytics

- [Analytics collector](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/AnalyticsCollector.cs): `backend/backend/Services/Analytics/AnalyticsCollector.cs`
- [Analytics reader](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/AnalyticsReader.cs): `backend/backend/Services/Analytics/AnalyticsReader.cs`
- [Geolocation lookup](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Services/Analytics/GeoLocator.cs): `backend/backend/Services/Analytics/GeoLocator.cs`
- [Development data seeder](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Dtos/Analytics/DevDataSeeder.cs): `backend/backend/Dtos/Analytics/DevDataSeeder.cs`
- [Application database](https://github.com/maxim-coder-arch/personal-website/blob/main/backend/backend/Data/ApplicationDBContext.cs): `backend/backend/Data/ApplicationDBContext.cs`

### Other components

- **Site visitor**
- **Administrator**

## Connections

- Site visitor → Portfolio pages: browses
- Portfolio pages → Projects page: shows projects
- Portfolio pages → Articles pages: shows articles
- Articles pages → Article reader: opens article
- Portfolio pages → Analytics tracker: tracks visits
- Analytics tracker → Analytics collector: sends events
- Projects page → Project endpoints: requests projects
- Articles pages → Content endpoints: requests articles
- Administrator → Admin login: signs in
- Admin login → Admin auth client: submits credentials
- Admin auth client → Admin auth endpoints: calls
- Administrator → Analytics dashboard: reviews metrics
- Administrator → Audience view: reviews audience
- Analytics dashboard → Analytics client: requests metrics
- Audience view → Analytics client: requests audience
- Analytics client → Analytics endpoints: calls
- Content endpoints → Application database: reads and writes (evidence: `backend/backend/Controllers/ArticlesController.cs`)
- Project endpoints → Application database: reads and writes (evidence: `backend/backend/Controllers/ProjectsController.cs`)
- Admin auth endpoints → Application database: reads and writes (evidence: `backend/backend/Controllers/Admin/AdminAuthController.cs`)
- Analytics endpoints → Analytics reader: queries (evidence: `backend/backend/Controllers/Admin/AdminAnalyticsController.cs`)
- Analytics endpoints → Development data seeder: seeds data (evidence: `backend/backend/Controllers/Admin/AdminAnalyticsController.cs`)
- Analytics reader → Application database: reads analytics (evidence: `backend/backend/Services/Analytics/AnalyticsReader.cs`)
- Development data seeder → Application database: writes sample data (evidence: `backend/backend/Dtos/Analytics/DevDataSeeder.cs`)
