# olofs22/miniats architecture

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

- Interactive diagram: https://gitdiagram.com/olofs22/miniats
- Repository: https://github.com/olofs22/miniats

## Overview

MiniAts is a multi-organization applicant tracking system with an Angular client and ASP.NET Core API. Users sign in, reach a guarded dashboard, and use authenticated API endpoints for jobs and candidates; organization claims scope access. The domain includes profiles, organizations, candidates, jobs, and applications. The source index confirms the candidate and profile APIs and claim transformation, but their implementation details are not excerpted; application-stage management is represented in the domain model, with no application API shown in the tree. No README was provided.

Main entry points: [`MiniAts.Api/Data/MiniAtsDbContext.cs`](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Data/MiniAtsDbContext.cs) (Entity context), [`MiniAts.Api/Program.cs`](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Program.cs) (ASP.NET API), [`MiniAts.Api/Entities/Organization.cs`](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Organization.cs) (Organizations), [`MiniAts.Api/Entities/Application.cs`](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Application.cs) (Applications and stages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_login["Login view<br/>[login.ts]"]
  node_dashboard["Dashboard<br/>[dashboard.ts]"]
  node_routes["Route guards<br/>[app.routes.ts]"]
  node_auth_service["Session service<br/>[auth.service.ts]"]
end

subgraph group_api["API"]
  node_api_host["ASP.NET API<br/>[Program.cs]"]
  node_jobs_api["Jobs API<br/>[JobsController.cs]"]
  node_candidates_api["Candidates API"]
  node_me_api["Profile API<br/>[MeController.cs]"]
end

subgraph group_security["Authentication and access"]
  node_claims["Profile claims"]
  node_org_access["Organization access"]
end

subgraph group_data["ATS domain and persistence"]
  node_dbcontext["Entity context"]
  node_organization["Organizations<br/>[Organization.cs]"]
  node_profile["Profiles and roles<br/>[Profile.cs]"]
  node_job["Jobs<br/>[Job.cs]"]
  node_candidate["Candidates<br/>[Candidate.cs]"]
  node_application["Applications and stages<br/>[Application.cs]"]
end

node_user(("Recruiter"))
node_supabase["Supabase Auth"]
node_postgres[("PostgreSQL")]

node_user -->|"signs in"| node_login
node_user -->|"opens"| node_dashboard
node_routes -->|"routes to"| node_login
node_routes -->|"guards route"| node_dashboard
node_login -->|"uses"| node_auth_service
node_auth_service -->|"authenticates with"| node_supabase
node_api_host -->|"registers"| node_claims
node_api_host -->|"registers"| node_org_access
node_api_host -->|"configures"| node_dbcontext
node_api_host -->|"connects to"| node_postgres
node_jobs_api -->|"resolves scope"| node_org_access
node_jobs_api -->|"reads and writes"| node_dbcontext
node_candidates_api -->|"uses"| node_dbcontext
node_me_api -->|"returns profile claims"| node_profile
node_claims -->|"loads profile"| node_dbcontext
node_dbcontext -->|"models"| node_organization
node_dbcontext -->|"models"| node_profile
node_dbcontext -->|"models"| node_job
node_dbcontext -->|"models"| node_candidate
node_dbcontext -->|"models"| node_application
node_profile -->|"belongs to"| node_organization
node_job -->|"belongs to"| node_organization
node_candidate -->|"belongs to"| node_organization
node_application -->|"links candidate"| node_candidate
node_application -->|"links job"| node_job

click node_login "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/features/auth/login/login.ts"
click node_dashboard "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/features/dashboard/dashboard.ts"
click node_routes "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/app.routes.ts"
click node_auth_service "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/core/auth/auth.service.ts"
click node_api_host "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Program.cs"
click node_jobs_api "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/JobsController.cs"
click node_candidates_api "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/CandidatesController.cs"
click node_me_api "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/MeController.cs"
click node_claims "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Auth/ProfileClaimsTransformation.cs"
click node_org_access "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Auth/OrgAccessService.cs"
click node_dbcontext "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Data/MiniAtsDbContext.cs"
click node_organization "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Organization.cs"
click node_profile "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Profile.cs"
click node_job "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Job.cs"
click node_candidate "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Candidate.cs"
click node_application "https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Application.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_login,node_dashboard,node_routes,node_auth_service toneBlue
class node_api_host,node_jobs_api,node_candidates_api,node_me_api,node_postgres toneAmber
class node_claims,node_org_access toneMint
class node_dbcontext,node_organization,node_profile,node_job,node_candidate,node_application toneRose
class node_user,node_supabase toneIndigo
```

## Components

### Web client

- [Login view](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/features/auth/login/login.ts): `MiniAts.Api/web/src/app/features/auth/login/login.ts`
- [Dashboard](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/features/dashboard/dashboard.ts): `MiniAts.Api/web/src/app/features/dashboard/dashboard.ts`
- [Route guards](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/app.routes.ts): `MiniAts.Api/web/src/app/app.routes.ts`
- [Session service](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/web/src/app/core/auth/auth.service.ts): `MiniAts.Api/web/src/app/core/auth/auth.service.ts`

### API

- [ASP.NET API](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Program.cs): `MiniAts.Api/Program.cs`
- [Jobs API](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/JobsController.cs): `MiniAts.Api/Controllers/JobsController.cs`
- [Candidates API](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/CandidatesController.cs): `MiniAts.Api/Controllers/CandidatesController.cs`
- [Profile API](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Controllers/MeController.cs): `MiniAts.Api/Controllers/MeController.cs`

### Authentication and access

- [Profile claims](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Auth/ProfileClaimsTransformation.cs): `MiniAts.Api/Auth/ProfileClaimsTransformation.cs`
- [Organization access](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Auth/OrgAccessService.cs): `MiniAts.Api/Auth/OrgAccessService.cs`

### ATS domain and persistence

- [Entity context](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Data/MiniAtsDbContext.cs): `MiniAts.Api/Data/MiniAtsDbContext.cs`
- [Organizations](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Organization.cs): `MiniAts.Api/Entities/Organization.cs`
- [Profiles and roles](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Profile.cs): `MiniAts.Api/Entities/Profile.cs`
- [Jobs](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Job.cs): `MiniAts.Api/Entities/Job.cs`
- [Candidates](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Candidate.cs): `MiniAts.Api/Entities/Candidate.cs`
- [Applications and stages](https://github.com/olofs22/miniats/blob/master/MiniAts.Api/Entities/Application.cs): `MiniAts.Api/Entities/Application.cs`

### Other components

- **Recruiter**
- **Supabase Auth**
- **PostgreSQL**

## Connections

- Recruiter → Login view: signs in
- Recruiter → Dashboard: opens
- Route guards → Login view: routes to (evidence: `MiniAts.Api/web/src/app/app.routes.ts`)
- Route guards → Dashboard: guards route (evidence: `MiniAts.Api/web/src/app/app.routes.ts`)
- Login view → Session service: uses (evidence: `MiniAts.Api/web/src/app/features/auth/login/login.ts`)
- Session service → Supabase Auth: authenticates with (evidence: `MiniAts.Api/web/src/app/core/auth/auth.service.ts`)
- ASP.NET API → Profile claims: registers (evidence: `MiniAts.Api/Program.cs`)
- ASP.NET API → Organization access: registers (evidence: `MiniAts.Api/Program.cs`)
- ASP.NET API → Entity context: configures (evidence: `MiniAts.Api/Program.cs`)
- ASP.NET API → PostgreSQL: connects to (evidence: `MiniAts.Api/Program.cs`)
- Jobs API → Organization access: resolves scope (evidence: `MiniAts.Api/Controllers/JobsController.cs`)
- Jobs API → Entity context: reads and writes (evidence: `MiniAts.Api/Controllers/JobsController.cs`)
- Candidates API → Entity context: uses (evidence: `MiniAts.Api/Controllers/CandidatesController.cs`)
- Profile API → Profiles and roles: returns profile claims (evidence: `MiniAts.Api/Controllers/MeController.cs`)
- Profile claims → Entity context: loads profile (evidence: `MiniAts.Api/Auth/ProfileClaimsTransformation.cs`)
- Entity context → Organizations: models (evidence: `MiniAts.Api/Data/MiniAtsDbContext.cs`)
- Entity context → Profiles and roles: models (evidence: `MiniAts.Api/Data/MiniAtsDbContext.cs`)
- Entity context → Jobs: models (evidence: `MiniAts.Api/Data/MiniAtsDbContext.cs`)
- Entity context → Candidates: models (evidence: `MiniAts.Api/Data/MiniAtsDbContext.cs`)
- Entity context → Applications and stages: models (evidence: `MiniAts.Api/Data/MiniAtsDbContext.cs`)
- Profiles and roles → Organizations: belongs to (evidence: `MiniAts.Api/Entities/Profile.cs`)
- Jobs → Organizations: belongs to (evidence: `MiniAts.Api/Entities/Job.cs`)
- Candidates → Organizations: belongs to (evidence: `MiniAts.Api/Entities/Candidate.cs`)
- Applications and stages → Candidates: links candidate (evidence: `MiniAts.Api/Entities/Application.cs`)
- Applications and stages → Jobs: links job (evidence: `MiniAts.Api/Entities/Application.cs`)
