# knocktern/web_programming_course_project architecture

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

## Overview

SkillGate is a PHP/MySQL job grooming and placement platform. Seekers browse and filter roles, build a CV, take a server-scored job quiz, then apply only after passing; failed attempts lead to category-based courses. Employers publish jobs and quizzes, review qualified applicants, update application status, and schedule interviews. Administrators manage users, jobs, categories, courses, and reports. Shared bootstrap, authentication, database access, layout, and interview rendering support these role-specific workflows. The README documents major capabilities beyond the sampled files; links for those unsampled pages are shown only where the README supports them.

Main entry points: [`config/database.php`](https://github.com/knocktern/web_programming_course_project/blob/master/config/database.php) (PDO connection), [`seeker/applications.php`](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/applications.php) (Applications), [`includes/bootstrap.php`](https://github.com/knocktern/web_programming_course_project/blob/master/includes/bootstrap.php) (Request bootstrap), [`employer/applicant-profile.php`](https://github.com/knocktern/web_programming_course_project/blob/master/employer/applicant-profile.php) (Applicant review)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shared["Shared runtime"]
  node_bootstrap["Request bootstrap<br/>[bootstrap.php]"]
  node_database["PDO connection<br/>[database.php]"]
  node_auth["Session and roles<br/>[auth.php]"]
  node_shared_helpers["Shared helpers<br/>[functions.php]"]
  node_layout["Page layout<br/>[layout.php]"]
  node_interview_view["Interview details"]
  node_mysql[("MySQL data")]
  node_account["Registration and login<br/>[register.php]"]
end

subgraph group_discovery["Job discovery"]
  node_home["Public landing<br/>[index.php]"]
  node_job_search["Job search<br/>[jobs.php]"]
  node_job_details["Job details<br/>[job-details.php]"]
end

subgraph group_seeker["Seeker journey"]
  node_profile_cv["Seeker profile and CV<br/>[profile.php]"]
  node_cv_preview["CV preview<br/>[cv-preview.php]"]
  node_quiz["Job quiz<br/>[quiz.php]"]
  node_quiz_result["Quiz result<br/>[quiz-result.php]"]
  node_recommendations["Course recommendations"]
  node_course["Course learning<br/>[course.php]"]
  node_applications["Applications<br/>[applications.php]"]
  node_seeker_dashboard["Seeker dashboard<br/>[dashboard.php]"]
end

subgraph group_employer["Employer operations"]
  node_employer_jobs["Employer job management<br/>[create-job.php]"]
  node_quiz_builder["Quiz authoring<br/>[quiz-builder.php]"]
  node_applicants["Applicant review"]
end

subgraph group_admin["Administration"]
  node_admin_tools["Admin management<br/>[dashboard.php]"]
  node_admin_reports["Admin reports<br/>[applications.php]"]
end

node_seeker_actor(("Job seeker"))
node_employer_actor(("Employer"))
node_admin_actor(("Administrator"))

node_bootstrap -->|"loads"| node_database
node_bootstrap -->|"loads"| node_shared_helpers
node_bootstrap -->|"loads"| node_auth
node_bootstrap -->|"loads"| node_layout
node_database -->|"connects"| node_mysql
node_home -->|"links to"| node_job_search
node_seeker_actor -->|"filters roles"| node_job_search
node_job_search -->|"opens role"| node_job_details
node_job_details -->|"starts screening"| node_quiz
node_quiz -->|"submits answers"| node_quiz_result
node_quiz_result -->|"failure recommends"| node_recommendations
node_recommendations -->|"opens course"| node_course
node_quiz_result -->|"pass permits"| node_applications
node_applications -->|"tracks status"| node_seeker_dashboard
node_seeker_actor -->|"maintains CV"| node_profile_cv
node_profile_cv -->|"previews CV"| node_cv_preview
node_applications -->|"renders details"| node_interview_view
node_applicants -->|"renders details"| node_interview_view
node_employer_actor -->|"publishes roles"| node_employer_jobs
node_employer_jobs -->|"continues setup"| node_quiz_builder
node_employer_actor -->|"authors questions"| node_quiz_builder
node_employer_actor -->|"reviews candidates"| node_applicants
node_applicants -->|"updates schedule"| node_applications
node_admin_actor -->|"manages platform"| node_admin_tools
node_admin_actor -->|"reviews reports"| node_admin_reports
node_job_search -->|"queries roles"| node_database
node_applications -->|"checks and writes"| node_database
node_applicants -->|"reads and updates"| node_database
node_cv_preview -->|"reads CV data"| node_database
node_auth -->|"checks account"| node_database

click node_bootstrap "https://github.com/knocktern/web_programming_course_project/blob/master/includes/bootstrap.php"
click node_database "https://github.com/knocktern/web_programming_course_project/blob/master/config/database.php"
click node_auth "https://github.com/knocktern/web_programming_course_project/blob/master/includes/auth.php"
click node_shared_helpers "https://github.com/knocktern/web_programming_course_project/blob/master/includes/functions.php"
click node_layout "https://github.com/knocktern/web_programming_course_project/blob/master/includes/layout.php"
click node_interview_view "https://github.com/knocktern/web_programming_course_project/blob/master/includes/interview-details.php"
click node_home "https://github.com/knocktern/web_programming_course_project/blob/master/public/index.php"
click node_job_search "https://github.com/knocktern/web_programming_course_project/blob/master/public/jobs.php"
click node_job_details "https://github.com/knocktern/web_programming_course_project/blob/master/public/job-details.php"
click node_account "https://github.com/knocktern/web_programming_course_project/blob/master/public/register.php"
click node_profile_cv "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/profile.php"
click node_cv_preview "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/cv-preview.php"
click node_quiz "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/quiz.php"
click node_quiz_result "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/quiz-result.php"
click node_recommendations "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/recommendations.php"
click node_course "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/course.php"
click node_applications "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/applications.php"
click node_seeker_dashboard "https://github.com/knocktern/web_programming_course_project/blob/master/seeker/dashboard.php"
click node_employer_jobs "https://github.com/knocktern/web_programming_course_project/blob/master/employer/create-job.php"
click node_quiz_builder "https://github.com/knocktern/web_programming_course_project/blob/master/employer/quiz-builder.php"
click node_applicants "https://github.com/knocktern/web_programming_course_project/blob/master/employer/applicant-profile.php"
click node_admin_tools "https://github.com/knocktern/web_programming_course_project/blob/master/admin/dashboard.php"
click node_admin_reports "https://github.com/knocktern/web_programming_course_project/blob/master/admin/applications.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_bootstrap,node_database,node_auth,node_shared_helpers,node_layout,node_interview_view,node_mysql,node_account toneBlue
class node_home,node_job_search,node_job_details toneAmber
class node_profile_cv,node_cv_preview,node_quiz,node_quiz_result,node_recommendations,node_course,node_applications,node_seeker_dashboard toneMint
class node_employer_jobs,node_quiz_builder,node_applicants toneRose
class node_admin_tools,node_admin_reports,node_seeker_actor,node_employer_actor,node_admin_actor toneIndigo
```

## Components

### Shared runtime

- [Request bootstrap](https://github.com/knocktern/web_programming_course_project/blob/master/includes/bootstrap.php): `includes/bootstrap.php`
- [PDO connection](https://github.com/knocktern/web_programming_course_project/blob/master/config/database.php): `config/database.php`
- [Session and roles](https://github.com/knocktern/web_programming_course_project/blob/master/includes/auth.php): `includes/auth.php`
- [Shared helpers](https://github.com/knocktern/web_programming_course_project/blob/master/includes/functions.php): `includes/functions.php`
- [Page layout](https://github.com/knocktern/web_programming_course_project/blob/master/includes/layout.php): `includes/layout.php`
- [Interview details](https://github.com/knocktern/web_programming_course_project/blob/master/includes/interview-details.php): `includes/interview-details.php`
- **MySQL data**
- [Registration and login](https://github.com/knocktern/web_programming_course_project/blob/master/public/register.php): `public/register.php`

### Job discovery

- [Public landing](https://github.com/knocktern/web_programming_course_project/blob/master/public/index.php): `public/index.php`
- [Job search](https://github.com/knocktern/web_programming_course_project/blob/master/public/jobs.php): `public/jobs.php`
- [Job details](https://github.com/knocktern/web_programming_course_project/blob/master/public/job-details.php): `public/job-details.php`

### Seeker journey

- [Seeker profile and CV](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/profile.php): `seeker/profile.php`
- [CV preview](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/cv-preview.php): `seeker/cv-preview.php`
- [Job quiz](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/quiz.php): `seeker/quiz.php`
- [Quiz result](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/quiz-result.php): `seeker/quiz-result.php`
- [Course recommendations](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/recommendations.php): `seeker/recommendations.php`
- [Course learning](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/course.php): `seeker/course.php`
- [Applications](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/applications.php): `seeker/applications.php`
- [Seeker dashboard](https://github.com/knocktern/web_programming_course_project/blob/master/seeker/dashboard.php): `seeker/dashboard.php`

### Employer operations

- [Employer job management](https://github.com/knocktern/web_programming_course_project/blob/master/employer/create-job.php): `employer/create-job.php`
- [Quiz authoring](https://github.com/knocktern/web_programming_course_project/blob/master/employer/quiz-builder.php): `employer/quiz-builder.php`
- [Applicant review](https://github.com/knocktern/web_programming_course_project/blob/master/employer/applicant-profile.php): `employer/applicant-profile.php`

### Administration

- [Admin management](https://github.com/knocktern/web_programming_course_project/blob/master/admin/dashboard.php): `admin/dashboard.php`
- [Admin reports](https://github.com/knocktern/web_programming_course_project/blob/master/admin/applications.php): `admin/applications.php`

### Other components

- **Job seeker**
- **Employer**
- **Administrator**

## Connections

- Request bootstrap → PDO connection: loads (evidence: `includes/bootstrap.php`)
- Request bootstrap → Shared helpers: loads (evidence: `includes/bootstrap.php`)
- Request bootstrap → Session and roles: loads (evidence: `includes/bootstrap.php`)
- Request bootstrap → Page layout: loads (evidence: `includes/bootstrap.php`)
- PDO connection → MySQL data: connects (evidence: `config/database.php`)
- Public landing → Job search: links to (evidence: `public/index.php`)
- Job seeker → Job search: filters roles (evidence: `README.md`)
- Job search → Job details: opens role (evidence: `public/jobs.php`)
- Job details → Job quiz: starts screening (evidence: `README.md`)
- Job quiz → Quiz result: submits answers (evidence: `README.md`)
- Quiz result → Course recommendations: failure recommends (evidence: `README.md`)
- Course recommendations → Course learning: opens course (evidence: `README.md`)
- Quiz result → Applications: pass permits (evidence: `README.md`)
- Applications → Seeker dashboard: tracks status (evidence: `README.md`)
- Job seeker → Seeker profile and CV: maintains CV (evidence: `README.md`)
- Seeker profile and CV → CV preview: previews CV (evidence: `README.md`)
- Applications → Interview details: renders details (evidence: `seeker/applications.php`)
- Applicant review → Interview details: renders details (evidence: `employer/applicant-profile.php`)
- Employer → Employer job management: publishes roles (evidence: `README.md`)
- Employer job management → Quiz authoring: continues setup (evidence: `employer/create-job.php`)
- Employer → Quiz authoring: authors questions (evidence: `README.md`)
- Employer → Applicant review: reviews candidates (evidence: `README.md`)
- Applicant review → Applications: updates schedule (evidence: `employer/applicant-profile.php`)
- Administrator → Admin management: manages platform (evidence: `README.md`)
- Administrator → Admin reports: reviews reports (evidence: `README.md`)
- Job search → PDO connection: queries roles (evidence: `public/jobs.php`)
- Applications → PDO connection: checks and writes (evidence: `seeker/applications.php`)
- Applicant review → PDO connection: reads and updates (evidence: `employer/applicant-profile.php`)
- CV preview → PDO connection: reads CV data (evidence: `seeker/cv-preview.php`)
- Session and roles → PDO connection: checks account (evidence: `includes/auth.php`)
