diff --git a/200.html b/200.html index 4c61ca4..446d447 100644 --- a/200.html +++ b/200.html @@ -1 +1 @@ -Jake Cover
\ No newline at end of file +Julie Cover
\ No newline at end of file diff --git a/CNAME b/CNAME index ea575fb..15c8d07 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -cobular.com \ No newline at end of file +jakecover.me diff --git a/asset-manifest.json b/asset-manifest.json index 96371bf..97c6933 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { "main.css": "/static/css/main.8feef5f1.chunk.css", - "main.js": "/static/js/main.6a565291.chunk.js", - "main.js.map": "/static/js/main.6a565291.chunk.js.map", + "main.js": "/static/js/main.a7436f4c.chunk.js", + "main.js.map": "/static/js/main.a7436f4c.chunk.js.map", "runtime-main.js": "/static/js/runtime-main.d39da719.js", "runtime-main.js.map": "/static/js/runtime-main.d39da719.js.map", "static/css/2.85610714.chunk.css": "/static/css/2.85610714.chunk.css", @@ -25,6 +25,6 @@ "static/css/2.85610714.chunk.css", "static/js/2.18e12b66.chunk.js", "static/css/main.8feef5f1.chunk.css", - "static/js/main.6a565291.chunk.js" + "static/js/main.a7436f4c.chunk.js" ] } \ No newline at end of file diff --git a/favicon-128.png b/favicon-128.png new file mode 100644 index 0000000..71aa9d1 Binary files /dev/null and b/favicon-128.png differ diff --git a/favicon-192.png b/favicon-192.png new file mode 100644 index 0000000..111f6c7 Binary files /dev/null and b/favicon-192.png differ diff --git a/favicon-196.png b/favicon-196.png new file mode 100644 index 0000000..96893f4 Binary files /dev/null and b/favicon-196.png differ diff --git a/favicon-32.png b/favicon-32.png new file mode 100644 index 0000000..4d35d54 Binary files /dev/null and b/favicon-32.png differ diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 09e45fa..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/favicon_152.png b/favicon_152.png new file mode 100644 index 0000000..042bb2e Binary files /dev/null and b/favicon_152.png differ diff --git a/favicon_167.png b/favicon_167.png new file mode 100644 index 0000000..e88b26d Binary files /dev/null and b/favicon_167.png differ diff --git a/favicon_180.png b/favicon_180.png new file mode 100644 index 0000000..9fbb069 Binary files /dev/null and b/favicon_180.png differ diff --git a/index.html b/index.html index b35529e..703d82b 100644 --- a/index.html +++ b/index.html @@ -1,14 +1,14 @@ -Jake Cover

Hi! I'm Jake!

A bit about me:

  • Occupation: Student
  • Location: Southern California
  • Pronouns: They/Them
  • 19 and 17/52 years old
  • not listening to anything right now.

Find Me:

</> My Projects

A gallery of some of my most interesting projects. Look for , click those projects for more information!

ElaticMatch

CodeDay

A set of tools, including a custom suggestion and weighting system, as well as a custom matching +Julie Cover

</> My Projects

A gallery of some of my most interesting projects. Look for , click those projects for more information!

Foresight Sports Logo

Foresight Sports

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.

Assorted Discord Bots

Random Projects

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 just do simple things for my own use, and many more have been @@ -17,8 +17,8 @@ where it runs almost every service we have, as well as at home, where I use it to run over 25 services on a cluster of old machines. I strongly recommend it as it's a very easy way utilize old hardware, even when each machine may not be that powerful powerful and not all that complex to get started with at any scale, - from one personal server to large corporate backends.

A B logo

Bennu

Work Experience

Bennu made various engineering management and performance analysis tools for other software companies. Here, I mainly implemented the crawler for Jira Server, adding a whole new application we could offer to customers. I also worked on internal tooling and optimized our test runtime by 50% before the startup - closed from beneath me in the middle of the summer of 2021.

\ No newline at end of file + nothing.

\ No newline at end of file diff --git a/logo192.png b/logo192.png deleted file mode 100644 index 68e272e..0000000 Binary files a/logo192.png and /dev/null differ diff --git a/logo512.png b/logo512.png deleted file mode 100644 index 2dd80b7..0000000 Binary files a/logo512.png and /dev/null differ diff --git a/manifest.json b/manifest.json index d775532..07d8fe5 100644 --- a/manifest.json +++ b/manifest.json @@ -1,25 +1,45 @@ { - "short_name": "jakecover.me", - "name": "Jake Cover's Personal Website", + "short_name": "cobular.com", + "name": "Julie Cover's Personal Website", "icons": [ { - "src": "favicon.ico", - "sizes": "256x256 128x128 64x64 32x32 24x24 16x16", - "type": "image/x-icon" + "src": "favicon-32.png", + "sizes": "32x32", + "type": "image/png" }, { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" + "src": "favicon-128.png", + "sizes": "128x128", + "type": "image/png" }, { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" + "src": "favicon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "favicon-196.png", + "sizes": "196x196", + "type": "image/png" + }, + { + "src": "favicon-152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "favicon-167.png", + "sizes": "167x167", + "type": "image/png" + }, + { + "src": "favicon-180.png", + "sizes": "180x180d", + "type": "image/png" } ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" + "theme_color": "#1f2022", + "background_color": "#1f2022" } diff --git a/static/js/main.6a565291.chunk.js b/static/js/main.6a565291.chunk.js deleted file mode 100644 index f0da5b3..0000000 --- a/static/js/main.6a565291.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(this["webpackJsonppersonal-website-static"]=this["webpackJsonppersonal-website-static"]||[]).push([[0],{117:function(e,t,i){"use strict";i.r(t);var n=i(1),r=i(0),a=i(43),s=(i(75),i(76),i(77),i(78),i(79),i(80),i(44)),o=i.n(s),l=i(45),c=i.n(l),d=i(122),h=i.p+"static/media/SanDiego.35f8cc09.svg",j=i.p+"static/media/scoresaver.3f65e348.svg",m=i.p+"static/media/HashiCorp_Logo_no_text.344aecaa.png",b=i.p+"static/media/bennu.e9020d82.gif",u=i.p+"static/media/kat-site.d60ec831.png";function g(e){var t=e.title,i=e.text,r=e.link,a=e.org;return void 0===r?Object(n.jsx)("div",{className:"OneWide GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",role:"gridcell",children:[Object(n.jsxs)("div",{className:"title",children:[Object(n.jsx)("h2",{children:t}),a&&Object(n.jsx)("h3",{children:a})]}),Object(n.jsx)("div",{className:"description",children:Object(n.jsx)("p",{children:i})})]})}):Object(n.jsx)("div",{className:"OneWide GridElement",role:"gridcell",children:Object(n.jsxs)("a",{className:"Link GridElementInternal",href:r,rel:"noreferrer",target:"_blank",tabIndex:0,children:[Object(n.jsxs)("div",{className:"title",children:[Object(n.jsx)("h2",{children:t}),a&&Object(n.jsx)("h3",{children:a}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsx)("div",{className:"description",children:Object(n.jsx)("p",{children:i})})]})})}function p(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"OneWide Pic GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("div",{className:"OneWide Pic GridElement ",children:Object(n.jsxs)("a",{className:"GridElementInternal Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function f(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"Medium GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("a",{className:"Medium GridElement Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function x(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"FourByOne GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("div",{className:"FourByOne GridElement",children:Object(n.jsxs)("a",{className:"GridElementInternal Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function O(){return Object(r.useEffect)((function(){var e=document.querySelector("#project-grid");if(e){var t=new o.a(e,{itemSelector:".GridElement",gutter:0,columnWidth:".GridSizer",percentPosition:!0});c()(e).on("progress",(function(){setTimeout((function(){var e;return null===(e=t.layout)||void 0===e?void 0:e.call(t)}),200)}))}})),Object(n.jsx)("div",{id:"project-grid-background",style:{paddingBottom:20},children:Object(n.jsxs)("div",{id:"project-grid-parent","aria-label":"My Projects",children:[Object(n.jsxs)("div",{id:"project-header","aria-label":"Projects Header",children:[Object(n.jsx)("h2",{children:" My Projects"}),Object(n.jsxs)("p",{children:["A gallery of some of my most interesting projects. Look for"," ",Object(n.jsx)(d.a,{}),", click those projects for more information!"]})]}),Object(n.jsxs)("div",{id:"project-grid","aria-label":"Projects Grid",children:[Object(n.jsx)("div",{className:"GridSizer"}),Object(n.jsx)(g,{title:"ElaticMatch",org:"CodeDay",text:"A set of tools, including a custom suggestion and weighting system, as well as a custom matching\n algorithm that I wrote and used to match around 350 students to the best-fitting mentors in the CodeDay\n Labs summer internship program in 2020.",link:"https://github.com/codeday/labs-elastic-match"}),Object(n.jsx)(g,{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\n extensive featureset with a number of custom moderation and authentication tools and has been used for \n multiple CodeDay events, impacting well over 1,000 students.",link:"https://github.com/codeday/johnpeter-discord"}),Object(n.jsx)(g,{title:"Distest",org:"Random Projects",text:"Distest is a testing library I wrote for Discord bots that allows for full integration tests of bots,\n improving the discord bot development workflow significantly. As far as I know, it's the only tool\n available for this sort of testing. Unfortunately, this has been deprecated in favor of other, more full\n featured libraries.",link:"https://github.com/JakeCover/distest"}),Object(n.jsx)(p,{image_url:h,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\n the San Diego event where I grew to love hackathons and leaned a lot about leadership and event logistics\n in the process!",link:"https://event.codeday.org/sandiego"}),Object(n.jsx)(x,{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\n Unity that took data from their launch monitor technology and translated it into a seamless experience."}),Object(n.jsx)(p,{image_url:j,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\n mapper names on BeatSaver, just download the newest ranked songs directly!",link:"https://github.com/JakeCover/ScoreSaverExtention"}),Object(n.jsx)(g,{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\n functionality to Discord years before they finally implemented it first-party, have been obsoleted\n nowadays, others like DiscordChannelMirror just do simple things for my own use, and many more have been\n lost to time and past me's lack of understanding of the importance of backup. I digress, however I really\n do love writing these sorts of applications!"}),Object(n.jsx)(f,{image_url:m,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,\n where it runs almost every service we have, as well as at home, where I use it to run over 25 services on\n a cluster of old machines. I strongly recommend it as it's a very easy way utilize old hardware, even when\n each machine may not be that powerful powerful and not all that complex to get started with at any scale,\n from one personal server to large corporate backends."}),Object(n.jsx)(g,{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,\n 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(n.jsx)(g,{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\n centralize the definition of service traefik tags. This mainly makes it easier to update and change\n networking configuration across many jobs easily."}),Object(n.jsx)(p,{image_url:u,image_alt:"Kat's Logo",title:"Shushicate",org:"Random Projects",text:"An art gallery website for my friend, made in svelte. The images are optimized and compressed at \n compiletime, creating a few versions and allowing the browser to choose which to display using imageset.\n The full resolution image is only sent when selecting an image, keeping the site performant.",link:"https://www.shushicate.com/"}),Object(n.jsx)(g,{title:"OVRTools",org:"Random Projects",link:"https://github.com/OVRTools",text:"This one's a bit more work in progress than some of the others here. It is a set of tools to help people\n develop OpenVR plugins more easily and independently from Unity. It will eventually grow to include\n multiple additional input methods and other tools to allow users to interact with other OVR plugins more\n easily."}),Object(n.jsx)(f,{image_url:b,image_alt:"A B logo",title:"Bennu",org:"Work Experience",text:"Bennu made various engineering management and performance analysis tools for other software companies. \n Here, I mainly implemented the crawler for Jira Server, adding a whole new application we could offer to\n customers. I also worked on internal tooling and optimized our test runtime by 50% before the startup \n closed from beneath me in the middle of the summer of 2021.",link:"https://www.bennu.io/"}),Object(n.jsx)(g,{title:"CopyMoji",org:"BetterDiscord",text:"An extension for the alternate discord client BetterDiscord that changes the functionality of copying\n 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(n.jsx)(g,{title:"What's That Number",org:"Random Projects",text:"A service that allows for the reversing of arbitrary decimals back to fractions of irrational numbers.\n Basically, it's able to reverse 3.1415 to \u03c0, but more interestingly reverse 0.385694 to \u221a2 * 3 / 11!\n It can't solve all problems and it isn't mathematically provable or anything, but it's optimized to\n give you the right answer for most things you'll actually run into and tell you when you've gotten \n nothing.",link:"https://jakecover.github.io/WhatsThatNumberExtension/"})]})]})})}i(85);var v=i(121),A=i(22);function w(){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,n,r,a){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=i+r,l=n+a;return++s>25?[o,l]:Math.abs(e-o/l)>.001?e>o/l?t(e,o,l,r,a,s):t(e,i,n,o,l,s):[o,l]}var i=e(),a=(new Date).getTime(),s=Object(r.useCallback)((function(){var i=(new Date).getTime()-0xedb89b32e0,n=e(),r=Math.floor(i/n),a=t(Math.floor(i%n/1e3)/(n/1e3),0,1,1,1),s=Object(A.a)(a,2),o=s[0],l=s[1];return"".concat(r," and ").concat(o,"/").concat(l)}),[i,a]),o=Object(r.useState)(s()),l=Object(A.a)(o,2),c=l[0],d=l[1];var h=Object(r.useCallback)((function(){d(s())}),[s]);return Object(r.useEffect)((function(){h();var e=setInterval(h,5e3);return function(){clearInterval(e)}}),[h]),Object(n.jsxs)("li",{children:[c," years old"]})}var y=i(31),k=i.n(y),I=i(51),N=i(52),D=i.n(N);function M(){var e=Object(r.useState)({introduction:"",lastfm:{artist:"nobody",playing:!1,track:"nothing",url:void 0}}),t=Object(A.a)(e,2),i=t[0],a=t[1];function s(){return o.apply(this,arguments)}function o(){return(o=Object(I.a)(k.a.mark((function e(){var t;return k.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,D.a.get("https://api.jakecover.me");case 3:t=e.sent,a(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(r.useEffect)((function(){s();var e=setInterval(s,1e4);return function(){clearInterval(e)}}),[]),i.lastfm.playing?Object(n.jsx)("li",{children:Object(n.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(n.jsx)("li",{children:"not listening to anything right now."})}function T(){return Object(n.jsx)("div",{id:"about-me-parent",children:Object(n.jsxs)("div",{id:"about-me",className:"about-me-card",children:[Object(n.jsx)("h1",{"aria-label":"Title",children:"Hi! I'm Jake!"}),Object(n.jsxs)("div",{id:"info-parent","aria-label":"About Me",children:[Object(n.jsxs)("div",{id:"specific-info","aria-label":"Facts",children:[Object(n.jsx)("h2",{children:" A bit about me:"}),Object(n.jsxs)("ul",{children:[Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Occupation:"})," Student"]}),Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Location:"})," Southern California"]}),Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Pronouns"}),": They/Them"]}),Object(n.jsx)(w,{}),Object(n.jsx)(M,{})]})]}),Object(n.jsxs)("div",{id:"fun-info","aria-label":"Contacts",children:[Object(n.jsx)("h2",{children:"Find Me:"}),Object(n.jsxs)("ul",{children:[Object(n.jsxs)("li",{children:["Email: ",Object(n.jsx)("button",{onClick:function(){window.prompt("Thanks for being a human! Here's my email:",atob("Y29udGFjdEBqYWtlY292ZXIubWU="))},children:"Click This"})]}),Object(n.jsxs)("li",{children:["Twitter:"," ",Object(n.jsx)(v.a,{title:":(",children:Object(n.jsx)("a",{href:"https://twitter.com/cobular_",target:"_blank",rel:"noreferrer",tabIndex:0,children:"@cobular_"})})]}),Object(n.jsxs)("li",{children:["GitHub:"," ",Object(n.jsx)("a",{href:"https://github.com/JakeCover",target:"_blank",rel:"noreferrer",tabIndex:0,children:"JakeCover"})]}),Object(n.jsxs)("li",{children:["Telegram:"," ",Object(n.jsx)("a",{href:"https://t.me/cobular",target:"_blank",rel:"noreferrer",tabIndex:0,children:"@cobular"})]}),Object(n.jsx)("li",{children:"Elsewhere: Probably @cobular"})]})]})]})]})})}function S(){return Object(n.jsxs)("div",{id:"home",children:[Object(n.jsx)(T,{}),Object(n.jsx)(O,{})]})}function G(){return Object(n.jsx)("main",{children:Object(n.jsx)(S,{})})}var B=function(){return Object(n.jsx)("div",{className:"App",children:Object(n.jsx)(G,{})})},E=function(e){e&&e instanceof Function&&i.e(3).then(i.bind(null,123)).then((function(t){var i=t.getCLS,n=t.getFID,r=t.getFCP,a=t.getLCP,s=t.getTTFB;i(e),n(e),r(e),a(e),s(e)}))};Object(a.render)(Object(n.jsx)(B,{}),document.getElementById("root")),E()},75:function(e,t,i){},76:function(e,t,i){},77:function(e,t,i){},78:function(e,t,i){},79:function(e,t,i){},80:function(e,t,i){},85:function(e,t,i){}},[[117,1,2]]]); -//# sourceMappingURL=main.6a565291.chunk.js.map \ No newline at end of file diff --git a/static/js/main.6a565291.chunk.js.map b/static/js/main.6a565291.chunk.js.map deleted file mode 100644 index 83ae759..0000000 --- a/static/js/main.6a565291.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["images/SanDiego.svg","images/scoresaver.svg","images/HashiCorp_Logo_no_text.png","images/bennu.gif","images/kat-site.png","components/ProjectGrid.tsx","images/foresightsports.png","components/AboutMe/Age.tsx","components/AboutMe/LastFmLi.tsx","components/AboutMe/AboutMe.tsx","components/Home.tsx","components/Main.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["SmallElement","title","text","link","org","undefined","className","role","href","rel","target","tabIndex","LinkOutlined","SmallElementPic","image_url","image_alt","src","alt","MediumElement","LargeElementPic","ProjectGrid","useEffect","elem","document","querySelector","msnry","Masonry","itemSelector","gutter","columnWidth","percentPosition","ImagesLoaded","on","setTimeout","layout","id","style","paddingBottom","aria-label","CodeDaySD","Scoresaver","Hashicorp","KatSite","Bennu","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","useState","age","setAge","memoizedCallbackUpdateAge","interval","setInterval","clearInterval","LastFmLi","introduction","lastfm","artist","playing","track","url","nowPlayingData","setNowPlayingData","updateNowPlaying","a","axios","get","songRequestData","data","console","error","color","textDecoration","AboutMe","onClick","window","prompt","atob","Home","Main","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","render","getElementById"],"mappings":"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","file":"static/js/main.6a565291.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/SanDiego.35f8cc09.svg\";","export default __webpack_public_path__ + \"static/media/scoresaver.3f65e348.svg\";","export default __webpack_public_path__ + \"static/media/HashiCorp_Logo_no_text.344aecaa.png\";","export default __webpack_public_path__ + \"static/media/bennu.e9020d82.gif\";","export default __webpack_public_path__ + \"static/media/kat-site.d60ec831.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 Scoresaver from \"../images/scoresaver.svg\";\nimport Hashicorp from \"../images/HashiCorp_Logo_no_text.png\";\nimport Bennu from \"../images/bennu.gif\";\nimport KatSite from \"../images/kat-site.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
\n

{title}

\n {org &&

{org}

}\n
\n
\n

{text}

\n
\n
\n
\n );\n }\n return (\n
\n \n
\n

{title}

\n {org &&

{org}

}\n \n
\n
\n

{text}

\n
\n \n
\n );\n}\n\nfunction SmallElementPic({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
\n
\n
\n {image_alt}\n
\n
\n

{title}

\n {org &&

{org}

}\n\n

{text}

\n
\n
\n
\n );\n }\n return (\n
\n \n
\n {image_alt}\n \n
\n
\n

{title}

\n {org &&

{org}

}\n

{text}

\n
\n \n
\n );\n}\n\nfunction MediumElement({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
\n
\n
\n {image_alt}\n
\n
\n

{title}

\n {org &&

{org}

}\n

{text}

\n
\n
\n
\n );\n }\n return (\n \n
\n
\n {image_alt}\n \n
\n
\n

{title}

\n {org &&

{org}

}\n

{text}

\n
\n
\n \n );\n}\n\nfunction LargeElementPic({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
\n
\n
\n {image_alt}\n
\n
\n

{title}

\n {org &&

{org}

}\n

{text}

\n
\n
\n
\n );\n }\n return (\n
\n \n
\n {image_alt}\n \n
\n
\n

{title}

\n {org &&

{org}

}\n

{text}

\n
\n \n
\n );\n}\n\nexport function ProjectGrid() {\n useEffect(() => {\n var elem = document.querySelector(\"#project-grid\");\n\n if (elem) {\n const msnry = new Masonry(elem, {\n itemSelector: \".GridElement\",\n gutter: 0,\n columnWidth: \".GridSizer\",\n percentPosition: true,\n });\n\n ImagesLoaded(elem).on(\"progress\", () => {\n setTimeout(() => msnry.layout?.(), 200);\n });\n }\n });\n\n return (\n
\n
\n
\n

</> My Projects

\n

\n A gallery of some of my most interesting projects. Look for{\" \"}\n , click those projects for more information!\n

\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAACcCAMAAAAXtt4bAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaVBMVEX///8AAAAAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbwAfbxlZmplZmplZmplZmplZmplZmplZmplZmplZmplZmplZmplZmplZmplZmplZmoAfbxlZmr///8s4zd8AAAAIHRSTlMAACBAYIC/79+PEJ/PcFAwr0CAv58gEI/fr3BgMO/PUBnHhG0AAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QEEACcXYUmp1AAAFjBJREFUeNrtXdeCw6oOPK5J7DT3FtvJ///k3XQXBEI4OXvuah53UxwYxGgQ8M8/DAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAY/0+wvgXbcT3P9/3VeYD1zx82nuc4gcVgfAD/At0dL/TPKmx9b8esZ/yn6R7sN9uzBlb+xnW4kxj/QbofPC2qDyL9xj1wTzH+Q3S3N+uzCVZHj8M84z9B98DdnpeAz5Rn/Ha625vVeTGsjjube43xW+luh+elsd7sueMYv5DuHyD7I8i77FIyfhfdA291/hx8ljWMX0T3/fr8YWyZ8YzfQffgeP4GmPGMX0D3/er8LfjcjYx/le5BeD7/x+keRXEcJwDSn//FUZT90l7Nbw9fPJ+2vLxx/0sVx3WUmzVPPfiGMX4+PW6i05+h+2G+rHStdrxhebq7w69uLySMiHuKE+zHdMW4V3PN722TtBnRjvb4g4/Im7REvqtMm1nXudPW3cyGUpwmyM+v4mjy7mzWgBIanaYvrq5/TS5kpB+hu7MasNzbOdO1UNtxPM9fKpFdS1sI2TGD7oxLvfcmwy5tCF/e1u/396THT950SvXGextP+mY2LY87r6l0f1w6YvysfWIJj+rpixtCQBmi/wTd3XeZi9wcP7ieby7xd8OPjGntULw/gDA9DGJkSos6r/cXpPe/xkut//TdWNNM+2M1Imtp1riWNRstMsnTiebg3oDunxAzm7spji1iPLihUZxfBdIWQg77Z3DsjN5O1lIvRpD49ORMThps1ag3ps0bDmZOYuMORvOsfUpZBiIUPimd7dUH6P4zG2oveQYGlA9NpPNzxn12aGv2fiui9kQGSFstKUZUtcMA68GJUdSSedaDWi2VsKIRBoWSTvd6ebqHa6IRftjRsljbMpTO7wB3IndoY6RF3nKkNome1Lg3lM8zjyEwyyomE0gBz4tzzH5PRE/OHjFlabofJmlp1MdxlSTJ04e4uVQ94IEF7tHQhUxN2JrTA0dhpqVejK0Mgmdv+N23Hpit4lmWaSi4iWZIq8nM0FY0h8b0hyg/WkQQxZWEPz+077MFGL+3FrMhK3pLJiZa5P0BuQGZ8tbw4YU2pPdUiZ0J20GtlmjbkAbPUXyM7qcYpSPbJO5zI8avrQVsyM5Md7+7rSF/QGUQoCvLLOylEhvyYKrS3jJEpNVqCYfixW3Iz9D9VGipgq6YUd7erSkuJLVTCsswB3rSnT4/xAZarDYL7gPtvhvJxKP32j2WmbH9qVnMbMjcKKDcJsHF6Z7XFNp0xXT5zQn1XUjqTBdZhg35pDudcrXBiMsMNW0zrfxYHz1n7DckhnQHloxlNmS2vA25ON11F/VGy2/j1XQrQIR4V95COjaikTiNTc2LiK7FSuFI+dGJ16qeKeq4gpRGcHNl1uF+7iJHhmzvAHOn0LEhY7OAchvVi9I9Sw2bpZowXhXit/IWSiIUTooeLW91T606OBeG4W8qbWP840+ZlMKWx8xjeXhqq2s1tXhxUCjSuqS4mmwv9NeyubgSNVQF+GYyG1IofMxsyEXpnhumM0LG27INUStb3kK1xtMLRmo5TyquzmoKpmKlOGyOQ8IPMVIg/CViP4Pw+JXstYlIiO1Xq/CA1RU/w0nC1KgDMtIS8ifRNmQ2HeuzQQGHiGUrIuv2shAmTemucSbkvIU06DLP+NsGHR4fqVgGrbWqTYdC9AydRuu3+BRwKttuXHRXHrwSPotjnby4NxJHgxO4+oT5jBSfz36+ADhLLguiLEZMdXyEcJ+3UKnx/DOl2GUaLy6FWqTC92UvEiQF/vF7nV8uCAqHMNAJtIo4EonHvZYNWUAJNb2eeDm6LxfaX1Ps6Ocd5iJ+5ahaSIMusyjRnnQiTyXUUg3+A4R6KsI/foFfvbGyeIxbmjpUW/VzW0sKZJi9ZuyoAHsn07Uhkfnsh+meV5cPoB2FeDsci3hBOCrpdMm0mi0Thyl8b8ZCPrRYLaQkR0nbqJQ1440bQC2OUmSJc6jc3IbE5bMfpvupvHwIVTQyJv33wUq2uoV06DKdZ9tcS5sKzZFOkw8nDWWr0CeXMm4izd1z/XwTVC/WMg0tKM4miS6GUeGET6vZ5wvQvWkvn0M5NmoOjuvtHRtF2YoeHRU6qBc2coGfIFALRUmsRqb2xd/bR287SB8WxTRUFC24FtobhJEFyvdkYRuZzy5J9+byWbQxcmau6EEo01GVkBYp0fOqeB6grHNlxD5IRsVKwLaQREzTlEh3o6hYGuSzS9I9vXweaUaZ0BvMGo14YlCo0wSjRVrNgUkpfuogY1OvWe/Cp0G65T2N7SczCgg/U6ueeAm6f4Pt11970peGGkEj0VufEk60NToInoSdRJklCyO6T4JhJZ46NIbxZDXtscqamD2jZIxp1RMvQfcvsf0y2e+PmtjwfMn1tIzY30+w8+qsdDwlN2VkSPcRi4BtpLGOlsmjJk6TTjQFmRXM55hsTb2Mbkb377FdTfiS3t2NnpYREiDHzqunTjy4CNK2tUzpXkpmx0JMU0jLnJpCXFcEhBS9vl/EhjSke3P5LmSEp0lD8ait9WycHmNDnm4lVEXSAbI0ovi0RkJuQl5gG2mGqXPJ6qpVTEFmXKlx9qv1Sbp/m+1SwpM2NVfiafykV16Ti4ZMPAp7kqnnYfFTtNhLL9H3dsTw7ChdIR1xvUNMQWZCIENla+kn6X5qL/8CIJeGVLPTCCeGUm+UJxIbMmsqRSs9qxU6IxLExnTPgFCgrDJVTavp92zI/oN0z/8VtkOEzw2CRqwXJFKMDXnroEhdXPFkO2VnSrdAFhWr0j7lzFeQQgrNgTK0IU3oDofT6xLey/S+HaO7MOEFC08k9dqJf0mvt1ySAUMmR/zsJDMQhqNlW9p5du/PQNqQpbqWS8hBs70QPSpbQyyjk+kunD7bKhYfIZNHddotx/fZQZ606FZYWp6KzpJoj+nhQUkQpchuEmhPcdWR6Z4DoUA586mmpWoJGxKXrdWfo7vASKhqlQ8UxYvF+bJZwIaMLM3SLtHAKqAho+jhbrRVajJllPgVYcH6znMj3a1aBufcQzakcjVBNS3VZK2mCtta9cRmdJ8duDXec2c7rucdfVcUHIuF6idHJg1JGrZi8Znq+TInIH3NdIJ7r+0xaOIxCEC5m4rHQa50tlXTUvYpG1KrntiQ7mOKlPWb64533E6PoJqKrngZXdMvY0MmMkmsFHEllL5ieriB8r3e+hBKgCKlOBT0KFkhkfIdMChkBU0dzYYsPkb3kZRJXn1z8LaSk/BHjF8gxpeqlR9irXis5UcVkH+BUuMRwDb89oxcsDcJXzaaKtK+ArW6KYm5tX5dOjJsax1rYET3oZQZaApHfvHDdMiYViDUqpUfYhZS6FQZ3yOPyL9oNSaYTJdVYJDr9IJvA82OjTiMKB+sEQbmSGdBqCHakNan6B6LBbQe3akHjk1WIyUrPzjUsg+ePnEqNjAE/sVpfkOX4Ncm4mfQODEk1ZrRcyAsQPrhotuwpXD0adWlp9AUaGxD0uietS//YPT3nfwAR2Fsols1sWrlh1zmBh5CIPC2Gx0tlccAfSp9jwHgV6xlH3cKGzLSTQeBcWt+zvUiNiSN7hVgfoOnJUvHTmoe3DWLXtTLJElcj7Z6nqKoEZqobY4uo5KJA4LHANjeBS5QTSgC6Yf4oqNCBBzM9evSkWEbl88uQPdosiAIi5kjrseK1jC4n+h0od7sOOr9Bj2vxkJazXaDJiiIvrqVVUn3JdaGPIGLd2VxNVWyabnn9fjJ+d7uihCJY5TwyS96qyV0ut+iXCt4Ykd++LrMXWiNgrtm0YvWqiDGVcYf1hcLu5K2wp6ICVkm17MbBXv759XolUo/mK4K9kB+r33dHjWfNad7BMpbR35v0qKEj62FbMhogeU+/GF94lMgaRl7bUzICGqDdBm6l8AEqn/dHjGfXYDuCTyUzvq56vtnFuTgjpfOS9M9En5EiVZOpUm14MlUipVgUWMDRH1NNMCC0AI2pO4BM1S6//RtC0XPteJA6uWS1lTWQtW36J6K2VKgvyylLwk/yLrIqjR4QJ3ZWmAHjSbtc64XsiEJdE8uJai85ncqOVor3Cf05JnJWqj+Et2fUwxeS4lrBWiSoTClewLOjp21iJg5WR+zIXH5rC7d8z5OkyoelDpG00vFpcY70puReAeI4G5yzrVRqhqJP6HFp2G5UK3qxGaDwXoC9UMMr0noS5l5JE50og/ynOvMnO6DzTht+ujbVKa77LNheL+O21Y3uGtIZ6zvrtWd+MP6xLUCxH3Vhk8/iIewfjBRegVpQegz51wj6D491vdWYZ7JPb7t2Ui9Awv1iuBucs61Ra9NbSC2NOivqg1CaGX29EPOSYyTZIHR9AvOuVbTfX4cyqVTmj1zNYNaWZ1OaJ1OcDeyIYXBDZUoRiBbMvQ3nUxtSHp4b8Ais1E0od4ePGie33DOtZLumfiEHEWlYXCmyJn5lUDy2xFSeQtpTycEvg92y2pshmoXtCGfgyqnBODRZTNS44T08eUw2C5w3d5SNiRId2hUl4rQKbgpb3VQPIIrcOezCum5G9qQYOmXvDdzkpYSb1minZkxCJGNbgTuGlmR2VQ/RJrRoK0a+YKQuQ2JzGfxdId/YiXNge2zNt/dVaDn0fTyFiIdtn+KExzlk3S6Ixd/Z0i8uA35DA41elN2lzaZQj/MjJN8cqkHPAaTYr5f2fy6vcVsSIjuMrOgldranojvMj3jnl29ZdbC+hSya91j/N7U/EJ6/VOtex3Gl5E/z9y9nbo7efgr+llll15G9W6d4eff70n4aZwot34/xHSXRzpZyhoIb4UE89UgFHg3z3aLSqVwZzCM6a50tyR3Mu/F11uLA/z+Z3DMpM6pgEV123CXMRamu1qptbDRuRFf+Su4kvl2XeosTz2NKN2MpHmacY8xFqY7ai0N9mi2wB3XW3dYD3zY3WRPOHNJ2okvm/f3NLKraiY7Y3m6I70C6PDpAOL7+bwOvb3jOK53fEj8bTBPulmvML5Id3yhBGBKBqszElO2Xxc1Su4UxhfprmMEi8W0JL5L2X6zYji4M75Id80qOCHhAx/D9uk97zGhnvEN+0cl7bwnHEexmOt4Ijh3HDBfeH3hfvpuxZKa6Dt3qi/1ULBlD/r+4h8xyXQf0F17lU9IeE/N9okn86hJIwT3wN34Iv203Uj2yoaKpztKWGF7/hrOT44u+EZVkwgPkd3jpkpbOKb9rTCFcpjud7pTKpZEt546a4WQGQez54lDnfYvcI6Sb9mAb1PnFxBrD8qpaw0E6r2+vrNAZ1dZaR14kt/oH5juV7rTqq8TgS0pa+3VhEuvCplIN7IryBBCgwTBIDEjXMQ7gTKhDYm2axTdZwvXrnxAr2ym+z/0vWzDQ69V4WW9G8ewKKGWM6qTYiBGY5gXUtkObVpEEXc/VU44LXPQFGtgIPhTdDfZnZjOQ7M7VxqrcNKhgxMIWt2FpC2ReBbGO/KJs8IVQsmPeudUf+1Q71rpv4vp/o/ZmVqXMp7xNdh77zxy7XvTJClKqGcIDBPi9fHpqvxo65tjcpRw9sW8pynyxN3ZCdfwW18Beutvrq917298OB9HX8al3aM+dIq7veMDD2xPXn0fqP7kr5PgfngNA/9mxvwguH/S69edD0x3swvSbrmmcKn/1tJztZiPa8B089RnuBQ6MA+d48sEuHzS8MH3rd0AUldH+JN9uYg44A5vkOfRo686+3uJkLOZ7oTTGgWML3AJZ59CR0EgsZF2fShhz1HOLB+i+1qZ5u1BugcqoqI29+4xXD1I5bnDYublzOTpZQG0VS2nvOg6aV0p8zATj9IQ7VFC5Ap4q6sOrR54GOyDqAGYdqPi9gZzwMP9RatA9ohbpvutiCBb6jbIpKhFW1zyqK5K+CgJPA5iK2OsdBxCiAQ/+Kg+2DgEJVSoYNkeJanXivWEwYtCaRzYMN3/EaSPxqS/nb98OwBceoN2qb35y5NOyjvJfxUhcgfEYRshN9bgS9aKN4eYQ8IPmDFhS+NAIP3vH6Q7+cpxE/mjvxH0KMlFjUIklKnu1LoZ5pKSqCuMHb4T2o5icf4nF5JIdP8+4Qm1MveEcq3fq7b8BBwbOq17q7ZOYIHuKYL3DhV0fcyY8FBZANN9dEbkVwkfW1S6/4iS8Oktv2EbhMhQrmVctXTfglMGSNTHJgGFlsGls95gNcKVG/RM93dOuYQriVyQpTz7UV584gW0ELmDXLydwlqRyiSFYn6sHiFtyAD1KnBL2YHpLj7wui5/L9uV5SvQeU4P5m0cAXbeGiyo9dW5Apwkum+iHqal6uFr3XmlIHKI8hBtYiHRX6f7lyQN9ewYVeELQJ49pXTlNUp2apkkir4DgzLE14dhFwQANQOC693B2zs+TnjySUnKesidTJvr1p1jfHEfTGZX7wdaYcuiaTbk22nVKTNmur/QJ7+S7Zaw4nKROtxtQPLF4Qng8FZI4OTi27iojbm/0wlXXA5JpLtlRemv8mRGRHLmO0CfWtiXhEipkgnAURIisgkbCrdr6eSiXkHY6lSq25OdtMNiT6a74iqy7DM2zYdOwXscVelThO0qtCX5n6v2imAbcmOJz8BHKuol1kOPTHfczXt50y3O9pJ8qO49pDuEOPhYMxXv59+Djr2r9gBhLTNwbIKZG+RuVribTlyMDXn3fXaKLJbpjrho8pQuG+JT+iHJK2mgk7go1BCJkO5wkYGivt7B0T3EaJ5QvvRLr7z4e3RfNsS3Pf25HXmgk7goqBBJ082wglLU1+P2bAzdHdWLtGubme5QiC/Kfzu0K2u2fTgUh8Twpg7Akmp4BQcdlMGIqvw6yF/k/t2Ne0S6X51Jc1EDHaiKhC+taZSJA1SIBGnkKtPjFTzZ2PLBq6hzHLo7KkG1kj/j2mK6a9DdmPFlb/jc0li7X8GLqgdicayj2kkqq3pRbUHyUbtUUdsyNrLJy95yEQGN7lfGU1VN0hs/98Mz3Ljj4sfrVvvNVnZFzoYY3pzX1v7N+1jH10kC71P71rBlvzGT7rZGhfA53DmjwyAP13KgZwnpnw3uRnS/6vhae8G1TZe40YtWB2DRd64FyANm9jBRQdcUtd1a5e6M6c4VM5+g+xVRrEH5aqFlJfWxSOJ6SJu8UoM61Fg8jlRbkFDbrZXuzsgM5XrIT9H9RnnxbuvpgRz9Ys+trGrcHgxCpEzNEE6iUxF1jTIHcVxV3iWx+subnBai+4PzcQK48l0VL3zvprzmb+0ZhUjZSJF9616mg1yF6XNADXBljn2Q8z380ztYl6T7Hfn9yIHqdclsH33kCjH4oGt/A2sVog15F0LhWrpJaC8nakDzDvUUz3V0bdbw0fOBZTHdl6T7F3GYXcHhXs9ClDFWddOFikqOoMzw5tRIvtaRV7E8yn9UGuP+KlzSYQ/uMXk94d/epSqkO4PBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAzGD/4HN2QpKtltTXYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDRUMDA6Mzk6MjArMDA6MDA/tYRbAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA0VDAwOjM5OjIwKzAwOjAwTug85wAAAABJRU5ErkJggg==\"","import {useCallback, useEffect, useState} from \"react\";\n\nexport function 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 // This will recursively calculate the closest fractional value to the given target, until it recuses 25 times or\n // the value is within 0.001 of the target\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","import {useEffect, useState} from \"react\";\nimport axios from \"axios\";\n\ninterface NowPlayingData {\n introduction: string;\n lastfm: {\n artist: string;\n track: string;\n playing: boolean;\n url: string | undefined;\n };\n}\n\nexport function LastFmLi() {\n const [nowPlayingData, setNowPlayingData] = useState({\n introduction: \"\",\n lastfm: {\n artist: \"nobody\",\n playing: false,\n track: \"nothing\",\n url: undefined,\n },\n });\n\n async function updateNowPlaying() {\n try {\n const songRequestData = await axios.get(\"https://api.jakecover.me\");\n\n setNowPlayingData(songRequestData.data);\n } catch (err) {\n console.error(err);\n }\n }\n\n useEffect(() => {\n updateNowPlaying();\n\n const interval = setInterval(updateNowPlaying, 10000);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n if (nowPlayingData.lastfm.playing) {\n return (\n
  • \n \n listening to {nowPlayingData.lastfm.track} by{\" \"}\n {nowPlayingData.lastfm.artist}\n \n
  • \n );\n }\n return
  • not listening to anything right now.
  • ;\n}","import \"./AboutMe.scss\";\nimport { Tooltip } from \"antd\";\nimport { Age } from \"./Age\";\nimport { LastFmLi } from \"./LastFmLi\";\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

    Hi! I'm Jake!

    \n\n
    \n
    \n

    A bit about me:

    \n
      \n
    • \n Occupation: Student\n
    • \n
    • \n Location: Southern California\n
    • \n
    • \n Pronouns: They/Them\n
    • \n \n \n
    \n
    \n
    \n

    Find Me:

    \n
      \n
    • \n Email: \n
    • \n
    • \n Twitter:{\" \"}\n \n \n @cobular_\n \n \n
    • \n
    • \n GitHub:{\" \"}\n \n JakeCover\n \n
    • \n
    • \n Telegram:{\" \"}\n \n @cobular\n \n
    • \n
    • Elsewhere: Probably @cobular
    • \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import \"./Home.scss\";\nimport { ProjectGrid } from \"./ProjectGrid\";\nimport { AboutMe } from \"./AboutMe/AboutMe\";\n\nexport function Home() {\n return (\n
    \n \n \n
    \n );\n}\n","import { Home } from \"./Home\";\n\nexport function Main() {\n return (\n
    \n \n
    \n );\n}\n","import React from \"react\";\nimport \"./App.scss\";\nimport { Main } from \"./components/Main\";\n\nfunction App() {\n return (\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 { render } from \"react-snapshot\";\n\nimport \"./index.scss\";\nimport \"./imports.scss\";\nimport \"./vars.scss\"\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nrender(\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 diff --git a/static/js/main.a7436f4c.chunk.js b/static/js/main.a7436f4c.chunk.js new file mode 100644 index 0000000..9f19aa7 --- /dev/null +++ b/static/js/main.a7436f4c.chunk.js @@ -0,0 +1,2 @@ +(this["webpackJsonppersonal-website-static"]=this["webpackJsonppersonal-website-static"]||[]).push([[0],{117:function(e,t,i){"use strict";i.r(t);var n=i(1),r=i(0),a=i(43),s=(i(75),i(76),i(77),i(78),i(79),i(80),i(44)),o=i.n(s),l=i(45),c=i.n(l),d=i(122),h=i.p+"static/media/SanDiego.35f8cc09.svg",j=i.p+"static/media/scoresaver.3f65e348.svg",m=i.p+"static/media/HashiCorp_Logo_no_text.344aecaa.png",b=i.p+"static/media/bennu.e9020d82.gif",u=i.p+"static/media/kat-site.d60ec831.png";function g(e){var t=e.title,i=e.text,r=e.link,a=e.org;return void 0===r?Object(n.jsx)("div",{className:"OneWide GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",role:"gridcell",children:[Object(n.jsxs)("div",{className:"title",children:[Object(n.jsx)("h2",{children:t}),a&&Object(n.jsx)("h3",{children:a})]}),Object(n.jsx)("div",{className:"description",children:Object(n.jsx)("p",{children:i})})]})}):Object(n.jsx)("div",{className:"OneWide GridElement",role:"gridcell",children:Object(n.jsxs)("a",{className:"Link GridElementInternal",href:r,rel:"noreferrer",target:"_blank",tabIndex:0,children:[Object(n.jsxs)("div",{className:"title",children:[Object(n.jsx)("h2",{children:t}),a&&Object(n.jsx)("h3",{children:a}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsx)("div",{className:"description",children:Object(n.jsx)("p",{children:i})})]})})}function p(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"OneWide Pic GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("div",{className:"OneWide Pic GridElement ",children:Object(n.jsxs)("a",{className:"GridElementInternal Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function f(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"Medium GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("a",{className:"Medium GridElement Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function x(e){var t=e.image_url,i=e.image_alt,r=e.title,a=e.text,s=e.link,o=e.org;return void 0===s?Object(n.jsx)("div",{className:"FourByOne GridElement",children:Object(n.jsxs)("div",{className:"GridElementInternal",children:[Object(n.jsx)("div",{className:"image",children:Object(n.jsx)("img",{src:t,alt:i})}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})}):Object(n.jsx)("div",{className:"FourByOne GridElement",children:Object(n.jsxs)("a",{className:"GridElementInternal Link",href:s,target:"_blank",rel:"noreferrer",tabIndex:0,children:[Object(n.jsxs)("div",{className:"image",children:[Object(n.jsx)("img",{src:t,alt:i}),Object(n.jsx)(d.a,{className:"LinkIcon"})]}),Object(n.jsxs)("div",{className:"description",children:[Object(n.jsx)("h2",{children:r}),o&&Object(n.jsx)("h3",{children:o}),Object(n.jsx)("p",{children:a})]})]})})}function O(){return Object(r.useEffect)((function(){var e=document.querySelector("#project-grid");if(e){var t=new o.a(e,{itemSelector:".GridElement",gutter:0,columnWidth:".GridSizer",percentPosition:!0});c()(e).on("progress",(function(){setTimeout((function(){var e;return null===(e=t.layout)||void 0===e?void 0:e.call(t)}),200)}))}})),Object(n.jsx)("div",{id:"project-grid-background",style:{paddingBottom:20},children:Object(n.jsxs)("div",{id:"project-grid-parent","aria-label":"My Projects",children:[Object(n.jsxs)("div",{id:"project-header","aria-label":"Projects Header",children:[Object(n.jsx)("h2",{children:" My Projects"}),Object(n.jsxs)("p",{children:["A gallery of some of my most interesting projects. Look for"," ",Object(n.jsx)(d.a,{}),", click those projects for more information!"]})]}),Object(n.jsxs)("div",{id:"project-grid","aria-label":"Projects Grid",children:[Object(n.jsx)("div",{className:"GridSizer"}),Object(n.jsx)(g,{title:"ElaticMatch",org:"CodeDay",text:"A set of tools, including a custom suggestion and weighting system, as well as a custom matching\n algorithm that I wrote and used to match around 350 students to the best-fitting mentors in the CodeDay\n Labs summer internship program in 2020.",link:"https://github.com/codeday/labs-elastic-match"}),Object(n.jsx)(g,{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\n extensive featureset with a number of custom moderation and authentication tools and has been used for \n multiple CodeDay events, impacting well over 1,000 students.",link:"https://github.com/codeday/johnpeter-discord"}),Object(n.jsx)(g,{title:"Distest",org:"Random Projects",text:"Distest is a testing library I wrote for Discord bots that allows for full integration tests of bots,\n improving the discord bot development workflow significantly. As far as I know, it's the only tool\n available for this sort of testing. Unfortunately, this has been deprecated in favor of other, more full\n featured libraries.",link:"https://github.com/Cobular/distest"}),Object(n.jsx)(p,{image_url:h,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\n the San Diego event where I grew to love hackathons and leaned a lot about leadership and event logistics\n in the process!",link:"https://event.codeday.org/sandiego"}),Object(n.jsx)(x,{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\n Unity that took data from their launch monitor technology and translated it into a seamless experience."}),Object(n.jsx)(p,{image_url:j,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\n mapper names on BeatSaver, just download the newest ranked songs directly!",link:"https://github.com/Cobular/ScoreSaverExtention"}),Object(n.jsx)(g,{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\n functionality to Discord years before they finally implemented it first-party, have been obsoleted\n nowadays, others like DiscordChannelMirror just do simple things for my own use, and many more have been\n lost to time and past me's lack of understanding of the importance of backup. I digress, however I really\n do love writing these sorts of applications!"}),Object(n.jsx)(f,{image_url:m,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,\n where it runs almost every service we have, as well as at home, where I use it to run over 25 services on\n a cluster of old machines. I strongly recommend it as it's a very easy way utilize old hardware, even when\n each machine may not be that powerful powerful and not all that complex to get started with at any scale,\n from one personal server to large corporate backends."}),Object(n.jsx)(g,{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,\n but I didn't know React before starting on this so I'm pretty proud of it.",link:"https://github.com/Cobular/PersonalWebsite_Static"}),Object(n.jsx)(g,{title:"Nomad Job Templates Tool",link:"https://github.com/Cobular/NomadJobTemplatesTool",org:"Random Projects",text:"A little custom tool to allow you to use jinga-esque text substitutions in Nomad jobfiles to help\n centralize the definition of service traefik tags. This mainly makes it easier to update and change\n networking configuration across many jobs easily."}),Object(n.jsx)(p,{image_url:u,image_alt:"Kat's Logo",title:"Shushicate",org:"Random Projects",text:"An art gallery website for my friend, made in svelte. The images are optimized and compressed at \n compiletime, creating a few versions and allowing the browser to choose which to display using imageset.\n The full resolution image is only sent when selecting an image, keeping the site performant.",link:"https://www.shushicate.com/"}),Object(n.jsx)(g,{title:"OVRTools",org:"Random Projects",link:"https://github.com/OVRTools",text:"This one's a bit more work in progress than some of the others here. It is a set of tools to help people\n develop OpenVR plugins more easily and independently from Unity. It will eventually grow to include\n multiple additional input methods and other tools to allow users to interact with other OVR plugins more\n easily."}),Object(n.jsx)(f,{image_url:b,image_alt:"A B logo",title:"Bennu",org:"Work Experience",text:"Bennu made various engineering management and performance analysis tools for other software companies. \n Here, I mainly implemented the crawler for Jira Server, adding a whole new application we could offer to\n customers. I also worked on internal tooling and optimized our test runtime by 50% before the startup \n closed from beneath me in the middle of the summer of 2021.",link:"https://www.bennu.io/"}),Object(n.jsx)(g,{title:"CopyMoji",org:"BetterDiscord",text:"An extension for the alternate discord client BetterDiscord that changes the functionality of copying\n emoji to copy the actual emoji characters rather than their names from the discord client.",link:"https://github.com/Cobular/BetterDiscordExtensions/tree/main/plugins/CopyMoji"}),Object(n.jsx)(g,{title:"What's That Number",org:"Random Projects",text:"A service that allows for the reversing of arbitrary decimals back to fractions of irrational numbers.\n Basically, it's able to reverse 3.1415 to \u03c0, but more interestingly reverse 0.385694 to \u221a2 * 3 / 11!\n It can't solve all problems and it isn't mathematically provable or anything, but it's optimized to\n give you the right answer for most things you'll actually run into and tell you when you've gotten \n nothing.",link:"https://Cobular.github.io/WhatsThatNumberExtension/"})]})]})})}i(85);var v=i(121),A=i(22);function w(){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,n,r,a){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=i+r,l=n+a;return++s>25?[o,l]:Math.abs(e-o/l)>.001?e>o/l?t(e,o,l,r,a,s):t(e,i,n,o,l,s):[o,l]}var i=e(),a=(new Date).getTime(),s=Object(r.useCallback)((function(){var i=(new Date).getTime()-0xedb89b32e0,n=e(),r=Math.floor(i/n),a=t(Math.floor(i%n/1e3)/(n/1e3),0,1,1,1),s=Object(A.a)(a,2),o=s[0],l=s[1];return"".concat(r," and ").concat(o,"/").concat(l)}),[i,a]),o=Object(r.useState)(s()),l=Object(A.a)(o,2),c=l[0],d=l[1];var h=Object(r.useCallback)((function(){d(s())}),[s]);return Object(r.useEffect)((function(){h();var e=setInterval(h,5e3);return function(){clearInterval(e)}}),[h]),Object(n.jsxs)("li",{children:[c," years old"]})}var y=i(31),k=i.n(y),I=i(51),N=i(52),D=i.n(N);function M(){var e=Object(r.useState)({introduction:"",lastfm:{artist:"nobody",playing:!1,track:"nothing",url:void 0}}),t=Object(A.a)(e,2),i=t[0],a=t[1];function s(){return o.apply(this,arguments)}function o(){return(o=Object(I.a)(k.a.mark((function e(){var t;return k.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,D.a.get("https://api.jakecover.me");case 3:t=e.sent,a(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(r.useEffect)((function(){s();var e=setInterval(s,1e4);return function(){clearInterval(e)}}),[]),i.lastfm.playing?Object(n.jsx)("li",{children:Object(n.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(n.jsx)("li",{children:"not listening to anything right now."})}function T(){return Object(n.jsx)("div",{id:"about-me-parent",children:Object(n.jsxs)("div",{id:"about-me",className:"about-me-card",children:[Object(n.jsx)("h1",{"aria-label":"Title",children:"Hi! I'm Julie!"}),Object(n.jsxs)("div",{id:"info-parent","aria-label":"About Me",children:[Object(n.jsxs)("div",{id:"specific-info","aria-label":"Facts",children:[Object(n.jsx)("h2",{children:" A bit about me:"}),Object(n.jsxs)("ul",{children:[Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Occupation:"})," Student"]}),Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Location:"})," Southern California"]}),Object(n.jsxs)("li",{children:[Object(n.jsx)("b",{children:"Pronouns"}),": She/Her"]}),Object(n.jsx)(w,{}),Object(n.jsx)(M,{})]})]}),Object(n.jsxs)("div",{id:"fun-info","aria-label":"Contacts",children:[Object(n.jsx)("h2",{children:"Find Me:"}),Object(n.jsxs)("ul",{children:[Object(n.jsxs)("li",{children:["Email: ",Object(n.jsx)("button",{onClick:function(){window.prompt("Thanks for being a human! Here's my email:",atob("Y29udGFjdEBjb2J1bGFyLmNvbQ=="))},children:"Click This"})]}),Object(n.jsxs)("li",{children:["Twitter:"," ",Object(n.jsx)(v.a,{title:":(",children:Object(n.jsx)("a",{href:"https://twitter.com/cobular_",target:"_blank",rel:"noreferrer",tabIndex:0,children:"@cobular_"})})]}),Object(n.jsxs)("li",{children:["GitHub:"," ",Object(n.jsx)("a",{href:"https://github.com/Cobular",target:"_blank",rel:"noreferrer",tabIndex:0,children:"JakeCover"})]}),Object(n.jsxs)("li",{children:["Telegram:"," ",Object(n.jsx)("a",{href:"https://t.me/codular",target:"_blank",rel:"noreferrer",tabIndex:0,children:"@cobular"})]}),Object(n.jsx)("li",{children:"Elsewhere: Probably @cobular"})]})]})]})]})})}function S(){return Object(n.jsxs)("div",{id:"home",children:[Object(n.jsx)(T,{}),Object(n.jsx)(O,{})]})}function G(){return Object(n.jsx)("main",{children:Object(n.jsx)(S,{})})}var B=function(){return Object(n.jsx)("div",{className:"App",children:Object(n.jsx)(G,{})})},E=function(e){e&&e instanceof Function&&i.e(3).then(i.bind(null,123)).then((function(t){var i=t.getCLS,n=t.getFID,r=t.getFCP,a=t.getLCP,s=t.getTTFB;i(e),n(e),r(e),a(e),s(e)}))};Object(a.render)(Object(n.jsx)(B,{}),document.getElementById("root")),E()},75:function(e,t,i){},76:function(e,t,i){},77:function(e,t,i){},78:function(e,t,i){},79:function(e,t,i){},80:function(e,t,i){},85:function(e,t,i){}},[[117,1,2]]]); +//# sourceMappingURL=main.a7436f4c.chunk.js.map \ No newline at end of file diff --git a/static/js/main.a7436f4c.chunk.js.map b/static/js/main.a7436f4c.chunk.js.map new file mode 100644 index 0000000..14e9124 --- /dev/null +++ b/static/js/main.a7436f4c.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["images/SanDiego.svg","images/scoresaver.svg","images/HashiCorp_Logo_no_text.png","images/bennu.gif","images/kat-site.png","components/ProjectGrid.tsx","images/foresightsports.png","components/AboutMe/Age.tsx","components/AboutMe/LastFmLi.tsx","components/AboutMe/AboutMe.tsx","components/Home.tsx","components/Main.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["SmallElement","title","text","link","org","undefined","className","role","href","rel","target","tabIndex","LinkOutlined","SmallElementPic","image_url","image_alt","src","alt","MediumElement","LargeElementPic","ProjectGrid","useEffect","elem","document","querySelector","msnry","Masonry","itemSelector","gutter","columnWidth","percentPosition","ImagesLoaded","on","setTimeout","layout","id","style","paddingBottom","aria-label","CodeDaySD","Scoresaver","Hashicorp","KatSite","Bennu","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","useState","age","setAge","memoizedCallbackUpdateAge","interval","setInterval","clearInterval","LastFmLi","introduction","lastfm","artist","playing","track","url","nowPlayingData","setNowPlayingData","updateNowPlaying","a","axios","get","songRequestData","data","console","error","color","textDecoration","AboutMe","onClick","window","prompt","atob","Home","Main","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","render","getElementById"],"mappings":"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","file":"static/js/main.a7436f4c.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/SanDiego.35f8cc09.svg\";","export default __webpack_public_path__ + \"static/media/scoresaver.3f65e348.svg\";","export default __webpack_public_path__ + \"static/media/HashiCorp_Logo_no_text.344aecaa.png\";","export default __webpack_public_path__ + \"static/media/bennu.e9020d82.gif\";","export default __webpack_public_path__ + \"static/media/kat-site.d60ec831.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 Scoresaver from \"../images/scoresaver.svg\";\nimport Hashicorp from \"../images/HashiCorp_Logo_no_text.png\";\nimport Bennu from \"../images/bennu.gif\";\nimport KatSite from \"../images/kat-site.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
    \n

    {title}

    \n {org &&

    {org}

    }\n
    \n
    \n

    {text}

    \n
    \n
    \n
    \n );\n }\n return (\n
    \n \n
    \n

    {title}

    \n {org &&

    {org}

    }\n \n
    \n
    \n

    {text}

    \n
    \n \n
    \n );\n}\n\nfunction SmallElementPic({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
    \n
    \n
    \n {image_alt}\n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n\n

    {text}

    \n
    \n
    \n
    \n );\n }\n return (\n
    \n \n
    \n {image_alt}\n \n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n

    {text}

    \n
    \n \n
    \n );\n}\n\nfunction MediumElement({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
    \n
    \n
    \n {image_alt}\n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n

    {text}

    \n
    \n
    \n
    \n );\n }\n return (\n \n
    \n
    \n {image_alt}\n \n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n

    {text}

    \n
    \n
    \n \n );\n}\n\nfunction LargeElementPic({\n image_url,\n image_alt,\n title,\n text,\n link,\n org,\n}: GridElementImageProps) {\n if (link === undefined) {\n return (\n
    \n
    \n
    \n {image_alt}\n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n

    {text}

    \n
    \n
    \n
    \n );\n }\n return (\n
    \n \n
    \n {image_alt}\n \n
    \n
    \n

    {title}

    \n {org &&

    {org}

    }\n

    {text}

    \n
    \n \n
    \n );\n}\n\nexport function ProjectGrid() {\n useEffect(() => {\n var elem = document.querySelector(\"#project-grid\");\n\n if (elem) {\n const msnry = new Masonry(elem, {\n itemSelector: \".GridElement\",\n gutter: 0,\n columnWidth: \".GridSizer\",\n percentPosition: true,\n });\n\n ImagesLoaded(elem).on(\"progress\", () => {\n setTimeout(() => msnry.layout?.(), 200);\n });\n }\n });\n\n return (\n
    \n
    \n
    \n

    </> My Projects

    \n

    \n A gallery of some of my most interesting projects. Look for{\" \"}\n , click those projects for more information!\n

    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n );\n}\n","export default \"data:image/png;base64,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\"","import {useCallback, useEffect, useState} from \"react\";\n\nexport function 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 // This will recursively calculate the closest fractional value to the given target, until it recuses 25 times or\n // the value is within 0.001 of the target\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","import {useEffect, useState} from \"react\";\nimport axios from \"axios\";\n\ninterface NowPlayingData {\n introduction: string;\n lastfm: {\n artist: string;\n track: string;\n playing: boolean;\n url: string | undefined;\n };\n}\n\nexport function LastFmLi() {\n const [nowPlayingData, setNowPlayingData] = useState({\n introduction: \"\",\n lastfm: {\n artist: \"nobody\",\n playing: false,\n track: \"nothing\",\n url: undefined,\n },\n });\n\n async function updateNowPlaying() {\n try {\n const songRequestData = await axios.get(\"https://api.jakecover.me\");\n\n setNowPlayingData(songRequestData.data);\n } catch (err) {\n console.error(err);\n }\n }\n\n useEffect(() => {\n updateNowPlaying();\n\n const interval = setInterval(updateNowPlaying, 10000);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n if (nowPlayingData.lastfm.playing) {\n return (\n
  • \n \n listening to {nowPlayingData.lastfm.track} by{\" \"}\n {nowPlayingData.lastfm.artist}\n \n
  • \n );\n }\n return
  • not listening to anything right now.
  • ;\n}","import \"./AboutMe.scss\";\nimport { Tooltip } from \"antd\";\nimport { Age } from \"./Age\";\nimport { LastFmLi } from \"./LastFmLi\";\n\nexport function AboutMe() {\n function EmailHandler() {\n const email = \"Y29udGFjdEBjb2J1bGFyLmNvbQ==\";\n window.prompt(\"Thanks for being a human! Here's my email:\", atob(email));\n }\n\n return (\n
    \n
    \n

    Hi! I'm Julie!

    \n\n
    \n
    \n

    A bit about me:

    \n
      \n
    • \n Occupation: Student\n
    • \n
    • \n Location: Southern California\n
    • \n
    • \n Pronouns: She/Her\n
    • \n \n \n
    \n
    \n
    \n

    Find Me:

    \n
      \n
    • \n Email: \n
    • \n
    • \n Twitter:{\" \"}\n \n \n @cobular_\n \n \n
    • \n
    • \n GitHub:{\" \"}\n \n JakeCover\n \n
    • \n
    • \n Telegram:{\" \"}\n \n @cobular\n \n
    • \n
    • Elsewhere: Probably @cobular
    • \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import \"./Home.scss\";\nimport { ProjectGrid } from \"./ProjectGrid\";\nimport { AboutMe } from \"./AboutMe/AboutMe\";\n\nexport function Home() {\n return (\n
    \n \n \n
    \n );\n}\n","import { Home } from \"./Home\";\n\nexport function Main() {\n return (\n
    \n \n
    \n );\n}\n","import React from \"react\";\nimport \"./App.scss\";\nimport { Main } from \"./components/Main\";\n\nfunction App() {\n return (\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 { render } from \"react-snapshot\";\n\nimport \"./index.scss\";\nimport \"./imports.scss\";\nimport \"./vars.scss\"\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nrender(\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