Saat memutuskan ingin punya website portfolio pribadi, saya dihadapkan pilihan: coding from scratch pakai Next.js/Gatsby, atau pakai WordPress. Setelah pertimbangan matang, saya pilih WordPress. Bukan karena saya tidak bisa ngoding — saya pilih karena fleksibilitas editingnya. Saya ingin bisa tambah project baru, update skill, atau publish artikel baru langsung dari dashboard, tanpa harus deploy ulang.
WordPress sering dipandang sebelah mata oleh developer “modern”, tapi sebenarnya ekosistemnya matang dan powerful. 43% website di internet pakai WordPress — itu angka yang tidak bisa diabaikan. Untuk portfolio, WordPress menawarkan keuntungan: tidak perlu setup CI/CD, built-in SEO, REST API untuk headless kalau dibutuhkan, dan ribuan plugin untuk segala kebutuhan.
Strategi Custom Post Type
Untuk portfolio, saya tidak pakai default Posts atau Pages untuk semua konten. Saya bikin CPT terpisah: Projects, Skills, Education, Experience, Certificates, Journey. Setiap CPT punya field khusus yang relevan. Misalnya, Projects punya field: Technologies, Year, Status, Project URL, GitHub URL, Featured, Problem, Solution, Features, Challenges, Result. Field-field ini didaftarkan via plugin Advanced Custom Fields (ACF).
Kenapa ACF? Karena native WordPress custom fields UI-nya jelek. ACF memberi UI yang bersih: text, textarea, image, repeater, flexible content, group. Saya bisa label field dalam Bahasa Indonesia (e.g. “Nama Project”, “Teknologi yang Digunakan”) sehingga saya sendiri sebagai pemilik website tidak bingung saat edit.
Implementasi Field Group
Field group Projects saya setup seperti ini: project_name (Text), project_description (Textarea), project_technologies (Repeater: text untuk setiap tech), project_year (Number), project_status (Select: Completed/In Progress/Concept), project_url (URL), github_url (URL), featured (True/False), problem, solution, challenges, result (Textarea masing-masing), features (Repeater: text), gallery (Gallery).
ACF punya fitur export JSON, jadi setup ini bisa dipindahkan antar instansi WordPress dengan mudah. Saya simpan file .json di dalam tema, dan saat tema diaktifkan, ACF otomatis import field group.
Design Approach
Untuk tema, saya build custom theme dari nol, bukan pakai tema prebuilt. Alasannya: tema prebuilt biasanya berat, banyak fitur tidak terpakai, dan susah dikustomisasi tanpa pembakaran waktu. Custom theme hanya berisi file yang saya butuhkan: style.css, functions.php, index.php, header.php, footer.php, single-project.php, archive-project.php, dan beberapa template lain.
Styling: saya tulis CSS murni dengan CSS variables, tidak pakai framework. Website portfolio tidak butuh Tailwind/Bulma — CSS modern sudah sangat capable dengan custom properties, grid, dan flexbox. Hasilnya: halaman load dalam 1.2s di mobile, 0.8s di desktop.
Animasi
Saya pakai Intersection Observer untuk fade-in saat scroll. Native browser API, tidak butuh library. Hanya 3KB JS untuk semua animasi. Performance budget: 50KB CSS, 20KB JS, gambar WebP < 100KB. Lighthouse score 95+ di semua metrik.
Setup Permalink
WordPress default pakai ?p=123 permalink yang SEO-unfriendly. Saya ubah ke /post-name/ lewat Settings → Permalinks. Untuk CPT, saya register dengan 'rewrite' => array('slug' => 'projects') sehingga URL jadi /projects/elmira/ bukan /?post_type=project&p=45.
Security & Maintenance
Saya install plugin Wordfence untuk security scan, WP Rocket untuk caching, dan setup auto-update untuk minor version. Backup mingguan ke Dropbox via UpdraftPlus. WordPress aman kalau di-maintain dengan baik — masalah umumnya bukan WordPress-nya, tapi plugin tidak terupdate atau password lemah.
Hasilnya: website portfolio yang load cepat, mudah edit dari dashboard, SEO-friendly, dan kelihatan profesional. Saya tidak harus buka file PHP untuk tambah project baru. Login dashboard, klik Projects → Add New, isi field, upload gambar via Media Library, publish. Selesai. Itulah power WordPress yang sering dipandang remeh.