profile image

Have a question or a project in mind?

Just hit the button below and reach out — I'll get back to you within 24 hours!
Whether it’s building a website, developing a program, or even grabbing a meal together,
I’m open to any kind of conversation. 😊

Welcome

CHANGHYUN.mewww.changhyun.me

✍️ 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.02012
Apache / Pure HTML
To celebrate turning 20, I built my very first personal site using just static HTML and a bit of CSS. It was simple, but it got the job done. Back then, I was using the domain cholalo.me.
I studied HTML using MDN and W3Schools. In hindsight, that was probably the best decision I could've made.
v1.1Late 2012
Apache / HTML+CSS / jQuery
I discovered how to use iframes to separate out a sidebar (I know, I know...), and started sprinkling in jQuery. It felt powerful at the time — at least compared to vanilla HTML.
v22013
Apache + PHP / jQuery
Started using PHP to add some dynamic behavior to the site. Simple scripts, nothing fancy — but it felt like real backend magic to me.
v2.1Mid 2013
Apache + PHP / JS
I started to move away from jQuery, frustrated by its weight. This led me to manipulate the DOM directly with JavaScript. I learned it through Codecademy — which was free at the time (not anymore in 2025).
I found joy in ditching the `$()` syntax and using `getElementById` directly instead.
v2.2Late 2013
Apache + PHP + MySQL / JS / CSS
I built a basic message board with comments using a MySQL backend. It was my first stab at responsive design with CSS media queries. I created my own utility class system — think q (1/4, 2q=2/4, 3q=3/4), t (1/3, 2t=2/3), h (1/2), and f (1) — a DIY Tailwind before Tailwind was a thing. I was more into pure CSS and nesting with tools like LESS, so Bootstrap’s pre-designed 12-column grid, while popular, didn’t quite vibe with me. Still, I went with a 12-column layout for its design flexibility.
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.
v32014
Apache + PHP + MySQL / JS / LESS
I started using PHP's include syntax to improve code reusability. Instead of creating separate pages, I routed everything through index.php using GET parameters — kind of an early, accidental version of MVC. That eventually got me curious about programming fundamentals like object-oriented design, algorithms, and data structures.
v42015
Apache + PHP + MySQL / JS / LESS
This version was a continuation of the MVC-ish structure from v3. But I began taking development more seriously — reading books, exploring proper design patterns, and experimenting with automation tools. It was less of a 'hobby project' and more of a structured learning experience.
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.
v52017
WordPress
This was during my blogging phase. I set up a home server using a Mac and DAS (direct-attached storage), and started self-hosting my content. I needed something content-oriented, so I gave WordPress a proper shot — even made a few themes and plugins. I also made my first bit of money from programming that year, which felt huge.
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.
v62018
nginx / Node.js / Express+EJS / Socket.io / LESS
This was my first foray into Node.js. Since JavaScript had always felt more natural to me than PHP, working with Node honestly felt like playing in a sandbox. Even now, I still enjoy spinning up quick services with Node over full-blown frameworks.
v7Now
Next.js / React / Tailwind CSS
After nearly five years of leaving my personal site untouched, I decided to bring it back. Hosting used to cost money — now, with Vercel's free tier, it's practically effortless. I kept putting off Tailwind for years, but I picked it up in about three days. Honestly? Should’ve used it sooner. I considered other stacks like Astro, Vue, and Svelte, but after a few weeks of testing, React still felt the most stable and flexible. As long as I keep the domain, I’ll probably keep this site alive for good.
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.
CHANGHYUN.me
© 2015-2025 All rights reserved.
Thank you for Vercel