Inspiration

As we’re currently high school juniors, this track immediately appealed to us, as we have to worry about our college applications next year (so competing in this track is almost like building ourselves a Jarvis)! We’ve all had past experience with AIs and were interested in competing in the track based on what we knew. Even though some of us have worked on machine learning tasks before, we had never worked with Azure, and the idea of learning as we went appealed to us.

What it does

Unifly is an innovative and interactive tool designed to assist users with their college admission questions. By gathering together the most recent college data from Georgetown University, Unifly is capable of answering virtually any relevant question. Unifly is designed to not just make college admissions easier, but also provide a step into the future for how AI may be used in education. Its key differentiators include multilingual translation and speech to text with voice deepfaking so that one could treat the Unifly virtual assistant as a Siri-esque tool.

How we built it

We split the project into frontend and backends. Our frontend is built with React and styled with basic CSS, and it is able to communicate with our backends through JavaScript. Our first backend is Firebase, which we use to store user metadata. Next, we have a REST API designed with Flask that gets data from MongoDB and communicates with Azure OpenAI. Using MongoDB for our vector database allows us to easily implement RAG (Retrieval Augmented Generation) in our chatbot. In order to build this vector database, we wrote a web scraper in Python with BeautifulSoup that performed a depth first search on a given university’s websites and subdirectories until it reached dead ends or scraped some threshold of articles.

Challenges we ran into

We struggled with both front and backend; the latter being far more annoying. While frontend struggles were mostly simple fixes, the backend challenges we encountered were often the most tedious. We would spend hours debugging issues in Azure, mongoDB, and Firebase over and over again. Up until the last minute, our bot would sometimes give bogus output or not reply to a straightforward message, which was painful to fix. A nontechnical issue we faced was sleep! It was very difficult to manage sleep throughout the 36 hour period, which resulted in all of us being incredibly fatigued nearing the end of the competition. Thankfully, everything worked out in the end, and the thoughts of going home to sleep motivated us just enough to finish our project on time.

Accomplishments that we're proud of

None of us have ever used Azure before, and the last two days were almost a blind leap of faith into the technology as we came across tons of errors and spent a lot of our time trying to get the software working. Despite us losing a lot of time to Azure on debugging things, we’re proud of ourselves for successfully using it in the chatbot’s creation.

What we learned

While developing this project, we used an organized GitHub with issues, merge requests, and separate branches. When stuff inevitably broke, we ended up figuring out how to fix it on our own, which was pretty cool. We also learned a popular web crawling algorithm that applies depth first search (DFS), combining competitive programming concepts with real world use cases to help us get our data. Additionally, this was our first hackathon utilizing multiple backends, so we learned a lot while trying to create the best system design for our project. Finally, we were able to figure out how to use Azure OpenAI for the chatbot itself, which was our personal favorite improvement!

What's next for #28 Unifly

Right now our bot is only designed to work with one university, but in the future we would love to give the user the possibility to select the universities they are interested in asking questions about. We also like the idea of an admin dashboard where a user can fine-tune their own personal assistant by controlling variables with critical values - such as the depth of the web scraper, the strict relevance of replies, etc. - essentially giving the user full control over the program.

Built With

Share this project:

Updates