The inspiration for this particular application came from looking at the Pitt CSC Summer Internships repository. We all thought that the repository was a great resource to look at when searching for internships and job opportunities that would help us improve our own programming and problem-solving skills, as well as ultimately provide us with invaluable experience and insight into the types of careers we hope to pursue in the future. However, we all found it difficult to check the repository on a consistent basis, as we often had other responsibilities to attend to. Thus, a need to somehow automate the process of checking the repository and notifying us of updates became one of the major influences that inspired us to create InTurn.
What it does
InTurn is an application designed to periodically check the Pitt CSC Summer Internship repository for updates, and it can send emails to subscribers and notify them of new internships.
How we built it
Sid was responsible for the backend elements of the web application; Sid utilized Java and the Spring Boot library to create a REST API that would allow various parts of the application to communicate with the PostgreSQL database hosted on Supabase, used to store information for this project.
Similarly, Jack was also responsible for creating and setting up the database used within the web application through the utilization of PostgreSQL hosted on SupaBase. Additionally, Jack was responsible for developing the Flask API endpoint in Python that would be used by the Google Cloud App Engine and Google Cloud Scheduler. This API acted as a wrapper for our web scraping that monitored updates, and our email sender. The endpoint is requested 2x/day by Cloud Scheduler to execute our script.
Lastly, Eric was responsible for writing the Python script that would be used by the application to access the Pitt CSC Summer Internship repository, parse the list of internships for potential changes, and ultimately send the emails and update the database appropriately. To this end, Eric utilized the Github REST API to retrieve information from Github, and he also utilized the Beautiful Soup and lxml HTML parser to parse through the data collected from Github.
Challenges we ran into
- Google Cloud deployment solutions were difficult to conceptualize
- Architecting an application with various microservices was difficult to plan out at first
- Email sending solutions, such as Twilio, don't offer very generous free tiers, which we were forced to work around
- Just about everyone on the team was working with brand new technology: Jack with GCP, Eric with the GitHub API, Sid with Spring Boot, and Joe with React
Accomplishments that we're proud of
- Creating a well-designed frontend web application in React.
- First successful use of Spring Boot and Java to create a REST API that would communicate between frontend, scripts, and the database
- Successful deployment of the API on Google Cloud's App Engine, as well as successfully scheduling the Python script to run at the desired times with Google Cloud's Cloud Scheduler
- Creating an algorithm within the Python script to successfully parse and return the desired information about internship openings from Github.
What we learned
- Gained a deeper understanding of React and Component-Based web development, as this was the first time Joe had used React
- Learned about how Python uses various web transfer protocols like SMTP for sending emails and HTTPS for communicating and receiving data from a server
- Experienced parsing through documentation
- Learned how to use new technologies to set up databases (PostgreSQL and SupaBase). This was everybody's first time using SupaBase, and some of our team member's first time with PSQL
- Dove into Cloud solutions. This was the first time anyone on the team had used Google Cloud Platform, and essentially everyone's first real look into cloud solutions as a whole
What's next for InTurn
- Create a dashboard for past internships applied to
- More robust python script for checking for changes to the list (removals, position changes, etc.)
- Company preferences: Only receive notifications if a certain company posts offerings