# shervinbdndev/hoshiko architecture

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

- Interactive diagram: https://gitdiagram.com/shervinbdndev/hoshiko
- Repository: https://github.com/shervinbdndev/hoshiko

## Overview

Hoshiko is an ASP.NET MVC learning app organized around staged lessons and quizzes, with user progress tracking and certificate issuance. Learners enter through the web UI, authenticate, access stages, complete learning and quizzes, and may earn certificates; admins manage stage, lesson, quiz, and user-progress data. The graph also shows persistence and identity infrastructure. Source excerpts establish several calls, while some controller/service links rely on the SOURCE INDEX; unsampled view behavior is not inferred.

Main entry points: [`src/Hoshiko.Web/Program.cs`](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Program.cs) (MVC app setup), [`src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs`](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs) (Application database), [`src/Hoshiko.Web/Controllers/AdminController.cs`](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/AdminController.cs) (Admin management), [`src/Hoshiko.Web/Services/CertificateService.cs`](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/CertificateService.cs) (Certificate service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webapp["MVC app setup<br/>[Program.cs]"]
  node_admin["Admin management<br/>[AdminController.cs]"]
  node_home["Home and certificate<br/>[HomeController.cs]"]
  node_useradmin["User administration<br/>[UserService.cs]"]
end

subgraph group_learning["Learning workflow"]
  node_stagecontroller["Stage workflow<br/>[StageController.cs]"]
  node_progress["Stage progress"]
  node_progresscontract["Progress contract"]
  node_stagecontract["Stage repository contract"]
  node_domain["Stage and quiz model<br/>[StageEntities.cs]"]
  node_slug["Slug helper<br/>[SlugHelper.cs]"]
end

subgraph group_identity["Identity and certificates"]
  node_account["Account endpoints"]
  node_auth["Authentication<br/>[AuthService.cs]"]
  node_authcontract["Auth contract<br/>[IAuthService.cs]"]
  node_currentuser["Current user"]
  node_currentcontract["Current-user contract"]
  node_cert["Certificate service"]
  node_certcontract["Certificate contract"]
  node_userdomain["Domain user<br/>[User.cs]"]
  node_identityuser["Identity user<br/>[AppUser.cs]"]
end

subgraph group_storage["Persistence"]
  node_stages["Stage repository<br/>[StageRepository.cs]"]
  node_genericcontract["Generic repository contract"]
  node_genericrepo["Generic repository"]
  node_db[("Application database")]
  node_initializer["Initial data setup<br/>[DbInitializer.cs]"]
end

node_visitor(("Visitor"))

node_visitor -->|"opens app"| node_webapp
node_webapp -->|"configures"| node_db
node_webapp -->|"registers"| node_auth
node_webapp -->|"registers"| node_stages
node_webapp -->|"registers"| node_cert
node_webapp -->|"registers"| node_currentuser
node_webapp -->|"registers"| node_progress
node_webapp -->|"registers"| node_genericrepo
node_webapp -->|"runs initialization"| node_initializer
node_account -->|"calls"| node_auth
node_auth -->|"uses identity"| node_identityuser
node_auth -->|"implements"| node_authcontract
node_stagecontroller -->|"loads stages"| node_stages
node_stagecontroller -->|"updates progress"| node_progress
node_stagecontroller -->|"checks certificate"| node_cert
node_progress -->|"implements"| node_progresscontract
node_progress -->|"reads and writes"| node_db
node_cert -->|"implements"| node_certcontract
node_cert -->|"reads and writes"| node_db
node_home -->|"checks certificate"| node_cert
node_admin -->|"gets users"| node_useradmin
node_admin -->|"loads stage progress"| node_progress
node_admin -->|"gets certificates"| node_cert
node_admin -->|"adds content"| node_genericrepo
node_admin -->|"queries and saves"| node_db
node_admin -->|"generates slugs"| node_slug
node_stages -->|"inherits"| node_genericrepo
node_stages -->|"implements"| node_stagecontract
node_stages -->|"queries stages"| node_db
node_genericrepo -->|"implements"| node_genericcontract
node_genericrepo -->|"uses context"| node_db
node_db -->|"maps entities"| node_domain
node_db -->|"stores identity"| node_identityuser
node_initializer -->|"seeds data"| node_db
node_initializer -->|"generates slugs"| node_slug
node_currentuser -->|"implements"| node_currentcontract
node_useradmin -->|"uses identity"| node_identityuser
node_db -->|"maps domain user"| node_userdomain

click node_webapp "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Program.cs"
click node_admin "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/AdminController.cs"
click node_home "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/HomeController.cs"
click node_account "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/AccountController.cs"
click node_auth "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/AuthService.cs"
click node_authcontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IAuthService.cs"
click node_currentuser "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/CurrentUserService.cs"
click node_currentcontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/ICurrentUserService.cs"
click node_cert "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/CertificateService.cs"
click node_certcontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/ICertificateService.cs"
click node_stagecontroller "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/StageController.cs"
click node_progress "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/StageProgressService.cs"
click node_progresscontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IStageProgressService.cs"
click node_stagecontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IStageRepository.cs"
click node_stages "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Repositories/StageRepository.cs"
click node_genericcontract "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IGenericRepository.cs"
click node_genericrepo "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Repositories/GenericRepository.cs"
click node_db "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs"
click node_initializer "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Data/DbInitializer.cs"
click node_domain "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Domain/Entities/StageEntities.cs"
click node_userdomain "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Domain/Entities/User.cs"
click node_identityuser "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Identity/AppUser.cs"
click node_useradmin "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/UserService.cs"
click node_slug "https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Helpers/SlugHelper.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_webapp,node_admin,node_home,node_useradmin toneBlue
class node_stagecontroller,node_progress,node_progresscontract,node_stagecontract,node_domain,node_slug toneAmber
class node_account,node_auth,node_authcontract,node_currentuser,node_currentcontract,node_cert,node_certcontract,node_userdomain,node_identityuser toneMint
class node_stages,node_genericcontract,node_genericrepo,node_db,node_initializer toneRose
class node_visitor toneIndigo
```

## Components

### Web application

- [MVC app setup](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Program.cs): `src/Hoshiko.Web/Program.cs`
- [Admin management](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/AdminController.cs): `src/Hoshiko.Web/Controllers/AdminController.cs`
- [Home and certificate](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/HomeController.cs): `src/Hoshiko.Web/Controllers/HomeController.cs`
- [User administration](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/UserService.cs): `src/Hoshiko.Web/Services/UserService.cs`

### Learning workflow

- [Stage workflow](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/StageController.cs): `src/Hoshiko.Web/Controllers/StageController.cs`
- [Stage progress](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/StageProgressService.cs): `src/Hoshiko.Web/Services/StageProgressService.cs`
- [Progress contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IStageProgressService.cs): `src/Hoshiko.Core/Interfaces/IStageProgressService.cs`
- [Stage repository contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IStageRepository.cs): `src/Hoshiko.Core/Interfaces/IStageRepository.cs`
- [Stage and quiz model](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Domain/Entities/StageEntities.cs): `src/Hoshiko.Domain/Entities/StageEntities.cs`
- [Slug helper](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Helpers/SlugHelper.cs): `src/Hoshiko.Infrastructure/Helpers/SlugHelper.cs`

### Identity and certificates

- [Account endpoints](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Controllers/AccountController.cs): `src/Hoshiko.Web/Controllers/AccountController.cs`
- [Authentication](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/AuthService.cs): `src/Hoshiko.Web/Services/AuthService.cs`
- [Auth contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IAuthService.cs): `src/Hoshiko.Core/Interfaces/IAuthService.cs`
- [Current user](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/CurrentUserService.cs): `src/Hoshiko.Web/Services/CurrentUserService.cs`
- [Current-user contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/ICurrentUserService.cs): `src/Hoshiko.Core/Interfaces/ICurrentUserService.cs`
- [Certificate service](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Web/Services/CertificateService.cs): `src/Hoshiko.Web/Services/CertificateService.cs`
- [Certificate contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/ICertificateService.cs): `src/Hoshiko.Core/Interfaces/ICertificateService.cs`
- [Domain user](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Domain/Entities/User.cs): `src/Hoshiko.Domain/Entities/User.cs`
- [Identity user](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Identity/AppUser.cs): `src/Hoshiko.Infrastructure/Identity/AppUser.cs`

### Persistence

- [Stage repository](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Repositories/StageRepository.cs): `src/Hoshiko.Infrastructure/Repositories/StageRepository.cs`
- [Generic repository contract](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Core/Interfaces/IGenericRepository.cs): `src/Hoshiko.Core/Interfaces/IGenericRepository.cs`
- [Generic repository](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Repositories/GenericRepository.cs): `src/Hoshiko.Infrastructure/Repositories/GenericRepository.cs`
- [Application database](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs): `src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs`
- [Initial data setup](https://github.com/shervinbdndev/hoshiko/blob/master/src/Hoshiko.Infrastructure/Data/DbInitializer.cs): `src/Hoshiko.Infrastructure/Data/DbInitializer.cs`

### Other components

- **Visitor**

## Connections

- Visitor → MVC app setup: opens app
- MVC app setup → Application database: configures (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Authentication: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Stage repository: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Certificate service: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Current user: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Stage progress: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Generic repository: registers (evidence: `src/Hoshiko.Web/Program.cs`)
- MVC app setup → Initial data setup: runs initialization (evidence: `src/Hoshiko.Web/Program.cs`)
- Account endpoints → Authentication: calls (evidence: `src/Hoshiko.Web/Controllers/AccountController.cs`)
- Authentication → Identity user: uses identity (evidence: `src/Hoshiko.Web/Services/AuthService.cs`)
- Authentication → Auth contract: implements (evidence: `src/Hoshiko.Web/Services/AuthService.cs`)
- Stage workflow → Stage repository: loads stages (evidence: `src/Hoshiko.Web/Controllers/StageController.cs`)
- Stage workflow → Stage progress: updates progress (evidence: `src/Hoshiko.Web/Controllers/StageController.cs`)
- Stage workflow → Certificate service: checks certificate (evidence: `src/Hoshiko.Web/Controllers/StageController.cs`)
- Stage progress → Progress contract: implements (evidence: `src/Hoshiko.Web/Services/StageProgressService.cs`)
- Stage progress → Application database: reads and writes (evidence: `src/Hoshiko.Web/Services/StageProgressService.cs`)
- Certificate service → Certificate contract: implements (evidence: `src/Hoshiko.Web/Services/CertificateService.cs`)
- Certificate service → Application database: reads and writes (evidence: `src/Hoshiko.Web/Services/CertificateService.cs`)
- Home and certificate → Certificate service: checks certificate (evidence: `src/Hoshiko.Web/Controllers/HomeController.cs`)
- Admin management → User administration: gets users (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Admin management → Stage progress: loads stage progress (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Admin management → Certificate service: gets certificates (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Admin management → Generic repository: adds content (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Admin management → Application database: queries and saves (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Admin management → Slug helper: generates slugs (evidence: `src/Hoshiko.Web/Controllers/AdminController.cs`)
- Stage repository → Generic repository: inherits (evidence: `src/Hoshiko.Infrastructure/Repositories/StageRepository.cs`)
- Stage repository → Stage repository contract: implements (evidence: `src/Hoshiko.Infrastructure/Repositories/StageRepository.cs`)
- Stage repository → Application database: queries stages (evidence: `src/Hoshiko.Infrastructure/Repositories/StageRepository.cs`)
- Generic repository → Generic repository contract: implements (evidence: `src/Hoshiko.Infrastructure/Repositories/GenericRepository.cs`)
- Generic repository → Application database: uses context (evidence: `src/Hoshiko.Infrastructure/Repositories/GenericRepository.cs`)
- Application database → Stage and quiz model: maps entities (evidence: `src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs`)
- Application database → Identity user: stores identity (evidence: `src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs`)
- Initial data setup → Application database: seeds data (evidence: `src/Hoshiko.Infrastructure/Data/DbInitializer.cs`)
- Initial data setup → Slug helper: generates slugs (evidence: `src/Hoshiko.Infrastructure/Data/DbInitializer.cs`)
- Current user → Current-user contract: implements (evidence: `src/Hoshiko.Web/Services/CurrentUserService.cs`)
- User administration → Identity user: uses identity (evidence: `src/Hoshiko.Web/Services/UserService.cs`)
- Application database → Domain user: maps domain user (evidence: `src/Hoshiko.Infrastructure/Data/ApplicationDbContext.cs`)
