# joker20380/guitar-school architecture

> Architecture diagram of the GitHub repository joker20380/guitar-school, 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/joker20380/guitar-school
- Repository: https://github.com/joker20380/guitar-school

## Overview

This is a Django guitar-school site with public pages, course enrollment and student learning, teacher coordination, a browser-based guitar tuner, and contact inquiries. The principal learning flow is course discovery, request submission and verification, enrollment activation, then lesson progress tracking. The sampled course views show several ORM operations and email verification; other app behavior is inferred only from the tree and is kept at the subsystem level. Routing, contact handling, and page rendering details were not sampled, so those connections are intentionally limited.

Main entry points: [`courses/models.py`](https://github.com/joker20380/guitar-school/blob/main/courses/models.py) (Course data), [`contacts/views.py`](https://github.com/joker20380/guitar-school/blob/main/contacts/views.py) (Contact inquiries), [`courses/views.py`](https://github.com/joker20380/guitar-school/blob/main/courses/views.py) (Course catalog), [`tuner/views.py`](https://github.com/joker20380/guitar-school/blob/main/tuner/views.py) (Tuner page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public site"]
  node_public_pages["Home pages<br/>[views.py]"]
  node_contact["Contact inquiries<br/>[views.py]"]
  node_contact_form["Contact validation<br/>[forms.py]"]
end

subgraph group_learning["Courses and learning"]
  node_course_catalog["Course catalog<br/>[views.py]"]
  node_course_request["Course requests<br/>[views.py]"]
  node_verification["Request verification<br/>[views.py]"]
  node_activation["Account activation<br/>[views.py]"]
  node_student_courses["Student courses<br/>[views.py]"]
  node_lesson_progress["Lesson progress<br/>[views.py]"]
end

subgraph group_teaching["Teacher coordination"]
  node_teacher_directory["Teacher directory<br/>[views.py]"]
  node_teacher_requests["Teacher requests<br/>[views.py]"]
end

subgraph group_tuner["Guitar tuner"]
  node_tuner_page["Tuner page<br/>[views.py]"]
  node_tuner_audio["Pitch detection<br/>[tuner.js]"]
  node_tuner_ui["Tuning display<br/>[tuner.js]"]
end

subgraph group_platform["Platform services"]
  node_course_store[("Course data<br/>[models.py]")]
  node_contact_store[("Contact data<br/>[models.py]")]
  node_runtime_config["Django configuration<br/>[settings.py]"]
end

node_visitor(("Visitor"))
node_student(("Student"))
node_browser_mic(("Browser microphone"))
node_email(("Email service"))

node_visitor -->|"requests pages"| node_public_pages
node_visitor -->|"browses courses"| node_course_catalog
node_course_catalog -->|"queries courses"| node_course_store
node_course_catalog -->|"renders catalog"| node_visitor
node_visitor -->|"submits request"| node_course_request
node_course_request -->|"saves request"| node_course_store
node_course_request -->|"sends verification"| node_email
node_email -->|"delivers link"| node_visitor
node_visitor -->|"follows link"| node_verification
node_verification -->|"updates verification"| node_course_store
node_visitor -->|"sets password"| node_activation
node_activation -->|"updates enrollment"| node_course_store
node_student -->|"opens courses"| node_student_courses
node_student_courses -->|"queries enrollments"| node_course_store
node_student -->|"updates lessons"| node_lesson_progress
node_lesson_progress -->|"reads and writes progress"| node_course_store
node_visitor -->|"browses teachers"| node_teacher_directory
node_teacher_directory -->|"queries teachers"| node_course_store
node_student -->|"requests teacher"| node_teacher_requests
node_teacher_requests -->|"reads and writes requests"| node_course_store
node_visitor -->|"submits inquiry"| node_contact
node_contact -->|"validates fields"| node_contact_form
node_contact -->|"stores inquiry"| node_contact_store
node_visitor -->|"opens tuner"| node_tuner_page
node_tuner_page -->|"loads tuner"| node_tuner_audio
node_browser_mic -->|"provides audio"| node_tuner_audio
node_tuner_audio -->|"updates pitch display"| node_tuner_ui
node_tuner_page -->|"uses site settings"| node_runtime_config

click node_public_pages "https://github.com/joker20380/guitar-school/blob/main/pages/views.py"
click node_contact "https://github.com/joker20380/guitar-school/blob/main/contacts/views.py"
click node_contact_form "https://github.com/joker20380/guitar-school/blob/main/contacts/forms.py"
click node_course_catalog "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_course_request "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_verification "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_activation "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_student_courses "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_lesson_progress "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_teacher_directory "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_teacher_requests "https://github.com/joker20380/guitar-school/blob/main/courses/views.py"
click node_tuner_page "https://github.com/joker20380/guitar-school/blob/main/tuner/views.py"
click node_tuner_audio "https://github.com/joker20380/guitar-school/blob/main/tuner/static/tuner/js/tuner.js"
click node_tuner_ui "https://github.com/joker20380/guitar-school/blob/main/tuner/static/tuner/js/tuner.js"
click node_course_store "https://github.com/joker20380/guitar-school/blob/main/courses/models.py"
click node_contact_store "https://github.com/joker20380/guitar-school/blob/main/contacts/models.py"
click node_runtime_config "https://github.com/joker20380/guitar-school/blob/main/config/settings.py"

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_pages,node_contact,node_contact_form,node_browser_mic toneBlue
class node_course_catalog,node_course_request,node_verification,node_activation,node_student_courses,node_lesson_progress toneAmber
class node_teacher_directory,node_teacher_requests toneMint
class node_tuner_page,node_tuner_audio,node_tuner_ui toneRose
class node_course_store,node_contact_store,node_runtime_config,node_visitor,node_student,node_email toneIndigo
```

## Components

### Public site

- [Home pages](https://github.com/joker20380/guitar-school/blob/main/pages/views.py): `pages/views.py`
- [Contact inquiries](https://github.com/joker20380/guitar-school/blob/main/contacts/views.py): `contacts/views.py`
- [Contact validation](https://github.com/joker20380/guitar-school/blob/main/contacts/forms.py): `contacts/forms.py`

### Courses and learning

- [Course catalog](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Course requests](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Request verification](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Account activation](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Student courses](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Lesson progress](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`

### Teacher coordination

- [Teacher directory](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`
- [Teacher requests](https://github.com/joker20380/guitar-school/blob/main/courses/views.py): `courses/views.py`

### Guitar tuner

- [Tuner page](https://github.com/joker20380/guitar-school/blob/main/tuner/views.py): `tuner/views.py`
- [Pitch detection](https://github.com/joker20380/guitar-school/blob/main/tuner/static/tuner/js/tuner.js): `tuner/static/tuner/js/tuner.js`
- [Tuning display](https://github.com/joker20380/guitar-school/blob/main/tuner/static/tuner/js/tuner.js): `tuner/static/tuner/js/tuner.js`

### Platform services

- [Course data](https://github.com/joker20380/guitar-school/blob/main/courses/models.py): `courses/models.py`
- [Contact data](https://github.com/joker20380/guitar-school/blob/main/contacts/models.py): `contacts/models.py`
- [Django configuration](https://github.com/joker20380/guitar-school/blob/main/config/settings.py): `config/settings.py`

### Other components

- **Visitor**
- **Student**
- **Browser microphone**
- **Email service**

## Connections

- Visitor → Home pages: requests pages
- Visitor → Course catalog: browses courses
- Course catalog → Course data: queries courses
- Course catalog → Visitor: renders catalog
- Visitor → Course requests: submits request
- Course requests → Course data: saves request
- Course requests → Email service: sends verification
- Email service → Visitor: delivers link
- Visitor → Request verification: follows link
- Request verification → Course data: updates verification
- Visitor → Account activation: sets password
- Account activation → Course data: updates enrollment
- Student → Student courses: opens courses
- Student courses → Course data: queries enrollments
- Student → Lesson progress: updates lessons
- Lesson progress → Course data: reads and writes progress
- Visitor → Teacher directory: browses teachers
- Teacher directory → Course data: queries teachers
- Student → Teacher requests: requests teacher
- Teacher requests → Course data: reads and writes requests
- Visitor → Contact inquiries: submits inquiry
- Contact inquiries → Contact validation: validates fields
- Contact inquiries → Contact data: stores inquiry
- Visitor → Tuner page: opens tuner
- Tuner page → Pitch detection: loads tuner
- Browser microphone → Pitch detection: provides audio
- Pitch detection → Tuning display: updates pitch display
- Tuner page → Django configuration: uses site settings
