Even better now!

React
Cobular 5 years ago
parent 5ce52976f3
commit 75427aec2a

File diff suppressed because one or more lines are too long

@ -48,7 +48,7 @@
<div class="row"> <div class="row">
<div class="col-xl-3 col-lg-4 col-sm-6 tall top_buffer"> <div class="col-xl-3 col-lg-4 col-sm-6 tall top_buffer">
<div class="image"> <div class="image">
<img class="img-fluid" src="images/codedaysd.png" alt="CodeDay SD Logo"> <img class="img-fluid" src="../src/images/codedaysd.png" alt="CodeDay SD Logo">
</div> </div>
<div class="description"> <div class="description">
<p>CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges <p>CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges
@ -58,7 +58,7 @@
</div> </div>
<div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer"> <div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer">
<div class="image"> <div class="image">
<img class="img-fluid" src="images/codeday-notext-color.svg" alt="Redish Heart, SRND Logo"> <img class="img-fluid" src="../src/images/codeday-notext-color.svg" alt="Redish Heart, SRND Logo">
</div> </div>
<div class="description"> <div class="description">
<p>SRND is an educational nonprofit that works to provide CS education to high school and <p>SRND is an educational nonprofit that works to provide CS education to high school and
@ -68,7 +68,7 @@
</div> </div>
<div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer"> <div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer">
<div class="image"> <div class="image">
<img class="img-fluid" src="images/distest.svg" alt="Distest Logo"> <img class="img-fluid" src="../src/images/distest.svg" alt="Distest Logo">
</div> </div>
<div class="description"> <div class="description">
<p>Distest is a testing library for Discord bots that allows for full integration tests of your bot, <p>Distest is a testing library for Discord bots that allows for full integration tests of your bot,
@ -77,7 +77,7 @@
</div> </div>
<div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer"> <div class="col-xl-3 col-md-4 col-sm-6 tall top_buffer">
<div class="image"> <div class="image">
<img class="img-fluid" src="images/scoresaver.svg" alt="Red to Blue Gradient w/ White Download Icon"> <img class="img-fluid" src="../src/images/scoresaver.svg" alt="Red to Blue Gradient w/ White Download Icon">
</div> </div>
<div class="description"> <div class="description">
<p>A Chrome extension to help you download beatsaber songs directly from ScoreSaber. No more searching <p>A Chrome extension to help you download beatsaber songs directly from ScoreSaber. No more searching
@ -86,7 +86,7 @@
</div> </div>
<div class="col-xs-12 wide top_buffer"> <div class="col-xs-12 wide top_buffer">
<div class="image"> <div class="image">
<img class="img-fluid" src="images/foresightsports.png" alt="ForeSight Sports Logo0"> <img class="img-fluid" src="../src/images/foresightsports.png" alt="ForeSight Sports Logo0">
</div> </div>
<div class="description"> <div class="description">
<p>Foresight Sports creates advanced augmented reality sports experiences. I created multiple games <p>Foresight Sports creates advanced augmented reality sports experiences. I created multiple games

29
package-lock.json generated

@ -1211,6 +1211,35 @@
} }
} }
}, },
"@fortawesome/fontawesome-common-types": {
"version": "0.2.32",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz",
"integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w=="
},
"@fortawesome/fontawesome-svg-core": {
"version": "1.2.32",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz",
"integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==",
"requires": {
"@fortawesome/fontawesome-common-types": "^0.2.32"
}
},
"@fortawesome/free-solid-svg-icons": {
"version": "5.15.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz",
"integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==",
"requires": {
"@fortawesome/fontawesome-common-types": "^0.2.32"
}
},
"@fortawesome/react-fontawesome": {
"version": "0.1.14",
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz",
"integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==",
"requires": {
"prop-types": "^15.7.2"
}
},
"@hapi/address": { "@hapi/address": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",

@ -3,26 +3,27 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@ant-design/icons": "^4.3.0",
"@testing-library/jest-dom": "^5.11.6", "@testing-library/jest-dom": "^5.11.6",
"@testing-library/react": "^11.2.2", "@testing-library/react": "^11.2.2",
"@testing-library/user-event": "^12.6.0", "@testing-library/user-event": "^12.6.0",
"@types/jest": "^26.0.19", "@types/jest": "^26.0.19",
"@types/masonry-layout": "^4.2.2",
"@types/node": "^12.19.11", "@types/node": "^12.19.11",
"@types/react": "^16.14.2", "@types/react": "^16.14.2",
"@types/react-dom": "^16.9.10", "@types/react-dom": "^16.9.10",
"@types/react-router-dom": "^5.1.7", "@types/react-router-dom": "^5.1.7",
"@types/masonry-layout": "^4.2.2",
"antd": "^4.9.4", "antd": "^4.9.4",
"react-router-dom": "^5.2.0", "include-media": "^1.4.9",
"masonry-layout": "^4.2.2",
"node-sass": "^4.14.1", "node-sass": "^4.14.1",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"react": "^17.0.1", "react": "^17.0.1",
"react-dom": "^17.0.1", "react-dom": "^17.0.1",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.1", "react-scripts": "4.0.1",
"include-media": "^1.4.9",
"typescript": "^4.1.3", "typescript": "^4.1.3",
"web-vitals": "^0.2.4", "web-vitals": "^0.2.4"
"masonry-layout": "^4.2.2"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",

@ -1,5 +1,6 @@
import React from "react"; import React from "react";
import "./App.scss"; import "./App.scss";
import { Footer } from "./components/Footer";
import { Header } from "./components/Header"; import { Header } from "./components/Header";
import { Main } from "./components/Main"; import { Main } from "./components/Main";
@ -8,6 +9,7 @@ function App() {
<div className="App"> <div className="App">
<Header /> <Header />
<Main /> <Main />
<Footer />
</div> </div>
); );
} }

@ -0,0 +1,37 @@
.site-footer {
background: darkgrey;
margin: 10px;
border-radius: 5px;
h2 {
font-family: "Fira Code", monospace;
margin: 0;
}
p {
font-family: "Montserrat", sans-serif;
}
}
.footer-grid {
display: flex;
justify-content: space-evenly;
.footer-links {
padding-left: 0;
margin: 0;
columns: 100px 2;
li {
list-style: none;
}
a {
//color: black;
font-family: "Montserrat", sans-serif;
text-decoration: underline;
}
}
}

@ -0,0 +1,42 @@
import "./Footer.scss"
export const Footer = () => {
return (
<footer className="site-footer">
<div className="footer-grid">
<div className="blurb">
<p className="text-justify">
Made with and by Jake Cover, a CS student who really needs to find something
witty and interesting to put here soon. Feel free to reach out!
<br />
Checklist Icon by Arthur Shlain from the Noun Project
</p>
</div>
<div className="links-container">
<h2>Links and Stuff</h2>
<ul className="footer-links">
<li>
<a href="index.html">Home</a>
</li>
<li>
<a href="contact.html">Contact</a>
</li>
<li>
<a href="about.html">About</a>
</li>
<li>
<a href="resume.html">Resume</a>
</li>
<li>
<a href="https://github.com/JakeCover">GitHub</a>
</li>
</ul>
</div>
</div>
<hr />
<div className="copyright-text">
Copyright &copy; 2020 All Rights Reserved by Jake Cover
</div>
</footer>
);
};

@ -1,15 +1,6 @@
header { header {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-content: center;
:nth-child(2) {
margin-left: auto;
}
h2:last-of-type {
margin-right: 5px;
}
margin: 10px; margin: 10px;
padding: 10px; padding: 10px;
@ -22,7 +13,54 @@ header {
margin: 0 0 0 5px; margin: 0 0 0 5px;
} }
.headerLinks {
display: flex;
flex-direction: row;
align-content: center;
margin-left: auto;
h2 {
margin: 0;
border-radius: 5px;
&:hover {
background: #ddd;
}
&.active {
background-color: #4CAF50;
color: white;
}
}
h2:last-of-type {
margin-right: 5px;
}
/* Hide the link that should open and close the topnav on small screens */
.icon {
display: none;
}
@media screen and (max-width: 660px) {
h2 { h2 {
margin: 0 display: none;
}
.icon {
margin-left: auto;
display: block;
}
}
}
@media screen and (max-width: 660px) {
&.responsive {
background: #282c34;
h2 {
display: block;
}
}
} }
} }

@ -1,18 +1,30 @@
import React from "react"; import React from "react";
import "./Header.scss"; import "./Header.scss";
import {Button, Space, Typography} from "antd"; import { Space } from "antd";
import {Link} from "react-router-dom"; import { Link } from "react-router-dom";
import {MenuOutlined} from "@ant-design/icons";
const {Title} = Typography;
export const Header = () => { export const Header = () => {
function showHideHamburger() {
var x = document.getElementById("myHeader");
// @ts-ignore
if (x.className === "header") {
// @ts-ignore
x.className += " responsive";
} else {
// @ts-ignore
x.className = "header";
}
}
return ( return (
<header> <header className={"header"} id={"myHeader"}>
<Link to="/" className="navbar-brand"> <Link to="/" className="navbar-brand">
<h1>Jake Cover</h1> <h1>Jake Cover</h1>
</Link> </Link>
<Space> <Space className={"headerLinks"}>
<Link className="nav-link" to="/"> <Link className="nav-link" to="/">
<h2>Home</h2> <h2>Home</h2>
</Link> </Link>
@ -26,6 +38,13 @@ export const Header = () => {
<a className="nav-link" href="https://github.com/JakeCover"> <a className="nav-link" href="https://github.com/JakeCover">
<h2>GitHub</h2> <h2>GitHub</h2>
</a> </a>
<a
href={void(0)}
className="icon"
onClick={() => showHideHamburger()}
>
<MenuOutlined className={"fa fa-bars"}/>
</a>
</Space> </Space>
</header> </header>
); );

@ -6,7 +6,8 @@ export const Home = () => {
<div id={"home"}> <div id={"home"}>
<div id={"about-me"}> <div id={"about-me"}>
<p> <p>
Hi! I'm Julie, a CS student from the west coast! Take a look at some of my projects below! Hi! I'm Jake, a CS student from the west coast! Take a look at some of my projects below! <br/>
This site is still under construction, so pardon the duplicate information and the horrendous colors. The final version should be up soon!
</p> </p>
</div> </div>
<ProjectGrid/> <ProjectGrid/>

@ -20,13 +20,13 @@ $breakpoints: (x-small: 320px, small: 660px, medium: 900px, large: 1300px, x-lar
//padding: 10px; //padding: 10px;
@include media("<=x-small") { @include media("<=x-small") {
.GridSizer, .OneByOne, .FourByOne { .GridSizer, .OneWide, .FourByOne {
width: 100%; width: 100%;
} }
} }
@include media(">x-small", "<small") { @include media(">x-small", "<small") {
.GridSizer, .OneByOne { .GridSizer, .OneWide {
width: 49%; width: 49%;
} }
.FourByOne { .FourByOne {
@ -35,7 +35,7 @@ $breakpoints: (x-small: 320px, small: 660px, medium: 900px, large: 1300px, x-lar
} }
@include media(">=small", "<medium") { @include media(">=small", "<medium") {
.GridSizer, .OneByOne { .GridSizer, .OneWide {
width: 32%; width: 32%;
} }
.FourByOne { .FourByOne {
@ -44,7 +44,7 @@ $breakpoints: (x-small: 320px, small: 660px, medium: 900px, large: 1300px, x-lar
} }
@include media(">=medium", "<large") { @include media(">=medium", "<large") {
.GridSizer, .OneByOne { .GridSizer, .OneWide {
width: 24.5%; width: 24.5%;
} }
.FourByOne { .FourByOne {
@ -53,48 +53,77 @@ $breakpoints: (x-small: 320px, small: 660px, medium: 900px, large: 1300px, x-lar
} }
@include media(">=large", "<x-large") { @include media(">=large", "<x-large") {
.GridSizer, .OneByOne { .GridSizer, .OneWide {
max-width: 300px; max-width: 300px;
width: 19.5%; width: 19.5%;
} }
.FourByOne { .FourByOne {
width: 79.5%; width: 58.5%;
max-width: 1200px; max-width: 900px;
} }
} }
@include media(">=x-large") { @include media(">=x-large") {
.GridSizer, .OneByOne { .GridSizer, .OneWide {
width: 300px; width: 300px;
} }
.FourByOne { .FourByOne {
width: 1200px; width: 900px;
} }
} }
}
.GridElement {
padding: 5px;
.GridElementInternal {
padding: 9px;
border-radius: 5px;
background: lightcyan;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
transition: box-shadow 0.3s ease-in-out;
}
.GridElementInternal:hover {
box-shadow: 0 2px 5px rgba(0,0,0,0.3);
}
h2 {
font-family: "Fira Code", monospace;
font-weight: 400;
margin-bottom: 0px;
line-height: normal;
}
h3 {
line-height: normal;
color: darkgrey;
margin-bottom: 3px;
}
p {
font-family: "Montserrat", sans-serif;
color: black;
margin-bottom: 0;
}
} }
.OneByOne { .OneWide {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: available; width: available;
padding: 10px;
img { img {
width: 100%; width: 100%;
} margin-bottom: 5px;
p {
} }
} }
.FourByOne { .FourByOne {
grid-column: span 2; .GridElementInternal {
display: flex; display: flex;
flex-direction: row; align-items: center;
.image { .image {
flex: 1; flex: 1;
@ -105,8 +134,31 @@ $breakpoints: (x-small: 320px, small: 660px, medium: 900px, large: 1300px, x-lar
} }
} }
p { .description {
min-width: 20ch; min-width: 20ch;
width: 30ch; width: 30ch;
} }
@include media(">small") {
flex-direction: row;
}
@include media("<=small") {
flex-direction: column;
.description {
width: 95%;
}
}
}
}
.LinkIcon {
position: absolute;
right: 12px;
top: 12px;
font-size: 24px;
color: black;
background: rgba(224,255,255, 0.7);
border-radius: 5px;
} }

@ -1,31 +1,68 @@
/**
* TODO:
* - For things that can't be linked, use <ExpandAltOutlined /> to signal that clicking will open a modal https://ant.design/components/modal/
* in order to give a more complex writeup and some pictures
* - Tooltip for modal and linkable items, possibly <QuestionCircleOutlined /> which displays a modal with an example card with tooltips or explanations
* - Footer
* - Responsive top bar
*
*/
import "./ProjectGrid.scss"; import "./ProjectGrid.scss";
import Masonry from "masonry-layout"; import Masonry from "masonry-layout";
import {useEffect} from "react"; import { useEffect } from "react";
import {LinkOutlined} from "@ant-design/icons";
import CodeDaySD from "../images/SanDiego.svg";
import Foresight from "../images/foresightsports.png";
import Distest from "../images/distest.svg";
import Scoresaver from "../images/scoresaver.svg";
type GridElementImageProps = { type GridElementImageProps = {
image_url: string; image_url: string;
image_alt: string; image_alt: string;
title: string; title: string;
text: string; text: string;
link?: string;
org?: string;
}; };
type GridElementProps = { type GridElementProps = {
image_url: string;
image_alt: string;
title: string; title: string;
text: string; text: string;
link?: string;
org?: string;
}; };
const OneWide = ({title, text}: GridElementProps) => { const OneWide = ({ title, text, link, org }: GridElementProps) => {
if (link === undefined) {
return ( return (
<div className={"OneByOne GridElement"}> <div className={"OneWide GridElement"}>
<div className={"GridElementInternal"}>
<div className={"title"}> <div className={"title"}>
<h2>{title}</h2> <h2>{title}</h2>
{org && <h3>{org}</h3>}
</div> </div>
<div className={"description"}> <div className={"description"}>
<p>{text}</p> <p>{text}</p>
</div> </div>
</div> </div>
</div>
);
}
return (
<a className={"OneWide GridElement Link"} href={link} rel={"noreferrer"} target={"_blank"}>
<div className={"GridElementInternal"}>
<div className={"title"}>
<h2>{title}</h2>
{org && <h3>{org}</h3>}
<LinkOutlined className={"LinkIcon"}/>
</div>
<div className={"description"}>
<p>{text}</p>
</div>
</div>
</a>
); );
}; };
@ -34,17 +71,40 @@ const OneWidePic = ({
image_alt, image_alt,
title, title,
text, text,
}: GridElementImageProps) => { link,
org,
}: GridElementImageProps) => {
if (link === undefined) {
return ( return (
<div className={"OneByOne GridElement"}> <div className={"OneWide Pic GridElement"}>
<div className={"GridElementInternal"}>
<div className={"image"}> <div className={"image"}>
<img src={image_url} alt={image_alt}/> <img src={image_url} alt={image_alt} />
</div> </div>
<div className={"description"}> <div className={"description"}>
<h2>{title}</h2> <h2>{title}</h2>
{org && <h3>{org}</h3>}
<p>{text}</p> <p>{text}</p>
</div> </div>
</div> </div>
</div>
);
}
return (
<a className={"OneWide Pic GridElement Link"} href={link} target={"_blank"} rel={"noreferrer"}>
<div className={"GridElementInternal"}>
<div className={"image"}>
<img src={image_url} alt={image_alt} />
<LinkOutlined className={"LinkIcon"}/>
</div>
<div className={"description"}>
<h2>{title}</h2>
{org && <h3>{org}</h3>}
<p>{text}</p>
</div>
</div>
</a>
); );
}; };
@ -53,18 +113,39 @@ const FourByOneGridElement = ({
image_alt, image_alt,
title, title,
text, text,
}: GridElementImageProps) => { link,
org,
}: GridElementImageProps) => {
if (link === undefined) {
return ( return (
<div className={"FourByOne GridElement"}> <div className={"FourByOne GridElement"}>
<div className={"GridElementInternal"}>
<div className={"image"}> <div className={"image"}>
<img src={image_url} alt={image_alt}/> <img src={image_url} alt={image_alt} />
</div> </div>
<div className={"description"}> <div className={"description"}>
<h2>{title}</h2> <h2>{title}</h2>
{org && <h3>{org}</h3>}
<p>{text}</p> <p>{text}</p>
</div> </div>
</div> </div>
</div>
);
}
return (
<a className={"FourByOne GridElement Link"} href={link} target={"_blank"} rel={"noreferrer"}>
<div className={"GridElementInternal"}>
<div className={"image"}>
<img src={image_url} alt={image_alt} />
<LinkOutlined className={"LinkIcon"}/>
</div>
<div className={"description"}>
<h2>{title}</h2>
{org && <h3>{org}</h3>}
<p>{text}</p>
</div>
</div>
</a>
); );
}; };
@ -75,7 +156,7 @@ export const ProjectGrid = () => {
// @ts-ignore // @ts-ignore
var msnry = new Masonry(elem, { var msnry = new Masonry(elem, {
itemSelector: ".GridElement", itemSelector: ".GridElement",
gutter: 5, gutter: 0,
columnWidth: ".GridSizer", columnWidth: ".GridSizer",
percentPosition: true, percentPosition: true,
}); });
@ -84,41 +165,41 @@ export const ProjectGrid = () => {
return ( return (
<div id={"project-grid-parent"}> <div id={"project-grid-parent"}>
<div id={"project-grid"}> <div id={"project-grid"}>
<div className={"GridSizer"}/> <div className={"GridSizer"} />
<OneWidePic <OneWide
image_url={"http://jakecover.me/images/codedaysd.png"} title={"ElaticMatch"}
image_alt={"CodeDay San Diego Logo"} org={"CodeDay"}
title={"CodeDay"} text={"A set of tools, including a custom suggestion and weighting system, as well as a custom matching algorithm that I wrote and used to match around 350 students to the best-fitting mentors in the CodeDay Labs summer internship program in 2020."}
text={ link={"https://github.com/codeday/labs-elastic-match"}
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app."
}
/> />
<OneWidePic <OneWide
image_url={"http://jakecover.me/images/codedaysd.png"} title={"John Peter"}
image_alt={"CodeDay San Diego Logo"} org={"CodeDay"}
title={"CodeDay"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "John Peter is a Discord bot used for moderation and server management for Virtual CodeDay. It has a very extensive featureset, and has been used for multiple CodeDays and has worked with over 1000 students."
} }
link={"https://github.com/codeday/johnpeter-discord"}
/> />
<OneWidePic <OneWide
image_url={"http://jakecover.me/images/codedaysd.png"} title={"CopyMoji"}
image_alt={"CodeDay San Diego Logo"} org={"BetterDiscord"}
title={"CodeDay"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "An extension for the alternate discord client BetterDiscord that changes the functionality of copying emoji to copy the actual emoji characters rather than their names from the discord client."
} }
link={"https://github.com/JakeCover/BetterDiscordExtensions/tree/main/plugins/CopyMoji"}
/> />
<OneWidePic <OneWidePic
image_url={"http://jakecover.me/images/codedaysd.png"} image_url={CodeDaySD}
image_alt={"CodeDay San Diego Logo"} image_alt={"CodeDay San Diego Logo"}
title={"CodeDay"} org={"CodeDay"}
title={"CodeDay San Diego"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "A 24 hour hackathon occurring around the world a few times a year. I volunteered for and then later ran the San Diego event."
} }
link={"https://event.codeday.org/sandiego"}
/> />
<FourByOneGridElement <FourByOneGridElement
image_url={"http://jakecover.me/images/foresightsports.png"} image_url={Foresight}
image_alt={"Foresight Sports Logo"} image_alt={"Foresight Sports Logo"}
title={"Foresight Sports"} title={"Foresight Sports"}
text={ text={
@ -126,29 +207,32 @@ export const ProjectGrid = () => {
} }
/> />
<OneWidePic <OneWidePic
image_url={"http://jakecover.me/images/codedaysd.png"} image_url={Distest}
image_alt={"CodeDay San Diego Logo"} image_alt={"Distest Logo"}
title={"CodeDay"} title={"Distest"}
org={"Random Projects"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "Distest is a testing library I wrote for Discord bots that allows for full integration tests of bots, improving the discord bot development workflow significantly. As far as I know, it's the only tool available for this sort of testing."
} }
link={"https://github.com/JakeCover/distest"}
/> />
<OneWidePic <OneWidePic
image_url={"http://jakecover.me/images/codedaysd.png"} image_url={Scoresaver}
image_alt={"CodeDay San Diego Logo"} image_alt={"Scoresaver Logo"}
title={"CodeDay"} title={"ScoreSaver"}
org={"Random Projects"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "A Chrome extension to help you download beatsaber songs directly from ScoreSaber. No more searching for mapper names on BeatSaver, just download the newest ranked songs directly!"
} }
link={"https://github.com/JakeCover/ScoreSaverExtention"}
/> />
<OneWidePic <OneWide
image_url={"http://jakecover.me/images/codedaysd.png"} title={"Personal Website"}
image_alt={"CodeDay San Diego Logo"} org={"Random Projects"}
title={"CodeDay"}
text={ text={
"CodeDay, an event by SRND, is a beginner-friendly 24 hour event for students that challenges\n attendees to create a game or an app." "You're looking at it! There's not a whole lot to this, it's just a React site hosted on GitHub Pages, but I didn't know React before starting on this so I'm pretty proud of it."
} }
link={"https://github.com/JakeCover/PersonalWebsite_Static"}
/> />
<OneWidePic <OneWidePic
image_url={"http://jakecover.me/images/codedaysd.png"} image_url={"http://jakecover.me/images/codedaysd.png"}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 429 KiB

After

Width:  |  Height:  |  Size: 429 KiB

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 3.3 MiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Loading…
Cancel
Save