# arnikros-lab/r_web-site architecture

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

- Interactive diagram: https://gitdiagram.com/arnikros-lab/r_web-site
- Repository: https://github.com/arnikros-lab/r_web-site

## Overview

ARETORA VPN Web is a Blazor Server frontend for a VPN subscription service, paired with a Python FastAPI backend. Users browse public pages, authenticate, then manage subscriptions, devices, and referrals; administrators manage users, analytics, settings, and content workflows. The frontend’s service layer calls the backend API, while Redis supplies realtime notification events. The README documents several frontend areas whose source was not sampled, so those branches use supported directory paths; backend internals are represented only where the README explicitly describes them.

Main entry points: [`Services/ApiClient.cs`](https://github.com/arnikros-lab/r_web-site/blob/main/Services/ApiClient.cs) (API client), [`Components/Pages/Admin`](https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Admin) (Admin pages), [`Components/Pages/Account`](https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Account) (Account pages), [`Services/AuthService.cs`](https://github.com/arnikros-lab/r_web-site/blob/main/Services/AuthService.cs) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_public["Public pages"]
  node_browser(("Browser"))
  node_authpages["Auth pages"]
  node_supportbot["Support bot API"]
end

subgraph group_account["User account"]
  node_accountui["Account pages"]
  node_auth["Authentication<br/>[AuthService.cs]"]
  node_accountsvc["Account operations<br/>[AccountService.cs]"]
  node_accountstate["Account state<br/>[AccountState.cs]"]
end

subgraph group_admin["Administration"]
  node_adminui["Admin pages"]
  node_adminsvc["Admin operations<br/>[AdminService.cs]"]
  node_contentsvc["Content management"]
  node_ingestsvc["Article ingestion<br/>[IngestService.cs]"]
end

subgraph group_runtime["API and events"]
  node_tokenstore["Token store<br/>[TokenStore.cs]"]
  node_apiclient["API client<br/>[ApiClient.cs]"]
  node_fastapi["FastAPI backend"]
  node_redislistener["Redis listener"]
  node_notifications["Notification bus"]
  node_redis["Redis Streams"]
  node_postgres[("PostgreSQL")]
  node_wireguard["WireGuard"]
  node_yookassa["YooKassa"]
  node_telegram["Telegram Bot API"]
end

node_visitor(("Visitor"))

node_visitor -->|"browses"| node_public
node_visitor -->|"signs in"| node_authpages
node_browser -->|"uses"| node_accountui
node_browser -->|"uses"| node_adminui
node_authpages -->|"submits credentials"| node_auth
node_auth -->|"stores tokens"| node_tokenstore
node_auth -->|"requests auth"| node_apiclient
node_accountui -->|"requests account actions"| node_accountsvc
node_accountui -->|"reads state"| node_accountstate
node_accountsvc -->|"calls"| node_apiclient
node_adminui -->|"requests admin actions"| node_adminsvc
node_adminui -->|"manages content"| node_contentsvc
node_adminui -->|"manages ingestion"| node_ingestsvc
node_adminsvc -->|"calls"| node_apiclient
node_contentsvc -->|"calls"| node_apiclient
node_ingestsvc -->|"calls"| node_apiclient
node_apiclient -->|"reads tokens"| node_tokenstore
node_apiclient -->|"sends API requests"| node_fastapi
node_fastapi -->|"reads and writes"| node_postgres
node_fastapi -->|"uses queues and cache"| node_redis
node_fastapi -->|"manages VPN"| node_wireguard
node_fastapi -->|"processes payments"| node_yookassa
node_fastapi -->|"uses bot services"| node_telegram
node_redis -->|"streams events"| node_redislistener
node_redislistener -->|"publishes events"| node_notifications
node_notifications -->|"updates dashboard"| node_accountui
node_notifications -->|"notifies dashboard"| node_adminui
node_browser -.->|"chats via SSE"| node_supportbot

click node_public "https://github.com/arnikros-lab/r_web-site/tree/main/Pages"
click node_authpages "https://github.com/arnikros-lab/r_web-site/tree/main/Pages/Auth"
click node_accountui "https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Account"
click node_adminui "https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Admin"
click node_auth "https://github.com/arnikros-lab/r_web-site/blob/main/Services/AuthService.cs"
click node_accountsvc "https://github.com/arnikros-lab/r_web-site/blob/main/Services/AccountService.cs"
click node_accountstate "https://github.com/arnikros-lab/r_web-site/blob/main/Services/AccountState.cs"
click node_adminsvc "https://github.com/arnikros-lab/r_web-site/blob/main/Services/AdminService.cs"
click node_contentsvc "https://github.com/arnikros-lab/r_web-site/blob/main/Services/ContentBotService.cs"
click node_ingestsvc "https://github.com/arnikros-lab/r_web-site/blob/main/Services/IngestService.cs"
click node_tokenstore "https://github.com/arnikros-lab/r_web-site/blob/main/Services/TokenStore.cs"
click node_apiclient "https://github.com/arnikros-lab/r_web-site/blob/main/Services/ApiClient.cs"
click node_redislistener "https://github.com/arnikros-lab/r_web-site/blob/main/Services/RedisNotificationListener.cs"
click node_notifications "https://github.com/arnikros-lab/r_web-site/blob/main/Services/NotificationService.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,node_browser,node_authpages,node_supportbot toneBlue
class node_accountui,node_auth,node_accountsvc,node_accountstate toneAmber
class node_adminui,node_adminsvc,node_contentsvc,node_ingestsvc toneMint
class node_tokenstore,node_apiclient,node_fastapi,node_redislistener,node_notifications,node_redis,node_postgres,node_wireguard,node_yookassa,node_telegram toneRose
class node_visitor toneIndigo
```

## Components

### Web experience

- [Public pages](https://github.com/arnikros-lab/r_web-site/tree/main/Pages): `Pages`
- **Browser**
- [Auth pages](https://github.com/arnikros-lab/r_web-site/tree/main/Pages/Auth): `Pages/Auth`
- **Support bot API**

### User account

- [Account pages](https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Account): `Components/Pages/Account`
- [Authentication](https://github.com/arnikros-lab/r_web-site/blob/main/Services/AuthService.cs): `Services/AuthService.cs`
- [Account operations](https://github.com/arnikros-lab/r_web-site/blob/main/Services/AccountService.cs): `Services/AccountService.cs`
- [Account state](https://github.com/arnikros-lab/r_web-site/blob/main/Services/AccountState.cs): `Services/AccountState.cs`

### Administration

- [Admin pages](https://github.com/arnikros-lab/r_web-site/tree/main/Components/Pages/Admin): `Components/Pages/Admin`
- [Admin operations](https://github.com/arnikros-lab/r_web-site/blob/main/Services/AdminService.cs): `Services/AdminService.cs`
- [Content management](https://github.com/arnikros-lab/r_web-site/blob/main/Services/ContentBotService.cs): `Services/ContentBotService.cs`
- [Article ingestion](https://github.com/arnikros-lab/r_web-site/blob/main/Services/IngestService.cs): `Services/IngestService.cs`

### API and events

- [Token store](https://github.com/arnikros-lab/r_web-site/blob/main/Services/TokenStore.cs): `Services/TokenStore.cs`
- [API client](https://github.com/arnikros-lab/r_web-site/blob/main/Services/ApiClient.cs): `Services/ApiClient.cs`
- **FastAPI backend**
- [Redis listener](https://github.com/arnikros-lab/r_web-site/blob/main/Services/RedisNotificationListener.cs): `Services/RedisNotificationListener.cs`
- [Notification bus](https://github.com/arnikros-lab/r_web-site/blob/main/Services/NotificationService.cs): `Services/NotificationService.cs`
- **Redis Streams**
- **PostgreSQL**
- **WireGuard**
- **YooKassa**
- **Telegram Bot API**

### Other components

- **Visitor**

## Connections

- Visitor → Public pages: browses
- Visitor → Auth pages: signs in
- Browser → Account pages: uses
- Browser → Admin pages: uses
- Auth pages → Authentication: submits credentials
- Authentication → Token store: stores tokens
- Authentication → API client: requests auth
- Account pages → Account operations: requests account actions
- Account pages → Account state: reads state
- Account operations → API client: calls
- Admin pages → Admin operations: requests admin actions
- Admin pages → Content management: manages content
- Admin pages → Article ingestion: manages ingestion
- Admin operations → API client: calls
- Content management → API client: calls
- Article ingestion → API client: calls
- API client → Token store: reads tokens
- API client → FastAPI backend: sends API requests
- FastAPI backend → PostgreSQL: reads and writes
- FastAPI backend → Redis Streams: uses queues and cache
- FastAPI backend → WireGuard: manages VPN
- FastAPI backend → YooKassa: processes payments
- FastAPI backend → Telegram Bot API: uses bot services
- Redis Streams → Redis listener: streams events
- Redis listener → Notification bus: publishes events
- Notification bus → Account pages: updates dashboard
- Notification bus → Admin pages: notifies dashboard
- Browser → Support bot API: chats via SSE
