changeset 80:d55157451947

[MrJuneJune] Updating my homepage.
author June Park <parkjune1995@gmail.com>
date Thu, 01 Jan 2026 08:23:46 -0800
parents 5710108c949e
children 37fc1ec888b6
files mrjunejune/main.c mrjunejune/pages/base.css mrjunejune/pages/index.html mrjunejune/pages/index.js mrjunejune/pages/parts/header.html mrjunejune/pages/resume/index.html mrjunejune/pages/tools/index.css mrjunejune/pages/tools/index.html mrjunejune/pages/tools/markdown_to_html/index.html
diffstat 9 files changed, 130 insertions(+), 126 deletions(-) [+]
line wrap: on
line diff
--- a/mrjunejune/main.c	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/main.c	Thu Jan 01 08:23:46 2026 -0800
@@ -41,6 +41,7 @@
 
     size_t sub_file_size = 0;
     char *sub_content = Seobeo_Web_LoadFile(include_name, &sub_file_size);
+    printf("sub_content %s", sub_content);
     if (sub_content)
     {
       memcpy(final_body + current_offset, sub_content, sub_file_size);
@@ -57,7 +58,7 @@
 Seobeo_Request_Entry* GetHomePage(Seobeo_Request_Entry *req, Dowa_Arena *arena)
 {
   Seobeo_Request_Entry *resp = NULL; 
-  char *final_body = Dowa_Arena_Allocate(arena, 50 * 1024); // 50KB buffer
+  char *final_body = Dowa_Arena_Allocate(arena, 50 * 1024);
   Seobeo_ServerSideRender(final_body, "/index.html", arena);
   Dowa_HashMap_Push_Arena(resp, "body", final_body, arena);
   return resp;
--- a/mrjunejune/pages/base.css	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/base.css	Thu Jan 01 08:23:46 2026 -0800
@@ -60,14 +60,12 @@
   src: url("/fonts/atkinson-regular.woff") format("woff");
   font-weight: 400;
   font-style: normal;
-  font-display: swap;
 }
 @font-face {
   font-family: "Atkinson";
   src: url("/fonts/atkinson-bold.woff") format("woff");
   font-weight: 700;
   font-style: normal;
-  font-display: swap;
 }
 /* Fonts */
 @font-face {
@@ -98,6 +96,7 @@
   font-size: 20px;
   line-height: 1.7;
 }
+
 main {
   background: var(--white);
   width: var(--main-width);
@@ -105,6 +104,7 @@
   margin: auto;
   padding: 1em 1em;
 }
+
 h1,
 h2,
 h3,
@@ -257,3 +257,38 @@
   transform: scale(1.1);
   box-shadow: 0 4px 12px rgba(0,0,0,0.3);
 }
+
+a {
+  text-decoration: underline;
+}
+
+a::before {
+  content: "";
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  margin-right: 8px;
+  vertical-align: middle;
+
+  /* This treats the paw like a stencil */
+  background-color: #FF69B4; /* Change your color here! (e.g., Hot Pink) */
+  -webkit-mask: url('/public/paw.svg') no-repeat center;
+  mask: url('/public/paw.svg') no-repeat center;
+  
+  /* Your 2D Animation */
+  animation: pawStep 0.6s ease-out forwards;
+}
+
+@keyframes pawStep {
+  0% { transform: scale(0); opacity: 0; }
+  100% { transform: scale(1); opacity: 1; }
+}
+
+a:hover::before {
+  animation: wiggle 0.4s ease-in-out infinite;
+}
+
+@keyframes wiggle {
+  0%, 100% { transform: rotate(-15deg); }
+  50% { transform: rotate(15deg); }
+}
--- a/mrjunejune/pages/index.html	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/index.html	Thu Jan 01 08:23:46 2026 -0800
@@ -1,17 +1,28 @@
 <!doctype html>
 <html lang="en">
   <head>
+    <link rel="preload" href="/fonts/Roboto-Regular.ttf" as="font" type="font/tff" crossorigin>
+    <link rel="preload" href="/fonts/Roboto-Thin.ttf"as="font" type="font/tff" crossorigin>
+    <link rel="preload" href="/fonts/atkinson-regular.woff" as="font" type="font/woff" crossorigin>
+    <link rel="preload" href="/fonts/atkinson-bold.woff" as="font" type="font/woff" crossorigin>
+
+    <link rel="preload" href="base.css" as="style" />
     <link rel="stylesheet" href="base.css" />
-    <link rel="stylesheet" href="resume.css" />
   </head>
   <body>
+     {{/parts/header.html}}
      <main>
-       {{/parts/header.html}}
-       <h1> Useful scripts </h1>
+
+       <p> Hi, my name is Juntae Park. Most people call me June irl or MrJuneJune online. I am a software engineer who codes for fun on my off time. </p>
+       <p> If you want to check out what I have done professionally, you can read my <a href="/resume">resume</a></p>
+       <p> If you want to check out what I code on my off time, you can check out my mercurial repo. All my codes are MIT License and free to share / use.</p>
+       <p> If you care about my thoughts on programming, you can read my blogs. </p>
+
+       <p> Below are links I used for my own productivity reasons.</p>
        <ul>
-         <li> <a href="/resume"> Resume </a> </li>
-         <li> <a href="/tools"> Tools </a> </li>
+         <li> <a href="/tools">Tools</a> </li>
        </ul>
      </main>
   </body>
+  <script src="index.js"></script>
 </html>
--- a/mrjunejune/pages/index.js	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/index.js	Thu Jan 01 08:23:46 2026 -0800
@@ -14,49 +14,37 @@
   const root = document.documentElement;
 
   if (preference === 'light') {
+    root.classList.remove('dark', 'auto');
     root.classList.add('light-mode');
-    root.classList.remove('dark');
   } else if (preference === 'dark') {
-    root.classList.remove('light-mode');
+    root.classList.remove('light-mode', 'auto');
     root.classList.add('dark');
   } else {
     // Auto - remove manual overrides and let CSS media query handle it
     root.classList.remove('light-mode', 'dark');
+    root.classList.add('auto');
   }
 }
 
-function populateHeader()
-{
-  fetch("/parts/headers.html")
-    .then(res => res.text())
-    .then(headerHTML => {
-      const range = document.createRange();
-      const fragment = range.createContextualFragment(headerHTML);
-      header.appendChild(fragment);
-      
-      const toggle = document.querySelector('#themeToggle');
-      if (!toggle) return;
-
-      toggle.addEventListener('click', function() {
-        let preference = getThemePreference();
-
-        // Cycle through: auto -> light -> dark -> auto
-        if (preference === 'auto') {
-          preference = 'light';
-        } else if (preference === 'light') {
-          preference = 'dark';
-        } else {
-          preference = 'auto';
-        }
-
-        localStorage.setItem(STORAGE_KEY, preference);
-        applyTheme(preference);
-      });
-    });
-}
-populateHeader();
-
 (function() {
   const currentPreference = getThemePreference();
   applyTheme(currentPreference);
 })();
+
+/* Toggle lights auto and dark */
+const toggle = document.querySelector('#themeToggle');
+toggle.addEventListener('click', function() {
+  let preference = getThemePreference();
+
+  // Cycle through: auto -> light -> dark -> auto
+  if (preference === 'auto') {
+    preference = 'light';
+  } else if (preference === 'light') {
+    preference = 'dark';
+  } else {
+    preference = 'auto';
+  }
+
+  localStorage.setItem(STORAGE_KEY, preference);
+  applyTheme(preference);
+});
--- a/mrjunejune/pages/parts/header.html	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/parts/header.html	Thu Jan 01 08:23:46 2026 -0800
@@ -1,26 +1,3 @@
-<header>
-	<nav>
-      <h2 class="header-logo">
-        <div id="themeToggle">
-          <img id="epiChan" class="epi-logo" aria-label="Toggle dark mode" src="/public/epi_favicon.svg" height="50" width="50">
-        </div>
-        <a href="/">MrJuneJune</a>
-      </h2>
-		<div class="internal-links">
-			<a href="/resume">Resume</a>
-			<a href="/tools">Tools</a>
-    </div>
-    <div class="social-links">
-			<a href="https://github.com/mrjunejune" target="_blank">
-				<svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32"
-					><path
-						fill="currentColor"
-						d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"
-					></path></svg>
-			</a>
-		</div>
-	</nav>
-</header>
 <style>
   :root {
     --header-background: var(--white);
@@ -32,19 +9,19 @@
     width: 33%;
   }
   .header-logo {
-    display: flex;
+    display: grid;
+    grid-template-columns: 1fr 1fr ;
     align-items: center;
   }
   header {
   	margin: auto;
-  	padding: 0 1em;
-      background: var(--header-background);
-      color: rgb(var(--header-color));
-      font-family: "Atkinson", sans-serif;
-      box-shadow: 0 2px 8px rgba(var(--black), 5%);
-      width: 720px;
-      max-width: calc(100% - 2em);
-
+  	padding: 1em 1em;
+    background: var(--header-background);
+    color: rgb(var(--header-color));
+    font-family: "Atkinson", sans-serif;
+    box-shadow: 0 2px 8px rgba(var(--black), 5%);
+    width: 720px;
+    max-width: calc(100% - 2em);
   }
   h2 {
   	margin: 0;
@@ -54,21 +31,6 @@
   h2 a.active {
   	text-decoration: none;
   }
-  nav {
-  	display: flex;
-  	align-items: center;
-  	justify-content: space-between;
-  }
-  nav a {
-  	padding: 1em 0.5em;
-  	color: rgb(var(--header-color));
-  	border-bottom: 4px solid transparent;
-  	text-decoration: none;
-  }
-  nav a.active {
-  	text-decoration: none;
-  	border-bottom-color: var(--link-hover-accent);
-  }
   .social-links,
   .social-links a {
     display: flex;
@@ -83,20 +45,35 @@
   	.social-links {
   		display: none;
   	}
-  .internal-links {
-    width: 45%;
-  }
-  }
-  :global(.dark) img {
-    -webkit-filter: invert(1); /* safari 6.0 - 9.0 */
-            filter: invert(1);
+    .internal-links {
+      width: 45%;
+    }
   }
   #themeToggle {
     background: var(--header-background);
     display: flex;
     align-items: center;
     border-radius: 25px;
-    filter: invert(1);
     cursor: pointer;
   }
+
+  /* Dark Mode toggles */
+  :is(html.dark, @media (prefers-color-scheme: dark) { html }) img {
+    -webkit-filter:  grayscale(1);
+    filter:  grayscale(1);
+  }
+  :is(html.light-mode, @media (prefers-color-scheme: dark) { html }) img {
+    -webkit-filter: brightness(2.9) grayscale(1);
+    filter:  brightness(2.9) grayscale(1);
+  }
 </style>
+<header>
+  <h2 class="header-logo">
+    <div id="themeToggle">
+      <img id="epiChan" class="epi-logo" aria-label="Toggle dark mode" src="/public/epi_all_colors.svg" height="50" width="50">
+    </div>
+    <a href="/">MrJuneJune</a>
+  </h2>
+</header>
+<script src="index.js"></script>
+
--- a/mrjunejune/pages/resume/index.html	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/resume/index.html	Thu Jan 01 08:23:46 2026 -0800
@@ -1,7 +1,8 @@
 <!doctype html>
 <html lang="en">
   <head>
-    <link rel="stylesheet" href="base.css" />
+    {{/parts/base_head.html}}
+    <link rel="preload" href="resume.css" as="style" />
     <link rel="stylesheet" href="resume.css" />
   </head>
   <body>
@@ -9,12 +10,12 @@
     <main>
       <div class="info">
         <p><span class="header-firstname-style"> JUNTAE </span><span class="header-lastname-style">PARK</span><p>
-        <p class="header-position-style"> FULL STACK DEVELOPER · SOFTWARE ENGINEER </p>
+        <p class="header-position-style"> SOFTWARE ENGINEER </p>
         <div class="header-address-style"> 
           Bay Area, CA, USA
         </div>
         <div class="header-social-style">
-          <p>📱(US) 650-531-1728 |📱(CA) 437-580-8026 | <a href="mailto:[email protected]"> ✉️  [email protected] </a>| <a href="https://github.com/mrjunejune"> 
+          <p> <a href="tel:+016505311728">(US) 650-531-1728</a> | <a href="tel:+014375808026">(CA) 437-580-8026</a> | <a href="mailto:[email protected]"> [email protected] </a>| <a href="https://github.com/mrjunejune"> 
                <svg viewBox="0 0 16 16" aria-hidden="true" width="12" height="12">
                  <path
 		 			fill="currentColor"
@@ -35,7 +36,7 @@
         <h2 class="section-style"> Summary </h2>
         <div class="line"></div>
       </div>
-      <p class="paragraph-style">Software Engineer with 8 years of hands-on experience across diverse tech stacks, from early-stage startups to FANG-scale systems. Adept in designing and delivering robust software solutions using modern languages, frameworks, and cloud platforms.  Open to impactful work.</p>
+      <p class="paragraph-style">Software Engineer with 9 years of hands-on experience across diverse tech stacks, from early-stage startups to FANG-scale systems. Adept in designing and delivering robust software solutions using modern languages, frameworks, and cloud platforms. <br><br> Open to impactful work.</p>
       <div class="sub-header">
 
         <h2 class="section-style"> Skills </h2>
@@ -44,7 +45,7 @@
       <div class="paragraph-style">
         <p>
           <span class="entry-title-style"> Programming Languages:</span>
-          <span class="skill-type-style"> TypeScript, Python, C++/C, Ruby, Java, MATLAB </span>
+          <span class="skill-type-style"> TypeScript, Python, C/C++, Ruby, Java, MATLAB </span>
         </p>
         <p> 
           <span class="entry-title-style">Tools & Platforms:</span>
@@ -79,20 +80,20 @@
         <p class="entry-position-style">SOFTWARE ENGINEER</p>
         <p class="entry-date-style">Oct, 2024 - Present</p>
       </div>
-        <ul class="description-style">
-          <li>
-            Took initiative on Channel Value Rule, targeting the 16% of ad traffic with both app and web destinations to improve value attribution and ROI.
-          </li>
-          <li>
-            Built full-stack features using React and Hack/GraphQL, contributing to scalable, production-ready systems.
-          </li>
-          <li>
-            Partnered with data science to design A/B tests and analyze revenue impact of ads destination.
-          </li>
-          <li>
-            Proposed and implemented alpha improvements to internal testing infrastructure, reducing test time by 50% and enhancing developer velocity.
-          </li>
-        </ul>
+      <ul class="description-style">
+        <li>
+          Took initiative on Channel Value Rule, targeting the 16% of ad traffic with both app and web destinations to improve value attribution and ROI.
+        </li>
+        <li>
+          Built full-stack features using React and Hack/GraphQL, contributing to scalable, production-ready systems.
+        </li>
+        <li>
+          Partnered with data science to design A/B tests and analyze revenue impact of ads destination.
+        </li>
+        <li>
+          Proposed and implemented alpha improvements to internal testing infrastructure, reducing test time by 50% and enhancing developer velocity.
+        </li>
+      </ul>
       <div class="flex-box">
         <p class="entry-title-style">
           <a href="https://www.wmg.com/">Warner Music Group</a>
--- a/mrjunejune/pages/tools/index.css	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/tools/index.css	Thu Jan 01 08:23:46 2026 -0800
@@ -1,11 +1,3 @@
-body {
-  line-height: 1.6;
-  padding: 20px;
-  max-width: 1200px;
-  margin: 0 auto;
-  background: rgb(var(--gray-light));
-}
-
 .title {
   color: var(--darkgray);
 }
--- a/mrjunejune/pages/tools/index.html	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/tools/index.html	Thu Jan 01 08:23:46 2026 -0800
@@ -1,8 +1,7 @@
 <!doctype html>
 <html lang="en">
   <head>
-    <link rel="stylesheet" href="/base.css" />
-    <link rel="stylesheet" href="/resume.css" />
+    {{/parts/base_head.html}}
     <link rel="stylesheet" href="/tools/index.css" />
   </head>
   <body>
--- a/mrjunejune/pages/tools/markdown_to_html/index.html	Thu Jan 01 05:57:03 2026 -0800
+++ b/mrjunejune/pages/tools/markdown_to_html/index.html	Thu Jan 01 08:23:46 2026 -0800
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Markdown to HTML Converter</title>
-    <link rel="stylesheet" href="/base.css" />
+    {{/parts/base_head.html}}
     <link rel="stylesheet" href="markdown_to_html/index.css" />
 </head>
 <body>