Panduan

Panduan14 menit baca

Saat formulir website builder Anda tak lagi cukup

Saat formulir Webflow, Netlify, Carrd, atau Framer mentok di batas atau kekurangan fitur, pertahankan formulir yang Anda desain dan arahkan ke backend formulir.

Preet SutharPendiri, Ikiform

Pertahankan formulir yang digambar builder Anda dan ubah hanya tujuan pengirimannya: custom action di Webflow, Send to URL di Carrd, tujuan webhook di Framer, atau action biasa di halaman yang di-host Netlify. Kiriman lalu masuk ke backend formulir yang memvalidasi, menyaring, menyimpan, dan meneruskan setiap kiriman, jadi batas kiriman dan batasan paket builder tidak lagi berlaku untuknya. Periksa dulu apa yang Anda lepaskan, seperti upload file dan inbox bawaan builder.

Site builder menyertakan formulir karena setiap situs butuh satu. Formulir itu dibuat untuk formulir kontak pertama, bukan formulir kesepuluh atau kiriman keseribu. Pada titik tertentu Anda mentok: batas kiriman, fitur yang butuh paket yang tidak Anda perlukan untuk hal lain, formulir yang hanya berfungsi selama situs tetap di satu host, atau inbox yang menjadi satu-satunya catatan siapa yang menghubungi Anda.

Anda tidak perlu membangun ulang formulir untuk melewatinya. Setiap builder besar bisa mengirim formulir ke tempat lain. Panduan ini menjelaskan apa yang berubah saat itu terjadi, cara melakukannya di setiap builder tanpa kehilangan satu kiriman pun, dan kapan tetap memakai formulir builder adalah pilihan yang lebih baik.

Apa yang berubah saat formulir keluar dari builder

Formulir builder punya dua bagian: bagian yang Anda lihat, yang digambar builder, dan bagian yang menerima kiriman. Pindah ke backend formulir hanya mengganti bagian kedua. Layout, font, dan gaya Anda tetap di tempatnya.

Formulir builder sebelum dan sesudah mengirim ke backend formulirSebelum: builder menangani kirimanSesudah: builder hanya menggambar formulirformulir Andadidesain di builderform handlerbuilderdihitung ke bataspaketinbox builderatau emailekspor manualformulir yangsamalayout dan gayasamaIkiformvalidasi, saringspam, simpanemail, webhook,CSVtim dan alat AndakirimURL actionFormulir builder sebelum dan sesudah mengirim ke backend formulirSebelum: builder menangani kirimanSesudah: builder hanya menggambar formulirformulir Andadidesain di builderform handler builderdihitung ke batas paketinbox builder atau emailekspor manualformulir yang samalayout dan gaya samaIkiformvalidasi, saring spam, simpanemail, webhook, CSVtim dan alat AndakirimURL action
  1. Sebelum: pengunjung mengirim formulir, dan form handler milik builder menerima kirimannya.
  2. Builder menghitungnya ke dalam batas kiriman paket dan menyimpannya di inbox atau mengirimnya lewat email.
  3. Sesudah: formulir yang sama, dengan desain yang sama, mengirim ke endpoint Ikiform.
  4. Ikiform memvalidasi field, memberi skor spam pada kiriman, dan menyimpannya.
  5. Ikiform mengirim email ke tim Anda, mengirim webhook bertanda tangan, dan menjaga setiap kiriman bisa dicari dan diekspor sebagai CSV.
Hanya tujuannya yang berubah. Builder tidak pernah melihat kiriman, jadi hitungan kiriman dan fitur formulirnya tidak lagi berlaku untuk formulir itu.

Batas yang sering ditemui

Setiap builder menarik garisnya di tempat berbeda. Tabel merangkum apa yang dinyatakan masing-masing di halaman harga dan bantuan mereka per Oktober 2026. Paket bisa berubah, jadi periksa halaman varian yang ditautkan untuk detail dan situs builder sebelum Anda memutuskan.

BuilderApa yang dilakukan formulirnyaDi mana orang mentokJalan keluarnya
WebflowMenyimpan kiriman, mengirim email notifikasi, dan mengekspor CSVPaket gratis Starter mengizinkan total 50 kiriman formulir per situs, dan hitungannya tidak di-reset. Situs yang diekspor tidak mendapat penanganan formulir sama sekaliCustom action di pengaturan Form Block. Ini juga berfungsi di Starter
NetlifyMendeteksi formulir data-netlify saat deploy dan menyimpan kirimanPaket lama menghitung kiriman per situs per bulan dan menaikkan situs ke level Forms berbayar saat melewati batas. Formulir hanya berfungsi di situs yang di-build NetlifyHapus atribut Netlify dan atur action formulir
CarrdFormulir kontak mengirim email ke Anda; formulir pendaftaran menambahkan orang ke alat emailFormulir apa pun butuh Pro Standard. Formulir kustom, termasuk Send to URL, butuh Pro PlusSend to URL di Pro Plus, atau Embed di Pro Standard
FramerMengirim setiap kiriman ke email, Google Sheets, atau webhookPraktis tanpa batas. Tim menginginkan catatan tersimpan dengan status spam, validasi, notifikasi, dan lebih dari satu tujuanTambahkan endpoint sebagai tujuan webhook, atau gunakan code component

Perhatikan baris Framer. Framer sudah punya webhook, jadi beralih dari formulirnya adalah pilihan tentang apa yang terjadi setelah kiriman, bukan cara mengakali batas. Halaman Framer jujur tentang kapan Anda sama sekali tidak butuh Ikiform.

Empat cara melewati batas

Backend formulir bukan satu-satunya jawaban, dan terkadang bukan yang terbaik.

PendekatanUnggul dalamKekurangan
Upgrade paket builderTanpa migrasi. Paket situs berbayar Webflow mencantumkan kiriman tanpa batas; paket berbasis kredit Netlify membuat formulir gratisAnda membayar seluruh paket untuk mengangkat satu batas. Formulir tetap terikat pada builder dan host itu
Sematkan form builder, seperti Tally atau TypeformJenis pertanyaan yang kaya, logika, dan upload file tanpa kodeIframe dengan tampilan dan script sendiri. Desain yang Anda bangun di builder hilang, dan batasnya pindah ke paket produk itu
Tulis handler sendiri, seperti serverless functionKontrol penuh, logika apa pun yang Anda mauKini Anda yang menangani penyaringan spam, rate limit, penyimpanan, notifikasi, dan percobaan ulang, di situs yang Anda pilihkan builder justru agar tidak perlu menjalankan kode
Arahkan formulir ke backend formulir, seperti IkiformMempertahankan desain Anda. Penyaringan spam, penyimpanan, email tim, webhook bertanda tangan, dan ekspor CSV, sama di setiap builderBelum ada upload file, tidak ada inbox builder, dan tidak ada integrasi yang dirangkai dengan klik di dalam builder. Beberapa builder butuh paket berbayar untuk mengirim ke tempat lain

Upgrade jika formulir builder sudah melakukan semua yang Anda butuhkan dan paketnya juga sepadan karena alasan lain. Pindah ke backend formulir jika batasnya menyangkut formulir itu sendiri: Anda ingin satu tempat untuk kiriman dari beberapa situs, Anda mungkin ganti builder, atau kiriman perlu sampai ke alat lain dengan andal. Perbandingan Netlify Forms membahas pertimbangan itu secara rinci untuk satu host.

Apa yang Anda lepaskan

Saat formulir mengirim ke tempat lain, builder memperlakukannya sebagai formulir HTML biasa. Fitur formulirnya tidak lagi berlaku untuk formulir itu. Ketahui daftarnya sebelum beralih:

  • Inbox builder. Kiriman baru muncul di dashboard Ikiform, bukan di builder. Kiriman lama tetap di tempatnya.
  • Pesan sukses builder, terkadang. Blok sukses dan error Webflow hanya berjalan saat Webflow menangani kiriman. Mode AJAX Carrd dan tujuan webhook Framer tetap mempertahankan miliknya.
  • Upload file. Upload file belum didukung. Kiriman dengan file mendapat 422 files_not_supported. Formulir kustom Webflow, Netlify, dan Carrd semuanya menerima file, jadi periksa ini dulu.
  • Integrasi yang dirangkai dengan klik. Tidak ada integrasi sekali klik. Setiap alat dijangkau lewat webhook bertanda tangan, langsung atau melalui alat otomasi seperti Zapier atau n8n.
  • Filter spam builder. Honeypot, penilaian spam, rate limit, dan pemeriksaan manusia opsional dari Ikiform mengambil alih. Elemen reCAPTCHA yang ditambahkan di builder tidak berguna dengan tujuan kustom; hapus saja.
Jika sebuah formulir butuh upload file, biarkan formulir itu di builder dan pindahkan sisanya. Tidak ada yang mengharuskan setiap formulir di satu situs memakai backend yang sama.

Arahkan setiap builder ke Ikiform

Buat formulir di dashboard Ikiform dan salin endpoint-nya. Lalu gunakan pengaturan builder untuk tujuan luar. Panduan dokumentasi untuk Webflow, Carrd, dan Framer berisi langkah klik lengkapnya; berikut apa yang perlu diubah dan satu hal yang paling sering terlewat.

Webflow

  1. Pilih formulir di dalam Form Block dan buka Settings.
  2. Di Send to, pilih custom action, tempel endpoint ke Action, dan atur Method ke POST.
  3. Ganti Name setiap input menjadi id huruf kecil seperti email. Webflow mengisi nama dari label, jadi jika tidak Anda akan mendapat Email dan Field 2.
  4. Publikasikan dan kirim dari domain webflow.io. Custom action tidak berjalan di Designer.

Mudah terlewat: blok sukses Webflow berhenti tampil, karena Webflow tidak lagi melihat hasilnya. Atur Redirect after submit di Ikiform, atau tambahkan script dari dokumentasi Webflow. Detail dan batas Starter ada di halaman batas Webflow.

Netlify

  1. Hapus data-netlify atau netlify, netlify-honeypot, dan input form-name tersembunyi mana pun.
  2. Atur action formulir ke endpoint dan method ke post.
  3. Pindahkan path halaman terima kasih lama ke Redirect after submit, sebagai URL https: lengkap.
  4. Untuk formulir JavaScript, hapus salinan statis tersembunyi yang Anda simpan untuk build Netlify, dan kirim ke endpoint alih-alih ke situs Anda sendiri.

Mudah terlewat: deploy preview berada di subdomain netlify.app-nya sendiri, jadi domain produksi Anda di Allowed domains tidak mencakupnya. Halaman Netlify berisi kode untuk setiap framework.

Carrd

  1. Di Pro Plus, tambahkan Form, atur Type ke Custom, lalu Send to URL, dan tempel endpoint.
  2. Atur Method ke AJAX dan Format ke Default, agar Carrd mempertahankan perilaku On Success dan On Failure.
  3. Beri setiap field ID atau Submitted ID: name, email, message.
  4. Di Pro Standard, tempel formulir HTML ke elemen Embed sebagai gantinya.

Mudah terlewat: format XML gagal dengan 415, dan field File gagal dengan 422 files_not_supported. Lihat halaman Carrd.

Framer

  1. Beri setiap input nama huruf kecil. Framer mengirim nama itu sebagai key JSON.
  2. Pilih formulir, dan di sebelah Send To pilih Addโ€ฆ > Webhook, lalu tempel endpoint.
  3. Di Ikiform, biarkan Allowed domains kosong dan Spam check mati, lalu pilih rate limit Relaxed.

Mudah terlewat: Framer mengirim dari server-nya, bukan dari browser pengunjung, jadi pemeriksaan origin dan rate limit per pengunjung tidak bekerja seperti biasa. Halaman Framer menjelaskan kompromi itu dan relay bertanda tangan yang memperbaikinya.

Squarespace, Wix, WordPress, dan lainnya

Builder tanpa pengaturan tujuan luar biasanya menerima embed HTML. Tempel formulir seperti di bawah ke blok code atau embed. Formulir mengirim dengan fetch agar pengunjung tetap di halaman, menampilkan error field pertama dari Ikiform, dan kembali ke post biasa jika script tidak berjalan.

Blok embed atau code
<form id="enquiry" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <label>Name <input name="name" autocomplete="name" required maxlength="120"></label>
  <label>Email <input name="email" type="email" autocomplete="email" required></label>
  <label>Budget
    <select name="budget">
      <option value="">Not sure yet</option>
      <option value="under_5k">Under $5k</option>
      <option value="5k_20k">$5k to $20k</option>
      <option value="over_20k">Over $20k</option>
    </select>
  </label>
  <label>What are you planning? <textarea name="message" rows="5" required minlength="20"></textarea></label>
  <input type="hidden" name="source" value="builder-embed">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <p id="enquiry-status" role="status" hidden></p>
  <button type="submit">Send enquiry</button>
</form>
<script>
  document.getElementById("enquiry").addEventListener("submit", async (event) => {
    event.preventDefault();
    const form = event.currentTarget;
    const status = document.getElementById("enquiry-status");
    const button = form.querySelector("button");
    button.disabled = true;
    try {
      const response = await fetch(form.action, {
        method: "POST",
        headers: { Accept: "application/json" },
        body: new FormData(form),
      });
      const result = await response.json();
      if (result.ok) {
        form.replaceChildren(Object.assign(document.createElement("p"), {
          textContent: "Thanks. We reply within two working days.",
        }));
        return;
      }
      const fields = result.error.fields ?? {};
      const first = Object.keys(fields)[0];
      status.textContent = first ? `${first}: ${fields[first][0]}` : result.error.message;
    } catch {
      status.textContent = "Couldn't send. Check your connection and try again.";
    }
    status.hidden = false;
    button.disabled = false;
  });
</script>
  • target="_top" penting saat builder membungkus embed dalam iframe. Tanpanya, post biasa akan memuat halaman terima kasih di dalam frame.
  • Input _gotcha tersembunyi adalah honeypot. Orang tidak melihatnya; bot yang mengisi setiap input menandai dirinya sendiri sebagai spam.
  • Input source tersembunyi mencatat dari builder atau halaman mana pertanyaan itu datang, yang membantu saat beberapa situs mengirim ke satu formulir.
  • Script mengirim dengan fetch, jadi biarkan Spam check mati untuk formulir ini, atau hapus script dan biarkan browser mengirim secara normal, yang menjalankan pemeriksaan tanpa kode tambahan.

Panduan Squarespace, Wix, dan WordPress membahas di mana setiap builder mengizinkan Anda menempel kode, dan embed site builder punya versi yang sudah diberi gaya.

Siapa yang mengirim post di setiap builder, dan apa artinya bagi allowed domainsWebflowcustomactionbrowserpengunjungcantumkandomain AndaCarrdSend to URLatau Embedbrowserpengunjungcantumkandomain AndaNetlifyaction biasabrowserpengunjungdomain pluspreviewFramertujuanwebhookserverFramerbiarkankosongbuilderpengaturansiapa yang mengirimdomain yangdiizinkanSiapa yang mengirim post di setiap builder, dan apa artinya bagi allowed domainsWebflowcustomactionbrowserpengunjungcantumkandomainAndaCarrdSendtoURLatauEmbedbrowserpengunjungcantumkandomainAndaNetlifyactionbiasabrowserpengunjungdomainpluspreviewFramertujuanwebhookserverFramerbiarkankosongbuilderpengaturansiapayangmengirimdomainyangdiizinkan
  1. Custom action Webflow membuat browser pengunjung mengirim ke Ikiform, jadi cantumkan domain Anda di Allowed domains.
  2. Send to URL dan Embed di Carrd juga mengirim dari browser, jadi allowed domains bekerja seperti biasa.
  3. Formulir yang di-host Netlify dengan action biasa mengirim dari browser. Cantumkan domain produksi dan domain preview mana pun yang Anda pakai untuk menguji.
  4. Tujuan webhook Framer mengirim dari server Framer tanpa header Origin, jadi biarkan Allowed domains kosong, atau setiap post dianggap datang dari situs yang salah.
Tiga builder mengirim post dari browser pengunjung. Webhook Framer mengirimnya dari Framer, yang mengubah cara pemeriksaan spam dan rate limit melihatnya.

Nama field adalah migrasi yang sebenarnya

Sebagian besar pekerjaan memindahkan formulir builder adalah soal penamaan. Ikiform menyimpan nama apa pun yang dikirim formulir, dan setiap builder membuat nama dengan caranya sendiri:

BuilderDari mana nama berasalApa yang Anda dapat jika tidak mengaturnya
WebflowPengaturan Name setiap inputLabelnya, seperti Name, Email, atau Field 2
CarrdSubmitted ID, lalu IDID yang dibuat dari label
FramerNama setiap inputNama apa pun yang dipakai input saat Anda menambahkannya
NetlifyAtribut name di HTML AndaNama Anda sendiri, biasanya sudah baik

Ganti nama menjadi id pendek huruf kecil sebelum live: name, email, budget, message. Email notifikasi dan kolom CSV lebih mudah dibaca, dan field email menjadi alamat reply-to setiap notifikasi. Setelah kiriman asli pertama tiba, tambahkan field ke formulir Ikiform agar server menegakkan tipe dan panjang. Coba formulir pertanyaan di atas dengan definisinya:

Pratinjau

Menjalankan validator Ikiform di browser Anda. Tidak ada yang dikirim.

Field yang sama dengan embed di atas. Tempel definisinya di tab Fields formulir dan Ikiform memeriksa setiap post terhadapnya, bagaimanapun builder mengirimnya.
Definisikan field setelah Anda melihat satu kiriman asli, bukan sebelumnya. Builder menambahkan field yang tidak Anda minta, seperti field UTM Carrd, dan definisi yang tidak mencantumkannya membuat setiap post menjadi 422 dengan error Unknown field.

Domain staging dan allowed domains

Builder memublikasikan ke alamat staging sebelum domain Anda sendiri. Post dari domain yang tidak ada di Allowed domains formulir disimpan sebagai spam, atau ditolak dengan Reject. Cantumkan setiap alamat yang akan Anda pakai untuk menguji:

BuilderAlamat stagingTambahkan
Webflowyour-site.webflow.ioHost itu, plus domain Anda
Carrdyour-site.carrd.co, atau crd.co di ProHost itu, plus domain Anda
Netlifyyour-site.netlify.app, dan preview seperti deploy-preview-42--your-site.netlify.appSetiap host yang Anda pakai untuk menguji. Preview bukan subdomain dari your-site.netlify.app
Framer, webhookTidak berlakuTidak ada. Biarkan daftar kosong

Jangan tambahkan seluruh host bersama seperti webflow.io atau netlify.app. Itu akan membuat setiap situs di host tersebut bisa mengirim ke formulir Anda. Subdomain dari domain yang Anda cantumkan sudah diizinkan, jadi example.com mencakup www.example.com.

Bawa serta kiriman lama Anda

Ikiform tidak punya fitur import, jadi kiriman lama tetap di tempatnya. Ekspor sebelum Anda beralih, dan sebelum perubahan paket bisa menghapusnya:

  • Webflow: unduh kiriman setiap formulir sebagai CSV dari pengaturan Forms situs.
  • Netlify: unduh kiriman setiap formulir sebagai CSV dari bagian Forms situs.
  • Carrd: formulir kontak dan formulir email kustom mengirim setiap pesan lewat email, jadi inbox Anda adalah catatannya.
  • Framer: inbox email atau Google Sheet tujuan kiriman Anda adalah catatannya.

Untuk menyimpan satu riwayat, taruh ekspor lama dan ekspor CSV Ikiform di dua tab dalam satu Google Sheet lalu tumpuk keduanya. Formula ini mengambil kolom tanggal, nama, email, dan pesan dari masing-masing, yang terbaru lebih dulu. Sesuaikan huruf kolom dengan file Anda:

Google Sheets
=SORT({
  Webflow!A2:A, Webflow!C2:C, Webflow!D2:D, Webflow!E2:E;
  Ikiform!B2:B, Ikiform!F2:F, Ikiform!G2:G, Ikiform!H2:H
}, 1, FALSE)

Ekspor Ikiform diawali id, created_at, form, dan status, lalu satu kolom per field, dan memuat hingga 100.000 baris per file.

Beralih tanpa kehilangan satu kiriman pun

  1. Buat formulir Ikiform, tambahkan penerima notifikasi, dan tambahkan domain staging serta live Anda di Allowed domains.
  2. Ubah tujuan di situs staging dan kirim uji sungguhan dari ponsel dan laptop.
  3. Periksa nama field kiriman di dashboard. Ganti nama apa pun yang dibuat otomatis, publikasikan staging lagi, uji ulang.
  4. Publikasikan ke domain live Anda di jam sepi dan kirim satu uji lagi.
  5. Biarkan notifikasi builder aktif selama seminggu jika masih menerima sesuatu, seperti formulir kedua yang tidak Anda pindahkan, lalu matikan.
  6. Ekspor kiriman lama dari builder dan simpan file-nya bersama riwayat baru.

Selama minggu pertama, periksa filter Spam di dashboard Ikiform setiap satu atau dua hari. Pertanyaan asli yang tersimpan sebagai spam mendapat jawaban sukses yang sama seperti yang asli, jadi pengunjung tidak pernah tahu. Tandai sebagai bukan spam dan email serta webhook-nya akan terkirim saat itu. Email notifikasi dikirim ke hingga 10 penerima terkonfirmasi.

Pilih situasi Anda

Setiap builder punya batasnya sendiri, pengaturan tujuan luarnya sendiri, dan jebakannya sendiri. Halaman-halaman ini membahas satu builder per halaman.

Pastikan berfungsi

Jalankan ini di staging dulu, lalu sekali di situs live. Ikiform tidak punya paket gratis. Pengujian gratis: workspace tanpa paket menerima 50 kiriman uji per bulan dari localhost. Untuk live, pilih Pro mulai $6/bln untuk 500 kiriman, atau bayar sekali: 10.000 kiriman seharga $49 atau 50.000 kiriman seharga $149, dengan kredit yang tidak pernah kedaluwarsa. Lihat harga.

  1. Di Allowed domains formulir, tambahkan domain situs Anda, ditambah localhost selama pengembangan. Biarkan kosong untuk menerima kiriman dari mana saja.
  2. Publikasikan ke domain staging builder. Tujuan kustom tidak berjalan di editor atau designer.
  3. Isi formulir di halaman Anda lalu kirim. Anda mendarat di halaman terima kasih Anda, atau halaman hosted milik Ikiform.
  4. Buka Submissions di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
  5. Baca nama field di kiriman itu. Seharusnya berupa id huruf kecil Anda, bukan label atau nama yang dibuat otomatis.
  6. Cek inbox setiap penerima notifikasi. Masing-masing mendapat email berisi field, dan Reply terkirim ke pengirim formulir jika formulir punya field email.
  7. Kirim dengan honeypot terisi, _gotcha=bot. Kiriman tetap mendapat jawaban sukses, tetapi disimpan sebagai spam dan tidak memicu email atau webhook.
  8. Tidak ada yang masuk? Ubah filter status di dashboard ke Spam. Spam mendapat jawaban sukses yang sama dengan kiriman asli.
  9. Kirim sekali lagi dari domain live Anda setelah memublikasikan di sana.

Pemecahan masalah

MasalahYang harus dilakukan
Respons 404 not_found setelah mengirim formulir WebflowMethod bernilai GET, jadi browser membuka endpoint seperti tautan. Atur ke POST dan publikasikan lagi.
Carrd menampilkan On Failure di setiap kirimanFormat bernilai XML (415), ada field File (422), atau ID field tidak cocok dengan definisi field. Gunakan Default, hapus field file, dan samakan ID-nya.
Framer melaporkan pengiriman webhook yang gagalIkiform menolak post. Kosongkan Allowed domains, matikan Spam check untuk formulir itu, dan samakan nama input dengan field Anda.
Netlify masih menampilkan formulir di tab Forms-nyaDeploy lama atau salinan statis formulir masih punya data-netlify. Hapus di semua tempat dan deploy lagi.
403 origin_not_allowed, atau setiap kiriman masuk ke spamDomain halaman tidak ada di Allowed domains formulir. Tambahkan, ditambah localhost untuk uji lokal. Subdomain dari domain yang terdaftar diizinkan.
422 validation_failedKiriman tidak cocok dengan definisi field formulir. error.fields menyebutkan setiap field dan alasannya. Samakan name input dengan ID field.
422 files_not_supportedFormulir punya <input type="file"> dengan file yang dipilih. Upload file belum didukung; hapus input itu atau minta link sebagai gantinya.
Kiriman ada di dashboard tetapi tidak ada email atau webhook yang datangKiriman itu disimpan sebagai spam. Spam tidak mengirim apa pun. Buka di filter Spam untuk melihat alasannya, dan tandai sebagai bukan spam untuk mengirim email dan webhook-nya.

Pertanyaan

Mentok di salah satu langkah, atau ingin panduan untuk situasi Anda? Email hello@ikiform.com.