Inspiration
When preparing for exams, I often do study sessions with my friends in which we solve exercises together, review topics and do annotations. When the pandemic hit, this interaction became much more difficult, and I found video-chats to be stressful and distracting. Hence, I wanted to develop a solution that made it super easy to create chatrooms to try recapturing that experience.
What it does
Users can enter custom chatrooms (or have one automatically generated) to chat together, share sketches for diagrams or brainstorming, and share questions. LaTeX is supported for math formatting.
Questions can be answered by all participants and the results are verified using ML models for a better experience (we've all failed online exams because of dumb "mistakes" like an extra space or not writing an equation as the computer expects). The system uses NLP (Natural Language Processing) to identify the similarity between submission and expected answer, CAS (Computational Algebra System) to identify two math expressions as equal/equivalent, and unit conversion and entity recognition to identify if two scalar quantities are equal (e.g., 14.0 meters and 14m)
The system is designed to be as lightweight and easy to use as possible, with a minimal user interface and no login/registration or setup needed to start using it. Just click the link and send it to friends and you are ready to go!
How we built it
Backend (question verification)
The backend for question verification using ML was built using python. spacy was used alongside the en_core_web_sm dataset to handle al NLP operations. sympy was used for CAS and latex2sympy was used for converting LaTeX notation into symbolic expressions. Finally quantulum3 was used to detect units in scalar quantities and do comparisons.
I wrote a specific function for each type of answer verification. A Flask server receives a JSON payload with information regarding the desired type of verification, the expected answer and the user's submission. After calling the aforementioned functions, it returns whether the submission was correct.
The backend was deployed to the web using hop.io ignite and is exposed as a public REST API.
Frontend
The frontend was built using React with custom components for the chat bubbles, the sketching canvas and the chat user interface. Using the hop clients, messages are received via a web hook and shown in the system. The frontend communicates with the backend whenever a user answers a question to verify their submission. Sketches are shared by base64-encoding the image and sending it as text.
Challenges we ran into
Setting up the answer verification functions was tricky at the beginning as I had to catch several exceptions and fine-tune it to achieve the expected result. Likewise, deployment to hop.io proved tricky because of bugs and limited documentation. However the community at Discord proved super helpful and friendly to aid me into solving the issue. I have very few experience working with real-time communication tools, so there was a bit of a learning curve with integrating hop.io channels. Lastly, because of the memory requirements to run the backend, I was unable to upload the React project directly to hop.io, opting instead for Heroku.
Accomplishments that we're proud of
I am really happy with the end result of my project, more specifically the verification of answer submissions.
What we learned
I learned about all the nuances and difficult comparisons made by online examination systems. Likewise, I learned how easy and seamless it can be to build and deploy a realtime communication app in a couple of hours using hop.io
What's next for πChat
I expect to further expand πChat to include more features aimed to students, such as implementing a leaderboard for showing the user with most correct answers. Image and file sharing could also be a nice addition, as well as Markdown support. Also, more types of question verifications could be added (and bugs could be fixed). I think students can benefit greatly from this tool when used in conjunction with other tools to prepare their exams, and maybe even meet new people online.
Log in or sign up for Devpost to join the conversation.