Skip to content

Commit ef18026

Browse files
final additions
1 parent 2253677 commit ef18026

1 file changed

Lines changed: 19 additions & 32 deletions

File tree

‎_docs/developer/google_summer_of_code/2026_Garvit_Khandelwal.md‎

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,90 +12,77 @@ The primary objective of my GSoC 2026 project was to enhance the manual TA gradi
1212
While this might initially sound like a purely AI/ML-focused project, the reality was much broader. Because this was a completely novel feature for Submitty, the majority of my time was spent designing and implementing the full-stack architecture from the ground up.
1313

1414
Throughout the project, several significant architectural and design hurdles had to be overcome:
15-
- **No Pre-Existing Architecture:** Building a completely novel feature meant establishing the entire database and backend infrastructure from scratch.
1615
- **Fairness and Transparency:** We had to strike a delicate balance between providing the efficiency of AI clustering while guaranteeing that TAs retain complete, final control over the grading process.
1716
- **Global vs. Per-TA Clustering:** We had to decide whether clustering should be global (one method per gradeable) or per-TA (each TA creates their own clusters). Per-TA clustering introduced severe implementation challenges, so we strategically opted for a global clustering approach.
1817
- **Submission Version Conflicts:** We had to account for edge cases where a student changes their active submission version after a cluster has already been created. This voids the basis on which the student was originally clustered and presented a highly specific edge case new to Submitty.
1918

2019
## About Me
21-
Hello! I am a computer science undergraduate student at the Indian Institute of Technology, Mandi. Before GSoC, I honestly did not have any prior open-source contributions, so this program was my true starting point. The main reason I chose to work with Submitty was because I really liked the project, and the community was highly active and rewarding. Coming into the project, I had prior knowledge in domains like machine learning and deep learning, which aligned perfectly with the goals of this feature.
20+
Hello! I am a computer science undergraduate student at the Indian Institute of Technology, Mandi. Before GSoC, I honestly did not have any prior open-source contributions, so this program was my true starting point. The main reason I chose to work with Submitty was because I really liked the project, and the community was highly active and rewarding.
2221

2322
## Primary Contributions & Features
2423

2524
- **[Backend for submission clustering](https://github.com/Submitty/Submitty/pull/12886)**
26-
- **Status:** Merged
27-
- **Description:** The foundation of the project involved setting up the essential database architecture. This PR establishes a normalized database schema and introduces the necessary backend API endpoints to support clustering. The implementation was fully fortified with unit tests to ensure reliability.
25+
- **Description:** The foundation of the project involved setting up the essential database architecture. This PR establishes a normalized database schema and introduces the necessary backend API endpoints to support clustering.
2826
- **Technical Highlights:** PHP, Doctrine ORM, PostgreSQL
2927

3028
- **[Add submission clustering daemon](https://github.com/Submitty/Submitty/pull/13004)**
31-
- **Status:** Merged
32-
- **Description:** Running complex Python machine learning algorithms synchronously would block the UI and severely degrade the user experience. To solve this, this PR sets up a robust background daemon infrastructure. The clustering logic was refactored to offload processing to Python and raw SQL scripts, which are picked up by the daemon and executed asynchronously. Comprehensive Python unit tests were added to ensure stability.
29+
- **Description:** Running complex Python machine learning algorithms synchronously would block the UI and severely degrade the user experience. To solve this, this PR sets up a background daemon infrastructure.
3330
- **Technical Highlights:** Python, Daemon Infrastructure
3431

3532
- **[UI for clustering & table grouping](https://github.com/Submitty/Submitty/pull/12966)**
36-
- **Status:** Merged
37-
- **Description:** With the backend infrastructure in place, the next step was visualizing the clustered students. This PR introduces a "Create Cluster" modal where users can select their desired clustering algorithm (backed by the daemon). It also implements a "Group by Clusters" filter, seamlessly displaying students in a tabular format native to Submitty's design. Notably, as Submitty is migrating to Vue.js, this was the very first feature built entirely using Vue. Thorough testing was ensured via Cypress E2E, Cypress Component and PHPUnit tests.
33+
- **Description:** With the backend infrastructure in place, the next step was visualizing the clustered students. This PR introduces a "Create Cluster" modal where users can select their desired clustering algorithm. It also implements a "Group by Clusters" filter, displaying students in a tabular format native to Submitty's design. Notably, as Submitty is migrating to Vue.js, this was the very first feature built entirely using Vue.
3834
- **Technical Highlights:** Vue.js, PHP, Twig, Cypress
3935

4036
- **[Single Cluster](https://github.com/Submitty/Submitty/pull/13161)**
41-
- **Status:** Merged
42-
- **Description:** This PR introduces a new basic yet important algorithm which returns only a single cluster containing all valid submitters. This was built for cases like to assign bonus marks to all the active submitters.
37+
- **Description:** This PR introduces a new algorithm which returns only a single cluster containing all valid submitters. This was built for cases like to assign bonus marks to all the active submitters.
4338
- **Technical Highlights:** Python
4439

4540
- **[Cluster Grading](https://github.com/Submitty/Submitty/pull/13103)**
46-
- **Status:** Open
47-
- **Description:** This PR bridges the gap between clustering students and actually helping TAs grade faster. It integrates the core functionality into the TA Grading (Rubric) page. I added intuitive UI toggle icons allowing TAs to seamlessly switch in and out of "Clustering Mode". When active, grading one student automatically applies that grade to the entire cluster. A major UI/UX challenge here was designing clear visual cues so TAs remain fully aware of the sweeping impact of their actions. This Vue-based feature is fully backed by Cypress tests.
41+
- **Description:** This PR bridges the gap between clustering students and actually helping TAs grade faster. It integrates the core functionality into the TA Grading (Rubric) page. I added intuitive UI toggle icons allowing TAs to seamlessly switch in and out of "Clustering Mode". When active, grading one student automatically applies that grade to the entire cluster. A major UI/UX challenge here was designing clear visual cues so TAs remain fully aware of the sweeping impact of their actions.
4842
- **Technical Highlights:** Vue.js, PHP, Twig, Cypress
4943

5044
- **[Adding container for running custom algorithm](https://github.com/Submitty/DockerImages/pull/76)**
51-
- **Status:** Open
52-
- **Description:** To support advanced customization, this PR introduces a dedicated Docker container pre-installed with popular machine learning libraries, isolating the execution environment for custom TA scripts.
45+
- **Description:** To support advanced customization, this PR introduces a dedicated Docker container pre-installed with popular machine learning libraries.
5346
- **Technical Highlights:** Docker
5447

5548
- **[Custom Algorithm](https://github.com/Submitty/Submitty/pull/13176)**
56-
- **Status:** Open
57-
- **Description:** While predefined clustering algorithms are useful, every gradeable is unique, making it impossible to predict every grading scenario. This feature empowers instructors/TAs to upload custom Python scripts to define their own clustering logic. Because executing user-uploaded Python directly on the main server poses severe security risks, this PR leverages the newly built Docker container to safely run these custom algorithms in an isolated environment.
49+
- **Description:** While predefined clustering algorithms are useful, every gradeable is unique, making it impossible to predict every grading scenario. This feature empowers instructors/TAs to upload custom Python scripts to define their own clustering logic.
5850
- **Technical Highlights:** Vue.js, PHP, Docker
5951

6052
## Other PRs
6153

6254
Throughout the summer, I contributed to various other areas of the codebase, handling critical infrastructure issues, bug fixes, and performance optimizations. While a few major ones are highlighted below, a [complete list of my Pull Requests can be found here](https://github.com/Submitty/Submitty/pulls?q=is%3Apr+author%3AGarvitKhandelwal31+is%3Aclosed).
6355

64-
- [[Refactor:System] Fix Failing CI/DB Check on Main](https://github.com/Submitty/Submitty/pull/13104): A significant system install refactoring PR inadvertently broke the CI/DB checks across the `main` branch. This PR investigated and successfully resolved the failing checks, restoring the CI pipeline.
56+
- [[Refactor:Autograding] Optimize PDF Redaction](https://github.com/Submitty/Submitty/pull/12471): Refactored the time required for PDF redactions by up to 2x.
6557
- [[Bugfix:TAGrading] Fix PDF Header Overlap](https://github.com/Submitty/Submitty/pull/12793): Fixed a UI issue where the grading page header obscured the title of student-uploaded PDF files, significantly improving TA visibility and usability during grading.
6658
- [[Bugfix:TAGrading] Fix Grade Override Logic](https://github.com/Submitty/Submitty/pull/12651): Resolved underlying logic bugs within the manual grade override system.
6759
- [[Feature:RainbowGrades] Manual Upload Warning Banner](https://github.com/Submitty/Submitty/pull/12645): Added a warning banner that displays when users manually upload rainbow grades to prevent accidental data overrides.
6860
- [[UI/UX:Forum] Forum UI Enhancements](https://github.com/Submitty/Submitty/pull/12622): Implemented several major UI improvements to enhance the user experience on the Submitty discussion forums page.
69-
- [[Refactor:Autograding] Optimize PDF Redaction](https://github.com/Submitty/Submitty/pull/12471): Refactored the time required for PDF redactions by up to 2x.
7061

7162
## Code Reviews & Community Impact
7263

73-
Beyond authoring code, I actively dedicated a significant portion of my time to reviewing Pull Requests from across the entire codebase. Reviewing others' code was an invaluable experience; it rapidly accelerated my understanding of Submitty's massive architecture and allowed me to help shape the quality of the project.
74-
75-
Thanks to Submitty's highly collaborative culture, I successfully reviewed a total of **[53 Pull Requests](https://github.com/Submitty/Submitty/pulls?q=is%3Apr+commenter%3AGarvitKhandelwal31+-author%3AGarvitKhandelwal31+is%3Aclosed)** throughout my GSoC journey, actively participating in architectural discussions and ensuring high coding standards.
64+
Beyond authoring code, I actively dedicated a significant portion of my time to reviewing Pull Requests from across the entire codebase. Reviewing others' code was an invaluable experience; it rapidly accelerated my understanding of Submitty's massive architecture and allowed me to help shape the quality of the project.
7665

77-
## Documentation
78-
79-
The complete user guide for this feature can be found in the official Submitty documentation here:
80-
- [Cluster Grading Documentation](https://submitty.org/grader/rubric_grading/cluster_grading)
66+
Thanks to Submitty's highly collaborative culture, I successfully reviewed a total of **[54 Pull Requests](https://github.com/Submitty/Submitty/pulls?q=is%3Apr+commenter%3AGarvitKhandelwal31+-author%3AGarvitKhandelwal31+is%3Aclosed)** throughout my GSoC journey, actively participating in architectural discussions and ensuring high coding standards.
8167

8268
## Work In Progress / Future Scope
8369

8470
There are still exciting enhancements left to build on top of this foundation. I have listed several tracking issues for the remaining features:
8571

86-
- [Feature: Delete Clusters](https://github.com/Submitty/Submitty/issues/13148)
87-
- [Feature: Rename Clusters](https://github.com/Submitty/Submitty/issues/13147)
88-
- [Feature: Visualize Clustering Data](https://github.com/Submitty/Submitty/issues/13116)
72+
- [Delete Clusters](https://github.com/Submitty/Submitty/issues/13148)
73+
- [Rename Clusters](https://github.com/Submitty/Submitty/issues/13147)
74+
- [Visualize Clustering Data](https://github.com/Submitty/Submitty/issues/13116)
75+
- [UI error/message for cluster-grading conflicts](https://github.com/Submitty/Submitty/issues/13184)
76+
- [Add "Prev/Next Cluster" option to TA Grading navigation settings](https://github.com/Submitty/Submitty/issues/13185)
8977

9078
## Reflection
9179

92-
Working on such a massive, widely-used codebase and implementing a feature of this scale from scratch was an extraordinary experience. Throughout this journey, I upskilled significantly, mastering new technologies and learning how to architect complex, full-stack systems. As I mark the end of my GSoC project, I would like to express my deepest gratitude to my mentors:
80+
Working on such a massive codebase and implementing a feature of this scale from scratch was an extraordinary experience. Throughout this journey, I upskilled significantly, mastering new technologies and learning how to architect complex, full-stack systems. As I mark the end of my GSoC project, I would like to express my deepest gratitude to my mentors:
9381

94-
- **[William J Allen](https://github.com/williamjallen):** Beyond all the technical help, I am incredibly grateful for the numerous technologies I learned from him along the way. His brilliant code reviews, extraordinary ideas, and structural guidance on how to build a feature of this scale were truly invaluable.
82+
- **[William J Allen](https://github.com/williamjallen):** Beyond all the technical help, I am incredibly grateful for the deep architectural insights and software engineering best practices I learned from him along the way. His brilliant code reviews, extraordinary ideas, and structural guidance on how to build a feature of this scale were truly invaluable.
9583
- **[Professor Barbara Cutler](https://github.com/bmcutler):** Barb held daily meetings, which made iterating on ideas incredibly fast. Her suggestions and perspectives fundamentally improved this feature. The most essential lesson I learned from her was how to truly think from the perspective of the end user.
9684

97-
I would also like to thank the fellow RPI contributors. Their suggestions, feedback, and thorough reviews on my PRs were instrumental in polishing this project. A big thanks to my fellow GSoC mates as well for the shared camaraderie.
98-
85+
I would also like to thank the fellow GSoC & RPI contributors. It was a great experience collaborating with you all!
9986
Finally, I am deeply grateful for this incredible opportunity. Thank you!
10087

10188
## Contact Me

0 commit comments

Comments
 (0)