Welcome
✍️ This site isn’t just a portfolio.
It’s a place where I reflect on what I’ve built — and more importantly, why I built it.
Tech is just a tool. Direction and intention always come first.
💡 I care more about why something should exist than how fast I can build it.
Structure over UI, maintainability over speed, context over features.
Clean code helps me think clearly — and that’s the real goal.
🛠️ Lately, I’ve been focused on full-stack JavaScript, performance tuning, and UX flow design.
I run side projects regularly and rebuild things often, sometimes just to see if I can do it better.
💬 This page isn’t a highlight reel — it’s a record, made to be shared.
You’ll find code, context, and probably a few mistakes along the way.
Got questions? I’m always up for a conversation. DMs are open 🙌
📖 History of CHANGHYUN.me
CHANGHYUN.me has been built, scrapped, and rebuilt probably ten times since 2015 — not even kidding.
It all started with just HTML and CSS, until I hit a wall and jumped into PHP. From there, I wandered through Wordpress and Node.js, and now? It’s running on Next.js with a little help from Vercel.
Below is a rough timeline of each version — mostly based on memory, so take it with a grain of salt.
💬 How It’s Built — And Why That Matters
This version of CHANGHYUN.me is built with React and styled using TailwindCSS. It’s fast, minimal, and flexible enough to keep evolving without starting over.
I made a conscious decision to avoid traditional CSS altogether — no SCSS, no BEM. Instead, I chose to stay fully within the Tailwind ecosystem, pushing its utility-first model to the edge. That constraint actually made things more fun and deliberate.
I used to split my editor just to keep up with my own CSS. With Tailwind, I finally reclaimed half my screen.
The site runs on Next.js — mostly because it handles routing and rendering cleanly out of the box, and I’ve gotten used to how it balances flexibility with convention.
Hosting is handled by Vercel. The free tier covers everything I need for now, and I’m totally fine paying once it doesn’t. I chose it because it saves me from hours of server setup (which always feels minor but ends up eating time), deployment is literally just git push, and things like SSL and basic security are pre-configured.
For blog content, I built a custom parser that structures content into reusable objects — making it easy to support multiple formats later (like Markdown, HTML, YAML) via clean imports. I could’ve gone with an off-the-shelf MD parser, but I wanted something more purpose-built and minimal — with less magic and more control.
This makes the Journal and Sandbox sections more than static blogs — they’re rendered from structured data that I can query, transform, or re-render any way I want.
(For now, all content is managed directly on the file system — no database involved. So please, no hacking attempts 😅.)
Syntax highlighting is done via Prism, and the layout components are fully modular, making it easy to inject new sections or switch styles as needed.
🗒️ Version Log
v1.0 · 2012 — built using Apache / Pure HTML
I studied HTML using MDN and W3Schools. In hindsight, that was probably the best decision I could've made.
v1.1 · Late 2012 — built using Apache / HTML+CSS / jQuery
v2 · 2013 — built using Apache + PHP / jQuery
v2.1 · Mid 2013 — built using Apache + PHP / JS
I found joy in ditching the `$()` syntax and using `getElementById` directly instead.
v2.2 · Late 2013 — built using Apache + PHP + MySQL / JS / CSS
I wasn’t big on pre-designed CSS frameworks — I was more excited about crafting my own styles with pure CSS and tools like LESS.
v3 · 2014 — built using Apache + PHP + MySQL / JS / LESS
v4 · 2015 — built using Apache + PHP + MySQL / JS / LESS
Back then, I started feeling the limitations of static, server-rendered websites. I used XMLHttpRequest to fetch content dynamically and render it with JS in the browser — which, looking back, was actually pretty close to how modern web apps work.
v5 · 2017 — built using WordPress
Frameworks like Angular were gaining traction at the time, but honestly? I just couldn’t see the point of frontend frameworks back then. Didn’t know where to use them.
v6 · 2018 — built using nginx / Node.js / Express+EJS / Socket.io / LESS
v7 · Now — built using Next.js / React / Tailwind CSS
Next.js is by far the most well-crafted framework I’ve ever used. It gives you complete freedom, while still making it obvious what you should be doing — like playing a well-designed game.
