+ );
+ }
+}
diff --git a/frontend/src/components/Bootcamp/sections/FAQ.js b/frontend/src/components/Bootcamp/sections/FAQ.js
new file mode 100644
index 00000000..63575502
--- /dev/null
+++ b/frontend/src/components/Bootcamp/sections/FAQ.js
@@ -0,0 +1,93 @@
+import React from "react";
+import { Container } from 'react-bootstrap';
+import Card from 'react-bootstrap/Card';
+import { FaFileExcel } from "react-icons/fa";
+//import CardDeck from 'react-bootstrap/CardDeck';
+//import portrait from '../assets/portrait.png';
+import { useEffect, useState } from "react";
+import Faq from "react-faq-component";
+
+const data = {
+ title: "FAQ",
+ rows: [
+ {
+ title: "How often are workshops held?",
+ content: `Workshops are held every other week during the bootcamp, and our bootcamp activity alternates each week between workshops and milestones for your team project.`,
+ },
+ {
+ title: "Do I need prior data science experience to apply?",
+ content: "Nope! Our bootcamp program starts from the basics and progressively accelerates so that you develop a solid data science foundation for any future projects or roles you pursue, and our Content Team leaders are here to closely guide you along the way.",
+ },
+ {
+ title: "What projects are available to work on?",
+ content: `We provide suggestions and insights into potential project topics for your team project, but really, the sky is the limit! Prior teams have pursued every domain from healthcare to geospatial mapping to Disneyland ratings, and any area you choose to pursue with your team, we're super excited to work with you along the way!`,
+ },
+ {
+ title: "How are project teams decided?",
+ content: "Members have the option to form their own teams of 4-5 students, and we ensure that every member is put on a project team if they choose not to self-form.",
+ },
+ {
+ title: "How much are the dues?",
+ content: "No dues! Just be ready to learn a lot and make meaningful, long-lastings relationships with peers and mentors who share your interest in data science!",
+ },
+ ],
+};
+
+const styles = {
+ // bgColor: 'white',
+ titleTextColor: "blue",
+ rowTitleColor: "blue",
+ // rowContentPaddingLeft: '500px',
+ // padding: "0.75em 0"
+ // rowContentColor: 'grey',
+ // arrowColor: "red",
+ innerWidth: '20%',
+};
+
+// .faq-style-wrapper .faq-body .faq-row {
+// padding: 0.75em 0;
+// }
+
+const config = {
+ // animate: true,
+ // arrowIcon: "V",
+ // tabFocus: true
+};
+
+export default class FAQ extends React.Component {
+ render() {
+ return (
+
+
+
+ );
+ // return(
+ //
+ //
+ //
FAQ
+ //
+ // Q: How often are workshops held?
+ // A: Workshops are held every other week during the bootcamp, and our bootcamp activity alternates each week between workshops and milestones for your team project.
+
+ // Q: Do I need prior data science experience to apply?
+ // A: Nope! Our bootcamp program starts from the basics and progressively accelerates so that you develop a solid data science foundation for any future projects or roles you pursue, and our Content Team leaders are here to closely guide you along the way.
+
+ // Q: What projects are available to work on?
+ // A: We provide suggestions and insights into potential project topics for your team project, but really, the sky is the limit! Prior teams have pursued every domain from healthcare to geospatial mapping to Disneyland ratings, and any area you choose to pursue with your team, we're super excited to work with you along the way!
+
+ // Q: How are project teams decided?
+ // A: Members have the option to form their own teams of 4-5 students, and we ensure that every member is put on a project team if they choose not to self-form.
+
+ // Q: How much are the dues?
+ // A: No dues! Just be ready to learn a lot and make meaningful, long-lastings relationships with peers and mentors who share your interest in data science!
+
+ //
+ DSGT bootcamp is an immersive 11-week experience where youβll
+ learn a variety of data science skills and work in teams to answer
+ significant questions by analyzing data. Our mentors will host
+ workshops and guide you through your projects. We work in
+ iterative milestones and provide feedback on your work.
+
+
+
+
+
+
+
+ To join the DSGT bootcamp, you must be a member of the club: apply{" "}
+
+ via this link
+
+
+ Cras lacinia pulvinar ex. Integer mattis vitae tortor et bibendum.
+ Praesent eu eros eget dolor interdum sollicitudin. Curabitur ac
+ dolor non mi volutpat porta. Nullam dapibus eleifend metus, non
+ fringilla quam interdum vel. Quisque tincidunt ut orci at
+ faucibus. Nulla facilisi. Proin efficitur sapien sed massa feugiat
+ pharetra. Sed non nisl sed lacus lobortis pellentesque non sed
+ quam. Nullam volutpat tortor nec efficitur auctor. Sed imperdiet
+ erat et turpis lacinia, et pulvinar nunc imperdiet. Maecenas sit
+ amet tempus ipsum, ac volutpat leo. Nulla finibus quis lectus at
+ fermentum. In ultricies ultricies tortor, vitae consectetur diam
+ imperdiet cursus. Morbi tincidunt, enim et accumsan blandit, augue
+ tortor sodales magna, eu elementum erat dolor eu nunc. Phasellus
+ hendrerit finibus iaculis. Cras a ligula sollicitudin, consectetur
+ purus at, aliquet dolor. Cras sapien massa, lobortis non urna
+ molestie, blandit malesuada erat. Sed in felis tellus. Donec sem
+ enim, pretium nec posuere ac, tempor et nibh. Nam at lorem
+ tristique, aliquet enim at, consequat leo. Ut non ultrices lorem.
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/frontend/src/components/Firebase/event.ts b/frontend/src/components/Firebase/event.ts
index 390a47ab..78099399 100644
--- a/frontend/src/components/Firebase/event.ts
+++ b/frontend/src/components/Firebase/event.ts
@@ -3,8 +3,11 @@
* Following Singleton model as expected from a tutorial online
* Instantiate with a firebase app instance - will use that
*/
+
+
+import firebase from "firebase/app";
import Firebase from "./firebase";
-import {firestore, auth, functions} from "firebase/app";
+import firestore from "firebase/app";
/**
* @author Vidhur Kumar
@@ -138,7 +141,7 @@ class EventApi {
async add_to_event_attendee_list(id: string, name: string) {
let eventRef = this.db.collection("events").doc(id);
return eventRef.update({
- attendee_list: firestore.FieldValue.arrayUnion(name)
+ attendee_list: firebase.firestore.FieldValue.arrayUnion(name)
});
}
@@ -190,7 +193,7 @@ class EventApi {
let eventRef = this.db.collection("events").doc(id);
eventRef.update({
- rsvp_list: firestore.FieldValue.arrayUnion(userName)
+ rsvp_list: firebase.firestore.FieldValue.arrayUnion(userName)
});
}
}
diff --git a/frontend/src/components/Firebase/file.ts b/frontend/src/components/Firebase/file.ts
index e730b165..522ebd67 100644
--- a/frontend/src/components/Firebase/file.ts
+++ b/frontend/src/components/Firebase/file.ts
@@ -3,7 +3,10 @@
* support special, common uploads such as Venmo and Resume.
* This should be the POC for all google cloud storage functionality.
*/
+
+import firebase from "firebase/app";
import Firebase from "./firebase";
+import firestore from "firebase/app";
diff --git a/frontend/src/components/Firebase/groups.ts b/frontend/src/components/Firebase/groups.ts
index ce11b0f0..b9d642b5 100644
--- a/frontend/src/components/Firebase/groups.ts
+++ b/frontend/src/components/Firebase/groups.ts
@@ -3,7 +3,7 @@
* for managing groups, mostly related to creating, deleting, etc.
*/
import Firebase from "./firebase";
-import {firestore} from "firebase/app";
+import firebase from "firebase/app";
export default class GroupApi {
@@ -54,7 +54,7 @@ export default class GroupApi {
// add user to group
const curr_uid = this._fbapp.user.get_current_uid();
// console.log(name)
- this.db.collection('users').doc(curr_uid).update({groups: firestore.FieldValue.arrayUnion(name)})
+ this.db.collection('users').doc(curr_uid).update({groups: firebase.firestore.FieldValue.arrayUnion(name)})
}
/**
@@ -75,7 +75,7 @@ export default class GroupApi {
let individualRemovalPromise = this.db.collection('usergroups').doc(name).collection('members').get().then((members: any) => {
// for each member in here, update their document to not include this group
members.docs.forEach((memberDocRef:any) => {
- this.db.collection('users').doc(memberDocRef.id).update({groups: firestore.FieldValue.arrayRemove(name)});
+ this.db.collection('users').doc(memberDocRef.id).update({groups: firebase.firestore.FieldValue.arrayRemove(name)});
memberDocRef.ref.delete();
})
});
diff --git a/frontend/src/components/Firebase/user.ts b/frontend/src/components/Firebase/user.ts
index d08751eb..3508f4f2 100644
--- a/frontend/src/components/Firebase/user.ts
+++ b/frontend/src/components/Firebase/user.ts
@@ -5,7 +5,11 @@
*/
import Firebase from "./firebase";
import * as entity from "./entity";
-import {firestore, auth, functions} from "firebase/app";
+import firebase from "firebase/app";
+//import {auth, firestore, functions} from "firebase/app";
+import auth from "firebase/app";
+import firestore from "firebase/app";
+import functions from "firebase/app";
import {DUES_SEMESTER, DUES_YEAR} from "../../config/config";
/**
@@ -20,7 +24,7 @@ class UserApi {
this._fbapp = firebaseApp;
this.db = firebaseApp.db;
this.auth = firebaseApp.app.auth();
- this.auth.setPersistence(auth.Auth.Persistence.SESSION);
+ this.auth.setPersistence(firebase.auth.Auth.Persistence.SESSION);
this.functions = this._fbapp.app.functions();
}
@@ -228,7 +232,7 @@ class UserApi {
async update_user_XP(uid: string, XP: number) {
let userRef = await this.db.collection('users').doc(uid);
return userRef.update({
- XP: firestore.FieldValue.increment(XP)
+ XP: firebase.firestore.FieldValue.increment(XP)
});
}
@@ -275,8 +279,8 @@ class UserApi {
async add_eventXP_to_user(uid: string, eventId: string, eventXP: number) {
let userRef = await this.db.collection('users').doc(uid);
userRef.update({
- XP: firestore.FieldValue.increment(eventXP),
- xp_history: firestore.FieldValue.arrayUnion({id: eventId, xp: eventXP}),
+ XP: firebase.firestore.FieldValue.increment(eventXP),
+ xp_history: firebase.firestore.FieldValue.arrayUnion({id: eventId, xp: eventXP}),
});
// let userRef = await this.db.collection('users').doc(uid);
@@ -450,7 +454,7 @@ class UserApi {
// we don't /need/ to wait for completion.
promises.push(this.db.collection('usergroups').doc(element).collection("members").doc(user).set({}));
});
- await this.db.collection('users').doc(user).update({groups: firestore.FieldValue.arrayUnion(groups)});
+ await this.db.collection('users').doc(user).update({groups: firebase.firestore.FieldValue.arrayUnion(groups)});
//wait for completion
await promises;
return true;
@@ -460,7 +464,7 @@ class UserApi {
async addUserToGroup(uid: string, group: string) {
// update the user's doc
- let p1 = this.db.collection('users').doc(uid).update({groups: firestore.FieldValue.arrayUnion(group)});
+ let p1 = this.db.collection('users').doc(uid).update({groups: firebase.firestore.FieldValue.arrayUnion(group)});
let p2 = this.db.collection('usergroups').doc(group).collection("members").doc(uid).set({});
await p1
.then(() => {
@@ -509,7 +513,7 @@ class UserApi {
// approve & add
if (response === 1) {
this.db.collection('usergroups').doc(name).collection('members').doc(uid).set({});
- this.db.collection('users').doc(this.get_current_uid()).update({groups: firestore.FieldValue.arrayUnion(name)})
+ this.db.collection('users').doc(this.get_current_uid()).update({groups: firebase.firestore.FieldValue.arrayUnion(name)})
}
// no matter what, just delete the request
this.db.collection('usergroups').doc(name).collection('join_requests').doc(uid).delete();
@@ -530,7 +534,7 @@ class UserApi {
if (perm) {
// start the update operation
- const comp_promise = this.db.collection('users').doc(user).update({groups: firestore.FieldValue.arrayRemove(groups)});
+ const comp_promise = this.db.collection('users').doc(user).update({groups: firebase.firestore.FieldValue.arrayRemove(groups)});
// delete from groups
groups.forEach(element => {
this.db.collection("usergroups").doc(element).collection("members").doc(user).delete();
diff --git a/frontend/src/components/Footer/Navigation.css b/frontend/src/components/Footer/Navigation.css
new file mode 100644
index 00000000..92e1a44a
--- /dev/null
+++ b/frontend/src/components/Footer/Navigation.css
@@ -0,0 +1,20 @@
+/****
+ Used for both navigation bar at top and footer
+ ****/
+
+.main {
+ background: #001629;
+}
+
+.navbar, .navbar-default {
+ color: white !important;
+}
+
+
+.nav-link {
+ color: white ;
+}
+
+.nav-link:hover {
+ color: #338AFC;
+}
diff --git a/frontend/src/components/Footer/icon.png b/frontend/src/components/Footer/icon.png
new file mode 100644
index 00000000..0b6298cc
Binary files /dev/null and b/frontend/src/components/Footer/icon.png differ
diff --git a/frontend/src/components/Footer/index.js b/frontend/src/components/Footer/index.js
new file mode 100644
index 00000000..ab263bf0
--- /dev/null
+++ b/frontend/src/components/Footer/index.js
@@ -0,0 +1,90 @@
+import React from "react";
+import Nav from "react-bootstrap/Nav";
+import Navbar from "react-bootstrap/Navbar";
+import { Col, Row } from "react-bootstrap";
+import { FaFacebookF, FaInstagram } from "react-icons/fa";
+import "./Navigation.css";
+import icon from "./icon.png";
+
+import * as ROUTES from "../../config/routes";
+
+var divPadding = {
+ paddingTop: "4em",
+};
+
+export default class Footer extends React.Component {
+ render() {
+ return (
+
+
+
+
+
+
+
+
+ {/*column 1*/}
+
+
+ About Us
+
+ Contact
+
+ Terms & Conditions
+
+
+ {/*column 2*/}
+
+
+
+
+ Facebook
+
+
+
+ Instagram
+
+
+
+ {/*column 3*/}
+
+
+ {/*Start a Chapter */}
+ {/*Donate*/}
+ Sponsor Us
+
+
+ {/*column 4*/}
+
+
+
+ 220 Ferst Dr NW, Atlanta, GA 30318
+ hello@datasciencegt.org
+
+
+
+
+ As a nonprofit, we rely on donations to keep us running.
+ Right now, we're an all-volunteer staff but we have
+ operational costs just like any company. Your donation will
+ go towards helping expand our operations, increasing the
+ quality of our materials, and allowing our staff to keep
+ doing their job. Any donation, big or small, is an
+ incredible help.
+
+
+ {/* */}
+
+
+
+
+
+
+
Become a Chapter
+
+
+ If you want to help bring the resources DSI has to offer to
+ your community, consider starting a chapter! If you do start
+ a chapter, you'll gain access to our bootcamp material,
+ logistics expertise, funding, and sponsors. We'll help you
+ set up a club that creates lasting value for your community
+ β all you have to do is ask! Although new chapters are
+ currently invitation-only, we'll be opening applications for
+ new chapters online by January 2022. In the meantime, you
+ can email us to let us know you're interested.
+
+
+ {/* */}
+
+
+
+
+
+
+
Sponsor Us
+
+
+ Sponsorships are our main source of funding, and we rely on
+ benevolent organizations to continue our operations. All of
+ our sponsors get recognized on our website, and have our
+ gratitude! If you or your company are interested in
+ sponsoring us, thank you! {/*Click below to find out more
+ information. */}
+
+
Data Science @ Georgia Tech started as a small club at the
+ Georgia Institute of Technology for spreading awareness and
+ education about data science. It has since morphed into a
+ massive program that reaches over 200 people every year and
+ draws over 100 people to each of its main events. DSGT provides
+ students with workshops, project opportunities, and
+ leadership opportunities to help train the next generation
+ of data scientists.
+
+
+
+
+
+ );
+ }
+}
diff --git a/frontend/src/components/Landing Page/MeetTeam/team.png b/frontend/src/components/Landing Page/MeetTeam/team.png
new file mode 100755
index 00000000..bb82768f
Binary files /dev/null and b/frontend/src/components/Landing Page/MeetTeam/team.png differ
diff --git a/frontend/src/components/Landing Page/Opportunity/index.js b/frontend/src/components/Landing Page/Opportunity/index.js
new file mode 100755
index 00000000..6d69e3fe
--- /dev/null
+++ b/frontend/src/components/Landing Page/Opportunity/index.js
@@ -0,0 +1,85 @@
+import React from "react";
+import { Container, Row } from "react-bootstrap";
+import Card from "react-bootstrap/Card";
+import CardDeck from "react-bootstrap/CardDeck";
+
+/// make a global stylesheet for this div and divpadding
+let divPadding = {
+ padding: "4em 0 4em 0",
+};
+
+let divPaddingInner = {
+ padding: "0 0 2em 0",
+};
+
+let noBorder = {
+ border: "none",
+};
+
+let blue = {
+ color: "#0063B9",
+};
+
+let align = {
+ alignItems: "center",
+ textAlign: "center",
+};
+
+export default class Opportunity extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/frontend/src/components/Landing Page/Quotes/index.js b/frontend/src/components/Landing Page/Quotes/index.js
new file mode 100644
index 00000000..c1ded0c7
--- /dev/null
+++ b/frontend/src/components/Landing Page/Quotes/index.js
@@ -0,0 +1,91 @@
+import React from "react";
+import { Col, Container, Row } from "react-bootstrap";
+import { Thumbs } from "react-responsive-carousel";
+import * as ROUTES from "../../../config/routes";
+import quotepic from './quote.png';
+
+let quotes = [
+ "βStatistics are like bikinis. What they reveal is suggestive, but what they conceal is vital.β βAaron Levenstein",
+ "βIf you canβt explain it simply, you donβt understand it well enough.β βAlbert Einstein",
+ "βIn the end you should only measure and look at the numbers that drive action, meaning that the data tells you what you should do next.β βAlexander Peiniger",
+ "βIt is very common to find that the data to support many of the business information needs is simply not available at the levels required, or that it is of such bad quality that it is impossible to use. Resolution of these types of issues often requires fundamental changes to business processes.β βAlison Newell",
+ "βItβs easy to lie with statistics Itβs hard to tell the truth without statistics.β βAndrejs Dunkels",
+ "βThe world is one big data problem.β βAndrew McAfee",
+]
+
+let switchTime = 60; //in minutes
+
+let chunk = {
+ padding: "4em 1em",
+ //border: "1px solid red",
+};
+
+let divPadding = {
+ padding: "4em 0 4em 0",
+};
+
+let blue = {
+ color: "#0063B9",
+};
+
+let h1style = {
+ fontSize: "20px",
+};
+
+export default class WhatWeDo extends React.Component {
+ constructor() {
+ super();
+ this.state = {loading: true, img: 0}
+ }
+
+ changeQuote = () => {
+ if (this.state.img >= (quotes.length - 1)) {
+ this.setState({img: 0});
+ } else {
+ this.setState({img: this.state.img+1})
+ }
+ }
+
+ async componentDidMount() {
+ this.setState({loading:false});
+ setInterval(() => {
+ this.changeQuote();
+ }, 1000 * 60 * switchTime)
+ }
+
+ render() {
+ if(this.state.loading){
+ return (
+
+ );
+ }
+}
diff --git a/frontend/src/components/Landing Page/Quotes/quote.png b/frontend/src/components/Landing Page/Quotes/quote.png
new file mode 100644
index 00000000..cec7c884
Binary files /dev/null and b/frontend/src/components/Landing Page/Quotes/quote.png differ
diff --git a/frontend/src/components/Landing Page/WhatWeDo/gears.png b/frontend/src/components/Landing Page/WhatWeDo/gears.png
new file mode 100755
index 00000000..b170381a
Binary files /dev/null and b/frontend/src/components/Landing Page/WhatWeDo/gears.png differ
diff --git a/frontend/src/components/Landing Page/WhatWeDo/hand.png b/frontend/src/components/Landing Page/WhatWeDo/hand.png
new file mode 100755
index 00000000..cc3a2fdb
Binary files /dev/null and b/frontend/src/components/Landing Page/WhatWeDo/hand.png differ
diff --git a/frontend/src/components/Landing Page/WhatWeDo/index.js b/frontend/src/components/Landing Page/WhatWeDo/index.js
new file mode 100755
index 00000000..6cd4fff5
--- /dev/null
+++ b/frontend/src/components/Landing Page/WhatWeDo/index.js
@@ -0,0 +1,133 @@
+import React from "react";
+import { Col, Container, Row } from "react-bootstrap";
+import gears from "./gears.png";
+import hand from "./hand.png";
+import project from "./project.png";
+import search from "./search.png";
+import theory from "./theory.png";
+import * as ROUTES from "../../../config/routes";
+
+let picContainer = {
+ height: "30vh",
+ padding: "1em",
+};
+
+let chunk = {
+ padding: "2em 1em 2em 1em",
+};
+
+let divPadding = {
+ padding: "4em 0 4em 0",
+};
+
+let blue = {
+ color: "#0063B9",
+};
+
+export default class WhatWeDo extends React.Component {
+ render() {
+ return (
+
+
+
+ {/* Row: image on left */}
+
+
+
+
+
+
+
+
Providing Foundation
+
+ We teach our members core data science skills through a
+ bootcamp that takes our members on a start-to-finish journey,
+ touching on essentials such as cleaning data and identifying
+ biases to more advanced concepts, such as dimensionality
+ reduction and machine learning β all in a digestible,
+ applicable, and interactive format. Members come out of our
+ bootcamp with a polished data science project and the
+ confidence to learn more.
+
+
+
+ {/* Row: image on right */}
+ {/*
+
+
Providing Practical Education
+
+ After our foundational content, we give our members the
+ opportunity to expand their practical and theoretical skills
+ through bootcamps tailored to specific concentrations of
+ learning. Data Science is more than just programming; we're
+ equipping our members to apply their skills in the fields of
+ Healthcare, Finance, Data Engineering, Data Visualization, &
+ more!
+
+
+
+
+
+
+
+
+ {/* Row: iamge on left */}
+ {/*
+
+
+
+
+
+
+
Promoting Inquisitiveness
+
+ Our members are bright and talented students. Our goal is to
+ help them continue to learn and grow through thoughtful and
+ engaging conversations surrounding data science.
+
+
+
+ {/* Row: iamge on right */}
+
+
+
Providing Opportunity
+
+ We assist chapters and individuals in starting and running
+ local data science projects to offer students an opportunity
+ to work in a team and exercise their skills. We also organize
+ a yearly hackathon, Hacklytics, for those of all skill levels
+ to hone in our their data science skills.{" "}
+ View our ongoing projects
+
+
+
+
+
+
+
+
+ {/* Row: iamge on left */}
+
+
+
+
+
+
+
+
Providing a Future
+
+ DSGT arranges projects with corporate sponsors to allow
+ members to work on real life data science problems full-time
+ or part-time all while getting paid. We also organize company
+ events and talks that allow our members to build a network and
+ learn more about the professional opportunities in the field
+ of data science.{" "}
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/frontend/src/components/Landing Page/WhatWeDo/project.png b/frontend/src/components/Landing Page/WhatWeDo/project.png
new file mode 100755
index 00000000..b198f4d8
Binary files /dev/null and b/frontend/src/components/Landing Page/WhatWeDo/project.png differ
diff --git a/frontend/src/components/Landing Page/WhatWeDo/search.png b/frontend/src/components/Landing Page/WhatWeDo/search.png
new file mode 100755
index 00000000..724aeb78
Binary files /dev/null and b/frontend/src/components/Landing Page/WhatWeDo/search.png differ
diff --git a/frontend/src/components/Landing Page/WhatWeDo/theory.png b/frontend/src/components/Landing Page/WhatWeDo/theory.png
new file mode 100755
index 00000000..d20c3424
Binary files /dev/null and b/frontend/src/components/Landing Page/WhatWeDo/theory.png differ
diff --git a/frontend/src/components/Home Page/__tests__/HomePage.test.js b/frontend/src/components/Landing Page/__tests__/HomePage.test.js
similarity index 100%
rename from frontend/src/components/Home Page/__tests__/HomePage.test.js
rename to frontend/src/components/Landing Page/__tests__/HomePage.test.js
diff --git a/frontend/src/components/Home Page/index.js b/frontend/src/components/Landing Page/index.js
similarity index 77%
rename from frontend/src/components/Home Page/index.js
rename to frontend/src/components/Landing Page/index.js
index 4c5d8b21..b0da97cd 100644
--- a/frontend/src/components/Home Page/index.js
+++ b/frontend/src/components/Landing Page/index.js
@@ -3,13 +3,20 @@ import {Container, Row, Col, Table, Button} from 'react-bootstrap';
import * as CONSTANTS from "../../config/config";
import { Carousel } from 'react-responsive-carousel';
import "react-responsive-carousel/lib/styles/carousel.min.css";
-import './HomePage.css';
+import Hero from './Hero';
+import WhatWeDo from './WhatWeDo';
+import Quotes from './Quotes';
+import MeetTeam from './MeetTeam';
+import GetInvolved from './GetInvolved';
+import Future from './Future';
+import Opportunity from './Opportunity';
+import Footer from "../Footer";
+import './LandingPage.css';
/**
* This is the homepage of the website.
* Split up into React Fragments to provide modularity.
*/
-
/**
* @author Raj Shrimali and Vidhur Kumar
*/
@@ -31,65 +38,53 @@ import './HomePage.css';
}
}
-/**
- *
- */
-const Hero = () => {
+// /**
+// *
+// */
+// const About = () => { return (
+//
+//
+//
The Big Ideas
+//
+//
+//
Provide
+//
+//
+// Data science has the potential to improve our communities, so we run projects with that sole purpose. Our
+// projects are chosen because of their potential impact, both on our campus and the global community at large.
+// We don't want our members to be hindered by lack of money, so our featured projects receive funding for
+// resources that are crucial to their success.
- return(
-
-
- Data science has the potential to improve our communities, so we run projects with that sole purpose. Our
- projects are chosen because of their potential impact, both on our campus and the global community at large.
- We don't want our members to be hindered by lack of money, so our featured projects receive funding for
- resources that are crucial to their success.
-
- We recognize a good idea can come from anywhere, so we encourage our members to pursue their own projects.
- Member-initiated projects receive the support of the club, and if they satisfy our community-oriented criteria,
- may receive funding.
-
-
-
-
-
Inform
-
-
- Data science is a hard field to get into, and can be intimidating for those who are unfamiliar with it.
- To make the learning process easier for our members, we host weekly workshops that let them interactively get
- familiar with data science. We also host monthly public workshops that help those who are interested learn more
- about the field and get their feet wet with basic data science skills.
-
-
-
-
-
Grow
-
-
- We want our members to be well-prepared for their future. After all, we are nothing without them!
- Our special events include corporate information sessions, game nights, and networking events that
- allow our members to devleop themselves professionally. We are also planning on hosting a data-science-oriented
- hackathon in Spring 2019.
-
-
-
-
-)};
+// We recognize a good idea can come from anywhere, so we encourage our members to pursue their own projects.
+// Member-initiated projects receive the support of the club, and if they satisfy our community-oriented criteria,
+// may receive funding.
+//
+//
+//
+//
+//
Inform
+//
+//
+// Data science is a hard field to get into, and can be intimidating for those who are unfamiliar with it.
+// To make the learning process easier for our members, we host weekly workshops that let them interactively get
+// familiar with data science. We also host monthly public workshops that help those who are interested learn more
+// about the field and get their feet wet with basic data science skills.
+//
+//
+//
+//
+//
Grow
+//
+//
+// We want our members to be well-prepared for their future. After all, we are nothing without them!
+// Our special events include corporate information sessions, game nights, and networking events that
+// allow our members to devleop themselves professionally. We are also planning on hosting a data-science-oriented
+// hackathon in Spring 2019.
+//
+//
+//
+//
+// )};
/**
*
@@ -292,18 +287,18 @@ const Meetings = () => {
/**
* @author Raj Shrimali and Vidhur Kumar
*/
-export default class HomePage extends React.Component {
+export default class LandingPage extends React.Component {
render() {
return (
-
-
-
-
- {/* */}
-
-
+
+
+
+ {/**/}
+ {/**/}
+ {/**/}
+
);
diff --git a/frontend/src/components/Navigation/Navigation.css b/frontend/src/components/Navigation/Navigation.css
index aa1686e7..00a5a8be 100644
--- a/frontend/src/components/Navigation/Navigation.css
+++ b/frontend/src/components/Navigation/Navigation.css
@@ -1,29 +1,20 @@
-.main-navbar {
- background: #000000;
+/****
+ Used for both navigation bar at top and footer
+ ****/
+
+ .main {
+ background: #001629;
}
-/*
-.navbar-light .navbar-toggler {
- color: azure;
- border-color: azure;
-} */
-/**
-COMMENT THIS IN IF IN DARK NAVBAR MODE. Ensures that the hamburger is visible when in mobile mode.
-**/
+.navbar, .navbar-default {
+ color: white !important;
+}
-/* .navbar-light .navbar-toggler-icon{
- background-image: url("https://icon-library.net/images/three-bars-icon/three-bars-icon-6.jpg");
-} */
-.navbar-light .navbar-nav .nav-link {
- color: #338AFC;
+.nav-link {
+ color: white ;
}
-.navbar-light .navbar-nav .nav-link:hover {
+.nav-link:hover {
color: #338AFC;
}
-
-.dsgt-button {
- background-color: #338AFC !important;
- border-color: #338AFC !important;
-}
\ No newline at end of file
diff --git a/frontend/src/components/Navigation/icon.png b/frontend/src/components/Navigation/icon.png
new file mode 100755
index 00000000..0b6298cc
Binary files /dev/null and b/frontend/src/components/Navigation/icon.png differ
diff --git a/frontend/src/components/Navigation/index.js b/frontend/src/components/Navigation/index.js
index 4f85e7a1..22f16148 100644
--- a/frontend/src/components/Navigation/index.js
+++ b/frontend/src/components/Navigation/index.js
@@ -1,103 +1,164 @@
-import React from 'react';
-import {Link} from 'react-router-dom';
-import Nav from 'react-bootstrap/Nav';
-import Navbar from 'react-bootstrap/Navbar';
-import {Button} from 'react-bootstrap';
-import * as ROUTES from "../../config/routes"
-import {AuthUserContext, withAuthentication} from "../Session";
-import {withRouter} from "react-router-dom";
-import {withFirebase} from '../Firebase';
-import './Navigation.css';
+import React from "react";
+import { Link } from "react-router-dom";
+import Nav from "react-bootstrap/Nav";
+import Navbar from "react-bootstrap/Navbar";
+import { Button } from "react-bootstrap";
+import * as ROUTES from "../../config/routes";
+import { AuthUserContext, withAuthentication } from "../Session";
+import { withRouter } from "react-router-dom";
+import { withFirebase } from "../Firebase";
+import "./Navigation.css";
+import DSGTLogo from "./icon.png";
/**
* Login button on the Navbar that gets conditionally rendered.
*/
class LoginComponent extends React.Component {
- constructor(props) {
- super(props);
- this.SignOut = this.SignOut.bind(this);
- }
+ constructor(props) {
+ super(props);
+ this.SignOut = this.SignOut.bind(this);
+ }
- SignOut(event) {
- event.preventDefault();
- this.props.firebase.user.signout().then(() => {
- this.props.history.push("/");
- });
- }
+ SignOut(event) {
+ event.preventDefault();
+ this.props.firebase.user.signout().then(() => {
+ this.props.history.push("/");
+ });
+ }
+
+ render() {
+ if (this.context) {
+ return (
+
+ );
+ } else {
+ return null;
- render() {
- if (this.context) {
- return (
- Sign Out
- )
- }
- else {
- return (Login)
- }
+ {
+ /* */
+ }
+ // return (Login)
}
+ }
}
/**
* Sign up button on the Navbar that also gets conditionally rendered.
*/
class SignupComponent extends React.Component {
- render() {
- if(this.context) {
- return null;
- } else {
- return (
- Sign Up
- )
- }
+ render() {
+ if (this.context) {
+ return null;
+ } else {
+ return (
+
+
+ //replace href with ROUTES.SIGNUP for next version
+ );
}
+ }
}
-
-LoginComponent.contextType = AuthUserContext;
-let AuthLoginComponent = withRouter(withAuthentication(LoginComponent));
+LoginComponent.contextType = AuthUserContext;
+let AuthLoginComponent = withRouter(withAuthentication(LoginComponent));
SignupComponent.contextType = AuthUserContext;
let AuthSignUpComponent = withRouter(withAuthentication(SignupComponent));
+// class Navigation extends React.Component {
+// constructor(props, authUser) {
+// super(props);
+
+// }
+// render() {
+// let isLoggedin = this.props.firebase.user.auth.currentUser;
+// return (
+//
+
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit.
+
+
+
+ {/*C1 Game Night*/}
+
+
+
Correlation One Game Night 2018
+
+ In partnership with Correlation One and Citadel, we hosted a data science coding competition with over 60 participants.
+
+
+
+ {/*Hacklytics 2019*/}
+
+
+
Hacklytics 2019
+
+ Our premier data science hackathon featured 80 attendees hacking for 12 hours to create cool projects like an analysis of Atlanta City Council minutes and an AI model to detect cancer.
+
+ {/*Reach*/}
+
+ {/*Fall 2019 Kickoff*/}
+
+
+
Fall Kickoff 2019
+
+ Our second kickoff drew a mind-blowing 175 attendees, motivating us to launch the Data Science Initiative and taking our organization to new heights.
+
+
+
+
+
+ {/*KPMG Ignite*/}
+
+
+
KPMG Ignite: Artificial Intelligence in the Enterprise
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+ {/*Terminal Live*/}
+
+
+
Terminal Live at Georgia Tech
+
+ The second iteration of the C1 Game Night, Terminal Live, drew 60 participants who had a great time developing algorithms to compete in Correlation One's challenge.
+
+
+
+ {/*Hacklytics 2020*/}
+
+
+
Hacklytics 2020
+
+ Our second ever annual Hacklytics with over 400 applicants and 12 sponsors was our largest-ever event.
+
+ {/*Reach*/}
+
+
+
+
+
+ );
+ }
+}
diff --git a/frontend/src/components/OurWork/sections/Timeline.js b/frontend/src/components/OurWork/sections/Timeline.js
new file mode 100644
index 00000000..f55664d7
--- /dev/null
+++ b/frontend/src/components/OurWork/sections/Timeline.js
@@ -0,0 +1,21 @@
+import React from 'react';
+
+import { Image, Row } from 'react-bootstrap';
+
+import timeline from './timeline.png';
+
+let blue = {
+ color: "#0063B9",
+}
+
+
+export default class Home extends React.Component {
+ render() {
+ return (
+
+
Our Work
+
+
+ );
+ }
+ }
diff --git a/frontend/src/components/OurWork/sections/timeline.png b/frontend/src/components/OurWork/sections/timeline.png
new file mode 100644
index 00000000..1470fb09
Binary files /dev/null and b/frontend/src/components/OurWork/sections/timeline.png differ
diff --git a/frontend/src/components/Projects/assets/Mentra.png b/frontend/src/components/Projects/assets/Mentra.png
new file mode 100644
index 00000000..8145a230
Binary files /dev/null and b/frontend/src/components/Projects/assets/Mentra.png differ
diff --git a/frontend/src/components/Projects/assets/fynat.PNG b/frontend/src/components/Projects/assets/fynat.PNG
new file mode 100644
index 00000000..f113168e
Binary files /dev/null and b/frontend/src/components/Projects/assets/fynat.PNG differ
diff --git a/frontend/src/components/Projects/assets/portrait.png b/frontend/src/components/Projects/assets/portrait.png
new file mode 100644
index 00000000..d8c99237
Binary files /dev/null and b/frontend/src/components/Projects/assets/portrait.png differ
diff --git a/frontend/src/components/Projects/assets/storm.PNG b/frontend/src/components/Projects/assets/storm.PNG
new file mode 100644
index 00000000..2621897c
Binary files /dev/null and b/frontend/src/components/Projects/assets/storm.PNG differ
diff --git a/frontend/src/components/Projects/index.js b/frontend/src/components/Projects/index.js
new file mode 100644
index 00000000..59af4775
--- /dev/null
+++ b/frontend/src/components/Projects/index.js
@@ -0,0 +1,118 @@
+import React from "react";
+import { Container, Row } from 'react-bootstrap';
+import Card from 'react-bootstrap/Card';
+import CardDeck from 'react-bootstrap/CardDeck';
+import Footer from '../Footer';
+import Navigation from '../Navigation';
+
+import portrait from './assets/portrait.png';
+import mentra from './assets/Mentra.png';
+import storm from './assets/storm.PNG';
+import fynat from './assets/fynat.PNG';
+
+let divPadding = {
+ padding: "4em 0 4em 0",
+}
+
+let divPaddingInner = {
+ padding: "2em 0 2em 0",
+}
+
+let noBorder = {
+ border: "none",
+}
+
+let blue = {
+ color: "#0063B9",
+}
+
+let midBlue = {
+ color: "white",
+ backgroundColor: "#7FC4FD",
+ fontWeight: "bold",
+}
+
+let lightBlue = {
+ backgroundColor: "#F1F9FF",
+}
+
+export default class Projects extends React.Component {
+ render() {
+ return(
+
+
+
Projects
+
+
+
+ {/*Mentra*/}
+
+
+
Mentra
+
+ The Mentra Team is currently working on developing a Natural Language Processing (NLP) classifier that can group any given job description into a group of skills that are necessary to succeed in that job. This will help the start-up Mentra in their goal to design an employment-matching system for individuals on the autism spectrum.
+
+
+ In Development
+
+ {/*Stormalytics*/}
+
+
+
Stormalytics
+
+ The National Weather Service uses outdates, stats-based models to try to predict tornadoes. Using tornado records, and the available rich doppler data, DSGT is trying to build an intelligent tornado activity prediction system. We hope to be able to predict tornadoes earler than the current standard, saving lives in the process.
+
+
+ In Development
+
+ {/*FYNAT*/}
+
+
+
FYNAT
+
+ Students are often overwhelmed by the seemingly infinite amount of organizations when they come to campus. FYNAT hopes to utilize user-submitted data to connet those who have similar interests and use profiles of students to match them to a club or organization, taking some of the initial anxiety and fear out of the freshman college experience.
+
+
+ In Development
+
+
+
+ {/*Geosyntec Data Managemnet*/}
+
+
+
Geosyntec Data Management
+
+ The Geosyntec Project revolved around creating a unified data management application that can convert xml files into a more user friendly format, specifically that of a SQL or Microsoft Access Database.
+
+
+ In Development
+
+ {/*Opioid Awareness*/}
+
+
+
Opioid Awareness
+
+ The Opioid Awareness Project will be working closely with the Fulton Country Department of Behavioral Health & Developmental Disabilities to develop informational material about the risks associated with opioid usage online and analyzing data with Python-Oriented Data Science libraries to generate visuals.
+
+
+ In Development
+
+ {/*Kaggle Projects*/}
+
+
+
Kaggle Projects
+
+ Kaggle Projects serve as a low-pressure way for members to gain basic data science experience. This semester, Kaggle projects is focusing on an age-old problem in Data Science: given an extensive set of features, how can one best predict the price of a home?
+
+
+ In Development
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/frontend/src/config/routes.js b/frontend/src/config/routes.js
index bfd9c9e0..72cb6743 100644
--- a/frontend/src/config/routes.js
+++ b/frontend/src/config/routes.js
@@ -11,4 +11,11 @@ export const DASHBOARD_HOME = '/dashboard/home';
export const DASHBORD_EDIT_PROFILE = '/dashboard/edit';
export const DASHBOARD_EVENT = '/dashboard/event';
export const DASHBOARD_GROUP = '/dashboard/group';
-export const DASHBOARD_WORKSHOPS = '/dashboard/workshops';
\ No newline at end of file
+export const DASHBOARD_WORKSHOPS = '/dashboard/workshops';
+
+export const OUR_TEAM = "/our-team";
+export const OUR_WORK = "/our-work";
+export const BOOTCAMP = "/bootcamp"
+export const PROJECTS = "/projects";
+//export const CONTACT = "/contact";
+export const FAQS = "/FAQs";
\ No newline at end of file
diff --git a/functions/src/app.ts b/functions/src/app.ts
index 2bc9f4ca..49fe7a92 100644
--- a/functions/src/app.ts
+++ b/functions/src/app.ts
@@ -1,7 +1,11 @@
+require('cors')({ origin: true });
+
/**
* Links all the different API endpoints together.
* Wraps up all the different cloud functions
*/
+
+/*
import * as functions from 'firebase-functions';
import * as funcs from "./funcs"
// import * as events from './events';
@@ -15,4 +19,5 @@ module.exports.scheduledEventXPDistribution = functions.pubsub.schedule(('every
funcs.scheduledEventXPDistribution
});
// module.exports.userCreateAddInfo = functions.https.onCall(funcs.userCreateAddInfo);
-// module.exports.userDeleteTrigger = functions.auth.user().onDelete(funcs.onUserDelete);
\ No newline at end of file
+// module.exports.userDeleteTrigger = functions.auth.user().onDelete(funcs.onUserDelete);
+*/
\ No newline at end of file
diff --git a/functions/src/funcs.ts b/functions/src/funcs.ts
index 300ee711..868ba5f1 100644
--- a/functions/src/funcs.ts
+++ b/functions/src/funcs.ts
@@ -1,3 +1,4 @@
+require('cors')({ origin: true });
/**
* Includes google cloud functions. For laziness,
* some things from the web-api are duplicated here, including the
@@ -15,7 +16,9 @@
* same-origin requests. Makes testing a bitch so for dev purposes,
* this is left here. See issue #80.
*/
-require('cors')({ origin: true });
+
+ /*
+
import * as functions from "firebase-functions"
import * as admin from "firebase-admin"
import {google, sheets_v4} from "googleapis"
@@ -70,6 +73,8 @@ async function get_user(uid:string){
* ```
* @param context The authentication context for this call
*/
+
+/*
export const onUserVerify = async function(data: any, context: any): Promise {
// verify authorization of this user
console.info("Triggered User Verification authorized by ", context.auth);
@@ -95,7 +100,7 @@ export const onUserVerify = async function(data: any, context: any): Promise {
const events: any = get_events();
@@ -168,7 +173,7 @@ export const scheduledEventXPDistribution = () => {
* @param uid
* @param eventId
* @param eventXP
- */
+
async function add_eventXP_to_user(uid: string, eventId: string, eventXP: number) {
const userRef = await db.collection('users').doc(uid);
userRef.update({
@@ -189,7 +194,7 @@ async function add_eventXP_to_user(uid: string, eventId: string, eventXP: number
/**
*
* @param id
- */
+
async function mark_event_xpAdded(id: string) {
const eventRef = db.collection("events").doc(id);
return eventRef.update({
@@ -207,7 +212,7 @@ async function mark_event_xpAdded(id: string) {
*
* @param first_name
* @param last_name
- */
+
async function get_user_from_name(first_name: string, last_name: string) {
let id;
await db.collection('users')
@@ -235,7 +240,7 @@ async function get_user_from_name(first_name: string, last_name: string) {
/**
*
- */
+
async function get_events() {
const events: any = [];
await db.collection('events').get().then(snapshot => {
@@ -247,4 +252,7 @@ async function get_events() {
})
return events;
-}
\ No newline at end of file
+}
+
+*/
+export {}
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index f06cae38..5b7ee721 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1 +1,39 @@
-Data Science at GT
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+ Data Science at GT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file