diff --git a/src/index.js b/src/index.js index 1d39281..f02bca6 100644 --- a/src/index.js +++ b/src/index.js @@ -18,6 +18,7 @@ import { Switch, Redirect, } from "react-router-dom"; +import Prizes from "./js/prizes/Prizes.jsx"; const reload = () => window.location.reload(); @@ -40,7 +41,7 @@ class Main extends React.Component {
-

Note: all times below are in PT (California time)

+

Note: all times below are in PST (California time)

@@ -85,6 +86,7 @@ function App() { + diff --git a/src/js/apis/Apis.jsx b/src/js/apis/Apis.jsx index 732e384..cb7f9e2 100644 --- a/src/js/apis/Apis.jsx +++ b/src/js/apis/Apis.jsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import Bricklayer from "bricklayer"; import data from "./data.yaml"; @@ -8,9 +8,43 @@ export default class extends React.Component { this.myRef = React.createRef(); this.state = { tag: null, + searchInput: "", + companyData: data.companies, }; this.onTagClick = this.onTagClick.bind(this); + this.handleChange = this.handleChange.bind(this); } + + handleChange = (e) => { + e.preventDefault(); + this.setState({ searchInput: e.target.value }); + //const dataC = [{ name: "Belgium", continent: "Europe" }]; + if (this.state.searchInput.length > 0) { + const filtered = this.state.companyData.filter( + (country) => + country.apis[0].title + .toLowerCase() + .includes(this.state.searchInput) || + country.apis[0].description + .toLowerCase() + .includes(this.state.searchInput) + ); + this.setState({ companyData: filtered }); + console.log(filtered); + } + }; + + /* + + const filtered = constantProjectData.filter( + (project) => + project.projectTitle?.includes(search) || + project.projectDescription?.includes(search) || + project.builders?.includes(search) || + project.submitFirstName?.includes(search) || + project.submitLastName?.includes(search) + );*/ + componentDidMount() { this.bricklayer = new Bricklayer(this.myRef.current); } @@ -27,6 +61,7 @@ export default class extends React.Component { }); } } + render() { return (
@@ -34,15 +69,32 @@ export default class extends React.Component {

APIs & Resources

- - {(data.tags || []).map((tag) => ( + */} + Here you can find a list of all the API's offered by our sponsoring + companies, along with any resources and forms we post to receive cloud + credits. + {/* */} + {/* {(data.tags || []).map((tag) => ( - ))} + ))} */}
- {(data.companies || []).map((company) => + {this.state.companyData.map((company) => company.apis.map((api) => { if ( this.state.tag == null || @@ -70,13 +122,15 @@ export default class extends React.Component { slack: #{company.slack}

)} - {api.links.map((link) => ( - - - - ))} + {console.log(api)} + {api.links != null && + api.links.map((link) => ( + + + + ))}
); diff --git a/src/js/apis/data.yaml b/src/js/apis/data.yaml index a52e852..c070d26 100644 --- a/src/js/apis/data.yaml +++ b/src/js/apis/data.yaml @@ -1,110 +1,115 @@ tags: - - + - companies: - - company: GCP + - company: Vercel apis: - - title: GCP Credits - description: $50 GCP credit per hacker + - title: Vercel + description: Create projects, deployments, and more with programmatic access to your Vercel account. links: - - title: Form - url: https://docs.google.com/forms/d/e/1FAIpQLScSPqesC4HwHu1HmWqgI3HD_-N0syDsJBqVM_El4S-fz7IRLw/viewform + - title: API + url: https://vercel.com/docs/rest-api tags: - Geospatial - - company: AWS + - company: Omnichain apis: - - title: AWS Credit forms - description: $200 GCP credit per team + - title: Omnichain Smart Contracts and Messaging + description: Smart Contracts and Messaging Platform that lets you build dApps that span many blockchains. links: - - title: Form - url: https://treehacks.typeform.com/to/wVmTH4H6 + - title: API + url: zetachain.com/docs/ tags: - Geospatial - - company: Null + - company: Arduino apis: - - title: Bubble API - description: Bubble can expose your custom database schema as a RESTful API with one click, or allow you to create custom endpoints + - title: Arduino Cloud REST API & SDK + description: The Arduino IoT Cloud REST API can be accessed through a set of endpoints to manage Devices, Things, Properties, and more. It can be accessed via any HTTP client and is supported by JavaScript, Python, and Golang clients. links: - - title: Documentation - url: https://manual.bubble.io/core-resources/api + - title: API + url: https://docs.arduino.cc/arduino-cloud/getting-started/arduino-iot-api tags: - Geospatial - - company: Null + - company: NEAR Protocol apis: - - title: Free access to all Bubble features during TreeHacks - description: To get access to features not normally offered on our free plan, visit link below to tag your account, and then pick the free “Hackathon” plan on our Settings -> App Plan tab in the editor. + - title: NEAR.social + description: + NEAR Social is a social networking platform the runs on smart contract (social.near) deployed on the NEAR Protocol (a layer 1 blockchain) that allows for anyone to post their ReactJS like code as widgets directly on the open web. Not only can anyone create or fork any widget directly on the platform near.social, but all data can be indexed from the blockchain known as the Social DB. Imagine CodePen meets Facebook meets OpenAPI. + To access -> 👋🏽 1st Make An Account → Create Wallet → Sign into NEAR Social links: - - title: Link - url: https://bubble.io/event/treehacks-2022 + - title: GitHub + url: https://github.com/nearsocial/ + - title: Social Docs + url: https://thewiki.near.page/near.social_docs + - title: NEAR Social Developer Telegram + url: https://nearbuilders.com/tg-social tags: - Geospatial - - company: Intel + - company: Wolfram apis: - - title: Intel oneAPI Learning Paths - description: A curated set of training modules that help you learn specific tools and technologies. You learn the code and practice using Intel® DevCloud. + - title: Wolfram|One + description: Access to both Desktop and Cloud, Wolfram Language, Knowledgebase, FreeCDF deployment, 5000 Wolfram|Alpha API calls, 5000 Cloud Credits, 2 installations per user, and 2 GB of Cloud Storage. links: - - title: Learn More - url: https://www.intel.com/content/www/us/en/developer/tools/oneapi/training/overview.html tags: - Geospatial - - company: Intel + - company: Supabase apis: - - title: Intel DevCloud - description: A developer sandbox to develop, test and run workloads across a range of Intel CPUs, GPUs and FPGAs using oneAPI. + - title: Supabase + description: Access to both Desktop and Cloud, Wolfram Language, Knowledgebase, FreeCDF deployment, 5000 Wolfram|Alpha API calls, 5000 Cloud Credits, 2 installations per user, and 2 GB of Cloud Storage. links: - - title: Learn More - url: https://devcloud.intel.com/oneapi/get_started + - title: Access Link + url: https://app.supabase.com/ tags: - Geospatial - - company: Intel + - company: Checkbook.io apis: - - title: Intel GitHub - description: Samples for oneAPI toolkits. + - title: Checkbook Payments API + description: The Checkbook API links: - - title: Learn More - url: https://github.com/oneapi-src/oneAPI-samples + - title: API + url: https://docs.checkbook.io/reference/post-check-digital tags: - Geospatial - - company: Nope + - company: Retool apis: - - title: InterSystems Resources - description: Here you’ll find all that you need to use InterSystems FHIR cloud services in your project. + - title: Retool + description: Retool is the ultimate hackathon hack! It's a low-code platform that makes building any app a breeze with minimal setup required. With Retool's drag-and-drop app builder, you can assemble custom apps, dashboards, and admin panels in minutes. Plus, with the ability to write custom code and connect to any data source or API, you can create the perfect tool for your hackathon demo without having to fuss about setup. links: - - title: Learn More - url: https://ischack.netlify.app/#home + - title: Register for the free plan here + url: https://login.retool.com/auth/signup?plan=free tags: - Geospatial - - company: Nope + - company: Protocol Labs apis: - - title: ScaleAI - description: Scale Rapid is the fastest way to get production quality labels. + - title: Estuary API + description: Allows hackers to upload data to Estuary. To access, hackers msut apply for an invite - in the application, hackers must state they are a part of TreeHacks. links: - - title: API docs - url: https://docs.scale.com/reference/introduction - - title: Product Docs - url: https://scale.com/docs/getting-started-rapid - - title: Self-label Docs - url: https://scale.com/docs/rapid-faq - - title: CoLab Starter - url: https://colab.research.google.com/drive/1XZjbVtA2oGOdMp0-v0E80ujMB8tbeh7x?usp=sharing - - title: $250 Credits For Students - url: https://scale.com/rapid/university + - title: Link to apply for an invite + url: https://docs.estuary.tech/get-invite-key tags: - Geospatial - - company: Nope + - company: Otsuka Valuenex apis: - - title: Nucleus API - description: Scale Nucleus is a developer-first product with a REST API + - title: VALUENEX Radar + description: VALUENEX Radar is a data visualization platform with our proprietary algorithm to analyze any type of compiled text, such as start-up data, scientific papers, news, financial reports, customer feedback, or anything else you can think of, to gain insight into previously unseen patterns and future movements, allowing for detection and extraction of key knowledge such as untapped potential, new opportunities, competitive threats, and collaborative links to make better decisions for future strategy. links: - - title: Learn More - url: https://dashboard.scale.com/nucleus/docs/api + - title: NOT GIVEN YET + url: tags: - Geospatial - - company: Nope + - company: Mem apis: - - title: VMWare Tanzu Community Edition - description: VMware Tanzu Community Edition is a full-featured, easy-to-manage Kubernetes platform for learners and users, especially those working in small-scale or pre-production environments + - title: Mem API + description: The Mem API is a way for people to develop integrations and flows for Mem. The Mem API enables a variety of information—text messages, sound clips, videos, contacts, projects, emails, documents, tasks, calendar events, you name it—to flow into and out of your Mem knowledge graph, the place where your information is connected, contextualized, and automatically structured into an intelligent, assistive database. links: - - title: Learn More - url: https://tanzucommunityedition.io/ + - title: API + url: https://docs.mem.ai/ tags: - - Geospatial \ No newline at end of file + - Geospatial + - company: Mem + apis: + - title: Convex API + description: Convex platform getting started, usage docs, and reference APIs + links: + - title: API + url: https://docs.convex.dev/tutorial + tags: + - Geospatial diff --git a/src/js/content.json b/src/js/content.json index 0e9aa91..462caa4 100644 --- a/src/js/content.json +++ b/src/js/content.json @@ -1,5 +1,17 @@ { "hackpacks": [ + { + "name": "Computer Vision (Machine Learning)", + "link": "https://github.com/TreeHacks/computer-vision-hackpack" + }, + { + "name": "Web + Firebase", + "link": "https://github.com/TreeHacks/hackpack-web-firebase" + }, + { + "name": "Hardware", + "link": "https://github.com/TreeHacks/hardware_hackpack" + }, { "name": "Android (Java)", "link": "https://github.com/TreeHacks/hackpack-android" diff --git a/src/js/countdown.jsx b/src/js/countdown.jsx index 71b56c1..4024d28 100644 --- a/src/js/countdown.jsx +++ b/src/js/countdown.jsx @@ -2,7 +2,7 @@ import React from "react"; import { START_DATE, default as Timer } from "./timer.jsx"; function Countdown() { - var units = ["d", "h", "m", "s"]; + var units = ["days", "hours", "minutes", "seconds"]; var timeline = []; for (var i = 0; i < 4; i++) { timeline.push(); diff --git a/src/js/event-schedule.js b/src/js/event-schedule.js index 03b2184..8cbea51 100644 --- a/src/js/event-schedule.js +++ b/src/js/event-schedule.js @@ -7,7 +7,6 @@ var cal1 = window.ics(); var cal2 = window.ics(); var cal3 = window.ics(); - export default Vue.component("event-schedule", { template: ` @@ -49,7 +48,7 @@ export default Vue.component("event-schedule", {
-
[[getMarkerValue(i + 14)]]
+
[[getMarkerValue(i + 12)]]
Fri
Sat
@@ -90,12 +89,11 @@ export default Vue.component("event-schedule", {
`, - - created: function() { + created: function () { // TODO: will need to change this date if ( - (new Date().getTime() - new Date("2022-02-18 15:00").getTime()) / + (new Date().getTime() - new Date("2023-02-04 15:00").getTime()) / 3600000 < 36 ) @@ -103,33 +101,40 @@ export default Vue.component("event-schedule", { this.updateTime(); var ctx = this; // TODO: will need to change this url and possibly event colours + //62d6f1e7253936004578c672 + //old: 6203128ecad60200e7963432 fetch( - "https://api.eventive.org/event_buckets/6203128ecad60200e7963432/events_slim?api_key=2db927190aa686598bf88c893181cb7a" + "https://api.eventive.org/event_buckets/62d6f1e7253936004578c672/events_slim?api_key=2db927190aa686598bf88c893181cb7a" ) - .then(r => r.json()) - .then(data => { + .then((r) => r.json()) + .then((data) => { console.log(data); // Schedule shell var schedule = [ { name: "Main Events", color: "#0D9071", - items: [] + items: [], }, { name: "HackX", color: "#FF730E", - items: [] + items: [], }, { name: "Workshops", color: "#6B8E23", - items: [] + items: [], }, { name: "Office Hours", color: "#E51B5D", - items: [] + items: [], + }, + { + name: "Special Talks / Events", + color: "#513ec3", + items: [], }, ]; @@ -150,19 +155,49 @@ export default Vue.component("event-schedule", { } for (var i = 0; i < data.length; i++) { var item = data[i]; - cal.addEvent(item.title, item.description ? item.description : '', item.location, item.start_time, item.end_time); - var cat = schedule.findIndex(cat => { - return item.tags.some(t => t === cat.name); + cal.addEvent( + item.title, + item.description ? item.description : "", + item.location, + item.start_time, + item.end_time + ); + var cat = schedule.findIndex((cat) => { + return item.tags.some((t) => t === cat.name); }); - if(cat == 0){ - cal0.addEvent(item.title, item.description ? item.description : '', item.location, item.start_time, item.end_time); - } else if(cat == 1){ - cal1.addEvent(item.title, item.description ? item.description : '', item.location, item.start_time, item.end_time); - } else if(cat == 2){ - cal2.addEvent(item.title, item.description ? item.description : '', item.location, item.start_time, item.end_time); - } else if(cat == 3){ - cal3.addEvent(item.title, item.description ? item.description : '', item.location, item.start_time, item.end_time); + if (cat == 0) { + cal0.addEvent( + item.title, + item.description ? item.description : "", + item.location, + item.start_time, + item.end_time + ); + } else if (cat == 1) { + cal1.addEvent( + item.title, + item.description ? item.description : "", + item.location, + item.start_time, + item.end_time + ); + } else if (cat == 2) { + cal2.addEvent( + item.title, + item.description ? item.description : "", + item.location, + item.start_time, + item.end_time + ); + } else if (cat == 3) { + cal3.addEvent( + item.title, + item.description ? item.description : "", + item.location, + item.start_time, + item.end_time + ); } if (cat !== -1) { @@ -173,16 +208,16 @@ export default Vue.component("event-schedule", { location: item.location, start: localFormatDayTime(new Date(item.start_time)), end: localFormatDayTime(new Date(item.end_time)), - description: item.description ? item.description : undefined + description: item.description ? item.description : undefined, }); } } var dayMap = ["Friday", "Saturday", "Sunday"]; - schedule = schedule.map(function(cat) { + schedule = schedule.map(function (cat) { // sort subitems and create serialized time hashes - cat.items = cat.items.map(function(item) { + cat.items = cat.items.map(function (item) { var startDay = Number(item.start.slice(0, 2)), startHour = Number(item.start.slice(3, 5)), startMinute = Number(item.start.slice(6)), @@ -191,28 +226,29 @@ export default Vue.component("event-schedule", { endMinute = Number(item.end.slice(6)); // subtract 15 to make 0 "3pm" + // subtract 13 to make 0 "1pm" item.absStartHour = - (startDay - 18) * 24 + startHour + startMinute / 60 - 15; + (startDay - 17) * 24 + startHour + startMinute / 60 - 13; item.absEndHour = - (endDay - 18) * 24 + endHour + endMinute / 60 - 15; + (endDay - 17) * 24 + endHour + endMinute / 60 - 13; item.startTime = (startHour % 12 || 12) + ":" + ("0" + startMinute).slice(-2); item.endTime = (endHour % 12 || 12) + ":" + ("0" + endMinute).slice(-2); item.startDate = - dayMap[startDay - 18] + + dayMap[startDay - 17] + " " + item.startTime + (startHour >= 12 ? "pm" : "am"); item.endDate = - dayMap[endDay - 18] + + dayMap[endDay - 17] + " " + item.endTime + (endHour >= 12 ? "pm" : "am"); item.color = cat.color; return item; }); - cat.items.sort(function(a, b) { + cat.items.sort(function (a, b) { return a.absStartHour - b.absStartHour; }); return cat; @@ -232,7 +268,7 @@ export default Vue.component("event-schedule", { return true; } - ctx.scheduleRows = schedule.reduce(function(acc, cat) { + ctx.scheduleRows = schedule.reduce(function (acc, cat) { var oldAccLength = acc.length; // make a shallow copy for (var i = 0; i < cat.items.length; i++) { @@ -253,8 +289,8 @@ export default Vue.component("event-schedule", { return acc; }, []); - var allScheduleItems = schedule.reduce(function(acc, cat) { - return cat.items.reduce(function(acc2, item) { + var allScheduleItems = schedule.reduce(function (acc, cat) { + return cat.items.reduce(function (acc2, item) { acc2.push(item); return acc2; }, acc); @@ -267,19 +303,19 @@ export default Vue.component("event-schedule", { distance: 100, maxPatternLength: 32, minMatchCharLength: 1, - keys: ["name", "location", "description"] + keys: ["name", "location", "description"], }); ctx.schedule = schedule; ctx.allScheduleItems = allScheduleItems; }); }, delimiters: ["[[", "]]"], - data: function() { + data: function () { return { drag: { down: false, dragStart: 0, - scrollPercentBeforeDrag: 0 + scrollPercentBeforeDrag: 0, }, fuse: null, allScheduleItems: [], @@ -300,81 +336,81 @@ export default Vue.component("event-schedule", { calendar3: cal3, }; }, - mounted: function() { + mounted: function () { this.$refs.wrapper.scrollLeft = this.hoursIn * this.hourWidth; }, computed: { - scheduleHeight: function() { + scheduleHeight: function () { // 25px to account for scrollbar return ( Math.max(this.rowHeight * this.scheduleRows.length + 50, 300) + "px" ); }, - thumbStyle: function() { + thumbStyle: function () { var percent = this.scrollPercent; return this.$refs.track ? { transform: "translate3d(" + this.$refs.track.clientWidth * percent + - "px,0,0)" + "px,0,0)", } : {}; }, - found: function() { + found: function () { var query = this.query.trim(); return query ? this.fuse.search(query) : this.allScheduleItems; }, - markerNowStyle: function() { + markerNowStyle: function () { return { display: this.hoursIn < 0 ? "none" : "block", - left: this.hoursIn * this.hourWidth + "px" + left: this.hoursIn * this.hourWidth + "px", }; }, - foundMap: function() { + foundMap: function () { var obj = {}; for (var i = 0; i < this.found.length; i++) { obj[this.found[i].absStartHour + this.found[i].name] = true; } return obj; }, - categoryItems: function() { + categoryItems: function () { return this.selectedCat === -1 ? this.allScheduleItems : this.schedule[this.selectedCat].items; - } + }, }, methods: { - updateTime: function() { + updateTime: function () { var hoursIn = - (new Date().getTime() - new Date("2022-02-18 15:00").getTime()) / + (new Date().getTime() - new Date("2023-02-04 15:00").getTime()) / 3600000; if (hoursIn > 36) hoursIn = -1; this.hoursIn = hoursIn; }, - getItemStyle: function(item) { + getItemStyle: function (item) { return { left: item.absStartHour * this.hourWidth + "px", width: (item.absEndHour - item.absStartHour) * this.hourWidth + "px", height: this.rowHeight + "px", color: item.color, - zIndex: Math.floor(item.absStartHour * 100) + zIndex: Math.floor(item.absStartHour * 100), }; }, - getOverlayStyle: function(item) { + getOverlayStyle: function (item) { return { left: item.absStartHour * this.hourWidth + "px", top: this.rowHeight * Math.min(item.row, this.scheduleRows.length / 2 - 1) + "px", - maxHeight: this.rowHeight * (this.scheduleRows.length / 2 + 1) + "px" + maxHeight: this.rowHeight * (this.scheduleRows.length / 2 + 1) + "px", }; }, - isFound: function(item) { + isFound: function (item) { return this.foundMap[item.absStartHour + item.name]; }, - getMarkerValue: function(n) { + getMarkerValue: function (n) { var v = n % 12; return (v || 12) + (n % 24 >= 12 ? "pm" : "am"); }, @@ -384,11 +420,11 @@ export default Vue.component("event-schedule", { (this.$refs.wrapper.scrollWidth - this.$refs.wrapper.clientWidth) ); }, - handleScroll: function(e) { + handleScroll: function (e) { this.scrollPercent = e.target.scrollLeft / (e.target.scrollWidth - e.target.clientWidth); }, - handleClick: function(e) { + handleClick: function (e) { var percent = Math.max( 0, Math.min( @@ -398,10 +434,10 @@ export default Vue.component("event-schedule", { ) ); // account for 20% negative margins... TweenLite.to(this.$refs.wrapper, 0.25, { - scrollLeft: this.getScrollLeftFromPercent(percent) + scrollLeft: this.getScrollLeftFromPercent(percent), }); }, - startDrag: function(e) { + startDrag: function (e) { this.drag.dragStart = e.screenX || (e.touches && e.touches[0].screenX) || 0; this.drag.scrollPercentBeforeDrag = this.scrollPercent; @@ -414,7 +450,7 @@ export default Vue.component("event-schedule", { document.addEventListener("touchcancel", this.stopDrag); document.body.style.userSelect = "none"; }, - onDrag: function(e) { + onDrag: function (e) { var delta = (e.screenX || (e.touches && e.touches[0].screenX) || 0) - this.drag.dragStart; @@ -426,7 +462,7 @@ export default Vue.component("event-schedule", { this.$refs.wrapper.scrollLeft = this.getScrollLeftFromPercent(percent); } }, - stopDrag: function(e) { + stopDrag: function (e) { this.drag.down = false; document.removeEventListener("mousemove", this.onDrag); document.removeEventListener("mouseup", this.stopDrag); @@ -436,7 +472,7 @@ export default Vue.component("event-schedule", { document.removeEventListener("touchcancel", this.stopDrag); document.body.style.userSelect = null; }, - getDayStyle: function(hour) { + getDayStyle: function (hour) { var left = hour * this.hourWidth; var scheduleLeft = this.$refs.wrapper ? this.scrollPercent * @@ -446,31 +482,31 @@ export default Vue.component("event-schedule", { if (scheduleLeft > left) { return { left: left + "px", - transform: "translateX(" + (scheduleLeft - left - 9) + "px)" + transform: "translateX(" + (scheduleLeft - left - 9) + "px)", }; } return { left: left + "px" }; }, - setSelected: function(item) { + setSelected: function (item) { this.selectedItem = item; }, - downloadCalendar: function() { + downloadCalendar: function () { // if (this.selectedCat === -1){ // this.calendar.download("treeHacksSchedule2021") - // } - if (this.selectedCat === 0){ - this.calendar0.download("mainEvents2021") - } else if (this.selectedCat === 1){ - this.calendar1.download("hackX2021") - } else if (this.selectedCat === 2){ - this.calendar2.download("workshops2021") - } else if (this.selectedCat === 3){ - this.calendar3.download("officeHours2021") + // } + if (this.selectedCat === 0) { + this.calendar0.download("mainEvents2021"); + } else if (this.selectedCat === 1) { + this.calendar1.download("hackX2021"); + } else if (this.selectedCat === 2) { + this.calendar2.download("workshops2021"); + } else if (this.selectedCat === 3) { + this.calendar3.download("officeHours2021"); } else { - this.calendar.download("treeHacksSchedule2021") + this.calendar.download("treeHacksSchedule2021"); } }, - hidePopup: function(e) { + hidePopup: function (e) { if (this.selectedItem !== null) { // not the popup itself was clicked and not a click target if ( @@ -483,6 +519,6 @@ export default Vue.component("event-schedule", { this.selectedItem = null; } } - } - } + }, + }, }); diff --git a/src/js/prizes/Prizes.jsx b/src/js/prizes/Prizes.jsx new file mode 100644 index 0000000..3b78865 --- /dev/null +++ b/src/js/prizes/Prizes.jsx @@ -0,0 +1,555 @@ +import React, { useEffect, useState } from "react"; +import Bricklayer from "bricklayer"; +import data from "./data.yaml"; + +export default class extends React.Component { + constructor(props) { + super(props); + this.myRef = React.createRef(); + this.myRef2 = React.createRef(); + this.myRef3 = React.createRef(); + + this.state = { + tag: null, + searchInput: "", + companyData: data.companies, + }; + this.onTagClick = this.onTagClick.bind(this); + this.handleChange = this.handleChange.bind(this); + } + + handleChange = (e) => { + e.preventDefault(); + this.setState({ searchInput: e.target.value }); + //const dataC = [{ name: "Belgium", continent: "Europe" }]; + if (this.state.searchInput.length > 0) { + const filtered = this.state.companyData.filter( + (country) => + country.apis[0].title + .toLowerCase() + .includes(this.state.searchInput) || + country.apis[0].description + .toLowerCase() + .includes(this.state.searchInput) + ); + this.setState({ companyData: filtered }); + console.log(filtered); + } + }; + + /* + + const filtered = constantProjectData.filter( + (project) => + project.projectTitle?.includes(search) || + project.projectDescription?.includes(search) || + project.builders?.includes(search) || + project.submitFirstName?.includes(search) || + project.submitLastName?.includes(search) + );*/ + + componentDidMount() { + this.bricklayer = new Bricklayer(this.myRef.current); + this.bricklayer2 = new Bricklayer(this.myRef2.current); + this.bricklayer3 = new Bricklayer(this.myRef3.current); + } + onTagClick(tag) { + this.bricklayer.destroy(); + this.bricklayer2.destroy(); + this.bricklayer3.destroy(); + + if (tag == this.state.tag) { + this.setState({ tag: null }, () => { + this.bricklayer = new Bricklayer(this.myRef.current); + this.bricklayer2 = new Bricklayer(this.myRef2.current); + this.bricklayer3 = new Bricklayer(this.myRef3.current); + }); + } else { + this.setState({ tag: tag }, () => { + this.bricklayer = new Bricklayer(this.myRef.current); + this.bricklayer2 = new Bricklayer(this.myRef2.current); + this.bricklayer3 = new Bricklayer(this.myRef3.current); + }); + } + } + + render() { + const grandPrizeData = [ + { + name: "Moonshot Prize", + description: "The craziest, most out-of-this-world project", + contents: "Segway - G30Max Electric Kick Scooter", + quantity: 4, + }, + { + name: "Most Technically Complex Hack", + description: "The project built using the most technical skills", + contents: "Mac Minis", + quantity: 4, + }, + { + name: "Most Creative Hack", + description: "The project with the most innovative idea and deployment", + contents: "Sonos Roam", + quantity: 4, + }, + { + name: "Best Hardware Hack", + description: "Best hack that incorporates hardware", + contents: "Monoprice Maker Select 3D Printer v2", + quantity: 4, + }, + { + name: "Most Impactful Hack", + description: "The largest social impact project", + contents: "Apple TV Wi-FI + Ethernet (128 GB)", + quantity: 4, + }, + { + name: "Best Beginner Hack", + description: + "Best hack made by a majority-beginner team. Beginners are hackers for whom TreeHacks is their first hackathon.", + contents: "Audio Technica MX50 Headphones", + quantity: 4, + }, + { + name: "Overall Leaderboard Winner", + description: "Most points tallied on our leaderboard system", + contents: "TreeHacks Engraved AirPods (3rd generation)", + }, + ]; + + const trackPrizeData = [ + { + name: "Healthcare Grand Prize", + description: "Best healthcare project", + contents: "Apple Watch SE", + quantity: 4, + }, + { + name: "Sustainbility Grand Prize", + description: "Best sustainability project", + contents: "Apeman M4 DLP Projector 1080P", + quantity: 4, + }, + { + name: "New Frontiers Grand Prize", + description: "Best project incorporating cutting edge tech", + contents: "Quest 2", + quantity: 4, + }, + { + name: "Web 3.0 and Fintech Grand Prize", + description: "Best Web 3.0 project", + contents: "Airline Gift Card to go to a crypto conference!", + quantity: 4, + }, + { + name: "Education Grand Prize", + description: "Best education project", + contents: "Nintendo Switch", + quantity: 4, + }, + { + name: "Privacy and Safety Grand Prize", + description: "Best Privacy and Safety project", + contents: "Mark VII + AC Tacitcal Wifi Pineapples", + quantity: 4, + }, + ]; + + const sponsorPrizeData = [ + { + name: "Best Chat App", + description: "The most innovative AI chat application", + contents: "", + company: "You.com", + }, + { + name: "Best Use of the You.com Open Platform", + description: + "Awarded to the team who creates the best You.com Open Platform Search app using the Developer Dashboard. Documentation and examples can be found at https://you.com/developers", + contents: "", + company: "You.com", + }, + { + name: "Best Web Frontend", + description: + "For the team that sweats the details. Every pixel of the UI has been polished and intentionally crafted. This award goes to the team who can merge the design and development worlds.", + contents: "Vercel swag box ($100 value)", + company: "Vercel", + }, + { + name: "Vercel Free Tier", + description: + "Vercel offers a 100% free tier, perfect for Hackathons, to get your React, Vue, Svelte, Nuxt, Next.js, or similar projects deployed to the Web. ", + contents: "", + company: "Vercel", + }, + { + name: "Skydio 2+", + description: + "Skydio 2+ does all the shooting so you can concentrate on the adventure at hand. Launch Skydio into the air and after just 27 minutes, you will have over 100,000 breathtaking 4K stills to choose from, export and share. And when you’re ready to take your drone photography to the next level, Skydio Panorama Skills gives you live previews of massive horizontal, vertical and spherical images in up to 72 megapixels.", + contents: "", + company: "Skydio", + }, + { + name: "BIG IDEA: Best Technology-Enabled Patient Safety Solution", + description: + "We’re in search of bold new thinking. This is an invitation to solve the problem of medical error that harms millions of U.S. patients, kills approximately 250,000 patients, and costs billions of dollars every year. We’re calling on TreeHacks teams to envision the best technology-enabled patient safety solution that has the potential to avert patient harm and save lives and will be awarding $2,000 to the top team. Your hack must align with one of the following five leading patient safety challenges facing health care across the continuum of care: Medication errors, procedural/surgical errors, errors during routine patient care (e.g. pressure ulcers, blood clots, falls), infections and diagnostic safety. We encourage teams to consider autonomous tech-enabled patient safety solutions – those that are able to take action with little or no human supervision – as well. Learn more about the problem and get access to resources to help your hack here.", + contents: "$2,000 cash to the top team", + company: "Pateint Safety Initiative", + }, + { + name: "Best Real-World Crypto Hack", + description: + "Build something using technologies like Bitcoin, Ethereum, ZetaChain that provides real utility for real people.", + contents: "1x Ledger Nano X per teammate", + company: "ZetaChain", + }, + { + name: "Best Omnichain Smart Contract Application", + description: + "Build an useful application that spans multiple chains using ZetaChain’s smart contract and/or messaging!n", + contents: "$2500 USDC", + company: "ZetaChain", + }, + { + name: "Most Cyberpunk Hardware Hack", + description: + "Our future is most definitely going to be a cyberpunk dystopia. Show us your best hack that interacts with the physical world. This could be a robotic arm controlled by A.I., a custom pentest gadget, taking control of a consumer product, or a matrix of blinking LEDs meant to distract the masses. The best physical hack takes home the prize!", + contents: + "4 Arduino Machine Vision Bundle Kits for the winning team members", + company: "Arduino", + }, + { + name: "Best use of Arduino Cloud/API", + description: + "Integrate the Arduino IoT Cloud in any way to qualify for this prize. Most interesting and creative implementation wins!", + contents: "", + company: "Arduino", + }, + { + name: "Best Use of Aptos", + description: + "This prize goes to the team that best uses Aptos to create an innovative social or gaming product / service on the blockchain or enables a better developer experience on Aptos", + contents: "$1000", + company: "Aptos", + }, + { + name: "Top Uses of NEAR Social (3x)", + description: + "This goes to the top 3 teams that implement NEAR Social the best. Whether it is indexing data from NEAR Social into your projects or directly building a widget on NEAR Social.", + contents: "$1,000 Per team", + company: "NEAR Protocol", + }, + { + name: "Replit", + description: "", + contents: + "First place winner: 3,000 Cycles (~ 3 months of Hacker)\nSecond place winner: 2,000 Cycles (~ 2 months of Hacker)\nThird place winner: 1,000 Cycles (~ 1 month of Hacker)", + company: "Replit", + }, + { + name: "Best Omnichain Smart Contract Application", + description: + "Build an useful application that spans multiple chains using ZetaChain’s smart contract and/or messaging!n", + contents: "$2500 USDC", + company: "ZetaChain", + }, + { + name: "Wolfram Award", + description: + "Everyone on the top twelve teams with a max of 60 individuals", + contents: + "One year of Wolfram|One Personal Edition + one-year subscription to Wolfram|Alpha Pro ($375 per hacker)", + company: "Wolfram", + }, + { + name: "Best use of Supabase", + description: + "Award to the project that uses more Supabase features in the most creative way.", + contents: + "A Supabase swag pack (Black mode T-shirt, Supabase hat, cam cover, and stickers) for each member of the team.", + company: "Supabase", + }, + { + name: "Most Innovative Hack", + description: "", + contents: "Back pack, blankets, sweat shirts, t-shirts, beanies ", + company: "Meta", + }, + { + name: "Most likely to become a business", + description: + "Product: Build something people want. Market Size: Address a significant opportunity. Team: Founders would consider committing for long-term.", + contents: + "Product: Build something people want. Market Size: Address a significant opportunity. Team: Founders would consider committing for long-term.", + company: "Neo", + }, + { + name: "Best use of Data Hack", + description: + "Effective use of data is important to the decisions we make at Hudson River Trading, and we’re always looking for innovative new ways to strategize with data. This prize will be awarded to the hack that best integrates the use of data into their project.", + contents: + "Effective use of data is important to the decisions we make at Hudson River Trading, and we’re always looking for innovative new ways to strategize with data. This prize will be awarded to the hack that best integrates the use of data into their project.", + company: "HRT", + }, + { + name: "Best Payments Hack", + description: + "This prize will be awarded to the team that has the most interesting payments-based hack.", + contents: "$500", + company: "Checkbook.io", + }, + { + name: "Checkbook API Best Implementation", + description: + "This prize will be awarded to the team that has the most interesting use-case of the Checkbook.io platform.", + contents: "AirPod Pros for each member ", + company: "Checkbook.io", + }, + { + name: "Best use of Drone Technology", + description: + "Parrot is the European leader in the drone industry building Nano drones (under 2 pounds). As drones continue to find applications in a wide range of verticals, such as, industrial inspections, defense, first responders and surveillance, there is a need for development of innovative and specific software mission or customize accessories relevant for different use case. we are therefore interested by what can be the drone technology of tomorrow, how such a technology would be operated and in which mission contexts.", + contents: "Anafi AI Drone", + company: "Parrot Drones", + }, + { + name: "Best Startup", + description: + "Given to the top performing teams in Y Combinator’s challenge. These are the teams that we think are most likely to succeed at a startup.", + contents: "AirPod Pros for each member ", + company: "Checkbook.io", + }, + { + name: "Checkbook API Best Implementation", + description: + "This prize will be awarded to the team that has the most interesting use-case of the Checkbook.io platform.", + contents: + "Real interview for Y Combinator (no expiration, come interview whenever you want with whoever you want) Dinner on Sunday, with YC team (if in person)", + company: "Y Combinator", + }, + { + name: "Dev tools", + description: "Best developer tool", + contents: "4 Xbox Series S", + company: "Warp", + }, + { + name: "Best Hack Using Frontier Tech", + description: + "For hackers using cutting-edge tech like Zero Knowledge Proofs, Federated Learning, or Quantum Computing, a chance to showcase your skills!", + contents: + "$1,000 cash prize and upto $100,000 uncapped SAFE (more below)", + company: "Pear VC", + }, + { + name: "Best Hack for a Real World Use Case ", + description: + "For hackers looking to solve any real world problems with technology. You could be helping college students get food delivery, fighting misinformation online, or increasing opportunities to equal education. There’s no shortage of problems in the world that would benefit from even the simplest technology.", + contents: + "$1,000 cash prize and upto $100,000 uncapped SAFE (more below)", + company: "Pear VC", + }, + { + name: "Best Hack Using AI/ML", + description: + "Beyond the buzzwords, we have the chance to change the way we interact with computers. We’re at the cusp of a brand new set of possibilities. For hackers looking to push the envelope here with their technical approach or application domain, this is the prize to win!", + contents: + "$1,000 cash prize and upto $100,000 uncapped SAFE (more below)", + company: "Pear VC", + }, + { + name: "Retool Hack Ninjas", + description: + "Build your hackathon project faster with the power of Retool, and get your project demo ready in no time. Retool is perfect for beginners or coding veterans alike to build your apps 10x faster than usual. We’re looking for cool apps that utilize Retool in their hack!", + contents: + "Ducky One 3 SF Pure White 65% Hotswap RGB Mechanical Keyboard per team member", + company: "Retool", + }, + { + name: "Best Use of Estuary", + description: + "This prize will go to the students who best demonstrate Estuary's use case and use creative ways to incorporate our API. The first place prize will be iPads and second place will be keyboards.", + contents: + "1st Prize - 4 iPad 10th Generation\n2nd Prize - 4 Mechanical/gaming keyboards", + company: "Warp", + }, + { + name: "Best hack to connect with others through food", + description: + "Best hack to connect with others through food” for the improvement of the world’s wellbeing & happiness with food! The prize will be $500 DoorDash credit (treat yourself with good food) and $250 Spa experience during the busy school year (We’ll make sure to look after your wellbeing as you help others!). Also, you will get a chance to further develop the idea with Otsuka & Valuenex through an amazing summer internship.", + contents: + "Good life package - DoorDash gift card ($500) + Spa gift card ($250) = Total: $3000", + company: "Otsuka <> Valuenex", + }, + { + name: "Best VALUENEX Radar Hack", + description: + "Best VALUENEX Radar Hack for the best VALUENEX Radar use case to show the world! Each winning team member will be awarded a $250 Amazon gift card and an annual VALUENEX Radar subscription. ", + contents: + "VALUENEX package - Amazon gift card ($250 x 4 people = $1000) and VALUENEX Radar 1 year membership", + company: "Otsuka <> Valuenex", + }, + { + name: "Best Natural Language Hack", + description: + "The project with the best application of natural language processing", + contents: + "1st place: AirPods Max for each team member ($500/ea)\n2nd place: Ember Mug for each team member ($125/ea)\n3rd place: Amazon Echo Dot (5th gen) for each team member ($50/ea)", + company: "Mem", + }, + { + name: "Best Use of InterSystems IntegratedML", + description: + "InterSystems is issuing a challenge to build the most interesting and innovative application using **InterSystems IntegratedML** -- in-database automated machine learning, the simplest way to create, deploy and use ML models to power next-generation intelligent applications.\nTo qualify for the prize, your solution needs to use InterSystems IntegratedML. InterSystems will provide free access to cloud-hosted accounts* and *onsite mentors' support. You will be able to submit your project to one of the main tracks as well.*", + contents: "1st place: $2000\n2nd place: $1500\n3rd place: $1000", + company: "InterSystems", + }, + { + name: "Best Use of Estuary", + description: + "This prize will go to the students who best demonstrate Estuary's use case and use creative ways to incorporate our API. The first place prize will be iPads and second place will be keyboards.", + contents: + "1st Prize - 4 iPad 10th Generation\n2nd Prize - 4 Mechanical/gaming keyboards", + company: "Warp", + }, + { + name: "Best use of Convex", + description: + "This prize goes to the team that makes the best use of the Convex platform to create a novel and compelling web or mobile multi-user app. Real-time or reactive elements are a plus.", + contents: + "- Massive Lego: 5’ Eiffel Tower, 2 meter RC Airplane kit: E-flite DRACO 2.0m BNF Basic Electric Airplane, Arduino-based quadruped robot: Lynxmotion SQ3U, Various batteries, chargers, and accessories to finish the above projects", + company: "Convex", + }, + ]; + + const rows = grandPrizeData.reduce(function (rows, key, index) { + return ( + (index % 8 == 0 ? rows.push([key]) : rows[rows.length - 1].push(key)) && + rows + ); + }, []); + + return ( +
+
+
+

+ Prizes +

+
+
+ Check out all the cool prizes you can compete for! +
+ +

+ Grand Prizes +

+ +
+ {grandPrizeData.map((col) => { + return ( +
+
+

{col.name}

+

{col.description}

+

+ {col.contents} for each team member +

+
+
+ ); + })} +
+
+
+

+ Track Prizes +

+ +
+ {trackPrizeData.map((col) => { + return ( +
+
+

{col.name}

+

{col.description}

+

+ {col.contents} for each team member +

+
+
+ ); + })} +
+
+
+

+ Sponsor Prizes +

+ +
+ {sponsorPrizeData.map((col) => { + return ( +
+
+

{col.name}

+

{col.description}

+

{col.contents}

+

+ Sponsored by {col.company} +

+
+
+ ); + })} +
+
+
+ ); + } +} diff --git a/src/js/prizes/data.yaml b/src/js/prizes/data.yaml new file mode 100644 index 0000000..c070d26 --- /dev/null +++ b/src/js/prizes/data.yaml @@ -0,0 +1,115 @@ +tags: + - +companies: + - company: Vercel + apis: + - title: Vercel + description: Create projects, deployments, and more with programmatic access to your Vercel account. + links: + - title: API + url: https://vercel.com/docs/rest-api + tags: + - Geospatial + - company: Omnichain + apis: + - title: Omnichain Smart Contracts and Messaging + description: Smart Contracts and Messaging Platform that lets you build dApps that span many blockchains. + links: + - title: API + url: zetachain.com/docs/ + tags: + - Geospatial + - company: Arduino + apis: + - title: Arduino Cloud REST API & SDK + description: The Arduino IoT Cloud REST API can be accessed through a set of endpoints to manage Devices, Things, Properties, and more. It can be accessed via any HTTP client and is supported by JavaScript, Python, and Golang clients. + links: + - title: API + url: https://docs.arduino.cc/arduino-cloud/getting-started/arduino-iot-api + tags: + - Geospatial + - company: NEAR Protocol + apis: + - title: NEAR.social + description: + NEAR Social is a social networking platform the runs on smart contract (social.near) deployed on the NEAR Protocol (a layer 1 blockchain) that allows for anyone to post their ReactJS like code as widgets directly on the open web. Not only can anyone create or fork any widget directly on the platform near.social, but all data can be indexed from the blockchain known as the Social DB. Imagine CodePen meets Facebook meets OpenAPI. + To access -> 👋🏽 1st Make An Account → Create Wallet → Sign into NEAR Social + links: + - title: GitHub + url: https://github.com/nearsocial/ + - title: Social Docs + url: https://thewiki.near.page/near.social_docs + - title: NEAR Social Developer Telegram + url: https://nearbuilders.com/tg-social + tags: + - Geospatial + - company: Wolfram + apis: + - title: Wolfram|One + description: Access to both Desktop and Cloud, Wolfram Language, Knowledgebase, FreeCDF deployment, 5000 Wolfram|Alpha API calls, 5000 Cloud Credits, 2 installations per user, and 2 GB of Cloud Storage. + links: + tags: + - Geospatial + - company: Supabase + apis: + - title: Supabase + description: Access to both Desktop and Cloud, Wolfram Language, Knowledgebase, FreeCDF deployment, 5000 Wolfram|Alpha API calls, 5000 Cloud Credits, 2 installations per user, and 2 GB of Cloud Storage. + links: + - title: Access Link + url: https://app.supabase.com/ + tags: + - Geospatial + - company: Checkbook.io + apis: + - title: Checkbook Payments API + description: The Checkbook API + links: + - title: API + url: https://docs.checkbook.io/reference/post-check-digital + tags: + - Geospatial + - company: Retool + apis: + - title: Retool + description: Retool is the ultimate hackathon hack! It's a low-code platform that makes building any app a breeze with minimal setup required. With Retool's drag-and-drop app builder, you can assemble custom apps, dashboards, and admin panels in minutes. Plus, with the ability to write custom code and connect to any data source or API, you can create the perfect tool for your hackathon demo without having to fuss about setup. + links: + - title: Register for the free plan here + url: https://login.retool.com/auth/signup?plan=free + tags: + - Geospatial + - company: Protocol Labs + apis: + - title: Estuary API + description: Allows hackers to upload data to Estuary. To access, hackers msut apply for an invite - in the application, hackers must state they are a part of TreeHacks. + links: + - title: Link to apply for an invite + url: https://docs.estuary.tech/get-invite-key + tags: + - Geospatial + - company: Otsuka Valuenex + apis: + - title: VALUENEX Radar + description: VALUENEX Radar is a data visualization platform with our proprietary algorithm to analyze any type of compiled text, such as start-up data, scientific papers, news, financial reports, customer feedback, or anything else you can think of, to gain insight into previously unseen patterns and future movements, allowing for detection and extraction of key knowledge such as untapped potential, new opportunities, competitive threats, and collaborative links to make better decisions for future strategy. + links: + - title: NOT GIVEN YET + url: + tags: + - Geospatial + - company: Mem + apis: + - title: Mem API + description: The Mem API is a way for people to develop integrations and flows for Mem. The Mem API enables a variety of information—text messages, sound clips, videos, contacts, projects, emails, documents, tasks, calendar events, you name it—to flow into and out of your Mem knowledge graph, the place where your information is connected, contextualized, and automatically structured into an intelligent, assistive database. + links: + - title: API + url: https://docs.mem.ai/ + tags: + - Geospatial + - company: Mem + apis: + - title: Convex API + description: Convex platform getting started, usage docs, and reference APIs + links: + - title: API + url: https://docs.convex.dev/tutorial + tags: + - Geospatial diff --git a/src/js/resources.jsx b/src/js/resources.jsx index d9adb75..fdf5698 100644 --- a/src/js/resources.jsx +++ b/src/js/resources.jsx @@ -6,31 +6,41 @@ import hardwareIcon from "../svg/hardware.svg"; import apisIcon from "../svg/apis.svg"; import mapsIcon from "../svg/maps.svg"; import faqIcon from "../svg/faq.svg"; +import trophyIcon from "../svg/trophy.svg"; import { Link } from "react-router-dom"; function Resources() { return (
- +
Slack
- -
+ +
Devpost
-
+
FAQ
+ +
+ + Prizes +
+
diff --git a/src/js/timer.jsx b/src/js/timer.jsx index faaaee8..3e74251 100644 --- a/src/js/timer.jsx +++ b/src/js/timer.jsx @@ -1,7 +1,7 @@ import React from "react"; -export const START_DATE = new Date("2023-02-17T04:00:00.000Z"); -export const END_DATE = new Date("2023-02-19T16:00:00.000Z"); +export const START_DATE = new Date("2023-02-18T06:00:00.000Z"); +export const END_DATE = new Date("2023-02-19T18:00:00.000Z"); function calculateTimeUntil() { let date = new Date() < START_DATE ? START_DATE : END_DATE; diff --git a/src/sass/apis.scss b/src/sass/apis.scss index a9c882f..65f5635 100644 --- a/src/sass/apis.scss +++ b/src/sass/apis.scss @@ -27,6 +27,94 @@ margin-bottom: 7.5%; } +.prizes { + padding-right: 30px; + padding-left: 30px; + + @media screen and (min-width: 768px) { + .bricklayer-column-sizer { + /* divide by 2. */ + width: 33%; + } + } +} + +.trackPrizes { + padding-right: 30px; + padding-left: 30px; + @media screen and (min-width: 768px) { + .bricklayer-column-sizer { + /* divide by 2. */ + width: 33%; + } + } +} + +.sponsorPrizes { + padding-right: 30px; + padding-left: 30px; + @media screen and (min-width: 768px) { + .bricklayer-column-sizer { + /* divide by 2. */ + width: 25%; + } + } +} + +.flip-card { + background-color: transparent; + display: flex; + align-items: center; + flex-direction: column; + margin: auto; + width: 30%; + align-content: center; + justify-content: center; + border: "1px solid blue"; + height: 200px; +} + +/* This container is needed to position the front and back side */ +.flip-card-inner { + width: 100%; + height: 100%; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + transition: transform 0.8s; + transform-style: preserve-3d; +} + +/* Do an horizontal flip when you move the mouse over the flip box container */ +.flip-card:hover .flip-card-inner { + transform: rotateY(180deg); +} + +/* Position the front and back side */ +.flip-card-front, +.flip-card-back { + position: absolute; + + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; /* Safari */ + backface-visibility: hidden; +} + +/* Style the front side (fallback if image is missing) */ +.flip-card-front { + background-color: #bbb; + color: black; +} + +/* Style the back side */ +.flip-card-back { + background-color: dodgerblue; + color: white; + transform: rotateY(180deg); +} + button.api-tag-button { font-size: 12px; padding: 0.5em; diff --git a/src/sass/header.scss b/src/sass/header.scss index da68b6a..f89c2d5 100644 --- a/src/sass/header.scss +++ b/src/sass/header.scss @@ -25,6 +25,7 @@ $header-margin: 16px; #header-logo { flex: 1 0 auto; + margin-left: 10px; font-size: $header-logo-font-size; a { diff --git a/src/svg/facebook.svg b/src/svg/facebook.svg index 6cd2d98..b7b5b5a 100644 --- a/src/svg/facebook.svg +++ b/src/svg/facebook.svg @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/svg/instagram.svg b/src/svg/instagram.svg index 5f49210..e66977b 100644 --- a/src/svg/instagram.svg +++ b/src/svg/instagram.svg @@ -1 +1,2 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/src/svg/trophy.svg b/src/svg/trophy.svg new file mode 100644 index 0000000..d843d8f --- /dev/null +++ b/src/svg/trophy.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/svg/twitter.svg b/src/svg/twitter.svg index 14bacd6..c4bb5f0 100644 --- a/src/svg/twitter.svg +++ b/src/svg/twitter.svg @@ -1 +1,2 @@ + \ No newline at end of file