An open API service indexing awesome lists of open source software.

https://github.com/eriknewland/functionjunction

browser based collaborative IDE
https://github.com/eriknewland/functionjunction

codemirror collaboration compiler ide judge0 learning leetcode nodejs pyodide python react socketio websocket

Last synced: 2 months ago
JSON representation

browser based collaborative IDE

Awesome Lists containing this project

README

          

# Function Junction

A collaborative in-browser IDE that pairs users to solve algorithm and data-structure problems built over a 3-day hackathon.


Collaboration gif

## Tech Stack


Client

React
React Router
CodeMirror
Bootstrap
Judge0 API


Server

Node.js
Express
Socket.io


Database

Firebase

## Environment Variables

To run this project, you will need to add the following environment variables to your .env file

```
REACT_APP_FIREBASE_API_KEY
REACT_APP_FIREBASE_AUTH_DOMAIN
REACT_APP_FIREBASE_DATABASE_URL
REACT_APP_FIREBASE_PROJECT_ID
REACT_APP_FIREBASE_STORAGE_BUCKET
REACT_APP_FIREBASE_MESSAGING_SENDER_ID
REACT_APP_FIREBASE_APP_ID
REACT_APP_JUDGE0_API_KEY
```

You will need to setup a Firebase Account for the first 7 keys.
You will need to setup a RapidAPI account and subscription to Judge0 API for the final key.

## Features

- Firebase Authorization
- Cloud Firestore CRUD functionality
- Private and Public routes
- Password reset
- Codemirror in-browser IDE
- Compile and execute 20+ languages with judge0 API
- Bootstrap component styling
- Socket.io implementation to create a collaborative IDE and code compilation/execution

## Installation

Fork, clone and navigate into the root directory. Install dependencies:

```bash
npm i
```
Start the development server on port 3000

```bash
npm run start
```
In a separate terminal window, navigate into /src/server and run 'nodemon index.js' to start the socket server on port 8000.

```bash
nodemon index.js
```

## Roadmap

- Tech Debt/Clean up

- Improve random matching functionality

- Create database of problems that each paired instance will reference

- Add payment rails

- Add different modes (i.e. competitive, CSS/styling challenges)

## Demo (Youtube)

[![Function-Junction-Screenshot](https://user-images.githubusercontent.com/114263701/229918214-0c951921-ba66-4007-98b3-1846dacd3f06.png)](https://youtu.be/BIyzn8brDMw)