Inspiration
I have personally always been a poor note-taker. My writing is messy, my notes are disorganized and it's often hard for me to find specific information or dates from my notes. A tool to deal with these issues would be ideal for someone like me.
What it does
This is an intelligent notes application that helps you capture, organize, and extract insights from your notes. Think of it as a smart notebook that not only stores your notes but understands them. You can type notes manually, upload text files, or upload audio files. You can then ask it questions like 'What did I write about groceries?' and it will intelligently search through all your notes to find relevant information. It can also generate AI-powered summaries of your entire note collection, helping you see patterns and insights you might have missed.
How I built it
The backend web framework used here is FastAPI for its good performance and because it is very commonly used for this type of Python apps. SQLite was chose for the database due to its simplicity of use and serverless nature (this app does not need a complicated database). Pydantic handles data validation and serialization. Uvicorn is used for the ASGI server, as FastAPI works best with it.
Streamlit was used for the frontend because it is an aesthetically pleasing and is fairly simple to develop in. This is ideal for an MVP.
The note summarizer and Q&A features are powered by OpenAI's GPT-4o-mini, as it is a proven to have a robust performance for this type of application. Whisper handles the audio transcription for audio file uploads.
Challenges I ran into
One major problem I had was time constraint. Due to unforeseen changes in my work schedule, I ended having very little time to work on this project. Many of the features I wanted to have in this app did not make it and it is not nearly as polished as I would like for it to be.
One major feature that got left out was adding notes via voice inputs. I meant to use Web Speech API, but I was running into issues with browser compatibility (it wasn't working for me on Firefox) and JavaScript communication with Streamlit.
Accomplishments that I'm proud of
App development is fairly new to me, so just being able to use various frameworks to put together a simple app like this is something that I am proud of.
What I learned
I'm inexperienced with webapp development so pretty much everything I'm doing is fairly new to me. This is the first time I'm using FastAPI/Unvicorn. While I have used the other frameworks, they are still very fresh for me and provides me with good practice. Even Github is something that I don't have much experience with.
Also, PowerShell is terrible.
What's next for Note Taker and Summarizer
The current state of the app is just an MVP. There are many improvements that need to be made to this app:
- Allow for real-time voice input to be added to the notes database.
- The database structure needs to be improved, to allow for better organization, user functionalities and searches.
- The notes needs to be presented and organized in a much better way.
- Currently, the /ask and /summarize endpoints searches through the entire database of notes, which is slow if the database gets large. A matching algorithm must be implemented to improve response time.
- Although Streamlit functions fine for a prototype, a better front-end should be designed for full deployment. Probably in a framework like React.