I recently switched my blog to a new system.
Previously, I was using the Jekyll theme Chirpy.
After starting my dev blog on Velog, I switched to a Jekyll-based blog and used it well for about a year.
However, I felt the inconveniences of running a Jekyll blog and decided to build one myself with AI.
What were the problems with Velog, the first platform I used? Honestly, there weren't any major issues.
I liked the mint-colored design and the easy access to other people's articles.
However, there was one critical problem — I was dependent on Velog's server status.
For example, imagine I confidently included a blog link or retrospective link in my resume.
What if the interviewer clicks the link and gets a 503 (Service Unavailable)...?
Surprisingly, this actually happened.
Also, as long as I was using a provider, there were things I couldn't do:
Based on these pain points, I started building my custom blog after joining a company.
The reason I chose Jekyll was clear.
I could use a high-quality design and system without much effort.
Additionally, I could customize the design and features if I wanted to.
(Being GitHub-based + connecting my own domain through GitHub Pages was a huge advantage.)
Of course, if you ask "Can't GitHub Pages go down too?" — fair point.
It's just that Velog had some downtime back then, and I figured GitHub would be more reliable.
+Since it's open source, you could build and deploy somewhere other than GitHub Pages if you wanted.
I was doing well customizing it and was satisfied.
But at some point, I started hitting limitations.
All CSS and styles for posts, main page, sections, headers, etc. were dependent on the Chirpy theme.
To modify these elements, I had to reference specific files in the Chirpy GitHub repo.
(layout.html, post.html, header.html ...)
But these files weren't stored in my repository.
(If you don't customize, it references the original starter's elements.)
This is actually not a problem at all. It's even a smarter approach.
If you're going to follow the default theme, there's no need to store the files in your GitHub repo.
However, in the age of LLMs, this approach became very inefficient.
When I looked for features I wanted, every blog had wildly different configurations.
For example, when trying to implement a feature that shows English posts to users who selected English:
I had to look at about 2 extension plugin GitHub repos and choose one myself.
And the guides for using them were very poor.
Jekyll is a custom blog generator.
→ Chirpy is a theme for Jekyll.
→ It's one of the extensions for that theme.
→ Each guide describes different configuration methods. ☠️
Of course, the issues above might stem from my lack of understanding of Jekyll + Chirpy theme.
Velog had back-office features that improved user convenience:
But with Jekyll, I had to manually edit the frontmatter of markdown files through an editor.
→ This caused a lot of inconvenience and management difficulties.
I tried to solve some of this through GitHub Actions:
And managing non-code content through editors and files alone became a major hassle.
=> Eventually, I felt the limitations of scattered management.
Since LLM development has been progressing so rapidly, I thought
"Even without knowing frontend at all, couldn't it implement the features I want?" and went ahead.
And the result is about 90% satisfactory.
The remaining 10% are parts where the AI couldn't implement perfectly on the first try despite providing specs.
(Events, styles, detailed aspects)
I set up with the most popular stack: Next.js + Vercel.
I figured AI would be well-trained on it, and it would be easy to maintain in the future.
Also, the free options Vercel provides were quite decent:
Since I was going with Vercel, Next.js made sense (Vercel auto-detects it),
and considering API Routes, image optimization, and flexible rendering, I finalized on Next.js.
For the implementation flow, I decided to improve the design gradually.
I designed the migration of the existing style + features I wanted in PRD format using PLAN mode,
then had Claude Code implement it based on the specs.
Due to token limits, I took it easy and implemented most features I wanted in 2 days.
I kept requesting small details for improvement along the way. It took about 5 days total.
To summarize the plan:
I especially focused on the back-office features.
I liked the existing features, so I asked to replicate them as-is.

I implemented features for local blog management.

I made it easy to do translation and thumbnail generation from the back-office, which I previously did through GitHub Actions.
Also, through the gh CLI, I can directly commit written content or create PRs for deployment.
In the left sidebar, Articles, Library, Notes, Activities are elements I added that didn't exist in the original Jekyll setup.
I added them because I felt they were necessary.

I implemented integrated search so all these elements are searchable.
I should try semantic search or similarity search later.
There might still be parts that don't work properly.
There are aspects I continue to improve.
But being able to implement features exactly as I want is truly amazing.
The reduction in execution cost is really noticeable.
If I had tried this in the past?
It could have taken over a month.
In the future, things will probably advance beyond imagination...?
If you care about managing your blog or want to experience the pace of LLM development, I'd recommend trying a lightweight project like this.
Some tips:
If you implement too many features before migrating, you might get lost during migration.
If you migrate too early, every code change might propagate issues.
I believe the design can always be finished in one go once everything else is done.
Don't stress about making it pretty and detailed from the start.
And the biggest achievement is just giving it a try! Be confident and let's go!