Team members: Karyna Yen, Quangvinh Tran, Ikechukwu Ekpunobi, Patrick Rose, Astro Ohnuma
Demo Link: https://www.youtube.com/watch?v=NnRe_Mj0FcM
Imagine a Co-op review platform that goes beyond standard ratings to provide co-op seekers with actionable insights about their potential workplaces. Our app is designed to empower students by offering a comprehensive, data-driven view of internship experiences across industries. While existing platforms like Glassdoor provide general company ratings, they often overlook the unique challenges and expectations of Co-ops. Co-ops frequently face limited access to information on workplace culture, mentorship quality, and skill-building opportunities specific to early-career roles. Our platform closes this gap, giving students and young professionals the detailed guidance they need to make informed choices.
We’re building this app for Co-op seekers who need transparent, authentic information; Co-op reviewers who want to share their experiences; and Northeastern University administrators aiming to gain deeper insights into Co-op companies and student trends. Key features include:
Ratings, Comments, Data visualizations, Company ratings across different industries, Num of former co-ops and reviews, and q&a section for each company.
Our platform provides a much-needed bridge between students and co-ops, helping the next generation of talent find the right place to grow.
- A GitHub Account
- A terminal-based or GUI git client
- VSCode with the Python Plugin
- A distrobution of Python running on your laptop (Choco (for Windows), brew (for Macs), miniconda, Anaconda, etc).
There are three major components which will each run in their own Docker Containers:
- Streamlit App in the
./appdirectory - Flask REST api in the
./apidirectory - SQL files for your data model and data base in the
./database-filesdirectory
- Once the fork has been created, clone YOUR forked version of the repo to your computer.
- Set up the
.envfile in theapifolder based on the.env.templatefile. Make sure you set a password. - Start the docker containers.
docker compose up -dto start all the containers in the backgrounddocker compose downto shutdown and delete the containersdocker compose up db -donly start the database container (replace db with the other services as needed)docker compose stopto "turn off" the containers but not delete them.
In most applications, when a user logs in, they assume a particular role. For instance, when one logs in to a stock price prediction app, they may be a single investor, a portfolio manager, or a corporate executive (of a publicly traded company). Each of those roles will likely present some similar features as well as some different features when compared to the other roles. So, how do you accomplish this in Streamlit? This is sometimes called Role-based Access Control, or RBAC for short.
The code in this project demonstrates how to implement a simple RBAC system in Streamlit but without actually using user authentication (usernames and passwords). The Streamlit pages from the original template repo are split up among 4 roles - Analyst, Job Reviewer, Job Seeker, and a System Administrator role.
Wrapping your head around this will take a little time and exploration of this code base. Some highlights are below.
- We need to turn off the standard panel of links on the left side of the Streamlit app. This is done through the
app/src/.streamlit/config.tomlfile. So check that out. We are turning it off so we can control directly what links are shown. - Then I created a new python module in
app/src/modules/nav.py. When you look at the file, you will se that there are functions for basically each page of the application. Thest.sidebar.page_link(...)adds a single link to the sidebar. We have a separate function for each page so that we can organize the links/pages by role. - Next, check out the
app/src/Home.pyfile. Notice that there are 3 buttons added to the page and when one is clicked, it redirects viast.switch_page(...)to that Roles Home page inapp/src/pages. But before the redirect, I set a few different variables in the Streamlitsession_stateobject to track role, first name of the user, and that the user is now authenticated. - Notice near the top of
app/src/Home.pyand all other pages, there is a call toSideBarLinks(...)from theapp/src/nav.pymodule. This is the function that will use the role set insession_stateto determine what links to show the user in the sidebar. - The pages are organized by Role. Pages that start with a
0are related to the Analyst role. Pages that start with a1are related to the Job Reviewer role. Pages that start with a2are related to The System Admin role. Pages that start with a3are related to The Job Seeker role.