Google Summer of Code 2022 with Oppia

About Oppia
Oppia is an online tool, that helps for students who lacks the accessibility to education. It enables anyone to easily create and share interactive activities (‘explorations’) which try to recreate the experience of one-on-one tutoring.
Introduction to my project
The Oppia Contributor Dashboard (oppia.org/contributor-dashboard) allows users to submit suggestions for translations and practice questions, which are then reviewed and accepted (if they meet the bar) or rejected (if they don’t). These contributions are important for making Oppia’s lessons accessible and useful for learners around the world, and we would like to recognize and credit users who have made significant contributions in this area. This project aims to build a system to show the impact of the contributions of users.
Milestone 1
The aim of the milestone 1 is to create the backend infrastructure for the project.
- Create all the storage models
- Create all the required backend services
- Create/update all the required controllers
- Write all the backend tests required for the project
Pull Requests
- (Contributor Recognition Infrastructure) Milestone 1.1: Introduce storage models for contribution stats: Introduced the storage models to store contributor statistics and added unit tests for them.
- (Contributor Recognition Infrastructure) Milestone 1.2: Introduce required domain objects for the contributor recognition infrastructure: Added domain objects to represent contributor stats and to act upon them in the services and controllers. Unit tests were added as well.
- (Contributor Recognition Infrastructure) Milestone 1.3: Add required suggestion services to handle contributor stats: Core logic of the project is implemented and added extensive unit tests.
- (Contributor Recognition Infrastructure) Milestone 1.4: Add required email services to notify contributors about levels they achieved: Added email services to notify contributors regarding their achievements. Unit tests were also added.
- (Contributor Recognition Infrastructure) Milestone 1.5: Write asynchronous tasks to send new rank notifying emails: Asynchronous tasks were added in order to send emails parallely. Unit tests were also added.
- (Contributor Recognition Infrastructure) Milestone 1.6: Implement controller layer for the project: Added the controller layer of the project as the interface to connect frontend and backend services. Unit tests were also added.
Milestone 2
The aim of the milestone 2 is that contributors can see their stats and badges in a new stats tab on their logged-in Contributor Dashboard (on both desktop and mobile devices).
- Add all frontend services
- Implement contributor stats display in frontend
- Implement contributor badge display in frontend
- Implement contributor certificate generation
- Make the “Accomplishments” page mobile-responsive
Pull Requests
- (Contributor Recognition Infrastructure) Milestone 2.1: Add new frontend endpoints to call the ContributorStatsSummariesHandler: Added frontend services and corresponding unit tests to interact with backend. Extensively tested with unit tests.
- (Contributor Recognition Infrastructure) Milestone 2.2: Create contributor stats component to contributor dashboard with mobile view: Added contributor stats page with the mobile responsive views. Also added frontend unit tests.(Demo video)
- (Contributor Recognition Infrastructure) Milestone2.3: Add contributor badges with the mobile view: Added contributor badges page with responsive mobile views. Also added frontend unit tests.(Note: still it is in review as of 21st of Nov).(Demo video)
- (Contributor Recognition Infrastructure) Milestone2.4: Add certificate generation for contributors (including service method, API controller): Added certificate generation for contributions of cotributors. Also added frontend unit tests.(Note: still it is in review as of 21st of Nov).(Demo video)
- (Contributor Recognition Infrastructure) Milestone2.5: Cover e2e tests for contributor stats and contributor badges: Adds end-to-end tests for the project to make sure nothing breaks in future changes. This is still in work-in-progress state due to some of the errors I encountered in my laptop when trying to simulate e2e tests in my laptop.
Future Plans
After finishing up the spill over PRs, an Apache Beam job needs to be run in order to initialize the stats models according to the already existing contributions of contributors.
Conclusion
It’s been an amazing journey with Oppia I have been having. It helped me to get started in opensource contributions and finally made me to own a my own product with GSoC. I should thank Sagang Wee and Sean Lip for their immense support throughout my opensource journey.