We were tutoring a few kids in our neighbourhood in Python programming. That experience taught us very quickly that people prefer to learn by doing and learn better while solving cleverly designed drills.
Platforms like HackerRank and CodeWars were greatly helpful in our personal education. They helped us hone our problem-solving skills and learn new programming languages.
We wanted to build a platform that did just that for kids in India who'd miss out on those platforms, mostly due to language issues and the lack of mentors to help them. Our slightly ambitious plan is to get volunteers from local universities to sign up on our platform, as mentors, and undertake a handful of children. The mentors will instruct the kids in local languages.
What it does
Though platforms like HackerRank allow us to host our own challenges, they don't currently allow us to assign specific drills to student. Nor do they encourage interaction with mentors. We decided to solve that.
Chaduvu School, when completed, will be a HackerRank-like platform with support for regional Indian languages.
Here's what the application does for now:
Administratorscan upload and assign problems or drills to students.
- Mentors write test cases (input-output key-value pairs)for each problem. These test cases are stored in the database.
- Student can read problem statement and solve the problem on our IDE. We use judge0, the most advanced open-source online code execution system in the world, to compile that code.
We decided to use the concept of gamification in our application. Just like HackerRank and CodeWars, we reward learners with points. There's a ranking system of sorts, based on the number of points earned. Naruto reference alert: Initiates start at the "Academy Student" level and work their way up to the "Kage" level.
How we built it
We used two popular, scalable and well-maintained web frameworks. For frontend, we used React. And Django in the backend. Our entire application is deployed on a Heroku server.
../token-auth: Logging in. Returns JWT token.
../core/users/: Submit Sign Up form.
../problems/<int:problemID>: Returns a JSON with the problem.
../problems/<int:problemID>/<int:userID>: Checks if problem is solved by user, returns boolean.
Challenges we ran into
- A lack of prior experience with the Django REST framework slowed down our development.
- Migrating the application from our local server to a production server was a hassle.
- Spent too long on the authentication system, which left us with little time for core functionalities.
- Lack of good Content Management System. If we were to start again, we'd start by designing a CMS first.
Accomplishments that we're proud of
- We built a robust authentication system using JSON Web Tokens.
- Integrated judge0 API with a code editor
- Implemented the Atomic Design methodology to make the frontend application
- Interfacing REST API endpoints with React frontend.
- Designing and implementing API endpoints to store and retrieve problems.
- Design and implement Login and Signup forms. Validated them.
What we learned
- Integrating Django based back-end with with React based front-end.
- Basics of API implementation.
- State Management in context of RESTful API
What's next for Chaduvu School
- Add support for two South Indian regional languages: Tamil and Telugu.
- Once the MVP is ready, deploy to production server.
- Integrate with Zoom or Jitsi Meet to offer live sessions.