{"id":28321474,"url":"https://github.com/visvav/skillsyncer-a-virtual-classroom","last_synced_at":"2026-02-26T07:12:18.766Z","repository":{"id":294810927,"uuid":"988136420","full_name":"VisvaV/SkillSyncer-A-Virtual-Classroom","owner":"VisvaV","description":"A Flask + MySQL-based educational management system for course enrollment, progress tracking, assignment submissions, quizzes, and badge awards. Implements advanced DBMS features like procedures, triggers, views, and analytics for students and teachers.","archived":false,"fork":false,"pushed_at":"2025-05-23T17:50:09.000Z","size":81,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-07T01:07:57.755Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VisvaV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-22T05:34:58.000Z","updated_at":"2025-05-23T17:50:13.000Z","dependencies_parsed_at":"2025-05-29T07:33:50.475Z","dependency_job_id":null,"html_url":"https://github.com/VisvaV/SkillSyncer-A-Virtual-Classroom","commit_stats":null,"previous_names":["visvav/skillsyncer-a-virtual-classroom"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VisvaV/SkillSyncer-A-Virtual-Classroom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisvaV%2FSkillSyncer-A-Virtual-Classroom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisvaV%2FSkillSyncer-A-Virtual-Classroom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisvaV%2FSkillSyncer-A-Virtual-Classroom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisvaV%2FSkillSyncer-A-Virtual-Classroom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VisvaV","download_url":"https://codeload.github.com/VisvaV/SkillSyncer-A-Virtual-Classroom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisvaV%2FSkillSyncer-A-Virtual-Classroom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29851231,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T22:37:40.667Z","status":"online","status_checked_at":"2026-02-26T02:00:06.774Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-25T12:14:09.293Z","updated_at":"2026-02-26T07:12:18.754Z","avatar_url":"https://github.com/VisvaV.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skillsyncer - Educational Management System\n\n## Overview\nSkillsyncer is an educational management system which is designed to manage academic activities for students and teachers, including course enrollment, classroom management, lessons, assignments, quizzes, projects, and badge awards. It uses MySQL 8.0 as the backend database, implementing PL/SQL components like stored procedures, functions, triggers, and views to automate processes. The frontend is a Python Flask application with HTML, CSS (Bootstrap 5), and JavaScript, providing an interactive interface for users.\nThis repository highlights the DBMS implementation, focusing on database automation and its integration with a web application to streamline educational workflows.\nFeatures\n\n- Relational database with 19 tables to manage users, courses, classrooms, lessons, tasks, badges, and timelines.  \n- Automated progress tracking for students, updating course and classroom progress after each submission.  \n- Task management system with a timeline to track deadlines for assignments, quizzes, and projects.  \n- Badge system that awards students for achieving performance milestones (e.g., 80%+ progress in a course).  \n- Analytics through views and functions to display average grades, pending tasks, and badge counts.  \n- Real-time automation using triggers and procedures to ensure data consistency after user actions.\n\n## Technologies Used\n\nDatabase: MySQL 8.0  \nBackend: Python 3.9, Flask 2.0.1  \nFrontend: HTML5, CSS3 (Bootstrap 5), JavaScript  \nTools: MySQL Workbench, Visual Studio Code, Git\n\n## Database Setup\n### Step 1: Create Database\nCreate the skillsyncer database and set it as the active database:\nCREATE DATABASE skillsyncer;\nUSE skillsyncer;\n\n\nIf the database already exists, you may need to drop it first using DROP DATABASE skillsyncer; to avoid conflicts.\n\n### Step 2: Import Schema\nNote: The schema.sql file, which includes table definitions, procedures, functions, triggers, views, and sample data, is not included in this repository due to legal constraints. Please contact the authors (see Contact section) to obtain the schema file for setup.\nOnce you have the schema.sql file, import it using:\nmysql -u yourusername -p skillsyncer \u003c schema.sql\n\nThis sets up:\n\n19 tables with primary and foreign key constraints (ON DELETE CASCADE, ON UPDATE RESTRICT).  \nStored procedures like UpdateCourseProgress, AddUserToClassroom, and AwardBadge.  \nFunctions such as GetAvgGrade, GetPendingTasks, and GetBadgeCount.  \nTriggers including AfterSubmission, AfterQuizSubmission, and UpdateLastLogin.  \nViews like StudentPerformance and TimelineOverview.  \nSample data for users, courses, classrooms, and tasks for testing purposes.\n\n## Application Setup\n### Step 1: Install Dependencies\nInstall the required Python packages for the Flask application:\npip install flask mysql-connector-python\n\n\nEnsure Python 3.9 is installed. Use pip3 if pip points to Python 2.x.\n\n### Step 2: Configure Database\nCreate or edit the config.py file in the project root directory to set up the database connection:\nDB_CONFIG = {\n    'host': 'localhost',\n    'user': 'your_mysql_username',\n    'password': 'your_mysql_password',\n    'database': 'skillsyncer'\n}\n\n\nReplace your_mysql_username with your MySQL username (e.g., root).  \nReplace your_mysql_password with your MySQL password. If no password is set, use an empty string ('').  \nThe host is localhost if MySQL runs on the same machine; otherwise, use the server’s IP address.\n\n### Step 3: Run Flask App\nStart the Flask application:\npython app.py\n\nAccess the app in your browser at: http://localhost:5000\n\nIf port 5000 is in use, edit app.py to change the port (e.g., app.run(port=5001)), then access at http://localhost:5001.\n\n## Usage Guide\n### Login\nLog in using sample credentials from the dataset:  \n\nEmail: student@example.com  \nPassword: password\n\nThis authenticates against the User table, verifying the email and password. Upon login, the UpdateLastLogin trigger updates the LastLoginTime column in the User table with the current timestamp, helping track user activity.\n### Enroll in Course\nTo enroll in a course:\n\nNavigate to the enrollment section on the web interface.  \nSelect a classroom from the available list (populated from the Classroom table).  \nSubmit the enrollment request.\n\nThis action calls the AddUserToClassroom procedure, which:\n\nChecks for duplicate enrollments in the Enrollment table.  \nIf none exist, adds a new record to Enrollment with user_id, classroom_id, EnrollmentDate (current date), and Progress (0.00).  \nAdds a record to the Participant table with the user’s role (Student or Teacher).  \nIncrements the NumberOfEnrollments in the Classroom table.\n\n### Submit Assignment/Quiz\nTo submit an assignment or quiz:\n\nGo to the tasks section and select an assignment or quiz (listed from the Assignment or Quiz table).  \nEnter your submission details (e.g., answers or grades for testing).  \nSubmit the form.\n\nThis process:\n\nInserts a record into the Submission (for assignments) or QuizSubmission (for quizzes) table with the user_id, assignment_id or quiz_id, SubmissionDate, and Grade or Score.  \nTriggers AfterSubmission (for assignments) or AfterQuizSubmission (for quizzes), which:  \nCalls UpdateCourseProgress to recalculate the student’s progress based on completed tasks, updating Progress in Enrollment and CompletionPercentage in Course.  \nCalls AwardBadge to check if the student’s progress exceeds 80%, awarding a badge by adding a record to UserBadge if eligible.\n\n\n### View Analytics\nAccess analytics through the web interface under the analytics section:\n\nStudentPerformance View: Displays a table with:  \nStudent name and roll number (from User).  \nCourse and classroom details (from Course and Classroom).  \nProgress percentage (from Enrollment).  \nAverage quiz scores, assignment grades, and project grades (from QuizSubmission, Submission, ProjectSubmission).\n\n\nTimelineOverview View: Shows a list of upcoming tasks:  \nTask type (Assignment, Quiz, or Project) and name (e.g., “Math Assignment 1”).  \nDue date (from Timeline).  \nHelps students plan their schedules and teachers monitor task completion.\n\n\n\n## DBMS Implementation\nDatabase Tables\nThe database consists of 19 tables to manage the system’s data:\n\nUser: Stores user details (e.g., UserID, Name, Email, Password, Role, LastLoginTime).  \nCourse: Holds course information (e.g., CourseID, CourseName, CompletionPercentage).  \nClassroom: Links to Course, tracks enrollments (e.g., ClassroomID, CourseID, NumberOfEnrollments).  \nLesson: Contains lesson content (e.g., LessonID, ClassroomID, LessonName).  \nAssignment, Quiz, Project: Manage tasks (e.g., AssignmentID, LessonID, DueDate, TotalMarks).  \nSubmission, QuizSubmission, ProjectSubmission: Record submissions (e.g., SubmissionID, UserID, Grade).  \nEnrollment: Tracks user enrollment (e.g., EnrollmentID, UserID, ClassroomID, Progress).  \nParticipant: Defines user roles in classrooms (e.g., ParticipantID, ClassroomID, Role).  \nBadge, UserBadge: Manage badges (e.g., BadgeID, CourseID, UserBadgeID, AwardedDate).  \nTimeline: Tracks deadlines (e.g., TimelineID, UserID, ActivityType, DueDate).  \nSampleVideo, Material: Store lesson resources (e.g., SampleVideoID, VideoLink).  \nQuestion, ExerciseProblem: Support quizzes and exercises (e.g., QuestionID, QuizID, QuestionText).\n\nForeign keys ensure data integrity with ON DELETE CASCADE (e.g., deleting a course removes its classrooms) and ON UPDATE RESTRICT (prevents invalid updates to parent keys).\nStored Procedures\n\nUpdateCourseProgress(user_id, classroom_id):  \n\nCalculates progress by dividing completed lessons (based on submissions) by total lessons in the classroom.  \nUpdates Progress in Enrollment, CompletionPercentage in Course (average of all enrollments), and NumberOfEnrollments in Classroom.  \nUsed after submissions to keep progress metrics current.\n\n\nAddUserToClassroom(user_id, classroom_id, user_role):  \n\nAdds a user to a classroom if not already enrolled.  \nInserts into Enrollment and Participant tables, increments NumberOfEnrollments.  \nEnsures no duplicate enrollments with a check.\n\n\nAwardBadge(user_id, course_id):  \n\nChecks if the user’s average progress in the course (across classrooms) exceeds 80%.  \nIf eligible and no prior badge exists, adds a record to UserBadge with the current date.  \nPrevents duplicate badge awards for the same course.\n\n\n\n## Functions\n\nGetAvgGrade(user_id):  \n\nCombines grades from Submission, QuizSubmission, and ProjectSubmission.  \nReturns the average as a decimal (e.g., 85.50), or 0.00 if no submissions exist.  \nUsed to display a student’s overall performance.\n\n\nGetPendingTasks(user_id):  \n\nCounts tasks in Timeline due on or after the current date, excluding completed ones.  \nReturns an integer (e.g., 3 pending tasks).  \nHelps users see upcoming workloads.\n\n\nGetBadgeCount(user_id):  \n\nCounts records in UserBadge for the user.  \nReturns an integer (e.g., 5 badges).  \nDisplays a user’s achievements on their profile.\n\n\n\nTriggers\n\nAfterSubmission:  \n\nExecutes after an assignment submission.  \nCalls UpdateCourseProgress to update the student’s progress.  \nCalls AwardBadge to check for badge eligibility.\n\n\nAfterQuizSubmission:  \n\nExecutes after a quiz submission.  \nPerforms the same actions as AfterSubmission.\n\n\nUpdateLastLogin:  \n\nExecutes before a User table update.  \nSets LastLoginTime to the current timestamp if it’s outdated or null.\n\n\n\nViews\n\nStudentPerformance:  \n\nJoins User, Enrollment, Classroom, Course, and submission tables.  \nShows student details, course progress, and average grades/scores.  \nUsed by teachers to monitor performance and by students to track their progress.\n\n\nTimelineOverview:  \n\nJoins Timeline with Assignment, Quiz, and Project tables.  \nLists pending tasks with their names and due dates (e.g., “Math Quiz 1, Due: 2025-05-25”).  \nHelps users manage their schedules.\n\n\n\n## Project Structure\nskillsyncer/\n├── app.py              # Flask main application with routes\n├── config.py           # Database connection settings\n├── templates/          # HTML templates for the web interface\n│   ├── login.html      # Login page\n│   ├── dashboard.html  # User dashboard (student/teacher)\n│   ├── enroll.html     # Enrollment form\n│   ├── tasks.html      # Task submission page\n│   ├── analytics.html  # Analytics display page\n│   └── error.html      # Error page\n├── static/             # Static assets\n│   ├── css/            # CSS files\n│   │   └── style.css   # Custom styles\n│   └── js/             # JavaScript files\n│       └── script.js   # Custom scripts\n├── README.md           # Project documentation\n└── LICENSE             # MIT License file\n\nNote: The schema.sql file is not included due to legal constraints.\n## Screenshots\n\nLogin Page\nDescription: The login page where users enter their email and password to access the system.\nStudent Dashboard\nDescription: The student dashboard showing enrolled courses, progress, and pending tasks.\nEnrollment Form\nDescription: The form where users select a classroom to enroll in a course.\nTask Submission\nDescription: The page for submitting an assignment or quiz, showing task details and submission form.\nAnalytics Page\nDescription: The analytics page displaying the StudentPerformance view with progress and grades.\n\n## License\nThis project is licensed under the MIT License. See the LICENSE file for details.\n\n## Authors\n\nEmail Visva V at visvafelix2005@gmail.com  for the schema file or inquiries.  \nReport issues at: https://github.com/VisvaV/skillsyncer/issues\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisvav%2Fskillsyncer-a-virtual-classroom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisvav%2Fskillsyncer-a-virtual-classroom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisvav%2Fskillsyncer-a-virtual-classroom/lists"}