Penawaran teknis & komersial Rev. C · 10 Agu 2026

Headless WordPress CMS + Next.js Frontend

Fondasi headless yang selesai dalam 21 hari

Penawaran untuk membangun website pertama Anda di atas WordPress headless dan Next.js: CMS yang terstruktur, halaman yang siap dibaca mesin pencari, dan update yang langsung tayang tanpa build ulang. Sisa brief saya petakan lengkap dengan harganya.

Dari
Nugroho Setiaji
Penawaran
Rp 5.000.000 · 21 hari
Cakupan
Fase fondasi, satu website
Lampiran
Demo yang bisa dijalankan

Ringkasan

Apa yang Anda dapat dengan Rp 5 juta

Brief Anda mencakup dua website, sepuluh jenis konten, multilingual, structured data, keamanan, Core Web Vitals, dan integrasi CRM. Cakupan sebesar itu realistisnya butuh beberapa bulan kerja.

Jadi yang saya tawarkan di sini adalah bagian yang bisa saya selesaikan tuntas dalam 21 hari: website pertama Anda, live di produksi, dengan seluruh fondasi teknisnya sudah terpasang. Sisanya saya pecah jadi modul dengan harga masing-masing di bagian 08, supaya Anda bisa mengambilnya kapan anggarannya siap.

Yang saya bawa ke proyek ini

Sebelum menulis penawaran, saya membangun implementasi referensi untuk arsitektur yang Anda minta. Isinya dua aplikasi Next.js, sepuluh jenis konten, plugin WordPress headless, ISR dengan webhook revalidation, sitemap terpecah dengan hreflang, dan JSON-LD yang diambil langsung dari CMS. Anda bisa menjalankannya sendiri dengan tiga perintah.

Di dalamnya ada skrip verifikasi yang menyalakan kedua server, mengambil halaman tanpa menjalankan JavaScript sama sekali, lalu memeriksa 181 hal: H1, isi tabel spesifikasi, canonical, hreflang, JSON-LD, sitemap, robots, redirect, dan security header. Jadi klaim "HTML siap di-crawl" di penawaran ini bisa Anda buktikan sendiri.

Skrip itu juga menemukan tiga bug di kode saya sendiri saat demo dibangun, salah satunya middleware yang diam-diam mematikan webhook publish. Saya sebutkan karena begitulah cara saya bekerja: verifikasi otomatis masuk ke dalam scope, bukan jadi tambahan.

Karena fondasi itu sudah ada dan sudah teruji, waktu 21 hari bisa langsung dipakai untuk model konten dan halaman Anda.

Catatan

Satu hal yang perlu saya sampaikan di awal

Transparansi portofolio

Saya belum punya proyek headless WordPress + Next.js yang sudah live untuk klien dan boleh saya bagikan URL publiknya. Brief Anda menyebut hal ini secara khusus, jadi saya sampaikan sekarang, bukan nanti.

Sebagai gantinya saya membangun implementasi referensi tadi, dan membuatnya bisa Anda periksa sendiri tanpa perlu percaya pada kata-kata saya.

Kalau pengalaman produksi headless WordPress memang syarat mutlak buat Anda, saya paham sepenuhnya. Kalau yang Anda nilai adalah cara berpikir, keputusan arsitektur, dan kualitas implementasi, bahan penilaiannya sudah bisa dibuka hari ini juga.

Scope

Yang masuk 21 hari, dan yang menyusul

Batasnya saya tulis di penawaran supaya jelas sejak awal. Kalau ada baris di kolom kanan yang menurut Anda wajib ada di rilis pertama, sampaikan saja. Kita bisa tukar dengan sesuatu di kolom kiri.

Batas cakupan fase fondasi
Termasuk (Rp 5.000.000 / 21 hari) Menyusul di fase berikutnya
Satu website (commercial site), live di produksi Website kedua dan relasi konten antar keduanya
Empat jenis konten: Products, Applications, Articles, Technical Resources. CPT dan ACF didaftarkan lewat kode. Certifications, Industries, Case Studies, Authors, FAQ
Struktur multilingual terpasang: URL /en/…, hreflang, translation group, sitemap yang sadar bahasa. Satu bahasa terisi. Bahasa kedua dan ketiga, setup Polylang atau WPML, alur penerjemahan
Fondasi SEO: metadata dinamis, canonical, robots, sitemap terpecah, JSON-LD Organization, WebSite, Product, Article, BreadcrumbList Audit technical SEO menyeluruh, peta redirect migrasi, optimasi Core Web Vitals
Publish langsung tayang lewat webhook, plus preview draft dari tombol Preview WordPress Sudah lengkap di fase ini
Satu form inquiry dengan validasi server, honeypot, rate limit, dan Turnstile Empat form sisanya, integrasi CRM, event tracking lengkap
Komponen inti: hero, teks, tabel spesifikasi, kartu produk, kartu dokumen, FAQ, CTA, related content Comparison table, process diagram, timeline, statistik, case study, blok video
Keamanan dasar: security header, CMS di subdomain terpisah, REST write terkunci, jenis upload dibatasi WAF, MFA, pembatasan IP admin, uji pemulihan backup, logging
Deploy produksi dan staging, GA4 dan GTM terpasang, dokumentasi dan handover Search Console, Bing Webmaster, monitoring dan laporan bulanan

Yang saya butuhkan supaya 21 hari ini realistis

Desain visual final, atau izin memakai design system dari demo. Konten untuk minimal 5 produk dan 3 artikel. Akses ke hosting CMS. Dan keputusan dari pihak Anda dalam 1 hari kerja. Kalau ada yang belum siap saat mulai, saya akan usulkan menggeser tanggal mulai daripada memotong waktu QA, dan itu saya sampaikan di weekly report pertama.

01

Portofolio

Implementasi referensi untuk brief ini

Monorepo berisi dua aplikasi Next.js 15 (App Router, React 19, TypeScript) di atas WordPress headless, dengan dua brand demo: Verdano Materials untuk sisi komersial dan Fiberline Review untuk knowledge center. Konten demonya sengaja dipilih yang sulit: tabel properti berikut metode ujinya, data sertifikat dengan nomor yang bisa diverifikasi, dokumen teknis dengan revisi dan reviewer, serta relasi konten yang menyeberang antar domain.

Isi paket
BagianYang dibuktikan
apps/website-a Materials, applications, industries, certifications, case studies, dan 5 form inquiry
apps/website-b Knowledge center, technical resources, halaman penulis, FAQ
packages/cms Model konten bertipe, driver WordPress REST, driver fixture, resolusi URL, penanda cache
packages/seo Metadata, canonical, hreflang, sitemap terpecah, robots, security header
packages/schema JSON-LD Product, Article, Person, FAQPage, DigitalDocument, Certification, BreadcrumbList
wordpress/ Plugin must-use: CPT, ACF lewat kode, payload REST yang sudah dirapikan, preview bertanda tangan, webhook HMAC, hardening
git clone https://github.com/nugrohosetiaji91-png/headless-wp-nextjs-b2b.git
cd headless-wp-nextjs-b2b
npm install
npm run build
npm run verify:ssr

=== Website A ===
=== Website B ===
=== Sitemap, robots, redirect ===
181/181 checks passed.

Proyek lain

Bukan headless WordPress, tapi menunjukkan cara kerja yang sama: model data yang dipikirkan matang, tes yang benar-benar dijalankan, dan produk yang sampai selesai.

  • OmniStok. Aplikasi sales dan inventory dengan satu codebase Flutter untuk web, Android, dan desktop. Repo terbuka dan ada demo yang bisa diklik. Dibangun sebagai bukti kerja untuk klien, lalu diperbaiki mengikuti klarifikasi scope dari klien tersebut.
  • LINI ERP. ERP manufaktur dengan React 19, TypeScript, dan Vite. 53 rute dan 18 laporan. Logika bisnisnya ditulis terpisah dari UI supaya bisa dipindah ke backend tanpa menyentuh tampilan. Saldo stok dihitung dari akumulasi mutasi, bukan angka yang disimpan begitu saja.
  • Bot absensi multi-tenant. Bot Telegram dengan penjadwal, throttling pengiriman massal, dan penanganan rate limit. 63 tes hijau.

02

Arsitektur teknis

  1. 1WordPress di subdomain sendiri (cms.domain.com), tanpa theme dan tanpa halaman publik. Request selain API diarahkan keluar.
  2. 2REST API. Setiap response membawa satu objek platform yang sudah dirapikan: bahasa, website pemilik, translation group, SEO, relasi, dan daftar blok.
  3. 3packages/cms. Satu-satunya lapisan yang tahu bentuk WordPress. Halaman tidak pernah menyentuh payload mentah ACF.
  4. 4Next.js. Server Components dan ISR, dengan penanda cache per dokumen, per jenis konten, per kelompok bahasa, dan per sitemap.
  5. 5CDN. HTML statis dari edge. Halaman yang belum pernah dirender dibuat saat request pertama, lalu ikut tersimpan di cache.

Saya memilih REST, bukan WPGraphQL, karena brief Anda menyebut REST dan karena WPGraphQL adalah plugin komunitas yang duduk di jalur kritis. Kalau nanti Anda ingin pindah, drivernya hanya satu file di balik interface.

Monorepo dipakai supaya dua website berbagi satu definisi canonical, satu pembangun hreflang, dan satu daftar event analytics. Kalau logika URL tersebar di dua tempat, canonical dan sitemap gampang berselisih.

  • Next.js 15
  • React 19
  • TypeScript
  • npm workspaces
  • WordPress 6.5+
  • ACF Pro
  • Polylang / WPML
  • Zod
  • Vercel
  • Cloudflare

03

Pendekatan CMS

Semua jenis konten dan field group didaftarkan lewat kode, bukan diklik lewat admin. Alasannya praktis: field group yang dibuat di UI hanya tersimpan di database, sehingga sulit direview, mudah berbeda antar environment, dan bisa tertimpa saat restore staging.

Jenis konten
JenisPemilikField inti
productSite ASKU, material family, key properties (properti, nilai, satuan, metode uji), relasi
applicationSite Arelasi ke produk, industri, artikel
industrySite Arelasi ke produk dan case study
certificationSite Anama, penerbit, nomor sertifikat, ruang lingkup, tanggal terbit dan kedaluwarsa, URL verifikasi, dokumen
case_studySite Aklien, negara, hasil terukur
post (article)Site Bhero, penulis, technical reviewer, lama baca, tautan ke produk
technical_resourceSite Bjudul dokumen, jenis, produk dan aplikasi terkait, revisi, tanggal, reviewer, PDF, bahasa, gated
personSite Bjabatan, kredensial, foto, LinkedIn
faqSite Bpertanyaan, jawaban
pagekeduanyapalet blok, dengan pilihan website pemilik

Editor tidak perlu menyusun layout. Mereka memilih dari palet blok yang sudah tersedia: hero, teks, tabel spesifikasi, tabel perbandingan, diagram proses, timeline, statistik, FAQ, CTA, related content, dan media. Masing-masing blok sudah tahu cara tampil responsif dan cara mengisi structured data-nya.

Dua hal kecil yang saya pasang di level field

Nilai properti wajib disertai metode ujinya, supaya angka yang tampil di halaman dan di structured data selalu punya rujukan standar.

Pilihan menggerbang dokumen di balik form diberi keterangan di editor, karena setiap dokumen yang digerbang menukar trafik organik dengan data prospek. Keputusannya tetap di tangan Anda, hanya konsekuensinya terlihat saat memilih.

Relasi antar konten inilah yang menyatukan dua website. Editor cukup memilih konten terkait di WordPress, lalu sistem yang menentukan apakah tautannya relatif atau lintas domain, memberi label, dan mengirim event analytics. Tidak ada URL lintas domain yang perlu diketik manual.

04

Pendekatan SEO

Semua canonical, hreflang, entri sitemap, breadcrumb, dan tautan antar website dihasilkan oleh satu modul yang sama. Ini yang menjaga sitemap dan canonical tetap sepakat saat jumlah bahasa dan halaman bertambah.

Keputusan dan alasannya
AspekKeputusan
RenderingStatic dan ISR untuk semua halaman konten. Slug baru dirender saat request pertama lalu ikut tersimpan, tanpa perlu deploy.
BahasaSelalu ada di awal URL, termasuk bahasa default (/en/…). Tidak ada versi duplikat di root, jadi canonical-nya lurus.
hreflangDibangun dari translation group, jadi hanya bahasa yang benar-benar ada yang dicantumkan. x-default selalu ikut.
CanonicalMenunjuk ke dirinya sendiri secara default. Bisa diarahkan ke URL lain kalau editor memang menghendaki.
SitemapDipecah per jenis konten dan dilayani sebagai route, bukan file hasil build. Tiap sitemap membawa xhtml:link alternates. Halaman noindex otomatis tidak ikut masuk.
robots.txtMenyesuaikan environment. Satu variabel mengunci tiga lapis sekaligus: robots.txt, meta robots, dan header X-Robots-Tag, supaya staging tidak terindeks.
Structured dataDiambil dari dokumen yang sama dengan yang dirender halaman, jadi isinya selalu cocok dengan yang dilihat pengunjung.
RedirectPeta redirect migrasi disimpan sebagai konfigurasi dengan status 308. Konten yang memang dihapus permanen dibalas 410.
Trailing slash dan wwwSatu bentuk URL saja, ditegakkan oleh framework dan edge.
Halaman yatimHalaman penulis menampilkan artikel yang ditulis dan direview. Setiap halaman indeks punya H1 sendiri dan masuk sitemap.

Performa

Target Anda (LCP di bawah 2,5 detik, INP di bawah 200 ms, CLS di bawah 0,1) dikejar lewat keputusan arsitektur sejak awal. Semua blok adalah Server Component, jadi JavaScript yang dikirim ke browser sangat sedikit. Setiap gambar punya dimensi tetap untuk menjaga CLS, diformat AVIF atau WebP lewat next/image, dan embed video baru dimuat saat pengunjung mengkliknya.

GTM dimuat setelah interaksi pertama atau 1,2 detik setelah halaman selesai, mana yang lebih dulu. Ini menjaga LCP dan INP tetap aman tanpa kehilangan data analytics.

05

Alur publikasi

Editor tetap memakai alur yang sudah mereka kenal, dan tidak perlu tahu bahwa frontend-nya aplikasi terpisah.

  1. 1Editor menulis di WordPress dan menekan Preview. Tombolnya mengarah ke link bertanda tangan menuju frontend.
  2. 2Frontend membuka draft mode dan membaca draft tanpa menyimpannya ke cache, jadi draft tidak pernah bocor ke pengunjung.
  3. 3Reviewer teknis menyetujui. Ada status menunggu review antara draft dan publish, khusus untuk konten yang memuat data teknis.
  4. 4Editor menekan Publish. WordPress mengirim webhook bertanda tangan HMAC-SHA256.
  5. 5Frontend membatalkan empat penanda cache saja: dokumen itu, jenis kontennya, kelompok bahasanya, dan sitemap.
  6. 6Request berikutnya merender ulang halaman itu saja. Tanpa deploy, tanpa build ulang.

Webhook dikirim lewat cron satu detik, bukan langsung, supaya frontend yang sedang lambat tidak membuat tombol Publish menggantung. Kalau pengirimannya gagal, notifikasi muncul di admin WordPress supaya ketahuan hari itu juga.

06

Rekomendasi deployment

Arsitektur yang saya sarankan
LapisanPilihanAlasan
Frontend Vercel ISR dan revalidasi per penanda berjalan tanpa infrastruktur tambahan. Di VPS hal yang sama butuh shared cache handler dan sticky routing yang harus dirawat terus.
CDN dan WAF Cloudflare Di depan keduanya, untuk rate limiting /wp-json dan halaman login, pembatasan IP ke /wp-admin, serta Turnstile di form.
CMS VPS di cms.domain.com WordPress butuh PHP, cron, dan filesystem yang persisten. Terpisah dari trafik publik dan tidak pernah jadi frontend.
Media Object storage dan CDN PDF dan gambar tidak dilayani dari server WordPress.
CI/CD GitHub Actions dan preview Vercel Setiap pull request dapat URL preview. Typecheck, build, dan skrip verifikasi SEO jalan otomatis sebelum digabung.
Staging Environment terpisah, noindex Dengan HTTP auth di edge, supaya tidak pernah terbaca mesin pencari.
Rollback Instant rollback Vercel Kembali ke deployment sebelumnya dalam hitungan detik. Konten tidak terpengaruh karena tersimpan di CMS.

Kalau kebijakan Anda mengharuskan semuanya berada di infrastruktur sendiri, saya bisa mengerjakannya di VPS dengan Node dan shared cache handler. Silakan sampaikan, nanti saya sesuaikan estimasinya.

Yang terpasang di fase fondasi

Vercel (paket gratis sudah cukup untuk memulai), WordPress di subdomain terpisah, staging ber-noindex, CI yang menjalankan typecheck dan verifikasi SEO, serta security header di semua response. Cloudflare WAF, pembatasan IP admin, MFA, dan object storage masuk modul hardening di bagian 08. Arsitekturnya sudah siap menerima semua itu tanpa perlu dibongkar.

07

Timeline 21 hari

Weekly report di tiap akhir pekan
HariPekerjaanYang bisa Anda lihat
1–3 Review kebutuhan, finalisasi model konten, setup repo dan WordPress di subdomain CMS Dokumen model konten untuk disetujui sebelum kode ditulis
4–9 CPT dan ACF lewat kode, REST layer, integrasi Next.js, preview dan revalidate Editor sudah bisa menulis di WordPress dan melihat hasilnya di staging
10–15 Template halaman, komponen konten, form inquiry, tampilan responsif Seluruh alur halaman berjalan di staging dengan konten asli
16–18 Metadata, canonical, sitemap, robots, JSON-LD, struktur multilingual, performa Hasil verify:ssr di website Anda sendiri
19–21 QA, uji browser dan perangkat, deploy produksi, dokumentasi, handover Website live, tim Anda sudah bisa publish sendiri
21SelesaiPlus 30 hari bug fixing

Hari 1 sampai 3 menghasilkan dokumen yang perlu Anda setujui lebih dulu. Checkpoint ini yang paling menentukan, karena perubahan model konten jauh lebih murah di hari kedua daripada di minggu ketiga.

08

Proposal komersial

Penawaran untuk proyek ini
CakupanBiaya
Pengembangan fase fondasiRp 4.400.000
Deployment dan setup: Vercel, DNS, SSL, security header, staging, CI, GA4, GTMRp 600.000
Bug fixing 30 hari setelah launchTermasuk
Dokumentasi dan handoverTermasuk
Total penawaranRp 5.000.000

Angka ini saya letakkan di tengah rentang anggaran Anda, bukan di batas atasnya. Alasannya sederhana: ini proyek pertama saya di platform ini, jadi saya belum punya rekam jejak yang bisa Anda cek di sini. Harga di tengah terasa lebih pantas untuk posisi itu.

Yang membuatnya tetap masuk akal dari sisi saya, fondasi arsitekturnya sudah dibangun dan diuji sebelum penawaran ini ditulis, jadi 21 hari penuh bisa dipakai untuk website Anda.

Peta biaya untuk sisa brief

Bagian ini bukan sesuatu yang perlu Anda putuskan sekarang. Tujuannya supaya Anda punya angka nyata saat menyusun anggaran tahap berikutnya. Tiap modul berdiri sendiri dan bisa diambil dalam urutan apa pun.

Modul lanjutan, opsional
ModulEstimasiDurasi
Website kedua dan relasi konten antar websiteRp 5.500.00018 hari
Jenis konten sisanya dan komponen lengkapRp 4.500.00014 hari
Multilingual penuh: 2 bahasa, Polylang atau WPML, alur kerja dan QARp 4.500.00014 hari
Optimasi Core Web Vitals, audit technical SEO, peta redirect migrasiRp 3.800.00012 hari
Lead generation lengkap: 5 form, integrasi CRM, event trackingRp 3.500.00010 hari
Hardening keamanan: WAF, MFA, pembatasan IP admin, uji backup, loggingRp 3.000.0008 hari
Seluruh brief, bertahapRp 29.800.000± 4 bulan
Maintenance bulanan, opsional, mulai setelah masa bug fixing
PaketCakupanPer bulan
Esensial Monitoring uptime, patch keamanan WordPress dan dependency, cek backup, bug fix sampai 3 jam Rp 1.200.000
Aktif Semua yang ada di Esensial, plus 6 jam pengembangan fitur kecil dan laporan Core Web Vitals Rp 2.800.000

Permintaan di luar cakupan yang tertulis di bagian Scope dihitung Rp 200.000 per jam, selalu diestimasi dan disetujui lebih dulu.

Belum termasuk

Lisensi dan langganan pihak ketiga: ACF Pro sekitar USD 49 per tahun, hosting WordPress, Vercel (paket gratis cukup untuk memulai), dan domain. Semuanya dibayar langsung atas nama Anda supaya kepemilikannya jelas. Copywriting, fotografi, penerjemahan, dan desain visual dari nol juga belum termasuk. Untuk desain, saya bisa memakai design system dari demo tanpa biaya tambahan kalau Anda setuju dengan arahnya.

Kalau Anda butuh seluruh brief sekaligus

Silakan sampaikan, dan saya akan menyusun ulang timeline serta biayanya secara terbuka. Yang saya sarankan adalah urutan bertahap seperti di atas, supaya website pertama sudah bisa dipakai jualan di hari ke-21, sementara modul berikutnya menyusul.

Tes

Jawaban skenario technical test

"Sebuah artikel baru diterbitkan melalui WordPress Headless CMS. Bagaimana Anda memastikan halaman tersebut tersedia dalam bentuk SEO-friendly HTML di Next.js, sitemap diperbarui, metadata dan structured data tersedia, serta frontend dapat diperbarui tanpa melakukan full rebuild seluruh website?"

Inilah yang sudah berjalan di implementasi referensi, jadi jawabannya bisa saya tunjukkan, bukan hanya diceritakan.

Saat editor menekan Publish, hook transition_post_status menyala di plugin. WordPress tahu persis apa yang berubah: jenis konten, slug, bahasa, dan translation group.

Plugin mengirim webhook ke frontend, ditandatangani HMAC-SHA256 atas isi request. Pengirimannya lewat cron satu detik supaya tidak menahan editor.

Frontend memverifikasi tanda tangannya, lalu membatalkan empat penanda cache: dokumen itu sendiri, jenis kontennya (karena halaman daftar ikut berubah), kelompok bahasanya (supaya hreflang tetap benar), dan sitemap. Ribuan halaman lain tidak tersentuh.

Request berikutnya merender ulang halaman itu saja. Slug yang belum ada saat build terakhir pun tetap dirender pada request pertama, lalu ikut tersimpan di cache. Tidak ada deploy, tidak ada build ulang.

Sitemap adalah route, bukan file hasil build, jadi ia ikut diperbarui oleh penanda yang sama dan URL barunya bisa ditemukan crawler dalam hitungan detik. Sitemap untuk jenis konten lain tidak ikut diregenerasi.

Metadata dan JSON-LD dibangun dari dokumen yang sama dengan yang dirender halaman. Judul, deskripsi, canonical, hreflang, Article, BreadcrumbList, dan FAQPage semuanya berasal dari satu sumber, jadi isinya tidak bisa berbeda dari yang tampil di layar.

Waktu dari Publish sampai HTML siap diindeks: hitungan detik, dengan biaya satu render halaman.

Lanjut

Langkah berikutnya

Saya bisa mengirim akses ke implementasi referensi supaya tim teknis Anda menjalankannya sendiri. Tiga perintah, tanpa perlu WordPress dan tanpa kredensial.

Kalau kita lanjut, ada empat hal yang saya butuhkan sebelum hari pertama:

  1. Konfirmasi website mana yang dibangun lebih dulu. Saya menyarankan commercial site, karena itu yang menghasilkan inquiry.
  2. Daftar bahasa yang direncanakan. Strukturnya saya siapkan untuk semuanya sejak awal walau baru satu yang terisi, karena memasangnya di awal jauh lebih murah daripada mengubah struktur URL nanti.
  3. Akses ke website lama kalau ada. Peta redirect masuk fase lanjutan, tapi saya perlu tahu sejak awal supaya struktur URL-nya tidak menyulitkan migrasi.
  4. Konten untuk minimal 5 produk dan 3 artikel, atau konfirmasi bahwa boleh memakai konten sementara di rilis pertama.

Terima kasih sudah menulis brief sedetail ini. Dokumen sejelas itu membuat estimasi jadi jauh lebih jujur, dan itu jarang.