# xwcdx/manpro-skripsi architecture

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

- Interactive diagram: https://gitdiagram.com/xwcdx/manpro-skripsi
- Repository: https://github.com/xwcdx/manpro-skripsi

## Overview

This is a Laravel/Livewire application for managing thesis proposal registration and scheduling, with student and lecturer workflows. Students enter a period, choose or submit a topic/title, request supervision, and submit revisions or final work; lecturers manage assignments, availability, schedules, venues, and presentations. The graph preserves these domain stages and the presentation decision/state-history behavior visible in sampled code. README content is absent, and most service/controller implementations and Livewire wiring were not sampled, so uncertain call links are omitted.

Main entry points: [`app/Services/PresentationService.php`](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/PresentationService.php) (Presentation scheduling), [`app/Http/Controllers/Auth/GoogleController.php`](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Http/Controllers/Auth/GoogleController.php) (Google login), [`resources/views/livewire/auth/login.blade.php`](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/auth/login.blade.php) (Sign in and signup), [`app/Models/Lecturer.php`](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/Lecturer.php) (Lecturer records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and identity"]
  node_auth_ui["Sign in and signup<br/>[login.blade.php]"]
  node_google_auth["Google login"]
  node_api_auth["Token login<br/>[AuthController.php]"]
  node_auth_service["Credential service<br/>[AuthService.php]"]
end

subgraph group_student["Student thesis workflow"]
  node_period_apply["Apply period"]
  node_topic_browse["Browse topics<br/>[browse.blade.php]"]
  node_title_submit["Submit thesis title"]
  node_topic_service["Topic applications"]
  node_supervision["Request supervision"]
  node_supervision_service["Supervision requests"]
  node_submission["Revisions and final"]
  node_submission_service["Submission handling"]
end

subgraph group_academic["Lecturer operations"]
  node_lecturer_ui["Lecturer workspace"]
  node_assignment_ui["Assignments<br/>[index.blade.php]"]
  node_availability_ui["Schedule availability"]
  node_schedule_service["Schedule selection"]
  node_presentation_ui["Presentations<br/>[index.blade.php]"]
  node_presentation_service["Presentation scheduling"]
  node_similarity["Title similarity"]
  node_similarity_worker["Similarity worker"]
end

subgraph group_domain["Domain and persistence"]
  node_domain_models[("Thesis and schedule records")]
  node_student_model[("Student records<br/>[Student.php]")]
  node_lecturer_model[("Lecturer records<br/>[Lecturer.php]")]
  node_status_history[("Student status history")]
end

node_student_actor(("Student"))
node_lecturer_actor(("Lecturer"))
node_google(("Google identity"))

node_student_actor -->|"signs in"| node_auth_ui
node_lecturer_actor -->|"signs in"| node_auth_ui
node_google -.->|"authenticates"| node_google_auth
node_google_auth -->|"finds or creates"| node_student_model
node_google_auth -->|"finds or creates"| node_lecturer_model
node_api_auth -->|"attempts login"| node_auth_service
node_student_actor -->|"starts period"| node_period_apply
node_student_actor -->|"browses"| node_topic_browse
node_student_actor -->|"submits title"| node_title_submit
node_student_actor -->|"requests supervisor"| node_supervision
node_student_actor -->|"submits work"| node_submission
node_lecturer_actor -->|"manages"| node_lecturer_ui
node_lecturer_actor -->|"reviews assignments"| node_assignment_ui
node_lecturer_actor -->|"sets availability"| node_availability_ui
node_lecturer_actor -->|"manages hearings"| node_presentation_ui
node_presentation_service -->|"writes presentation"| node_domain_models
node_presentation_service -->|"checks availability"| node_lecturer_model
node_presentation_service -->|"records decision"| node_status_history
node_similarity -.->|"vectorizes via"| node_similarity_worker

click node_auth_ui "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/auth/login.blade.php"
click node_google_auth "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Http/Controllers/Auth/GoogleController.php"
click node_api_auth "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Http/Controllers/Api/AuthController.php"
click node_auth_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/Auth/AuthService.php"
click node_period_apply "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/apply-period.blade.php"
click node_topic_browse "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/topics/browse.blade.php"
click node_title_submit "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/submit-title.blade.php"
click node_topic_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/TopicApplicationService.php"
click node_supervision "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/submit-dosbing.blade.php"
click node_supervision_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/SupervisionApplicationService.php"
click node_submission "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/revision-submission.blade.php"
click node_submission_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/SubmissionService.php"
click node_lecturer_ui "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/dashboard.blade.php"
click node_assignment_ui "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/assignments/index.blade.php"
click node_availability_ui "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/schedules/availability.blade.php"
click node_schedule_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/ScheduleSelectionService.php"
click node_presentation_ui "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/presentations/index.blade.php"
click node_presentation_service "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/PresentationService.php"
click node_similarity "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Traits/HasPythonVectorization.php"
click node_similarity_worker "https://github.com/xwcdx/manpro-skripsi/blob/main/resources/python/check_similarity.py"
click node_domain_models "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/ThesisPresentation.php"
click node_student_model "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/Student.php"
click node_lecturer_model "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/Lecturer.php"
click node_status_history "https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/StudentStatusHistory.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_auth_ui,node_google_auth,node_api_auth,node_auth_service toneBlue
class node_period_apply,node_topic_browse,node_title_submit,node_topic_service,node_supervision,node_supervision_service,node_submission,node_submission_service toneAmber
class node_lecturer_ui,node_assignment_ui,node_availability_ui,node_schedule_service,node_presentation_ui,node_presentation_service,node_similarity,node_similarity_worker toneMint
class node_domain_models,node_student_model,node_lecturer_model,node_status_history toneRose
class node_student_actor,node_lecturer_actor,node_google toneIndigo
```

## Components

### Access and identity

- [Sign in and signup](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/auth/login.blade.php): `resources/views/livewire/auth/login.blade.php`
- [Google login](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Http/Controllers/Auth/GoogleController.php): `app/Http/Controllers/Auth/GoogleController.php`
- [Token login](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Http/Controllers/Api/AuthController.php): `app/Http/Controllers/Api/AuthController.php`
- [Credential service](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/Auth/AuthService.php): `app/Services/Auth/AuthService.php`

### Student thesis workflow

- [Apply period](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/apply-period.blade.php): `resources/views/livewire/student/apply-period.blade.php`
- [Browse topics](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/topics/browse.blade.php): `resources/views/livewire/student/topics/browse.blade.php`
- [Submit thesis title](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/submit-title.blade.php): `resources/views/livewire/student/submit-title.blade.php`
- [Topic applications](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/TopicApplicationService.php): `app/Services/TopicApplicationService.php`
- [Request supervision](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/submit-dosbing.blade.php): `resources/views/livewire/student/submit-dosbing.blade.php`
- [Supervision requests](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/SupervisionApplicationService.php): `app/Services/SupervisionApplicationService.php`
- [Revisions and final](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/student/revision-submission.blade.php): `resources/views/livewire/student/revision-submission.blade.php`
- [Submission handling](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/SubmissionService.php): `app/Services/SubmissionService.php`

### Lecturer operations

- [Lecturer workspace](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/dashboard.blade.php): `resources/views/livewire/lecturer/dashboard.blade.php`
- [Assignments](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/assignments/index.blade.php): `resources/views/livewire/lecturer/assignments/index.blade.php`
- [Schedule availability](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/schedules/availability.blade.php): `resources/views/livewire/lecturer/schedules/availability.blade.php`
- [Schedule selection](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/ScheduleSelectionService.php): `app/Services/ScheduleSelectionService.php`
- [Presentations](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/views/livewire/lecturer/presentations/index.blade.php): `resources/views/livewire/lecturer/presentations/index.blade.php`
- [Presentation scheduling](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Services/PresentationService.php): `app/Services/PresentationService.php`
- [Title similarity](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Traits/HasPythonVectorization.php): `app/Traits/HasPythonVectorization.php`
- [Similarity worker](https://github.com/xwcdx/manpro-skripsi/blob/main/resources/python/check_similarity.py): `resources/python/check_similarity.py`

### Domain and persistence

- [Thesis and schedule records](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/ThesisPresentation.php): `app/Models/ThesisPresentation.php`
- [Student records](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/Student.php): `app/Models/Student.php`
- [Lecturer records](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/Lecturer.php): `app/Models/Lecturer.php`
- [Student status history](https://github.com/xwcdx/manpro-skripsi/blob/main/app/Models/StudentStatusHistory.php): `app/Models/StudentStatusHistory.php`

### Other components

- **Student**
- **Lecturer**
- **Google identity**

## Connections

- Student → Sign in and signup: signs in
- Lecturer → Sign in and signup: signs in
- Google identity → Google login: authenticates
- Google login → Student records: finds or creates
- Google login → Lecturer records: finds or creates
- Token login → Credential service: attempts login
- Student → Apply period: starts period
- Student → Browse topics: browses
- Student → Submit thesis title: submits title
- Student → Request supervision: requests supervisor
- Student → Revisions and final: submits work
- Lecturer → Lecturer workspace: manages
- Lecturer → Assignments: reviews assignments
- Lecturer → Schedule availability: sets availability
- Lecturer → Presentations: manages hearings
- Presentation scheduling → Thesis and schedule records: writes presentation
- Presentation scheduling → Lecturer records: checks availability
- Presentation scheduling → Student status history: records decision
- Title similarity → Similarity worker: vectorizes via
