# Contributing - Advanced ### **Table of Contents** - [Prerequisites](#prerequisites) - [Git](#git) - [NodeJS and NPM](#nodejs-and-npm) - [Firebase](#firebase) - [Docker (Recommended but Optional)](#docker-recommended-but-optional) - [Backend (optional)](#backend-optional) - [Building and Running Monkeytype](#building-and-running-monkeytype) - [Standards and Guidelines](#standards-and-guidelines) - [Questions](#questions) ## Prerequisites This contribution guide is for cases in which you need to test the functionality of your changes, or if you need to take screenshots of your changes. You will need a computer with a stable internet connection, a text editor, Git, Firebase, and NodeJS with version 16.13.2. There are some additional requirements depending on what you're looking to contribute, such as Mongo and Docker for the backend. Read the below sections to understand how to set up each of these tools. #### Git Git is optional but we recommend you utilize it. Monkeytype uses the Git source control management (SCM) system for its version control. Assuming you don't have experience typing commands in the command line, we suggest installing [Sourcetree](https://www.sourcetreeapp.com/). You will be able to utilize the power of Git without needing to remember any cryptic commands. Using a Git client such as Sourcetree won't give you access to the full functionality of Git, but provides an easy to understand graphical user interface (GUI). Once you have downloaded Sourcetree, run the installer. While installing Sourcetree, keep your eyes peeled for the option to also install Git with Sourcetree. This is the option you will need to look for in order to install Git. **Make sure to click yes in the installer to install Git with Sourcetree.** #### NodeJS and NPM To install NodeJS, navigate to the NodeJS [website](https://nodejs.org/en/) and download the `16.13.2 LTS`. Alternatively, if you use `nvm` then you can run `nvm install` and `nvm use` (you might need to specify the exact version) to use the version of Node.js in the `.nvmrc` file (if you use Windows, use [nvm-windows](https://github.com/coreybutler/nvm-windows)). #### Firebase 1. Create a Firebase account if you already haven't done so. 1. [Create a new Firebase project.](https://console.firebase.google.com/u/0/) - The project name doesn't matter, but the name `monkeytype` would be preferred. - Google Analytics is not necessary. 1. Run `npm install -g firebase-tools` to install the Firebase Command Line Interface. 1. Run `firebase login` on your terminal to log in to the same google account you just used to create the project. 1. Git clone this project. - IMPORTANT: If you are on Windows, run `git config --global core.autocrlf false` before-hand to prevent CRLF errors. 1. Within the `frontend` directory, duplicate `.firebaserc_example`, rename the new file to `.firebaserc` and change the project name of default to the firebase project id you just created. - If `.firebaserc_example` does not exist after cloning, create your own with: ```.firebaserc { "projects": { "default": "your-firebase-project-id" } } ``` - Run `firebase projects:list` to find your firebase project id. 1. Within the `frontend/src/ts/constants` directory, duplicate `firebase-config-example.ts`, rename it to `firebase-config.ts` and paste in your firebase config - To find it, go to the Firebase console - Navigate to `Project Settings > General > Your apps` - If there are no apps in your project, create a new web app - In the `SDK setup and configuration` section, select `npm` - The Firebase config will be visible below 1. Enable Firebase Authentication (optional) - In the Firebase console, go to `Authentication > Sign-in method` - Click on `Email/Password`, enable it, and save - Click on `Google`, add a support email and save 1. Generate a Firebase Admin private key (optional, only needed if you want to work on the backend) - In your Firebase console, go to Project Settings > Service Accounts - Click "Generate New Private Key" - Save as `serviceAccountKey.json` inside the `backend/src/credentials/` directory. #### Docker (Recommended but Optional) You can use docker to run the frontend development environment. This will take care of OS specific problems. After installing [Docker](https://www.docker.com/get-started/#h_installation) run the following command to start the frontend server: ```bash cd frontend && docker-compose up ``` Once wepback has compiled, the frontend will be served on [port 3000](http://localhost:3000) #### Backend (optional) Follow these steps if you want to work on anything involving the database/account system. Otherwise, you can skip this section. 1. Inside the backend folder, copy `example.env` to `.env` in the same directory. 2. Setup the database server | Local Server | Docker (recommended) | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |