# claomike/dlf-voting-website architecture

> Architecture diagram of the GitHub repository claomike/dlf-voting-website, 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/claomike/dlf-voting-website
- Repository: https://github.com/claomike/dlf-voting-website

## Overview

DLF Voting is an internal voting website. Users sign in, view voting status and available options, then cast or review their vote; administrators manage the vote, options, users, administrator accounts, and voting availability, and review vote totals. The frontend calls an ASP.NET API backed by PostgreSQL. The README establishes the two-part application; sampled frontend hooks and backend controllers support the shown request paths. Several controller and auth implementations were not sampled, so uncertain internal wiring is omitted.

Main entry points: [`frontend/src/App.tsx`](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/App.tsx) (Routes and layout), [`backend/src/DlfVoting.Infrastructure/DlfVotingDbContext.cs`](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Infrastructure/DlfVotingDbContext.cs) (EF data access), [`frontend/src/pages/Welcome/useVotingData.ts`](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/Welcome/useVotingData.ts) (Voting data hook), [`backend/src/DlfVoting.Api/Controllers/VotingOptionsController.cs`](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/VotingOptionsController.cs) (Voting options API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Voting website"]
  node_app["Routes and layout<br/>[App.tsx]"]
  node_welcome["Voting page<br/>[Welcome.tsx]"]
  node_votingdata["Voting data hook<br/>[useVotingData.ts]"]
  node_userlogin["User login<br/>[UserLogin.tsx]"]
  node_adminlogin["Admin login<br/>[AdminLogin.tsx]"]
end

subgraph group_admin["Administration"]
  node_overview["Vote overview<br/>[AdminOverview.tsx]"]
  node_votesdata["Overview data hook<br/>[useVotesData.ts]"]
  node_users["User management<br/>[AdminUsers.tsx]"]
  node_useractions["User actions<br/>[useUserActions.ts]"]
  node_admins["Administrator management"]
  node_adminactions["Administrator actions"]
  node_options["Voting options management"]
  node_optionactions["Option actions"]
  node_settings["Voting settings page<br/>[AdminSettings.tsx]"]
  node_status["Voting status hook<br/>[useVotingStatus.ts]"]
end

subgraph group_api["API and identity"]
  node_authctx["Auth providers"]
  node_adminauthctx["Admin auth provider"]
  node_userauth["User authentication"]
  node_adminauth["Admin authentication"]
  node_votesapi["Votes API<br/>[VotesController.cs]"]
  node_usersapi["Users API<br/>[UsersController.cs]"]
  node_adminsapi["Administrators API"]
  node_optionsapi["Voting options API"]
  node_settingsapi["Settings API"]
end

subgraph group_data["Voting data"]
  node_dbcontext["EF data access"]
  node_votes["Votes<br/>[Vote.cs]"]
  node_userentity["Users<br/>[User.cs]"]
  node_adminentity["Administrators<br/>[Administrator.cs]"]
  node_optionentity["Voting options<br/>[VotingOptions.cs]"]
  node_settingentity["Voting settings<br/>[VotingSettings.cs]"]
end

node_voter(("Voter"))
node_administrator(("Administrator"))
node_postgres[("PostgreSQL")]

node_voter -->|"uses"| node_app
node_administrator -->|"uses"| node_app
node_app -->|"routes"| node_welcome
node_app -->|"routes"| node_overview
node_app -->|"routes"| node_users
node_app -->|"routes"| node_admins
node_app -->|"routes"| node_options
node_app -->|"routes"| node_settings
node_app -->|"routes"| node_userlogin
node_app -->|"routes"| node_adminlogin
node_welcome -->|"loads data"| node_votingdata
node_votingdata -->|"requests"| node_votesapi
node_votingdata -->|"requests"| node_optionsapi
node_votingdata -->|"requests"| node_settingsapi
node_overview -->|"loads data"| node_votesdata
node_votesdata -->|"requests"| node_votesapi
node_votesdata -->|"requests"| node_optionsapi
node_users -->|"manages"| node_useractions
node_useractions -->|"requests"| node_usersapi
node_admins -->|"manages"| node_adminactions
node_adminactions -->|"requests"| node_adminsapi
node_options -->|"manages"| node_optionactions
node_optionactions -->|"requests"| node_optionsapi
node_settings -->|"loads status"| node_status
node_status -->|"requests"| node_settingsapi
node_userlogin -->|"uses"| node_authctx
node_adminlogin -->|"uses"| node_adminauthctx
node_userauth -->|"reads and writes"| node_dbcontext
node_adminauth -->|"reads and writes"| node_dbcontext
node_votesapi -->|"queries and saves"| node_dbcontext
node_usersapi -->|"queries and saves"| node_dbcontext
node_adminsapi -->|"queries and saves"| node_dbcontext
node_optionsapi -->|"queries and saves"| node_dbcontext
node_settingsapi -->|"queries and saves"| node_dbcontext
node_dbcontext -->|"persists"| node_postgres

click node_app "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/App.tsx"
click node_welcome "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/Welcome/Welcome.tsx"
click node_votingdata "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/Welcome/useVotingData.ts"
click node_userlogin "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/UserLogin.tsx"
click node_adminlogin "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/AdminLogin.tsx"
click node_overview "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminOverview/AdminOverview.tsx"
click node_votesdata "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminOverview/useVotesData.ts"
click node_users "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminUsers/AdminUsers.tsx"
click node_useractions "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminUsers/useUserActions.ts"
click node_admins "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminAdministrators/AdminAdministrators.tsx"
click node_adminactions "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminAdministrators/useAdministratorActions.ts"
click node_options "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminVotingOptions/AdminVotingOptions.tsx"
click node_optionactions "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminVotingOptions/useVotingOptionActions.ts"
click node_settings "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminSettings/AdminSettings.tsx"
click node_status "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminSettings/useVotingStatus.ts"
click node_authctx "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/context/UserAuthContext.tsx"
click node_adminauthctx "https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/context/AdminAuthContext.tsx"
click node_userauth "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/UserAuthController.cs"
click node_adminauth "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/AdminAuthController.cs"
click node_votesapi "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/VotesController.cs"
click node_usersapi "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/UsersController.cs"
click node_adminsapi "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/AdministratorsController.cs"
click node_optionsapi "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/VotingOptionsController.cs"
click node_settingsapi "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/SettingsController.cs"
click node_dbcontext "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Infrastructure/DlfVotingDbContext.cs"
click node_votes "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/Vote.cs"
click node_userentity "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/User.cs"
click node_adminentity "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/Administrator.cs"
click node_optionentity "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/VotingOptions.cs"
click node_settingentity "https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/VotingSettings.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_app,node_welcome,node_votingdata,node_userlogin,node_adminlogin toneBlue
class node_overview,node_votesdata,node_users,node_useractions,node_admins,node_adminactions,node_options,node_optionactions,node_settings,node_status,node_postgres toneAmber
class node_authctx,node_adminauthctx,node_userauth,node_adminauth,node_votesapi,node_usersapi,node_adminsapi,node_optionsapi,node_settingsapi toneMint
class node_dbcontext,node_votes,node_userentity,node_adminentity,node_optionentity,node_settingentity toneRose
class node_voter,node_administrator toneIndigo
```

## Components

### Voting website

- [Routes and layout](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Voting page](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/Welcome/Welcome.tsx): `frontend/src/pages/Welcome/Welcome.tsx`
- [Voting data hook](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/Welcome/useVotingData.ts): `frontend/src/pages/Welcome/useVotingData.ts`
- [User login](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/UserLogin.tsx): `frontend/src/pages/UserLogin.tsx`
- [Admin login](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/AdminLogin.tsx): `frontend/src/pages/AdminLogin.tsx`

### Administration

- [Vote overview](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminOverview/AdminOverview.tsx): `frontend/src/pages/admin/AdminOverview/AdminOverview.tsx`
- [Overview data hook](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminOverview/useVotesData.ts): `frontend/src/pages/admin/AdminOverview/useVotesData.ts`
- [User management](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminUsers/AdminUsers.tsx): `frontend/src/pages/admin/AdminUsers/AdminUsers.tsx`
- [User actions](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminUsers/useUserActions.ts): `frontend/src/pages/admin/AdminUsers/useUserActions.ts`
- [Administrator management](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminAdministrators/AdminAdministrators.tsx): `frontend/src/pages/admin/AdminAdministrators/AdminAdministrators.tsx`
- [Administrator actions](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminAdministrators/useAdministratorActions.ts): `frontend/src/pages/admin/AdminAdministrators/useAdministratorActions.ts`
- [Voting options management](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminVotingOptions/AdminVotingOptions.tsx): `frontend/src/pages/admin/AdminVotingOptions/AdminVotingOptions.tsx`
- [Option actions](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminVotingOptions/useVotingOptionActions.ts): `frontend/src/pages/admin/AdminVotingOptions/useVotingOptionActions.ts`
- [Voting settings page](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminSettings/AdminSettings.tsx): `frontend/src/pages/admin/AdminSettings/AdminSettings.tsx`
- [Voting status hook](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/pages/admin/AdminSettings/useVotingStatus.ts): `frontend/src/pages/admin/AdminSettings/useVotingStatus.ts`

### API and identity

- [Auth providers](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/context/UserAuthContext.tsx): `frontend/src/context/UserAuthContext.tsx`
- [Admin auth provider](https://github.com/claomike/dlf-voting-website/blob/develop/frontend/src/context/AdminAuthContext.tsx): `frontend/src/context/AdminAuthContext.tsx`
- [User authentication](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/UserAuthController.cs): `backend/src/DlfVoting.Api/Controllers/UserAuthController.cs`
- [Admin authentication](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/AdminAuthController.cs): `backend/src/DlfVoting.Api/Controllers/AdminAuthController.cs`
- [Votes API](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/VotesController.cs): `backend/src/DlfVoting.Api/Controllers/VotesController.cs`
- [Users API](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/UsersController.cs): `backend/src/DlfVoting.Api/Controllers/UsersController.cs`
- [Administrators API](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/AdministratorsController.cs): `backend/src/DlfVoting.Api/Controllers/AdministratorsController.cs`
- [Voting options API](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/VotingOptionsController.cs): `backend/src/DlfVoting.Api/Controllers/VotingOptionsController.cs`
- [Settings API](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Api/Controllers/SettingsController.cs): `backend/src/DlfVoting.Api/Controllers/SettingsController.cs`

### Voting data

- [EF data access](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Infrastructure/DlfVotingDbContext.cs): `backend/src/DlfVoting.Infrastructure/DlfVotingDbContext.cs`
- [Votes](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/Vote.cs): `backend/src/DlfVoting.Domain/Vote.cs`
- [Users](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/User.cs): `backend/src/DlfVoting.Domain/User.cs`
- [Administrators](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/Administrator.cs): `backend/src/DlfVoting.Domain/Administrator.cs`
- [Voting options](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/VotingOptions.cs): `backend/src/DlfVoting.Domain/VotingOptions.cs`
- [Voting settings](https://github.com/claomike/dlf-voting-website/blob/develop/backend/src/DlfVoting.Domain/VotingSettings.cs): `backend/src/DlfVoting.Domain/VotingSettings.cs`

### Other components

- **Voter**
- **Administrator**
- **PostgreSQL**

## Connections

- Voter → Routes and layout: uses
- Administrator → Routes and layout: uses
- Routes and layout → Voting page: routes
- Routes and layout → Vote overview: routes
- Routes and layout → User management: routes
- Routes and layout → Administrator management: routes
- Routes and layout → Voting options management: routes
- Routes and layout → Voting settings page: routes
- Routes and layout → User login: routes
- Routes and layout → Admin login: routes
- Voting page → Voting data hook: loads data
- Voting data hook → Votes API: requests
- Voting data hook → Voting options API: requests
- Voting data hook → Settings API: requests
- Vote overview → Overview data hook: loads data
- Overview data hook → Votes API: requests
- Overview data hook → Voting options API: requests
- User management → User actions: manages
- User actions → Users API: requests
- Administrator management → Administrator actions: manages
- Administrator actions → Administrators API: requests
- Voting options management → Option actions: manages
- Option actions → Voting options API: requests
- Voting settings page → Voting status hook: loads status
- Voting status hook → Settings API: requests
- User login → Auth providers: uses
- Admin login → Admin auth provider: uses
- User authentication → EF data access: reads and writes
- Admin authentication → EF data access: reads and writes
- Votes API → EF data access: queries and saves
- Users API → EF data access: queries and saves
- Administrators API → EF data access: queries and saves
- Voting options API → EF data access: queries and saves
- Settings API → EF data access: queries and saves
- EF data access → PostgreSQL: persists
