Headstarter Summer Fellowship Week 6 Project
GroupMind is a full stack application that enables users to plan meetups via a calendar, and meet with each other via video.
The app has these main functionalities:
- User Authentication via Firebase
- Calendar Event Management via MongoDB
- Video Call Capability via Whereby
Name | Role |
---|---|
Sihui He https://github.com/hesihui |
Calendar/Backend Server |
Russell Elliott https://github.com/russellelliott |
Video Call |
Shakil Delowar https://github.com/shakildelowar |
Video Call |
Daming Mei https://github.com/dmei1 |
Video Call |
Raghavendra Raikar https://github.com/RaghuRaikar |
Log-in & Navbar & Profile |
Adriana Valencia https://www.linkedin.com/in/adriavalencia/ |
UX Designer https://www.figma.com/file/pNiG9qqz3GBvwexrYuUE2V/Untitled?node-id=0%3A1 |
Do npm install
in the client
and server
subdirectories
- The
client
subdirectory houses the Firebase login, calendar event display, and video call. - The
server
subdirectory manages the MongoDB server/database for the calendar events. - Do
npm start
in theclient
andserver
dependencies.
There are several different secret keys for this project. Here is where they are all stored:
Variables stored in GroupMind/client/src/variables.js
export const API = [apiKey]
export const AUTH = [authDomain]
export const PROJ = [projectId]
export const STOR = [storageBucket]
export const MESS = [messagingSenderId]
export const APP = [appId]
firebaseconfig.js
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
import { getAuth, GoogleAuthProvider } from "firebase/auth";
//Import the varaibles
import {API, AUTH, PROJ, STOR, MESS, APP} from './variables';
const firebaseConfig = {
apiKey: API,
authDomain: AUTH,
projectId: PROJ,
storageBucket: STOR,
messagingSenderId: MESS,
appId: APP
};
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
export const auth = getAuth(app);
export const provider = new GoogleAuthProvider();
https://firebase.google.com/docs/web/setup
Variables stored in GroupMind/server/.env
PORT = 5000
CONNECTION_URL = [your connection URL]
https://hevodata.com/learn/mongodb-atlas-nodejs/
Variables Stored in GroupMind/client/src/components/VideoCall/variables.js
export const URL=[your whereby videocall url]
In the dashboard, go to a room of your choosing, scroll down to embed to get the iframe code for the meeting. You can get the URL from there.
https://www.youtube.com/watch?v=cZAnibwI9u8
Used Whereby Embed to embed the Whereby videocall service into our app as an iframe.
https://docs.whereby.com/creating-and-deleting-rooms/using-create-a-room
https://www.youtube.com/watch?v=kWQDzPdYrBc
You can embed the video call capability into any website with a simple <iframe>
you can copy-paste into your app.
To create a room, go to the dashboard. Fro m there, you will find a section that says “create room with no code”. From there, click the buttons and follow the simple steps.
Room templates: you can select a meeting room template.
Room size: can be 2-4 people or 2-200 people. Once set, cannot be changed.
https://www.youtube.com/watch?v=kNhhpA_RXg4
Developer Guide -> Embedding rooms -> In a Web Page https://docs.whereby.com/embedding-rooms/in-a-web-page
The video tutorial goes over using an iframe https://docs.whereby.com/embedding-rooms/in-a-web-page/using-an-iframe
The code is very simple:
<iframe
src="https://subdomain.whereby.com/room?minimal"
allow="camera; microphone; fullscreen; speaker; display-capture"
></iframe>
Replace the subdomain with the subdomain you made. Go to the room you made and copy the url.
https://docs.whereby.com/customizing-rooms/using-url-parameters
This is used to customize the UI of the meeting room. We didn't change any of these for the project.
By default, the camera turns on, even if the page isn't opened. The solution I implemented is that the videocall component is a seperate component which is displayed by clicking a button. This component is hidden by default so the camera isn't activated until you open the page. Reloading the page reverts the component to its hidden state.
https://www.delftstack.com/howto/react/react-iframe/
https://bobbyhadz.com/blog/react-onclick-show-component
- We will use this to display the video meeting component if the user wishes to display it.
- By default, will not be displayed.
https://bobbyhadz.com/blog/react-div-full-height
- Used React Toast for notifications.
- Used MongoDB for storing the events. See the README in the
server
directory for more info about how to set up the server.
https://www.youtube.com/watch?v=lyRP_D0qCfk
https://www.youtube.com/watch?v=RE3yBdb8ijs
.DS_Store files may appear in your staged changes. Here is how to delete them if the .gitignore
isn't successful at doing so.
https://stackoverflow.com/questions/30483670/delete-ds-store-files-in-current-folder-and-all-subfolders-from-command-line-on