# michiokazuo/interview-platform architecture

> Architecture diagram of the GitHub repository michiokazuo/interview-platform, 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/michiokazuo/interview-platform
- Repository: https://github.com/michiokazuo/interview-platform

## Overview

Interview Platform supports candidates and businesses with recruitment content, interview management and practice, and project and hiring-process management. Users enter through the web app, authenticate or register, then use the platform’s domain APIs; interview services can provision Daily.co rooms and question tests. Administrators can also initiate Stack Overflow crawling, with results handled asynchronously. The graph emphasizes documented capabilities and sampled controller/service/model relationships; several listed subsystems were not sampled, so their internal links are omitted rather than inferred.

Main entry points: [`routes/api.php`](https://github.com/michiokazuo/interview-platform/blob/master/routes/api.php) (Laravel API), [`app/Services/Interview/InterviewServiceImpl.php`](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/Interview/InterviewServiceImpl.php) (Interview service), [`app/Http/Controllers/AuthController.php`](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/AuthController.php) (Authentication), [`app/Services/User/UserServiceImpl.php`](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/User/UserServiceImpl.php) (User service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_webapp["Interview web app<br/>[App.vue]"]
  node_api["Laravel API<br/>[api.php]"]
end

subgraph group_identity["Accounts and profiles"]
  node_auth["Authentication<br/>[AuthController.php]"]
  node_user_service["User service"]
  node_user_model[("User accounts<br/>[User.php]")]
  node_user_resource["User representation<br/>[UserResource.php]"]
end

subgraph group_hiring["Recruitment and interviews"]
  node_blog["Recruitment articles<br/>[BlogController.php]"]
  node_news["Recruitment news"]
  node_news_service["News service"]
  node_news_model[("Recruitment news data")]
  node_projects["Projects and processes"]
  node_interviews["Interview management"]
  node_interview_service["Interview service"]
  node_interview_model[("Interview records<br/>[Interview.php]")]
  node_practice["Question practice"]
end

subgraph group_operations["Admin and integrations"]
  node_admin["Administration"]
  node_crawler["Stack Overflow crawler"]
  node_crawl_job["Crawl job<br/>[CrawlData.php]"]
  node_mail["Mail service"]
end

node_candidate(("Candidate"))
node_business(("Business"))
node_dailyco{{"Daily.co"}}
node_stackoverflow{{"Stack Overflow"}}

node_candidate -->|"uses"| node_webapp
node_business -->|"uses"| node_webapp
node_webapp -.->|"requests"| node_api
node_api -.->|"routes to"| node_auth
node_auth -->|"calls"| node_user_service
node_user_service -->|"uses"| node_user_model
node_auth -->|"formats user"| node_user_resource
node_api -.->|"routes to"| node_news
node_news -->|"calls"| node_news_service
node_news_service -->|"uses"| node_news_model
node_api -.->|"routes to"| node_interviews
node_interviews -->|"calls"| node_interview_service
node_interview_service -->|"reads/writes"| node_interview_model
node_interview_service -->|"provisions rooms"| node_dailyco
node_interview_service -->|"creates test"| node_practice
node_candidate -->|"applies or practices"| node_interviews
node_business -->|"manages hiring"| node_projects
node_business -->|"posts vacancies"| node_news
node_candidate -->|"reads articles"| node_blog
node_admin -->|"initiates crawl"| node_crawler
node_crawler -.->|"dispatches"| node_crawl_job
node_crawl_job -->|"fetches questions"| node_stackoverflow
node_user_service -.->|"sends notifications"| node_mail

click node_webapp "https://github.com/michiokazuo/interview-platform/blob/master/resources/js/src/App.vue"
click node_api "https://github.com/michiokazuo/interview-platform/blob/master/routes/api.php"
click node_auth "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/AuthController.php"
click node_user_service "https://github.com/michiokazuo/interview-platform/blob/master/app/Services/User/UserServiceImpl.php"
click node_user_model "https://github.com/michiokazuo/interview-platform/blob/master/app/Models/User.php"
click node_user_resource "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Resources/User/UserResource.php"
click node_blog "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/BlogController.php"
click node_news "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/RecruitmentNewsController.php"
click node_news_service "https://github.com/michiokazuo/interview-platform/blob/master/app/Services/RNews/NewsServiceImpl.php"
click node_news_model "https://github.com/michiokazuo/interview-platform/blob/master/app/Models/RecruitmentNews.php"
click node_projects "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/ProjectController.php"
click node_interviews "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/InterviewController.php"
click node_interview_service "https://github.com/michiokazuo/interview-platform/blob/master/app/Services/Interview/InterviewServiceImpl.php"
click node_interview_model "https://github.com/michiokazuo/interview-platform/blob/master/app/Models/Interview.php"
click node_practice "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/GroupQuestionController.php"
click node_admin "https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/AdminController.php"
click node_crawler "https://github.com/michiokazuo/interview-platform/blob/master/app/Console/Commands/CrawlDataStackOverflow.php"
click node_crawl_job "https://github.com/michiokazuo/interview-platform/blob/master/app/Jobs/CrawlData.php"
click node_mail "https://github.com/michiokazuo/interview-platform/blob/master/app/Services/Mail/MailServiceImpl.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_webapp,node_api toneBlue
class node_auth,node_user_service,node_user_model,node_user_resource toneAmber
class node_blog,node_news,node_news_service,node_news_model,node_projects,node_interviews,node_interview_service,node_interview_model,node_practice toneMint
class node_admin,node_crawler,node_crawl_job,node_mail toneRose
class node_candidate,node_business,node_dailyco,node_stackoverflow toneIndigo
```

## Components

### Web client

- [Interview web app](https://github.com/michiokazuo/interview-platform/blob/master/resources/js/src/App.vue): `resources/js/src/App.vue`
- [Laravel API](https://github.com/michiokazuo/interview-platform/blob/master/routes/api.php): `routes/api.php`

### Accounts and profiles

- [Authentication](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/AuthController.php): `app/Http/Controllers/AuthController.php`
- [User service](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/User/UserServiceImpl.php): `app/Services/User/UserServiceImpl.php`
- [User accounts](https://github.com/michiokazuo/interview-platform/blob/master/app/Models/User.php): `app/Models/User.php`
- [User representation](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Resources/User/UserResource.php): `app/Http/Resources/User/UserResource.php`

### Recruitment and interviews

- [Recruitment articles](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/BlogController.php): `app/Http/Controllers/API/BlogController.php`
- [Recruitment news](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/RecruitmentNewsController.php): `app/Http/Controllers/API/RecruitmentNewsController.php`
- [News service](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/RNews/NewsServiceImpl.php): `app/Services/RNews/NewsServiceImpl.php`
- [Recruitment news data](https://github.com/michiokazuo/interview-platform/blob/master/app/Models/RecruitmentNews.php): `app/Models/RecruitmentNews.php`
- [Projects and processes](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/ProjectController.php): `app/Http/Controllers/API/ProjectController.php`
- [Interview management](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/InterviewController.php): `app/Http/Controllers/API/InterviewController.php`
- [Interview service](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/Interview/InterviewServiceImpl.php): `app/Services/Interview/InterviewServiceImpl.php`
- [Interview records](https://github.com/michiokazuo/interview-platform/blob/master/app/Models/Interview.php): `app/Models/Interview.php`
- [Question practice](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/GroupQuestionController.php): `app/Http/Controllers/API/GroupQuestionController.php`

### Admin and integrations

- [Administration](https://github.com/michiokazuo/interview-platform/blob/master/app/Http/Controllers/API/AdminController.php): `app/Http/Controllers/API/AdminController.php`
- [Stack Overflow crawler](https://github.com/michiokazuo/interview-platform/blob/master/app/Console/Commands/CrawlDataStackOverflow.php): `app/Console/Commands/CrawlDataStackOverflow.php`
- [Crawl job](https://github.com/michiokazuo/interview-platform/blob/master/app/Jobs/CrawlData.php): `app/Jobs/CrawlData.php`
- [Mail service](https://github.com/michiokazuo/interview-platform/blob/master/app/Services/Mail/MailServiceImpl.php): `app/Services/Mail/MailServiceImpl.php`

### Other components

- **Candidate**
- **Business**
- **Daily.co**
- **Stack Overflow**

## Connections

- Candidate → Interview web app: uses
- Business → Interview web app: uses
- Interview web app → Laravel API: requests
- Laravel API → Authentication: routes to
- Authentication → User service: calls (evidence: `app/Http/Controllers/AuthController.php`)
- User service → User accounts: uses (evidence: `app/Services/User/UserServiceImpl.php`)
- Authentication → User representation: formats user (evidence: `app/Http/Controllers/AuthController.php`)
- Laravel API → Recruitment news: routes to
- Recruitment news → News service: calls (evidence: `app/Http/Controllers/API/RecruitmentNewsController.php`)
- News service → Recruitment news data: uses (evidence: `app/Services/RNews/NewsServiceImpl.php`)
- Laravel API → Interview management: routes to
- Interview management → Interview service: calls (evidence: `app/Http/Controllers/API/InterviewController.php`)
- Interview service → Interview records: reads/writes (evidence: `app/Services/Interview/InterviewServiceImpl.php`)
- Interview service → Daily.co: provisions rooms (evidence: `app/Services/Interview/InterviewServiceImpl.php`)
- Interview service → Question practice: creates test (evidence: `app/Services/Interview/InterviewServiceImpl.php`)
- Candidate → Interview management: applies or practices
- Business → Projects and processes: manages hiring
- Business → Recruitment news: posts vacancies
- Candidate → Recruitment articles: reads articles
- Administration → Stack Overflow crawler: initiates crawl
- Stack Overflow crawler → Crawl job: dispatches
- Crawl job → Stack Overflow: fetches questions
- User service → Mail service: sends notifications
