## Inspiration

Course selection is an exciting but frustrating time to be a Princeton student. While you can look at all the cool classes that the university has to offer, it is challenging to aggregate a full list of prerequisites and borderline impossible to find what courses each of them leads to in the future. We recently encountered this problem when building our schedules for next fall. The amount of searching and cross-referencing that we had to do was overwhelming, and to this day, we are not exactly sure whether our schedules are valid or if there will be hidden conflicts moving forward. So we built TigerMap to address this common issue among students.

## What it does

TigerMap compiles scraped course data from the Princeton Registrar into a traversable graph where every class comes with a clear set of prerequisites and unlocked classes. A user can search for a specific class code using a search bar and then browse through its prereqs and unlocks, going down different course paths and efficiently exploring the options available to them.

## How we built it

We used React (frontend), Python (middle tier), and a MongoDB database (backend). Prior to creating the application itself, we spent several hours scraping the Registrar's website, extracting information, and building the course graph. We then implemented the graph in Python and had it connect to a MongoDB database that stores course data like names and descriptions. The prereqs and unlocks that are found through various graph traversal algorithms, and the results are sent to the frontend to be displayed in a clear and accessible manner.

## Challenges we ran into

Data collection and processing was by far the biggest challenge for TigerMap. It was difficult to scrape the Registrar pages given that they are rendered by JavaScript, and once we had the pages downloaded, we had to go through a tedious process of extracting the necessary information and creating our course graph. The prerequisites for courses is not written in a consistent manner across the Registrar's pages, so we had to develop robust methods of extracting data. Our main concern was ensuring that we would get a graph that completely covered all of Princeton's courses and was not missing any references between classes. To accomplish this, we used classes from both the Fall and Spring 21-22 semesters, and we can proudly say that, apart from a handful of rare occurrences, we achieved full course coverage and consistency within our graph.

## Accomplishments that we're proud of

We are extremely proud of how fast and elegant our solution turned out to be. TigerMap definitely satisifes all of our objectives for the project, is user-friendly, and gives accurate results for nearly all Princeton courses. The amount of time and stress that TigerMap can save is immeasurable.

## What we learned

* Graph algorithms
* The full stack development process
* Databases
* Web-scraping
* Data cleaning and processing techniques

## What's next for TigerMap

We would like to improve our data collection pipeline, tie up some loose ends, and release TigerMap for the Princeton community to enjoy!

## Track

Education

## Discord

Leo Stepanewk - nwker#3994
Aaliyah Sayed - aaligator#1793
## Inspiration

3 AM, just the light of Jacob's computer in his dorm room. Reading through 3 weeks' worth of lecture slides to make up for getting the flu. With a teacher who doesn't do recorded lectures, the task of learning multivariable calculus was up to him. After ten slides he couldn't seem to keep my eyes open. The same boring format with no one to explain it to him made him vow to never make anyone go through what he had to endure. Our team set out to make a program to do just that. Lecture agent ensures that no matter your circumstances, you're never left behind. With Lecture Agent, you can study class materials from anywhere, anytime with a personalized AI-driven professor who delivers dynamic lectures based on your course content.

## What it does

Lecture Agent takes those dreadful class slides that feel like quicksand to go through alone and builds your very own AI lecture presentation. It takes the uploaded slide notes and intelligently generates a fully narrated, professor-like presentation, breaking down even the most complex concepts into digestible explanations. This allows users to experience a seamless, interactive lecture experience.

## How we built it

We built out the backend by taking each slide and the text on that slide and saving each side individually with its core information. We then leveraged fetch ai's framework to utilize their agents intensively throughout our application. We developed agents to handle each part of the text and image scraping along with the communications with OpenAI's models to generate the lecture script. We then take that lecture script and convert it to speech using OpenAI's Speech API.

## Challenges we ran into

We faced difficulties in synchronizing the generated audio with the presentation of slides. Additionally, processing the images and text to generate the lecture script took longer than expected. To optimize performance, we had to find a way to display the previous slide while the next one was being processed, minimizing the perceived delay for users. Getting the Fetch.ai Agents to deploy and communicate with each other was a very tedious process. We also had trouble integrating a PDF reader into our frontend and we were able to solve this by simply displaying the images of each slide separately.

## Accomplishments that we're proud of

We were very proud of the increased reliability of our lecture content that came from incorporating both text and visual data from the slides in our lecture generation. Providing images alongside the lecture text allowed for more content-rich explanations. Displaying the slides alongside the audio player that

We were able to distribute each of our backend tasks to fetch AI agents. We utilized six Fetch AI agents, which communicate autonomously to manage text extraction, image processing, script generation, and voice synthesis, ensuring smooth and reliable performance.

## What we learned

We gained valuable experience integrating Fetch AI's UAgents framework, optimizing agent communication to effectively delegate tasks. Additionally, we improved our ability to manage large-scale data processing using decentralized agents, which significantly enhanced the scalability of our system. We also deepened our understanding of integrating multiple microservices and ensuring seamless communication between them

## What's next for Lecture Agent

**Features coming soon:**

**ChatLA:** This feature allows real-time Q&A interaction between students and the AI lecturer, enabling users to ask questions and receive accurate, on-the-spot answers based on their lecture material.

**LiveTranscription:** Gives users the ability to receive real-time transcriptions of the lectures, further enhancing accessibility and usability.

**LiveTranslation:** Real-time translation of slide and lecture audio material for nonnative speakers that allows users to get the help they need understanding their material in a language that feels comfortable to them

**VoiceChoice:** Allows the user to pick the most engaging lecturers' voice for them.
## Inspiration

Us college students all can relate to having a teacher that was not engaging enough during lectures or mumbling to the point where we cannot hear them at all. Instead of finding solutions to help the students outside of the classroom, we realized that the teachers need better feedback to see how they can improve themselves to create better lecture sessions and better ratemyprofessor ratings.

## What it does

Morpheus is a machine learning system that analyzes a professor’s lesson audio in order to differentiate between various emotions portrayed through his speech. We then use an original algorithm to grade the lecture. Similarly we record and score the professor’s body language throughout the lesson using motion detection/analyzing software. We then store everything on a database and show the data on a dashboard which the professor can access and utilize to improve their body and voice engagement with students. This is all in hopes of allowing the professor to be more engaging and effective during their lectures through their speech and body language.

## How we built it

### Visual Studio Code/Front End Development: Sovannratana Khek

Used a premade React foundation with Material UI to create a basic dashboard. I deleted and added certain pages which we needed for our specific purpose. Since the foundation came with components pre build, I looked into how they worked and edited them to work for our purpose instead of working from scratch to save time on styling to a theme. I needed to add a couple new original functionalities and connect to our database endpoints which required learning a fetching library in React. In the end we have a dashboard with a development history displayed through a line graph representing a score per lecture (refer to section 2) and a selection for a single lecture summary display. This is based on our backend database setup. There is also space available for scalability and added functionality.

### PHP-MySQL-Docker/Backend Development & DevOps: Giuseppe Steduto

I developed the backend for the application and connected the different pieces of the software together. I designed a relational database using MySQL and created API endpoints for the frontend using PHP. These endpoints filter and process the data generated by our machine learning algorithm before presenting it to the frontend side of the dashboard. I chose PHP because it gives the developer the option to quickly get an application running, avoiding the hassle of converters and compilers, and gives easy access to the SQL database. Since we’re dealing with personal data about the professor, every endpoint is only accessible prior authentication (handled with session tokens) and stored following security best-practices (e.g. salting and hashing passwords). I deployed a PhpMyAdmin instance to easily manage the database in a user-friendly way.
In order to make the software easily portable across different platforms, I containerized the whole tech stack using docker and docker-compose to handle the interaction among several containers at once.

### MATLAB/Machine Learning Model for Speech and Emotion Recognition: Braulio Aguilar Islas

I developed a machine learning model to recognize speech emotion patterns using MATLAB’s audio toolbox, simulink and deep learning toolbox. I used the Berlin Database of Emotional Speech To train my model. I augmented the dataset in order to increase accuracy of my results, normalized the data in order to seamlessly visualize it using a pie chart, providing an easy and seamless integration with our database that connects to our website.

### Solidworks/Product Design Engineering: Riki Osako

Utilizing Solidworks, I created the 3D model design of Morpheus including fixtures, sensors, and materials. Our team had to consider how this device would be tracking the teacher’s movements and hearing the volume while not disturbing the flow of class. Currently the main sensors being utilized in this product are a microphone (to detect volume for recording and data), nfc sensor (for card tapping), front camera, and tilt sensor (for vertical tilting and tracking professor). The device also has a magnetic connector on the bottom to allow itself to change from stationary position to mobility position. It’s able to modularly connect to a holonomic drivetrain to move freely around the classroom if the professor moves around a lot. Overall, this allowed us to create a visual model of how our product would look and how the professor could possibly interact with it. To keep the device and drivetrain up and running, it does require USB-C charging.

### Figma/UI Design of the Product: Riki Osako

Utilizing Figma, I created the UI design of Morpheus to show how the professor would interact with it. In the demo shown, we made it a simple interface for the professor so that all they would need to do is to scan in using their school ID, then either check his lecture data or start the lecture. Overall, the professor is able to see if the device is tracking his movements and volume throughout the lecture and see the results of their lecture at the end.

## Challenges we ran into

Riki Osako: Two issues I faced was learning how to model the product in a way that would feel simple for the user to understand through Solidworks and Figma (using it for the first time). I had to do a lot of research through Amazon videos and see how they created their amazon echo model and looking back in my UI/UX notes in the Google Coursera Certification course that I’m taking.

Sovannratana Khek: The main issues I ran into stemmed from my inexperience with the React framework. Oftentimes, I’m confused as to how to implement a certain feature I want to add. I overcame these by researching existing documentation on errors and utilizing existing libraries. There were some problems that couldn’t be solved with this method as it was logic specific to our software. Fortunately, these problems just needed time and a lot of debugging with some help from peers, existing resources, and since React is javascript based, I was able to use past experiences with JS and django to help despite using an unfamiliar framework.

Giuseppe Steduto: The main issue I faced was making everything run in a smooth way and interact in the correct manner. Often I ended up in a dependency hell, and had to rethink the architecture of the whole project to not over engineer it without losing speed or consistency.

Braulio Aguilar Islas: The main issue I faced was working with audio data in order to train my model and finding a way to quantify the fluctuations that resulted in different emotions when speaking. Also, the dataset was in german

## Accomplishments that we're proud of

Achieved about 60% accuracy in detecting speech emotion patterns, wrote data to our database, and created an attractive dashboard to present the results of the data analysis while learning new technologies (such as React and Docker), even though our time was short.

## What we learned

As a team coming from different backgrounds, we learned how we could utilize our strengths in different aspects of the project to smoothly operate. For example, Riki is a mechanical engineering major with little coding experience, but we were able to allow his strengths in that area to create us a visual model of our product and create a UI design interface using Figma. Sovannratana is a freshman that had his first hackathon experience and was able to utilize his experience to create a website for the first time. Braulio and Gisueppe were the most experienced in the team but we were all able to help each other not just in the coding aspect, with different ideas as well.

## What's next for Untitled

We have a couple of ideas on how we would like to proceed with this project after HackHarvard and after hibernating for a couple of days.

From a coding standpoint, we would like to improve the UI experience for the user on the website by adding more features and better style designs for the professor to interact with. In addition, add motion tracking data feedback to the professor to get a general idea of how they should be changing their gestures.

We would also like to integrate a student portal and gather data on their performance and help the teacher better understand where the students need most help with.
From a business standpoint, we would like to possibly see if we could team up with our university, Illinois Institute of Technology, and test the functionality of it in actual classrooms.