Building a CRM for College Career Services
Tags: octograd2020
Published: 2020-05-20 23:38:45

## Prospect: A CS Capstone Project

During my Senior Year at Brigham Young University, I had the opportunity to participate in a Software Engineering Capstone project over the course of a year. Four of my peers and I were initially assigned to a project that fell through for technical reasons, so we were given the opportunity to create our own project. One need that we had seen in our own college experience was for students to be able to better work with career services and obtain the jobs that they were seeking. Through talking with our university's career services, we discovered that this pain was not only felt by the students.

Over the course of the year we built and iterated on our idea until we eventually built an MVP of a CRM specifically meant for college career services. The BYU Career Services department has expressed interested in future development, and we hope that another capstone team next year will take of the project and continue to create an application that will help the university better help its students to get good jobs, especially in the coming months and years.

## Demo Link

You can see a [demo video](https://www.youtube.com/watch?v=GjfI1rcV6Us&feature=youtu.be) on youtube

## Link to Code

The code is hosted in a public [github repository](https://github.com/bradenwatkins/me)

## How we built it

The five of us came from very different technical backgrounds so we tried to chose technologies that at least some of us had knowledge of. We used dozens of different technologies that are listed below:

- **Authentication:** [Firebase Authentication](https://firebase.google.com/docs/auth/) is super simple to set up and manage. Their SDK made it really easy to tie auth into our application with middleware on the backend to authenticate the endpoints
- **Charting:** [Chart.js](https://www.chartjs.org/) is a popular javascript charting library
- **Data Layer:** [GraphQL](https://GraphQL.org/) is a new API paradigm that is becoming popular. It allows the client to grab all of the data it needs (and only the data it needs) in a single API call. GraphQL replaces a REST architecture
- **Forms:** [Formik](https://jaredpalmer.com/formik/) is a popular form management library for React
  - **Schema Validation:** [Yup](https://github.com/jquense/yup) is an object schema validation library that integrates easily with Formik
- **Framework:** [React](https://reactjs.org/)
  - This project was bootstrapped with [Create React App](https://facebook.github.io/create-react-app/docs/getting-started)
  - This project heavily uses the React [Hooks](https://reactjs.org/docs/hooks-intro.html) and [Context](https://reactjs.org/docs/context.html) APIs
- **HTTP Layer:** [Relay](https://relay.dev/) is a Facebook library that integrates GraphQL with React to provide a datastore and HTTP layer. It allows each component to declare the data it needs, and then makes API calls when needed.
- **Linting:** [Prettier](https://prettier.io/) is a linting/formatting library that keeps code in a single format
- **Routing:** [ReactRouter](https://reacttraining.com/react-router/web/guides/quick-start) is a popular declarative routing library for React.
- **Styles:** [Material UI](https://material-ui.com/) is a popular UI component library
- **Server:** [Node Express](http://expressjs.com/) is a popular Node.js server framework
- **Hosting:** [AWS Lambda](https://aws.amazon.com/lambda/) was a low cost hosting option
- **Database:** [DynamoDB](https://aws.amazon.com/dynamodb) is a low cost NoSQL database