# blebelo/moipone architecture

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

- Interactive diagram: https://gitdiagram.com/blebelo/moipone
- Repository: https://github.com/blebelo/moipone

## Overview

Moipone is a public website and admissions platform with a Next.js public/admin/student frontend and an ABP ASP.NET Core backend. The main applicant journey is to browse courses, complete an application with student details and documents, then submit it for backend handling; inquiries have a separate contact workflow. Administrators manage courses, applications, and students. The README documents the frontend-to-app-service API boundary, EF Core/PostgreSQL persistence, and direct-to-S3 uploads. Backend service-to-store links reflect that documented architecture; sampled source does not establish finer-grained calls among individual services.

Main entry points: [`aspnet-core/src/Moipone.PublicSite.Web.Host/Startup/Startup.cs`](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Web.Host/Startup/Startup.cs) (ASP.NET host), [`next-ts/src/components/ApplicationForm/index.tsx`](https://github.com/blebelo/moipone/blob/main/next-ts/src/components/ApplicationForm/index.tsx) (Application form), [`aspnet-core/src/Moipone.PublicSite.EntityFrameworkCore/EntityFrameworkCore/PublicSiteDbContext.cs`](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.EntityFrameworkCore/EntityFrameworkCore/PublicSiteDbContext.cs) (EF Core context), [`next-ts/app/(public)/page.tsx`](https://github.com/blebelo/moipone/blob/main/next-ts/app/(public)/page.tsx) (Public site)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web experiences"]
  node_public_site["Public site<br/>[page.tsx]"]
  node_application_ui["Application form<br/>[index.tsx]"]
  node_application_state["Application state<br/>[actions.ts]"]
  node_student_state["Student state<br/>[actions.ts]"]
  node_file_upload["Document upload<br/>[index.tsx]"]
  node_server_actions["Server actions<br/>[server-actions.ts]"]
  node_contact_ui["Contact form<br/>[index.tsx]"]
  node_admin_apps["Application admin<br/>[page.tsx]"]
  node_admin_courses["Course admin<br/>[page.tsx]"]
  node_admin_students["Student admin<br/>[page.tsx]"]
end

subgraph group_backend["Backend services"]
  node_api_applications["Application services"]
  node_api_students["Student services"]
  node_api_courses["Course services"]
  node_api_contacts["Contact services"]
  node_api_auth["Token authentication"]
  node_backend_host["ASP.NET host<br/>[Startup.cs]"]
end

subgraph group_persistence["Persistence"]
  node_db_context["EF Core context"]
  node_postgres[("PostgreSQL")]
end

subgraph group_external["External integrations"]
  node_s3[("AWS S3")]
end

node_visitor(("Site visitor"))
node_applicant(("Applicant"))
node_admin(("Administrator"))

node_visitor -->|"browses"| node_public_site
node_applicant -->|"completes"| node_application_ui
node_public_site -->|"offers"| node_application_ui
node_application_ui -->|"collects profile"| node_student_state
node_application_ui -->|"submits application"| node_application_state
node_application_ui -->|"requests documents"| node_file_upload
node_file_upload -->|"requests upload"| node_server_actions
node_server_actions -->|"uploads directly"| node_s3
node_application_state -->|"calls API"| node_backend_host
node_student_state -->|"calls API"| node_backend_host
node_visitor -->|"sends inquiry"| node_contact_ui
node_contact_ui -->|"calls API"| node_backend_host
node_admin -->|"manages"| node_admin_apps
node_admin -->|"manages"| node_admin_courses
node_admin -->|"manages"| node_admin_students
node_admin_apps -->|"calls API"| node_backend_host
node_admin_courses -->|"calls API"| node_backend_host
node_admin_students -->|"calls API"| node_backend_host
node_backend_host -->|"dispatches"| node_api_applications
node_backend_host -->|"dispatches"| node_api_students
node_backend_host -->|"dispatches"| node_api_courses
node_backend_host -->|"dispatches"| node_api_contacts
node_backend_host -->|"dispatches"| node_api_auth
node_api_applications -->|"persists data"| node_db_context
node_api_students -->|"persists data"| node_db_context
node_api_courses -->|"persists data"| node_db_context
node_api_contacts -->|"persists data"| node_db_context
node_db_context -->|"reads/writes"| node_postgres

click node_public_site "https://github.com/blebelo/moipone/blob/main/next-ts/app/(public)/page.tsx"
click node_application_ui "https://github.com/blebelo/moipone/blob/main/next-ts/src/components/ApplicationForm/index.tsx"
click node_application_state "https://github.com/blebelo/moipone/blob/main/next-ts/src/providers/application-provider/actions.ts"
click node_student_state "https://github.com/blebelo/moipone/blob/main/next-ts/src/providers/student-provider/actions.ts"
click node_file_upload "https://github.com/blebelo/moipone/blob/main/next-ts/src/components/FileUpload/index.tsx"
click node_server_actions "https://github.com/blebelo/moipone/blob/main/next-ts/src/lib/common/server-actions.ts"
click node_contact_ui "https://github.com/blebelo/moipone/blob/main/next-ts/src/components/ContactForm/index.tsx"
click node_admin_apps "https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/applications/page.tsx"
click node_admin_courses "https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/courses/page.tsx"
click node_admin_students "https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/students/page.tsx"
click node_api_applications "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/CourseApplications/CourseApplicationAppService.cs"
click node_api_students "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/Students/StudentAppService.cs"
click node_api_courses "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/ShortCourses/ShortCourseAppService.cs"
click node_api_contacts "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/Contacts/ContactAppService.cs"
click node_api_auth "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Web.Core/Controllers/TokenAuthController.cs"
click node_db_context "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.EntityFrameworkCore/EntityFrameworkCore/PublicSiteDbContext.cs"
click node_backend_host "https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Web.Host/Startup/Startup.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_site,node_application_ui,node_application_state,node_student_state,node_file_upload,node_server_actions,node_contact_ui,node_admin_apps,node_admin_courses,node_admin_students toneBlue
class node_api_applications,node_api_students,node_api_courses,node_api_contacts,node_api_auth,node_backend_host toneAmber
class node_db_context,node_postgres toneMint
class node_s3 toneRose
class node_visitor,node_applicant,node_admin toneIndigo
```

## Components

### Web experiences

- [Public site](https://github.com/blebelo/moipone/blob/main/next-ts/app/(public)/page.tsx): `next-ts/app/(public)/page.tsx`
- [Application form](https://github.com/blebelo/moipone/blob/main/next-ts/src/components/ApplicationForm/index.tsx): `next-ts/src/components/ApplicationForm/index.tsx`
- [Application state](https://github.com/blebelo/moipone/blob/main/next-ts/src/providers/application-provider/actions.ts): `next-ts/src/providers/application-provider/actions.ts`
- [Student state](https://github.com/blebelo/moipone/blob/main/next-ts/src/providers/student-provider/actions.ts): `next-ts/src/providers/student-provider/actions.ts`
- [Document upload](https://github.com/blebelo/moipone/blob/main/next-ts/src/components/FileUpload/index.tsx): `next-ts/src/components/FileUpload/index.tsx`
- [Server actions](https://github.com/blebelo/moipone/blob/main/next-ts/src/lib/common/server-actions.ts): `next-ts/src/lib/common/server-actions.ts`
- [Contact form](https://github.com/blebelo/moipone/blob/main/next-ts/src/components/ContactForm/index.tsx): `next-ts/src/components/ContactForm/index.tsx`
- [Application admin](https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/applications/page.tsx): `next-ts/app/(admin)/admin/(workspace)/applications/page.tsx`
- [Course admin](https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/courses/page.tsx): `next-ts/app/(admin)/admin/(workspace)/courses/page.tsx`
- [Student admin](https://github.com/blebelo/moipone/blob/main/next-ts/app/(admin)/admin/(workspace)/students/page.tsx): `next-ts/app/(admin)/admin/(workspace)/students/page.tsx`

### Backend services

- [Application services](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/CourseApplications/CourseApplicationAppService.cs): `aspnet-core/src/Moipone.PublicSite.Application/CourseApplications/CourseApplicationAppService.cs`
- [Student services](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/Students/StudentAppService.cs): `aspnet-core/src/Moipone.PublicSite.Application/Students/StudentAppService.cs`
- [Course services](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/ShortCourses/ShortCourseAppService.cs): `aspnet-core/src/Moipone.PublicSite.Application/ShortCourses/ShortCourseAppService.cs`
- [Contact services](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Application/Contacts/ContactAppService.cs): `aspnet-core/src/Moipone.PublicSite.Application/Contacts/ContactAppService.cs`
- [Token authentication](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Web.Core/Controllers/TokenAuthController.cs): `aspnet-core/src/Moipone.PublicSite.Web.Core/Controllers/TokenAuthController.cs`
- [ASP.NET host](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.Web.Host/Startup/Startup.cs): `aspnet-core/src/Moipone.PublicSite.Web.Host/Startup/Startup.cs`

### Persistence

- [EF Core context](https://github.com/blebelo/moipone/blob/main/aspnet-core/src/Moipone.PublicSite.EntityFrameworkCore/EntityFrameworkCore/PublicSiteDbContext.cs): `aspnet-core/src/Moipone.PublicSite.EntityFrameworkCore/EntityFrameworkCore/PublicSiteDbContext.cs`
- **PostgreSQL**

### External integrations

- **AWS S3**

### Other components

- **Site visitor**
- **Applicant**
- **Administrator**

## Connections

- Site visitor → Public site: browses
- Applicant → Application form: completes
- Public site → Application form: offers
- Application form → Student state: collects profile
- Application form → Application state: submits application
- Application form → Document upload: requests documents
- Document upload → Server actions: requests upload
- Server actions → AWS S3: uploads directly
- Application state → ASP.NET host: calls API
- Student state → ASP.NET host: calls API
- Site visitor → Contact form: sends inquiry
- Contact form → ASP.NET host: calls API
- Administrator → Application admin: manages
- Administrator → Course admin: manages
- Administrator → Student admin: manages
- Application admin → ASP.NET host: calls API
- Course admin → ASP.NET host: calls API
- Student admin → ASP.NET host: calls API
- ASP.NET host → Application services: dispatches
- ASP.NET host → Student services: dispatches
- ASP.NET host → Course services: dispatches
- ASP.NET host → Contact services: dispatches
- ASP.NET host → Token authentication: dispatches
- Application services → EF Core context: persists data
- Student services → EF Core context: persists data
- Course services → EF Core context: persists data
- Contact services → EF Core context: persists data
- EF Core context → PostgreSQL: reads/writes
