As someone with ADHD, focus has (understandably) never been my strong suit. My brain seems to turn itself off in the classroom completely, like it refuses to retain any of the information no matter how much I internally yell at it. This makes learning new content VERY DIFFICULT for me. Especially taking notes.

Almost every teacher expects students to take notes in their class, which is fine if you're capable of doing it. I'm not. And I realize that it's not just me facing this problem. From neurological to physical, there are so many different conditions that can affect a student's learning-- things like lack of focus, poor hearing, motor function issues can make it almost impossible to take notes. No student should have to struggle this much in their learning journey.

Solution: Apollo!!

Apollo is a flask app that allows users to turn live teacher lectures into notes with the click of a button. Users will be able to run the program while the teacher is talking, and it will automatically convert everything into virtual notes that can be used for studying and review. Can't focus? Physically struggle to write (or type)? Can't hear the teacher well? Let Apollo handle it for you.

Features

  • Working sign up/login system to save all notes
  • Live audio to readable notes (updates dynamically-- see it as it happens!)
  • Options to edit notes/delete unnecessary ones

Tech Stack

Frontend:

  • HTML5
  • CSS3
  • Plain JS

Backend:

  • Flask
    • Sqlite3
    • SpeechRecognition
    • GeminiAPI

❀ Personal ❀

Challenges

The biggest challenge for me was linking the audio recorded on the frontend with the backend to process it. I used MediaStream API for this; since was my first time using it, I didn't understand much of it. At first, I tried using ChatGPT for help, but the script it gave me didn't work, so I went "screw it" and did my own research. This was...tedious, to say the least.

But the worst part was file conversion. SpeechRecognition only processes WAV files. I couldn't use ffmpeg + pydub since I plan to host this on PythonAnywhere, so I had to handle the conversion directly in Javascript. This was HELL on EARTH. I was a thread away from crashing out. Actually, none of the Javascript libraries were working for me (for some strange reason?) so I had to build the entire WAVfile through js before sending it over.

Just this part of the project alone took me nearly eight hours, the result of which was a (working!) amalgamation of four different sources and my own brain-fried intuition. Seriously, I'm pretty sure just the audio capture + conversion takes up more than half of the main script.

Accomplishments

I'm proud of building a project that I would genuinely use <3 This project turned out incredible given the time constraints and my skill level. I'm surprised I managed to actually churn out something of decent quality running on no sleep and multiple servings of chocolate cake (I pulled an all-nighter for this and it was BRUTAL.)

Skills Learned

First time using SpeechRecognition! It's a great library and I had a lot of fun using it :3 Also, finally learned how to retrieve audio from the client, which is also great (and very important!!). Got more familiar with MediaStream as well.

Issues

Right now, the biggest issue is that since I'm broke, I'm using free features of both SpeechRecognition and GeminiAPI. Understandably, this places some limits on how much this project can be used. Maybe I'll get credits for better functionality in the future.

What's next?

Here's a list of some features I would love to implement in the future:

  • Better customization: Potential color modes (light/dark? colorschemes?)
  • Organization: Drag to change position of notes, group notes together based on subject
  • Practice: Practice feature similar to Gimkit/Blooket

Built With

Share this project:

Updates