This document describes the core domain model implemented in server/src/models and how the entities relate. It is meant as a quick map for agents working on the platform.
Useris the primary identity (GitHub-based) with contact info, profile details, and visibility settings.ProfilePermissionsstores per-user visibility rules for profile fields (public vs student vs mentor).ExternalAccountrecords auxiliary learning platforms (codewars, etc) onUser.LoginStatestores short-lived state for auth or channel linking flows.Sessiondefines derived course roles used by authorization (CourseRole).
Coursedefines a cohort with dates, discipline, location, flags (planned/completed/invite-only), mentoring settings, and certificate rules.Disciplineis a taxonomy item used by courses, tasks, and events.DiscordServerholds course communication endpoints (gratitude URL, mentors chat, etc).Studentis a per-course role for aUserwith progress flags (failed/expelled/completed), scores, rank, mentoring, and certificate.Mentoris a per-course role for aUserwith mentor settings and assigned students.CourseUserstores course-scoped role flags (manager, supervisor, activist, task owner, etc).CourseManageris a simple join for course managers (legacy or specific flows).Registryis a course registration request for a user (student or mentor) with status.MentorRegistrystores mentor preferences and capacity for course assignment.UserGroupis a static group of users tied to course roles.
Taskis the reusable definition of a task (type, description, skills, tags, criteria).CourseTaskis aTaskscheduled for a specific course with deadlines, scoring, checker type, and cross-check status.TaskCriteriastores per-task cross-check criteria definitions.TaskResultis the authoritative score and submission links for a student on a course task.TaskCheckerlinks a mentor to a student for a course task review.TaskArtefactstores optional artefacts (video, presentation, notes) per student and course task.TaskVerificationstores auto-check results for tests (status, score, answers, metadata).TaskInterviewStudentenrolls a student into a task-based interview flow.TaskInterviewResultstores mentor interview results and form answers for a task.
Used when CourseTask.checker = crossCheck.
TaskSolutionis a student's submitted solution URL plus review metadata.TaskSolutionCheckerassigns a reviewer (student) to a submitted solution.TaskSolutionResultstores a review score, criteria-based review, and discussion messages.CourseTask.crossCheckStatustracks lifecycle:initial->distributed->completed.
StageInterviewrecords a mentor-student interview tied to a course and optional task/stage.StageInterviewStudentregisters a student into stage interview flow.StageInterviewFeedbackstores structured JSON feedback for a stage interview.
TeamDistributiondefines a team formation window and constraints (size, score thresholds).TeamDistributionStudenttracks who participates in distribution and whether they are assigned.Teamis a concrete team with members, lead, and chat metadata.
Eventis a reusable schedule entity (lecture, workshop, etc) with description and type.CourseEventschedules anEventin a course with date/time, organizer, and details.
Feedbackis a public gratitude/badge from one user to another (course-scoped).PrivateFeedbackis internal feedback not visible publicly.StudentFeedbackis mentor feedback with structured soft-skill ratings and recommendations.Certificateis an issued course certificate linked to a student.Contributorrepresents platform contributors with profile descriptions.
Resumestores CV data for a user and visibility to employers.
Notificationdefines notification types and parent/child relationships.NotificationChanneldefines delivery channels (email,telegram,discord).NotificationChannelSettingsprovides per-notification templates per channel.NotificationUserSettingsstores per-user subscription preferences per notification+channel.NotificationUserConnectionstores channel identifiers linked to users (e.g. Telegram id).Alertis a global or course-scoped banner message.
Historystores audit records for inserts/updates/removals with before/after snapshots.RepositoryEventstores webhook-like activity from GitHub repositories.Promptstores configurable text prompts for AI-assisted features.
User->Student/Mentor(per course)Course->Student,Mentor,CourseTask,CourseEvent,RegistryTask->CourseTask->TaskResult/TaskSolution/TaskVerificationTaskSolution->TaskSolutionChecker->TaskSolutionResult(cross-check)CourseTask->TaskInterviewStudent/TaskInterviewResultCourse->TeamDistribution->Team/TeamDistributionStudentCourse->Certificate(viaStudent)User->Resume/ProfilePermissions/NotificationUserSettings