Employ Me 

GitHub

Overview

Employ Me is an app for Cornell Students to get connected! Post and browse jobs within the Cornell community. Whether you're a graphic designer, tutor, or makeup artist, this is the place to find clients on campus!

Timeline

November 2019 - Present

Technolgies Used

Frontend:

Swift, SnapKit, GoogleSignIn

Backend:

Python, SQLAlchemy, Heroku

The Idea

Cornell's college campus is brimming with talent. However, it’s often a challenge to reach a large audience of students quickly and easily. Other than the Cornell meme Facebook group, individual clubs, and other campus groups, it can seem impossible to bring the community together. I wanted to create a freelance marketplace that allows students to post their talents and services for others to take advantage of. On the flip side, if someone were ever in need of a tutor for an upcoming prelim, a photographer to snap a new fancy headshot, or even a software engineer to make the next best social network come to life, they could use Employ Me to fulfill their needs and support their peers at same time.

The Story

I started this project in November of 2019. Unfortunately, it was kind of pushed to the back burner as school picked up for the spring semester. However, once I got home for coronacation~, I wanted to take advantage of my newfound free time. Within the first few days of coming home, I spent hours setting up the server, deploying it to Heroku, and connecting it to the frontend. I think that finally being able to retrieve data from the server was one of my proudest accomplishments of the whole project. Since then, I have added so much more to the app. In addition to creating my own server, I did a complete redesign, learned all about networking, integrated Google Sign in, experimented with tab view controllers, and more.

Challenges Faced

Google Sign In and Navigation

This project was my first time experimenting with Google Sign, and it was definitely no walk in the park. Setting up the sign in page part wasn’t too bad, thanks to the super helpful documentation that Google provides. However, the main challenge was integrating the sign in view controller with the other controllers. Ultimately, I decided to set the root view controller to a UINavigationController and then present the sign in view controller modally. This way, the sign in page is only presented if the user is not signed in.

Creating the Backend

At school, I was lucky enough to take a backend development course, where I learned how to create a Python Flask app using SQL and SQLAlchemy. I learned how to run localhost and test routes using Postman. However, deployment was a completely new challenge. I did some research, and decided that Heroku would be the best choice for me. It seemed pretty popular (and more importantly, free). Connecting Heroku to the git repository, setting up the environment, and adding all required files almost made me pull my hair out was definitely super easy and no problem at all. Always up for a challenge, though, and reaching this milestone was definitely one of my most proud accomplishments for this project!

Base 64 Image Encoding

I needed to figure out a way to deal with the job images. Originally, I had images in the assets folder, and was just storing the names of the images in the database. However, I knew that this wasn't scalable. I considered using Google Firebase to store the images, but ultimately decided to use base 64 encoding. It seemed easy enough: convert an image to a string, store the string, and then fetch the string and decode it to use in the collection view cells. It was a challenge trying to figure out what the base 64 strings of the original images were, because they were too long to print out. I then tried to use an online encoder, but it was giving me the wrong strings, resulting in a bunch of fatal errors because they couldn't be decoded properly. Finally, I decided to use breakpoints to hover over the variables and copy the base 64 strings, which I then pasted into the SQLite database. Yay! I know that this might not be the best solution to my problem, however, I think that it works perfectly fine for the size and purpose of my app. If I ever were to actually release my app for the public, learning more about data storage and considering privacy, security and space concerns would be really interesting!

Lessons Learned

Viritual Environments

Previously, I didn’t think that virtual environments were worth my time. I didn’t see the need for them and they just seemed like a pain to navigate. Naively, I would just download Python packages straight to my computer. Honey, did I have a big storm coming. Creating a requirements.txt file for deployment with only the necessary dependencies was virtually (haha, punny) impossible with all of the dozens of packages I had installed. Using a virtual environment made everything so much easier to work with!

Never Giving Up

When I started making this app in November, I could never have imagined what it turned into. So many hours of watching YouTube tutorials, learning new things, debugging, and just staring at the computer screen hopelessly went into this project. There were so many times that I thought about giving up. But, with every challenge that I faced, the feeling of finding a solution just got more and more exhilarating. I am so proud of what I have created, and it just goes to show that I can do anything that I put my mind to. I can’t wait to see what the future holds!

What's Next?

If I were to continue developing this app, I have a lot of ideas. Firstly, I would create a system where users could leave reviews on certain postings, so that future users could gain some more insight on a potential hire. Secondly, I would integrate Google Firebase Chat to allow for communication directly inside the app. Lastly, I would incorporate some kind of payment platform, such as Venmo, which would allow all transactions to occur within the app, too.