Jake Cover
\ No newline at end of file
+Jake Cover
\ No newline at end of file
diff --git a/static/js/main.c85db8d8.chunk.js b/static/js/main.7817a97e.chunk.js
similarity index 78%
rename from static/js/main.c85db8d8.chunk.js
rename to static/js/main.7817a97e.chunk.js
index 60b7bce..830b41b 100644
--- a/static/js/main.c85db8d8.chunk.js
+++ b/static/js/main.7817a97e.chunk.js
@@ -1,2 +1,2 @@
-(this["webpackJsonppersonal-website-static"]=this["webpackJsonppersonal-website-static"]||[]).push([[0],{101:function(e,t,i){},102:function(e,t,i){},103:function(e,t,i){},104:function(e,t,i){},109:function(e,t,i){},125:function(e,t,i){},126:function(e,t,i){},131:function(e,t,i){},150:function(e,t,i){"use strict";i.r(t);var r=i(1),n=i(0),s=i(17),c=i.n(s),a=(i(101),i(102),i(103),i(104),i(12));function o(){return Object(r.jsxs)("footer",{className:"site-footer",children:[Object(r.jsxs)("div",{className:"footer-grid",children:[Object(r.jsx)("div",{className:"blurb",children:Object(r.jsxs)("p",{className:"text-justify",children:["Made with \u2615 and \u2764\ufe0f by Jake Cover, a CS student who really needs to find something witty and interesting to put here soon. Feel free to reach out!",Object(r.jsx)("br",{}),"Checklist Icon by Arthur Shlain from the Noun Project"]})}),Object(r.jsxs)("div",{className:"links-container",children:[Object(r.jsx)("h2",{children:"Links and Stuff"}),Object(r.jsxs)("ul",{className:"footer-links",children:[Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/",children:"Home"})}),Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/contact",children:"Contact"})}),Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/resume",children:"Resume"})}),Object(r.jsx)("li",{children:Object(r.jsx)("a",{href:"https://github.com/JakeCover",children:"GitHub"})})]})]})]}),Object(r.jsx)("hr",{}),Object(r.jsx)("div",{className:"copyright-text",children:"Copyright \xa9 2020 All Rights Reserved by Jake Cover"})]})}i(109);var l=i(153),d=i(155),j=i(156);function h(){return Object(r.jsxs)("header",{className:"header",id:"myHeader",children:[Object(r.jsx)(a.b,{to:"/",className:"navbar-brand",children:Object(r.jsx)("h1",{children:"Jake Cover"})}),Object(r.jsx)(l.a,{href:void 0,className:"icon",onClick:function(){return function(){var e=document.getElementById("myHeader");"header"===e.className?e.className+=" responsive":e.className="header"}()},children:Object(r.jsx)(j.a,{className:"fa fa-bars"})}),Object(r.jsxs)(d.b,{className:"headerLinks",children:[Object(r.jsx)(a.b,{className:"nav-link",to:"/",children:Object(r.jsx)("h2",{children:"Home"})}),Object(r.jsx)(a.b,{className:"nav-link",to:"/contact",children:Object(r.jsx)("h2",{children:"Contact"})}),Object(r.jsx)(a.b,{className:"nav-link",to:"/resume",children:Object(r.jsx)("h2",{children:"Resume"})}),Object(r.jsx)("a",{className:"nav-link",href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:Object(r.jsx)("h2",{children:"GitHub"})})]})]})}var b=i(7),m=function(){return Object(r.jsx)("div",{children:Object(r.jsx)("h1",{style:{margin:"auto"},children:"Contact"})})},u=(i(125),i(126),i(83)),x=i.n(u),g=i(84),O=i.n(g),f=i(157),p=i.p+"static/media/SanDiego.35f8cc09.svg",v=i.p+"static/media/distest.6bf47b83.svg",A=i.p+"static/media/scoresaver.3f65e348.svg",k=i.p+"static/media/HashiCorp_Logo_no_text.344aecaa.png";function y(e){var t=e.title,i=e.text,n=e.link,s=e.org;return void 0===n?Object(r.jsx)("div",{className:"OneWide GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"title",children:[Object(r.jsx)("h2",{children:t}),s&&Object(r.jsx)("h3",{children:s})]}),Object(r.jsx)("div",{className:"description",children:Object(r.jsx)("p",{children:i})})]})}):Object(r.jsx)("a",{className:"OneWide GridElement Link",href:n,rel:"noreferrer",target:"_blank",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"title",children:[Object(r.jsx)("h2",{children:t}),s&&Object(r.jsx)("h3",{children:s}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsx)("div",{className:"description",children:Object(r.jsx)("p",{children:i})})]})})}function w(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"OneWide Pic GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"OneWide Pic GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function N(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"Medium GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"Medium GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function D(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"FourByOne GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"FourByOne GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function I(){return Object(n.useEffect)((function(){var e=document.querySelector("#project-grid");if(e){var t=new x.a(e,{itemSelector:".GridElement",gutter:0,columnWidth:".GridSizer",percentPosition:!0});O()(e).on("progress",(function(){setTimeout((function(){var e;return null===(e=t.layout)||void 0===e?void 0:e.call(t)}),200)}))}})),Object(r.jsx)("div",{children:Object(r.jsxs)("div",{id:"project-grid-parent",children:[Object(r.jsxs)("div",{id:"project-header",children:[Object(r.jsx)("h2",{children:"> My Projects"}),Object(r.jsxs)("p",{children:["A gallery of some of my most interesting projects. Look for"," ",Object(r.jsx)(f.a,{}),", click those projects for more information!"]})]}),Object(r.jsxs)("div",{id:"project-grid",children:[Object(r.jsx)("div",{className:"GridSizer"}),Object(r.jsx)(y,{title:"ElaticMatch",org:"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.",link:"https://github.com/codeday/labs-elastic-match"}),Object(r.jsx)(y,{title:"John Peter",org:"CodeDay",text:"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"}),Object(r.jsx)(y,{title:"CopyMoji",org:"BetterDiscord",text:"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"}),Object(r.jsx)(w,{image_url:p,image_alt:"CodeDay San Diego Logo",org:"CodeDay",title:"CodeDay San Diego",text:"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"}),Object(r.jsx)(D,{image_url:"data:image/png;base64,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",image_alt:"Foresight Sports Logo",title:"Foresight Sports",text:"Foresight Sports creates advanced augmented reality sports experiences. I created multiple games using Unity that took data from their launch monitor technology and translated it into a seamless experience."}),Object(r.jsx)(w,{image_url:v,image_alt:"Distest Logo",title:"Distest",org:"Random Projects",text:"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"}),Object(r.jsx)(w,{image_url:A,image_alt:"Scoresaver Logo",title:"ScoreSaver",org:"Random Projects",text:"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"}),Object(r.jsx)(N,{image_url:k,image_alt:"HashiCorp Logo",title:"Hashicorp Stack Sysadmin",org:"CodeDay, Random Projects",text:"I've setup and used a stack consisting of Nomad, Consul, and Vault along with Traefik both at CodeDay, where it runs almost every service we have, as well as at home, where I use it to run a number of assorted services on a few old machines. I strongly recommend it, it's very powerful and not all that complex to get started with at any scale, from one personal server to large corporate backends."}),Object(r.jsx)(y,{title:"Personal Website",org:"Random Projects",text:"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"}),Object(r.jsx)(y,{title:"Nomad Job Templates Tool",link:"https://github.com/JakeCover/NomadJobTemplatesTool",org:"Random Projects",text:"A little custom tool to allow you to use jinga-esque text substitutions in Nomad jobfiles to help centralize the definition of service traefik tags. This mainly makes it easier to update and change networking configuration across many jobs easily."}),Object(r.jsx)(y,{title:"Assorted Discord Bots",org:"Random Projects",text:"I've made quite a number of discord bots over time! Some of them, like ReplyBot, which added a reply functionality to Discord years before they finally implemented it first-party, have been obsoleted nowadays, others like DiscordChannelMirror really aren't significantly notable, and many more have been lost to time and past me's lack of understanding of the importance of backup. I digress, however I really do love writing these sorts of applications!"})]})]})})}var M=i(61),G=i.n(M),S=i(85),T=i(46),C=(i(131),i(154)),J=i(86),B=i.n(J);function E(){var e=Object(n.useState)({introduction:"",lastfm:{artist:"nobody",playing:!1,track:"nothing"}}),t=Object(T.a)(e,2),i=t[0],s=t[1];function c(){return a.apply(this,arguments)}function a(){return(a=Object(S.a)(G.a.mark((function e(){var t;return G.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,B.a.get("https://api.jakecover.me");case 3:t=e.sent,s(t.data),e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error(e.t0);case 10:case"end":return e.stop()}}),e,null,[[0,7]])})))).apply(this,arguments)}return Object(n.useEffect)((function(){c();var e=setInterval(c,1e4);return function(){clearInterval(e)}}),[]),i.lastfm.playing?Object(r.jsxs)("li",{children:["listening to ",i.lastfm.track," by ",i.lastfm.artist]}):Object(r.jsx)("li",{children:"not listening to anything right now."})}function R(){function e(t,i,r,n,s){var c=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,a=i+n,o=r+s;return++c>25?[a,o]:Math.abs(t-a/o)>.001?t>a/o?e(t,a,o,n,s,c):e(t,i,r,a,o,c):[a,o]}function t(){var t=(new Date).getTime()-0xedb89b32e0,i=function(){var e=new Date,t=Math.round(new Date(e.getFullYear(),0,1).getTime());return Math.round(new Date(e.getFullYear(),11,31,23,59,59,999).getTime())-t}(),r=Math.floor(t/i),n=e(Math.floor(t%i/1e3)/(i/1e3),0,1,1,1),s=Object(T.a)(n,2),c=s[0],a=s[1];return"".concat(r," and ").concat(c,"/").concat(a)}var i=Object(n.useState)(t()),s=Object(T.a)(i,2),c=s[0],a=s[1];function o(){a(t())}return Object(n.useEffect)((function(){o();var e=setInterval(o,5e3);return function(){clearInterval(e)}}),[]),Object(r.jsxs)("li",{children:[c," years old"]})}function Y(){return Object(r.jsx)("div",{id:"about-me-parent",children:Object(r.jsxs)("div",{id:"about-me",className:"about-me-card",children:[Object(r.jsx)("h1",{children:" Hi! I'm Jake!"}),Object(r.jsxs)("div",{id:"info-parent",children:[Object(r.jsxs)("div",{id:"specific-info",children:[Object(r.jsx)("h2",{children:" A bit about me:"}),Object(r.jsxs)("ul",{children:[Object(r.jsxs)("li",{children:[Object(r.jsx)("b",{children:"Name"}),": Jake Cover"]}),Object(r.jsx)("li",{children:"Occupation: Student"}),Object(r.jsx)("li",{children:"Location: Southern California"}),Object(r.jsxs)("li",{children:["Projects:"," ",Object(r.jsx)("button",{onClick:function(){var e;return null===(e=document.getElementById("project-header"))||void 0===e?void 0:e.scrollIntoView({behavior:"smooth",block:"start"})},children:"Down there"})]}),Object(r.jsxs)("li",{children:["Resume: ",Object(r.jsx)(a.b,{to:"/resume",children:"Over here"})]}),Object(r.jsxs)("li",{children:["Find Me:",Object(r.jsxs)("ul",{children:[Object(r.jsxs)("li",{children:["Email: ",Object(r.jsx)("button",{onClick:function(){window.prompt("Thanks for being a human! Here's my email:",atob("Y29udGFjdEBqYWtlY292ZXIubWU="))},children:"Click This"})]}),Object(r.jsxs)("li",{children:["Twitter:"," ",Object(r.jsx)(C.a,{title:":(",children:Object(r.jsx)("a",{href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:"@cobular_"})})]}),Object(r.jsxs)("li",{children:["GitHub:"," ",Object(r.jsx)("a",{href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:"JakeCover"})]}),Object(r.jsxs)("li",{children:["Telegram:"," ",Object(r.jsx)("a",{href:"https://t.me/cobular",target:"_blank",rel:"noreferrer",children:"@cobular"})]}),Object(r.jsx)("li",{children:"Elsewhere: Probably @cobular"})]})]})]})]}),Object(r.jsxs)("div",{id:"fun-info",children:[Object(r.jsx)("h2",{children:"I'm:"}),Object(r.jsxs)("ul",{children:[Object(r.jsx)(R,{}),Object(r.jsxs)(C.a,{title:"Hey! This part is still a work in progress, check back in a bit to see if it's working!",children:[Object(r.jsx)(E,{}),Object(r.jsx)("li",{children:"doing (general stuff - in class, projects, sleeping, games)"})]}),Object(r.jsx)("li",{children:"rather colorblind"})]})]})]})]})})}function H(){return Object(r.jsxs)("div",{id:"home",children:[Object(r.jsx)(Y,{}),Object(r.jsx)(I,{})]})}function P(){return Object(r.jsx)("div",{children:Object(r.jsx)("h1",{style:{margin:"auto"},children:"Resume"})})}function U(){return Object(r.jsx)("main",{children:Object(r.jsxs)(b.c,{children:[Object(r.jsx)(b.a,{exact:!0,path:"/",component:H}),Object(r.jsx)(b.a,{path:"/contact",component:m}),Object(r.jsx)(b.a,{path:"/resume",component:P})]})})}var X=function(){return Object(r.jsxs)("div",{className:"App",style:{maxWidth:1823,margin:"auto"},children:[Object(r.jsx)(h,{}),Object(r.jsx)(U,{}),Object(r.jsx)(o,{})]})},z=function(e){e&&e instanceof Function&&i.e(3).then(i.bind(null,158)).then((function(t){var i=t.getCLS,r=t.getFID,n=t.getFCP,s=t.getLCP,c=t.getTTFB;i(e),r(e),n(e),s(e),c(e)}))};c.a.render(Object(r.jsx)(a.a,{children:Object(r.jsx)(X,{})}),document.getElementById("root")),z()}},[[150,1,2]]]);
-//# sourceMappingURL=main.c85db8d8.chunk.js.map
\ No newline at end of file
+(this["webpackJsonppersonal-website-static"]=this["webpackJsonppersonal-website-static"]||[]).push([[0],{101:function(e,t,i){},102:function(e,t,i){},103:function(e,t,i){},104:function(e,t,i){},109:function(e,t,i){},125:function(e,t,i){},126:function(e,t,i){},131:function(e,t,i){},150:function(e,t,i){"use strict";i.r(t);var r=i(1),n=i(0),s=i(17),c=i.n(s),a=(i(101),i(102),i(103),i(104),i(12));function l(){return Object(r.jsxs)("footer",{className:"site-footer",children:[Object(r.jsxs)("div",{className:"footer-grid",children:[Object(r.jsx)("div",{className:"blurb",children:Object(r.jsxs)("p",{className:"text-justify",children:["Made with \u2615 and \u2764\ufe0f by Jake Cover, a CS student who really needs to find something witty and interesting to put here soon. Feel free to reach out!",Object(r.jsx)("br",{}),"Checklist Icon by Arthur Shlain from the Noun Project"]})}),Object(r.jsxs)("div",{className:"links-container",children:[Object(r.jsx)("h2",{children:"Links and Stuff"}),Object(r.jsxs)("ul",{className:"footer-links",children:[Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/",children:"Home"})}),Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/contact",children:"Contact"})}),Object(r.jsx)("li",{children:Object(r.jsx)(a.b,{to:"/resume",children:"Resume"})}),Object(r.jsx)("li",{children:Object(r.jsx)("a",{href:"https://github.com/JakeCover",children:"GitHub"})})]})]})]}),Object(r.jsx)("hr",{}),Object(r.jsx)("div",{className:"copyright-text",children:"Copyright \xa9 2020 All Rights Reserved by Jake Cover"})]})}i(109);var o=i(153),d=i(155),j=i(156);function h(){return Object(r.jsxs)("header",{className:"header",id:"myHeader",children:[Object(r.jsx)(a.b,{to:"/",className:"navbar-brand",children:Object(r.jsx)("h1",{children:"Jake Cover"})}),Object(r.jsx)(o.a,{href:void 0,className:"icon",onClick:function(){return function(){var e=document.getElementById("myHeader");"header"===e.className?e.className+=" responsive":e.className="header"}()},children:Object(r.jsx)(j.a,{className:"fa fa-bars"})}),Object(r.jsxs)(d.b,{className:"headerLinks",children:[Object(r.jsx)(a.b,{className:"nav-link",to:"/",children:Object(r.jsx)("h2",{children:"Home"})}),Object(r.jsx)(a.b,{className:"nav-link",to:"/contact",children:Object(r.jsx)("h2",{children:"Contact"})}),Object(r.jsx)(a.b,{className:"nav-link",to:"/resume",children:Object(r.jsx)("h2",{children:"Resume"})}),Object(r.jsx)("a",{className:"nav-link",href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:Object(r.jsx)("h2",{children:"GitHub"})})]})]})}var b=i(7),m=function(){return Object(r.jsx)("div",{children:Object(r.jsx)("h1",{style:{margin:"auto"},children:"Contact"})})},u=(i(125),i(126),i(83)),x=i.n(u),O=i(84),g=i.n(O),f=i(157),p=i.p+"static/media/SanDiego.35f8cc09.svg",v=i.p+"static/media/distest.6bf47b83.svg",A=i.p+"static/media/scoresaver.3f65e348.svg",k=i.p+"static/media/HashiCorp_Logo_no_text.344aecaa.png";function y(e){var t=e.title,i=e.text,n=e.link,s=e.org;return void 0===n?Object(r.jsx)("div",{className:"OneWide GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"title",children:[Object(r.jsx)("h2",{children:t}),s&&Object(r.jsx)("h3",{children:s})]}),Object(r.jsx)("div",{className:"description",children:Object(r.jsx)("p",{children:i})})]})}):Object(r.jsx)("a",{className:"OneWide GridElement Link",href:n,rel:"noreferrer",target:"_blank",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"title",children:[Object(r.jsx)("h2",{children:t}),s&&Object(r.jsx)("h3",{children:s}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsx)("div",{className:"description",children:Object(r.jsx)("p",{children:i})})]})})}function w(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"OneWide Pic GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"OneWide Pic GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function N(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"Medium GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"Medium GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function D(e){var t=e.image_url,i=e.image_alt,n=e.title,s=e.text,c=e.link,a=e.org;return void 0===c?Object(r.jsx)("div",{className:"FourByOne GridElement",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsx)("div",{className:"image",children:Object(r.jsx)("img",{src:t,alt:i})}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})}):Object(r.jsx)("a",{className:"FourByOne GridElement Link",href:c,target:"_blank",rel:"noreferrer",children:Object(r.jsxs)("div",{className:"GridElementInternal",children:[Object(r.jsxs)("div",{className:"image",children:[Object(r.jsx)("img",{src:t,alt:i}),Object(r.jsx)(f.a,{className:"LinkIcon"})]}),Object(r.jsxs)("div",{className:"description",children:[Object(r.jsx)("h2",{children:n}),a&&Object(r.jsx)("h3",{children:a}),Object(r.jsx)("p",{children:s})]})]})})}function I(){return Object(n.useEffect)((function(){var e=document.querySelector("#project-grid");if(e){var t=new x.a(e,{itemSelector:".GridElement",gutter:0,columnWidth:".GridSizer",percentPosition:!0});g()(e).on("progress",(function(){setTimeout((function(){var e;return null===(e=t.layout)||void 0===e?void 0:e.call(t)}),200)}))}})),Object(r.jsx)("div",{children:Object(r.jsxs)("div",{id:"project-grid-parent",children:[Object(r.jsxs)("div",{id:"project-header",children:[Object(r.jsx)("h2",{children:"> My Projects"}),Object(r.jsxs)("p",{children:["A gallery of some of my most interesting projects. Look for"," ",Object(r.jsx)(f.a,{}),", click those projects for more information!"]})]}),Object(r.jsxs)("div",{id:"project-grid",children:[Object(r.jsx)("div",{className:"GridSizer"}),Object(r.jsx)(y,{title:"ElaticMatch",org:"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.",link:"https://github.com/codeday/labs-elastic-match"}),Object(r.jsx)(y,{title:"John Peter",org:"CodeDay",text:"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"}),Object(r.jsx)(y,{title:"CopyMoji",org:"BetterDiscord",text:"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"}),Object(r.jsx)(w,{image_url:p,image_alt:"CodeDay San Diego Logo",org:"CodeDay",title:"CodeDay San Diego",text:"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"}),Object(r.jsx)(D,{image_url:"data:image/png;base64,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",image_alt:"Foresight Sports Logo",title:"Foresight Sports",text:"Foresight Sports creates advanced augmented reality sports experiences. I created multiple games using Unity that took data from their launch monitor technology and translated it into a seamless experience."}),Object(r.jsx)(w,{image_url:v,image_alt:"Distest Logo",title:"Distest",org:"Random Projects",text:"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"}),Object(r.jsx)(w,{image_url:A,image_alt:"Scoresaver Logo",title:"ScoreSaver",org:"Random Projects",text:"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"}),Object(r.jsx)(N,{image_url:k,image_alt:"HashiCorp Logo",title:"Hashicorp Stack Sysadmin",org:"CodeDay, Random Projects",text:"I've setup and used a stack consisting of Nomad, Consul, and Vault along with Traefik both at CodeDay, where it runs almost every service we have, as well as at home, where I use it to run a number of assorted services on a few old machines. I strongly recommend it, it's very powerful and not all that complex to get started with at any scale, from one personal server to large corporate backends."}),Object(r.jsx)(y,{title:"Personal Website",org:"Random Projects",text:"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"}),Object(r.jsx)(y,{title:"Nomad Job Templates Tool",link:"https://github.com/JakeCover/NomadJobTemplatesTool",org:"Random Projects",text:"A little custom tool to allow you to use jinga-esque text substitutions in Nomad jobfiles to help centralize the definition of service traefik tags. This mainly makes it easier to update and change networking configuration across many jobs easily."}),Object(r.jsx)(y,{title:"Assorted Discord Bots",org:"Random Projects",text:"I've made quite a number of discord bots over time! Some of them, like ReplyBot, which added a reply functionality to Discord years before they finally implemented it first-party, have been obsoleted nowadays, others like DiscordChannelMirror really aren't significantly notable, and many more have been lost to time and past me's lack of understanding of the importance of backup. I digress, however I really do love writing these sorts of applications!"})]})]})})}var M=i(61),G=i.n(M),S=i(85),T=i(46),C=(i(131),i(154)),J=i(86),B=i.n(J);function E(){var e=Object(n.useState)({introduction:"",lastfm:{artist:"nobody",playing:!1,track:"nothing",url:void 0}}),t=Object(T.a)(e,2),i=t[0],s=t[1];function c(){return a.apply(this,arguments)}function a(){return(a=Object(S.a)(G.a.mark((function e(){var t;return G.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,B.a.get("https://api.jakecover.me");case 3:t=e.sent,s(t.data),e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error(e.t0);case 10:case"end":return e.stop()}}),e,null,[[0,7]])})))).apply(this,arguments)}return Object(n.useEffect)((function(){c();var e=setInterval(c,1e4);return function(){clearInterval(e)}}),[]),i.lastfm.playing?Object(r.jsx)("li",{children:Object(r.jsxs)("a",{href:i.lastfm.url,target:"_blank",rel:"noreferrer",style:{color:"inherit",textDecoration:"inherit"},children:["listening to ",i.lastfm.track," by"," ",i.lastfm.artist]})}):Object(r.jsx)("li",{children:"not listening to anything right now."})}function R(){function e(){var e=new Date,t=Math.round(new Date(e.getFullYear(),0,1).getTime());return Math.round(new Date(e.getFullYear(),11,31,23,59,59,999).getTime())-t}function t(e,i,r,n,s){var c=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,a=i+n,l=r+s;return++c>25?[a,l]:Math.abs(e-a/l)>.001?e>a/l?t(e,a,l,n,s,c):t(e,i,r,a,l,c):[a,l]}var i=e(),s=(new Date).getTime(),c=Object(n.useCallback)((function(){var i=(new Date).getTime()-0xedb89b32e0,r=e(),n=Math.floor(i/r),s=t(Math.floor(i%r/1e3)/(r/1e3),0,1,1,1),c=Object(T.a)(s,2),a=c[0],l=c[1];return"".concat(n," and ").concat(a,"/").concat(l)}),[i,s]),a=Object(n.useState)(c()),l=Object(T.a)(a,2),o=l[0],d=l[1];var j=Object(n.useCallback)((function(){d(c())}),[c]);return Object(n.useEffect)((function(){j();var e=setInterval(j,5e3);return function(){clearInterval(e)}}),[j]),Object(r.jsxs)("li",{children:[o," years old"]})}function Y(){return Object(r.jsx)("div",{id:"about-me-parent",children:Object(r.jsxs)("div",{id:"about-me",className:"about-me-card",children:[Object(r.jsx)("h1",{children:" Hi! I'm Jake!"}),Object(r.jsxs)("div",{id:"info-parent",children:[Object(r.jsxs)("div",{id:"specific-info",children:[Object(r.jsx)("h2",{children:" A bit about me:"}),Object(r.jsxs)("ul",{children:[Object(r.jsxs)("li",{children:[Object(r.jsx)("b",{children:"Name"}),": Jake Cover"]}),Object(r.jsx)("li",{children:"Occupation: Student"}),Object(r.jsx)("li",{children:"Location: Southern California"}),Object(r.jsxs)("li",{children:["Projects:"," ",Object(r.jsx)("button",{onClick:function(){var e;return null===(e=document.getElementById("project-header"))||void 0===e?void 0:e.scrollIntoView({behavior:"smooth",block:"start"})},children:"Down there"})]}),Object(r.jsxs)("li",{children:["Resume: ",Object(r.jsx)(a.b,{to:"/resume",children:"Over here"})]}),Object(r.jsxs)("li",{children:["Find Me:",Object(r.jsxs)("ul",{children:[Object(r.jsxs)("li",{children:["Email: ",Object(r.jsx)("button",{onClick:function(){window.prompt("Thanks for being a human! Here's my email:",atob("Y29udGFjdEBqYWtlY292ZXIubWU="))},children:"Click This"})]}),Object(r.jsxs)("li",{children:["Twitter:"," ",Object(r.jsx)(C.a,{title:":(",children:Object(r.jsx)("a",{href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:"@cobular_"})})]}),Object(r.jsxs)("li",{children:["GitHub:"," ",Object(r.jsx)("a",{href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",children:"JakeCover"})]}),Object(r.jsxs)("li",{children:["Telegram:"," ",Object(r.jsx)("a",{href:"https://t.me/cobular",target:"_blank",rel:"noreferrer",children:"@cobular"})]}),Object(r.jsx)("li",{children:"Elsewhere: Probably @cobular"})]})]})]})]}),Object(r.jsxs)("div",{id:"fun-info",children:[Object(r.jsx)("h2",{children:"I'm:"}),Object(r.jsxs)("ul",{children:[Object(r.jsx)(R,{}),Object(r.jsx)(E,{}),Object(r.jsx)(C.a,{title:"Hey! This part is still a work in progress, check back in a bit to see if it's working!",children:Object(r.jsx)("li",{children:"doing (general stuff - in class, projects, sleeping, games)"})}),Object(r.jsx)("li",{children:"rather colorblind"})]})]})]})]})})}function H(){return Object(r.jsxs)("div",{id:"home",children:[Object(r.jsx)(Y,{}),Object(r.jsx)(I,{})]})}function P(){return Object(r.jsx)("div",{children:Object(r.jsx)("h1",{style:{margin:"auto"},children:"Resume"})})}function U(){return Object(r.jsx)("main",{children:Object(r.jsxs)(b.c,{children:[Object(r.jsx)(b.a,{exact:!0,path:"/",component:H}),Object(r.jsx)(b.a,{path:"/contact",component:m}),Object(r.jsx)(b.a,{path:"/resume",component:P})]})})}var X=function(){return Object(r.jsxs)("div",{className:"App",style:{maxWidth:1823,margin:"auto"},children:[Object(r.jsx)(h,{}),Object(r.jsx)(U,{}),Object(r.jsx)(l,{})]})},z=function(e){e&&e instanceof Function&&i.e(3).then(i.bind(null,158)).then((function(t){var i=t.getCLS,r=t.getFID,n=t.getFCP,s=t.getLCP,c=t.getTTFB;i(e),r(e),n(e),s(e),c(e)}))};c.a.render(Object(r.jsx)(a.a,{children:Object(r.jsx)(X,{})}),document.getElementById("root")),z()}},[[150,1,2]]]);
+//# sourceMappingURL=main.7817a97e.chunk.js.map
\ No newline at end of file
diff --git a/static/js/main.7817a97e.chunk.js.map b/static/js/main.7817a97e.chunk.js.map
new file mode 100644
index 0000000..004b399
--- /dev/null
+++ b/static/js/main.7817a97e.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["components/Footer.tsx","components/Header.tsx","components/Contact.tsx","images/SanDiego.svg","images/distest.svg","images/scoresaver.svg","images/HashiCorp_Logo_no_text.png","components/ProjectGrid.tsx","images/foresightsports.png","components/AboutMe.tsx","components/Home.tsx","components/Resume.tsx","components/Main.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["Footer","className","to","href","Header","id","onClick","x","document","getElementById","showHideHamburger","MenuOutlined","target","rel","Contact","style","margin","SmallElement","title","text","link","org","undefined","LinkOutlined","SmallElementPic","image_url","image_alt","src","alt","MediumElement","LargeElementPic","ProjectGrid","useEffect","elem","querySelector","msnry","Masonry","itemSelector","gutter","columnWidth","percentPosition","ImagesLoaded","on","setTimeout","layout","CodeDaySD","Distest","Scoresaver","Hashicorp","LastFmLi","useState","introduction","lastfm","artist","playing","track","url","nowPlayingData","setNowPlayingData","updateNowPlaying","a","axios","get","songRequestData","data","console","error","interval","setInterval","clearInterval","color","textDecoration","Age","milliseconds_year","dateObj","Date","dateInit","Math","round","getFullYear","getTime","searchSternBorcotTree","left_n","left_d","right_n","right_d","count","center_n","center_d","abs","millisecondsYear","time","memoizedCallbackCalcAge","useCallback","ageMs","yearMs","ageYearsComponent","floor","target_n","target_d","age","setAge","memoizedCallbackUpdateAge","AboutMe","scrollIntoView","behavior","block","window","prompt","atob","Home","Resume","Main","exact","path","component","App","maxWidth","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render"],"mappings":"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","file":"static/js/main.7817a97e.chunk.js","sourcesContent":["import \"./Footer.scss\"\nimport { Link } from \"react-router-dom\";\n\n\nexport function Footer() {\n return (\n \n );\n};\n","import React from \"react\";\nimport \"./Header.scss\";\nimport { Button, Space } from \"antd\";\nimport { Link } from \"react-router-dom\";\nimport { MenuOutlined } from \"@ant-design/icons\";\n\nexport function Header() {\n function showHideHamburger() {\n var x = document.getElementById(\"myHeader\");\n // @ts-ignore\n if (x.className === \"header\") {\n // @ts-ignore\n x.className += \" responsive\";\n } else {\n // @ts-ignore\n x.className = \"header\";\n }\n }\n\n return (\n \n \n
\n )\n}\n","export default __webpack_public_path__ + \"static/media/SanDiego.35f8cc09.svg\";","export default __webpack_public_path__ + \"static/media/distest.6bf47b83.svg\";","export default __webpack_public_path__ + \"static/media/scoresaver.3f65e348.svg\";","export default __webpack_public_path__ + \"static/media/HashiCorp_Logo_no_text.344aecaa.png\";","/**\n * TODO:\n * - For things that can't be linked, use to signal that clicking will open a modal https://ant.design/components/modal/\n * in order to give a more complex writeup and some pictures\n * - Tooltip for modal and linkable items, possibly which displays a modal with an example card with tooltips or explanations\n * - Footer\n * - Responsive top bar\n *\n */\n\nimport \"./ProjectGrid.scss\";\nimport Masonry from \"masonry-layout\";\nimport ImagesLoaded from \"imagesloaded\";\n\nimport { useEffect } from \"react\";\nimport { LinkOutlined } from \"@ant-design/icons\";\nimport CodeDaySD from \"../images/SanDiego.svg\";\nimport Foresight from \"../images/foresightsports.png\";\nimport Distest from \"../images/distest.svg\";\nimport Scoresaver from \"../images/scoresaver.svg\";\nimport Hashicorp from \"../images/HashiCorp_Logo_no_text.png\";\n\ntype GridElementImageProps = {\n image_url: string;\n image_alt: string;\n title: string;\n text: string;\n link?: string;\n org?: string;\n};\n\ntype GridElementProps = {\n title: string;\n text: string;\n link?: string;\n org?: string;\n};\n\nfunction SmallElement({ title, text, link, org }: GridElementProps) {\n if (link === undefined) {\n return (\n
;\n}\n\nfunction Age() {\n // Accounts for leap years and stuff\n function milliseconds_year() {\n const dateObj = new Date();\n const dateInit = Math.round(\n new Date(dateObj.getFullYear(), 0, 1).getTime()\n );\n const dateEnd = Math.round(\n new Date(dateObj.getFullYear(), 11, 31, 23, 59, 59, 999).getTime()\n );\n return dateEnd - dateInit;\n }\n\n function searchSternBorcotTree(\n target: number,\n left_n: number,\n left_d: number,\n right_n: number,\n right_d: number,\n count: number = 0\n ): [number, number] {\n count++;\n const center_n: number = left_n + right_n;\n const center_d: number = left_d + right_d;\n // Check to see if we've gone too deep\n if (count > 25) return [center_n, center_d];\n // Check to see if we're close enough to the target\n if (Math.abs(target - center_n / center_d) > 0.001) {\n // Look right down the tree\n if (target > center_n / center_d)\n return searchSternBorcotTree(\n target,\n center_n,\n center_d,\n right_n,\n right_d,\n count\n );\n // Ok now look left\n return searchSternBorcotTree(\n target,\n left_n,\n left_d,\n center_n,\n center_d,\n count\n );\n }\n return [center_n, center_d];\n }\n\n function CalcAge() {\n let ageMs = new Date().getTime() - 1021004428000;\n const yearMs = milliseconds_year();\n const ageYearsComponent = Math.floor(ageMs / yearMs);\n const ageSecondsComponent = Math.floor((ageMs % yearMs) / 1000);\n const [target_n, target_d] = searchSternBorcotTree(\n ageSecondsComponent / (yearMs / 1000),\n 0,\n 1,\n 1,\n 1\n );\n return `${ageYearsComponent} and ${target_n}/${target_d}`;\n }\n\n const millisecondsYear = milliseconds_year();\n const time = new Date().getTime();\n // eslint-disable-next-line\n const memoizedCallbackCalcAge = useCallback(CalcAge, [\n millisecondsYear,\n time,\n ]);\n\n const [age, setAge] = useState(memoizedCallbackCalcAge());\n\n function UpdateAge() {\n setAge(memoizedCallbackCalcAge());\n }\n\n const memoizedCallbackUpdateAge = useCallback(UpdateAge, [\n memoizedCallbackCalcAge,\n ]);\n\n useEffect(() => {\n memoizedCallbackUpdateAge();\n\n const interval = setInterval(memoizedCallbackUpdateAge, 5000);\n\n return () => {\n clearInterval(interval);\n };\n }, [memoizedCallbackUpdateAge]);\n\n return
{age} years old
;\n}\n\nexport function AboutMe() {\n function EmailHandler() {\n const email = \"Y29udGFjdEBqYWtlY292ZXIubWU=\";\n window.prompt(\"Thanks for being a human! Here's my email:\", atob(email));\n }\n\n return (\n
\n )\n}\n","export default __webpack_public_path__ + \"static/media/SanDiego.35f8cc09.svg\";","export default __webpack_public_path__ + \"static/media/distest.6bf47b83.svg\";","export default __webpack_public_path__ + \"static/media/scoresaver.3f65e348.svg\";","export default __webpack_public_path__ + \"static/media/HashiCorp_Logo_no_text.344aecaa.png\";","/**\n * TODO:\n * - For things that can't be linked, use to signal that clicking will open a modal https://ant.design/components/modal/\n * in order to give a more complex writeup and some pictures\n * - Tooltip for modal and linkable items, possibly which displays a modal with an example card with tooltips or explanations\n * - Footer\n * - Responsive top bar\n *\n */\n\nimport \"./ProjectGrid.scss\";\nimport Masonry from \"masonry-layout\";\nimport ImagesLoaded from \"imagesloaded\";\n\nimport { useEffect } from \"react\";\nimport { LinkOutlined } from \"@ant-design/icons\";\nimport CodeDaySD from \"../images/SanDiego.svg\";\nimport Foresight from \"../images/foresightsports.png\";\nimport Distest from \"../images/distest.svg\";\nimport Scoresaver from \"../images/scoresaver.svg\";\nimport Hashicorp from \"../images/HashiCorp_Logo_no_text.png\";\n\ntype GridElementImageProps = {\n image_url: string;\n image_alt: string;\n title: string;\n text: string;\n link?: string;\n org?: string;\n};\n\ntype GridElementProps = {\n title: string;\n text: string;\n link?: string;\n org?: string;\n};\n\nfunction SmallElement({ title, text, link, org }: GridElementProps) {\n if (link === undefined) {\n return (\n
listening to {nowPlayingData.lastfm.track} by {nowPlayingData.lastfm.artist}
;\n }\n return
not listening to anything right now.
;\n};\n\nfunction Age() {\n // Accounts for leap years and stuff\n function milliseconds_year() {\n const dateObj = new Date();\n const dateInit = Math.round(\n new Date(dateObj.getFullYear(), 0, 1).getTime()\n );\n const dateEnd = Math.round(\n new Date(dateObj.getFullYear(), 11, 31, 23, 59, 59, 999).getTime()\n );\n return dateEnd - dateInit;\n }\n\n function searchSternBorcotTree(\n target: number,\n left_n: number,\n left_d: number,\n right_n: number,\n right_d: number,\n count: number = 0\n ): [number, number] {\n count++;\n const center_n: number = left_n + right_n;\n const center_d: number = left_d + right_d;\n // Check to see if we've gone too deep\n if (count > 25) return [center_n, center_d];\n // Check to see if we're close enough to the target\n if (Math.abs(target - (center_n / center_d)) > 0.001) {\n // Look right down the tree\n if (target > (center_n / center_d))\n return searchSternBorcotTree(\n target,\n center_n,\n center_d,\n right_n,\n right_d,\n count\n );\n // Ok now look left\n return searchSternBorcotTree(\n target,\n left_n,\n left_d,\n center_n,\n center_d,\n count\n );\n }\n return [center_n, center_d];\n }\n\n function CalcAge() {\n let ageMs = new Date().getTime() - 1021004428000;\n const yearMs = milliseconds_year();\n const ageYearsComponent = Math.floor(ageMs / yearMs);\n const ageSecondsComponent = Math.floor((ageMs % yearMs) / 1000);\n const [target_n, target_d] = searchSternBorcotTree(\n ageSecondsComponent / (yearMs / 1000),\n 0,\n 1,\n 1,\n 1\n );\n return `${ageYearsComponent} and ${target_n}/${target_d}`;\n }\n\n const [age, setAge] = useState(CalcAge());\n\n function UpdateAge() {\n setAge(CalcAge());\n }\n\n useEffect(() => {\n UpdateAge();\n\n const interval = setInterval(UpdateAge, 5000);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n return (\n
\n {age} years old\n
\n );\n};\n\nexport function AboutMe() {\n function EmailHandler() {\n const email = \"Y29udGFjdEBqYWtlY292ZXIubWU=\";\n window.prompt(\"Thanks for being a human! Here's my email:\", atob(email));\n }\n\n return (\n
\n doing (general stuff - in class, projects, sleeping, games)\n
\n \n
\n rather colorblind\n
\n
\n
\n
\n
\n
\n );\n}\n","import \"./Home.scss\";\nimport { ProjectGrid } from \"./ProjectGrid\";\nimport { AboutMe } from \"./AboutMe\";\n\nexport function Home() {\n return (\n
\n \n \n
\n );\n}\n","export function Resume() {\n return (\n
\n
Resume
\n
\n );\n}\n","import { Route, Switch } from \"react-router-dom\";\nimport { Contact } from \"./Contact\";\nimport { Home } from \"./Home\";\nimport { Resume } from \"./Resume\";\n\nexport function Main() {\n return (\n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport \"./App.scss\";\nimport { Footer } from \"./components/Footer\";\nimport { Header } from \"./components/Header\";\nimport { Main } from \"./components/Main\";\n\nfunction App() {\n return (\n
\n \n \n \n
\n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.scss\";\nimport \"./imports.scss\"\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { HashRouter } from \"react-router-dom\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}
\ No newline at end of file