Website portfolio bukan sekadar galeri proyek — ia adalah proyek itu sendiri. Ketika saya memutuskan untuk merombak portfolio ini, saya menetapkan tiga tujuan: konten harus bisa diubah tanpa redeploy, halaman harus tetap statis dan cepat, dan seluruh codebase harus type-safe dari database sampai komponen React.
Kenapa Payload CMS?
Payload CMS v3 berjalan langsung di dalam aplikasi Next.js — tidak perlu server terpisah. Admin panel, REST API, dan type generation semuanya hidup di satu repo. Untuk portfolio pribadi, ini menghilangkan biaya infrastruktur tambahan sekaligus menjaga developer experience tetap mulus.
- Collections untuk Projects, Work Experiences, dan Blog Posts dengan relasi antar dokumen
- Global SiteSettings untuk bio, tagline, dan social links
- SQLite lokal untuk development, Turso (LibSQL) untuk production
- Vercel Blob untuk penyimpanan media
Arsitektur Rendering
Semua halaman utama adalah Server Components yang mengambil data lewat satu lapisan fetching terpusat. Halaman di-generate statis saat build (SSG), lalu di-revalidate secara berkala dengan ISR — perubahan konten di CMS muncul dalam hitungan menit tanpa redeploy.
Client Components hanya dipakai untuk interaksi: filter proyek berbasis URL dengan nuqs, tabs pengalaman kerja, dan form kontak. Sisanya HTML statis yang ringan.
Pelajaran Penting
- Satu lapisan data fetching dengan fallback statis membuat build tidak pernah gagal walau CMS down
- ISR dengan revalidate 60 detik adalah sweet spot antara kecepatan dan kesegaran konten
- Type generation dari schema CMS menghilangkan satu kelas bug secara keseluruhan
Hasilnya: skor Lighthouse hijau di semua metrik, konten yang bisa saya perbarui dari mana saja, dan codebase yang menyenangkan untuk dikembangkan.