Membangun Blog Portofolio dengan Next.js + Markdown (Tanpa CMS)
Site yang Anda baca ini saya bangun sendiri. Bukan Wordpress. Bukan Medium. Bukan Substack. Bukan builder. Next.js + markdown — itu saja.
Kenapa Tanpa CMS?
Saya pertimbangkan beberapa opsi:
- Wordpress — familiar, banyak plugin. Tapi overhead hosting + security update + plugin zombie.
- Ghost — clean, lebih cepat dari WP. Tapi butuh hosting terpisah, $9/bulan minimal.
- Sanity / Contentful (headless) — fleksibel, tapi satu more service untuk dibayar dan dipelajari.
- Next.js + markdown files in repo — statis, gratis hosting di Vercel, semua konten version-controlled.
Pilihan saya: opsi 4.
Alasan utama: kontrol penuh dan portabilitas. Konten saya adalah file .md di repo Git. Kalau suatu hari Next.js tidak cool lagi, saya tinggal migrasi file-file itu ke framework lain. Nggak ada vendor lock-in.
Struktur File
project_random/portofolio/
├── content/
│ ├── blog/
│ │ ├── selamat-datang.md
│ │ ├── membangun-wa-bot-dengan-baileys.md
│ │ └── ... (post lain)
│ ├── linkedin/
│ │ └── ... (draft LinkedIn post)
│ └── testimoni/
│ └── ... (testimoni klien)
├── src/
│ └── app/
│ ├── page.tsx (homepage)
│ ├── blog/
│ │ ├── page.tsx (list)
│ │ └── [slug]/page.tsx (detail)
│ └── ...
└── next.config.js
Markdown Engine
Saya pakai gray-matter + remark-html:
gray-matteruntuk parse frontmatter (YAML di atas file) dan pisah dari body.remark-htmluntuk convert markdown body jadi HTML.
Frontmatter format yang saya pakai:
---
title: "Judul post"
excerpt: "Short description untuk card preview"
date: "2026-04-22"
tags: ["tag1", "tag2"]
published: true
---
Field published saya pakai untuk hide draft dari list publik.
Static Generation
Next.js app router punya fitur generateStaticParams + server components. Saat build time, Next.js baca semua .md file di content/blog/, generate static HTML per post. Hasilnya:
- Page load instan (nggak ada server round-trip)
- SEO-friendly (HTML siap disajikan crawler)
- Cost hosting nol di Vercel free tier
Trade-off yang Jelas
Plus:
- Kontrol penuh layout dan styling
- Konten version-controlled (git history per post)
- Deploy gratis di Vercel
- Bundle kecil, load cepat
- Markdown portable ke mana-mana
Minus:
- Nggak bisa edit dari HP. Tapi ternyata ini fitur, bukan bug — setup-nya "ribet" bikin saya menulis lebih serius.
- Gambar harus saya upload manual ke folder
public/atau external CDN - Nggak ada comment system built-in (pakai Giscus / Disqus kalau butuh)
Path Evolusi ke Depan
Yang mau saya tambahkan:
- Halaman proyek (grid showcase proyek portofolio) — sekarang cuma ada blog
- Dark mode toggle
- RSS feed (untuk yang mau subscribe via reader)
- Cari/filter blog by tag
Tapi saya tahan diri untuk tidak over-engineer. Site ini tujuannya sederhana: tempat saya berbagi proses kerja. Kalau fitur nggak langsung serve tujuan itu, skip.
Pelajaran
- Tool sesuai kebutuhan. Saya nggak butuh CMS multi-editor. Saya butuh tempat menulis. Markdown + Git cukup.
- Portabilitas > fancy features. Platform datang dan pergi. File
.mddi Git akan tetap bisa dibaca 10 tahun lagi. - "Setup ribet" bisa jadi fitur. Friction yang pas bikin Anda menulis serius, bukan spam.
Source bisa saya share kalau ada yang tertarik — DM saya.
Stack: Next.js 15 + React 19 + gray-matter + remark-html + Tailwind + Vercel.