Mercurial
comparison mrjunejune/test/snapshots/tools_markdown_to_html_index.html.snapshot @ 109:1c446ab6f945
[MrJuneJune] New Blog about writing Seobeo library.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Sat, 03 Jan 2026 19:37:51 -0800 |
| parents | 092afa595764 |
| children | d6d578b49a19 |
comparison
equal
deleted
inserted
replaced
| 108:f07abbcd2ec5 | 109:1c446ab6f945 |
|---|---|
| 2 Content-Type: text/plain | 2 Content-Type: text/plain |
| 3 Content-Length: 0 | 3 Content-Length: 0 |
| 4 Connection: close | 4 Connection: close |
| 5 Body: | 5 Body: |
| 6 | 6 |
| 7 t/otf" crossorigin> | 7 /woff" crossorigin> |
| 8 <link rel="preload" href="/public/fonts/atkinson-bold.woff" as="font" type="font/woff" crossorigin> | |
| 9 | |
| 10 <link rel="preload" href="/public/fonts/more-sugar.extras.otf" as="font" type="font/otf" crossorigin> | |
| 8 <link rel="preload" href="/public/fonts/more-sugar.regular.otf" as="font" type="font/otf" crossorigin> | 11 <link rel="preload" href="/public/fonts/more-sugar.regular.otf" as="font" type="font/otf" crossorigin> |
| 9 <link rel="preload" href="/public/fonts/more-sugar.thin.otf" as="font" type="font/otf" crossorigin> | 12 <link rel="preload" href="/public/fonts/more-sugar.thin.otf" as="font" type="font/otf" crossorigin> |
| 10 | 13 |
| 11 <link rel="preload" href="/base.css" as="style" /> | 14 <link rel="preload" href="/base.css" as="style" /> |
| 12 <link rel="stylesheet" href="/base.css" /> | 15 <link rel="stylesheet" href="/base.css" /> |
| 13 | 16 |
| 14 | 17 |
| 15 <style> | 18 <style> |
| 16 .epi-photo { | 19 .container { |
| 17 display: flex; | 20 max-width: 800px; |
| 18 justify-content: center; | 21 margin: 2rem auto; |
| 19 margin-bottom: 10px; | 22 padding: 2rem; |
| 20 } | 23 } |
| 24 | |
| 25 .converter-section { | |
| 26 border-radius: 8px; | |
| 27 border: 2px solid var(--lightgray); | |
| 28 padding: 2rem; | |
| 29 margin-bottom: 2rem; | |
| 30 } | |
| 31 | |
| 32 .converter-section h2 { | |
| 33 margin-top: 0; | |
| 34 color: var(--black); | |
| 35 } | |
| 36 | |
| 37 .file-input-wrapper { | |
| 38 margin: 1rem 0; | |
| 39 } | |
| 40 | |
| 41 .file-input-wrapper label { | |
| 42 display: block; | |
| 43 margin-bottom: 0.5rem; | |
| 44 font-weight: 600; | |
| 45 } | |
| 46 | |
| 47 input[type="file"] { | |
| 48 padding: 0.75rem; | |
| 49 border: 2px dashed #ccc; | |
| 50 border-radius: 4px; | |
| 51 background: white; | |
| 52 font-size: 16px; | |
| 53 } | |
| 54 | |
| 55 button { | |
| 56 background: var(--purple); | |
| 57 font-family: "More Thin", sans-serif; | |
| 58 color: var(--gray-gradient); | |
| 59 border: none; | |
| 60 padding: 0.75rem 1.5rem; | |
| 61 border-radius: 4px; | |
| 62 cursor: pointer; | |
| 63 font-size: 1rem; | |
| 64 margin-top: 1rem; | |
| 65 min-height: 44px; | |
| 66 } | |
| 67 | |
| 68 button:hover { | |
| 69 background: var(--orange); | |
| 70 } | |
| 71 | |
| 72 button:disabled { | |
| 73 background: var(--gray); | |
| 74 cursor: not-allowed; | |
| 75 } | |
| 76 | |
| 77 .result { | |
| 78 margin-top: 1rem; | |
| 79 padding: 1rem; | |
| 80 background: white; | |
| 81 border-radius: 4px; | |
| 82 display: none; | |
| 83 } | |
| 84 | |
| 85 .result.show { | |
| 86 display: block; | |
| 87 } | |
| 88 | |
| 89 .result.success { | |
| 90 border-left: 4px solid var(--blue); | |
| 91 } | |
| 92 | |
| 93 .result.error { | |
| 94 border-left: 4px solid var(--red); | |
| 95 } | |
| 96 | |
| 97 .download-link { | |
| 98 display: inline-block; | |
| 99 margin-top: 0.5rem; | |
| 100 color: var(--awesome); | |
| 101 text-decoration: none; | |
| 102 } | |
| 103 | |
| 104 .download-link:hover { | |
| 105 text-decoration: underline; | |
| 106 } | |
| 107 | |
| 108 .loading { | |
| 109 display: none; | |
| 110 margin-top: 1rem; | |
| 111 } | |
| 112 | |
| 113 .loading.show { | |
| 114 display: block; | |
| 115 } | |
| 116 | |
| 117 /* Mobile responsive */ | |
| 118 @media (max-width: 720px) { | |
| 119 .container { | |
| 120 padding: 1rem; | |
| 121 margin: 1rem auto; | |
| 122 } | |
| 123 | |
| 124 .converter-section { | |
| 125 padding: 1.5rem 1rem; | |
| 126 } | |
| 127 | |
| 128 .converter-section h2 { | |
| 129 font-size: 1.5rem; | |
| 130 } | |
| 131 | |
| 132 .file-input-wrapper label { | |
| 133 font-size: 1rem; | |
| 134 } | |
| 135 | |
| 136 button { | |
| 137 font-size: 1.1rem; | |
| 138 padding: 1rem 1.5rem; | |
| 139 } | |
| 140 | |
| 141 .result { | |
| 142 padding: 1rem; | |
| 143 font-size: 1rem; | |
| 144 } | |
| 145 } | |
| 21 </style> | 146 </style> |
| 22 </head> | 147 </head> |
| 23 <body> | 148 <body> |
| 24 <style> | 149 <style> |
| 25 :root { | 150 :root { |
| 26 --header-background: var(--white); | 151 --header-background: var(--white); |
| 27 --header-color: rgb(var(--black)); | 152 --header-color: rgb(var(--black)); |
| 28 --link-hover-accent: var(--awesome); | 153 --link-hover-accent: var(--awesome); |
| 29 } | 154 } |
| 157 <h1><a href="/">MrJuneJune</a></h1> | 282 <h1><a href="/">MrJuneJune</a></h1> |
| 158 </header> | 283 </header> |
| 159 <script src="/index.js"></script> | 284 <script src="/index.js"></script> |
| 160 | 285 |
| 161 | 286 |
| 162 <main> | 287 |
| 163 <p>Hi, my name is Juntae, but most people call me June or MrJuneJune.</p> | 288 <div class="container"> |
| 164 | 289 <h1>File Format Converter</h1> |
| 165 <p>I am a software engineer with experience spanning a wide range of companies, from small startups to FAANGs....</p> | 290 <p>Convert your images and videos to different formats using FFmpeg</p> |
| 166 <p>I know it is lame to work for them, but I have a dog so I need to put foods on my table.</p> | 291 |
| 167 | 292 <div class="converter-section"> |
| 168 <div class="epi-photo"> | 293 <h2>Image to WebP Converter</h2> |
| 169 <img id="currentPhoto" style="opacity: 0; transition: opacity 0.2s;" /> | 294 <p>Upload an image file (PNG, JPG, GIF, etc.) to convert it to WebP format</p> |
| 170 </div> | 295 |
| 171 | 296 <div class="file-input-wrapper"> |
| 172 <p>During my free time, I like to write codes mostly in C, Python, and Typescript. All in mono repo styles using mercurial and bazel. (I know that is mentally ill...)</p> | 297 <label for="imageInput">Choose an image file:</label> |
| 173 <p>Feel free to check it out. My bad code..</p> | 298 <input type="file" id="imageInput" accept="image/*"> |
| 174 | 299 </div> |
| 175 <h2>Links</h2> | 300 |
| 176 <ul> | 301 <button id="convertImageBtn" onclick="convertImageToWebP()">Convert to WebP</button> |
| 177 <li><a href="https://zenbu.babocoder.com/file/tip">Repository</a> - Check out my monorepo code</li> | 302 |
| 178 <li><a href="/resume">Resume</a> - My professional experiences </li> | 303 <div class="loading" id="imageLoading">Converting... Please wait.</div> |
| 179 <li><a href="/tools">Tools</a> - Tools </li> | 304 |
| 180 <!-- <li><a href="/blogs">Blogs</a> - Personal Blogs where I rant </li> --> | 305 <div class="result" id="imageResult"> |
| 181 </ul> | 306 <p id="imageMessage"></p> |
| 182 </main> | 307 <a id="imageDownload" class="download-link" style="display: none;">Download WebP Image</a> |
| 183 <div style="display: flex; align-items: center; justify-content: center; margin: 30px 0px;"> | 308 </div> |
| 309 </div> | |
| 310 | |
| 311 <div class="converter-section"> | |
| 312 <h2>Video to MP4 Converter</h2> | |
| 313 <p>Upload a video file (AVI, MOV, MKV, etc.) to convert it to MP4 format</p> | |
| 314 | |
| 315 <div class="file-input-wrapper"> | |
| 316 <label for="videoInput">Choose a video file:</label> | |
| 317 <input type="file" id="videoInput" accept="video/*"> | |
| 318 </div> | |
| 319 | |
| 320 <button id="convertVideoBtn" onclick="convertVideoToMP4()">Convert to MP4</button> | |
| 321 | |
| 322 <div class="loading" id="videoLoading">Converting... Please wait.</div> | |
| 323 | |
| 324 <div class="result" id="videoResult"> | |
| 325 <p id="videoMessage"></p> | |
| 326 <a id="videoDownload" class="download-link" style="display: none;">Download MP4 Video</a> | |
| 327 </div> | |
| 328 </div> | |
| 329 <div style="display: flex; align-items: center; justify-content: center; margin: 30px 0px;"> | |
| 184 <small>© 2026 June Park</small> | 330 <small>© 2026 June Park</small> |
| 185 </div> | 331 </div> |
| 186 | 332 |
| 187 </body> | 333 </div> |
| 188 <script> | 334 <script src="/tools/file_converter/index.js"></script> |
| 189 let arr = Array.from({ length: 18 }, (_, i) => i+1); | 335 </body> |
| 190 function setRandomImages() { | 336 </htmlLocation: /tools/markdown_to_html |
| 191 const randomIndex = Math.floor(Math.random() * arr.length); | 337 |
| 192 const pos = arr[randomIndex]; | |
| 193 currentPhoto.src = `/public/epi-photos/webp/${pos}.webp`; | |
| 194 currentPhoto.onload = () => { | |
| 195 currentPhoto.style.opacity = "1"; | |
| 196 }; | |
| 197 setTimeout(() => setRandomImages(), 1000); | |
| 198 } | |
| 199 setRandomImages(); | |
| 200 </script> | |
| 201 </htmlLocation: / | |
| 202 Location: /resume | |
| 203 Location: /tools/markdown_to_html | |
| 204 |