Formulir yang jalan tanpa backend
Tambahkan satu atribut ke formulir di situs statis kamu dan setiap kiriman mendarat di dashboard. Tanpa JavaScript, tanpa widget tempelan, tanpa layanan pihak ketiga, dan orang yang mengisinya pun tidak perlu mendaftar apa-apa.
Its markup, styles and deploy script are on GitHub — copy it, change the fields, redeploy.
<form harvis-form="contact"> <input name="email" type="email" required> <textarea name="message"></textarea> <button>Send</button> </form>
Tiga langkah, dan salah satunya cuma deploy ulang
Tidak ada pembuat formulir yang harus dipelajari dan tidak ada endpoint yang harus disalin. Atribut itulah seluruh setelannya.
- 01
Tambahkan atributnya
Taruh harvis-form di formulir mana pun dalam HTML kamu. Beri nama kalau situsnya punya lebih dari satu. Biarkan action dan method kosong — keduanya diisi saat halaman disajikan.
- 02
Deploy ulang
Seret foldernya lagi, atau jalankan npx harvis. Tidak ada yang perlu dikonfigurasi, tidak ada kunci yang perlu ditempel, tidak ada sakelar yang harus dinyalakan dulu di dashboard.
- 03
Baca yang masuk
Kiriman muncul di bawah situs kamu di dashboard, yang terbaru di atas. Buka satu baris untuk membaca semuanya, atau ambil semuanya sekaligus sebagai CSV.
Semuanya cuma dua atribut
harvis menulis ulang formulirnya saat keluar dari server, jadi halaman yang kamu tulis tetap jadi halaman yang kamu tulis.
<form harvis-form="contact"
data-harvis-redirect="/thanks.html">
<input name="email" type="email" required>
<button>Send</button>
</form><form harvis-form="contact"
data-harvis-redirect="/thanks.html"
action="/__harvis/form/contact" method="post">
<input type="hidden" name="_harvis_redirect" value="/thanks.html">
<input type="text" name="_harvis_hp" tabindex="-1" aria-hidden="true" style="…">
<input name="email" type="email" required>
<button>Send</button>
</form>Dua atribut itu
- harvis-form
- Menandai formulir sebagai formulir yang dikumpulkan. Nilainya jadi namanya, supaya beberapa formulir di satu situs tetap terpisah; kalau nilainya dikosongkan, kiriman dikumpulkan di bawah “default”.
- data-harvis-redirect
- Opsional. Halaman di situs kamu yang jadi tujuan orang setelah mengirim. Apa pun yang mengarah ke luar situs kamu akan diabaikan.
Kalau formulirnya dibangun JavaScript, tulis sendiri endpoint-nya
harvis mengisi action tepat saat halaman meninggalkan server. Formulir yang baru ada setelah bundle-mu berjalan belum ada di halaman itu, jadi tak ada yang bisa diisi — kamu menuliskan apa yang seharusnya ditulis oleh penulisan ulang tadi. Ini tetap post HTML biasa, dan semua hal lain di halaman ini tetap berlaku.
- React
- Vue
- Svelte
- Angular
<form action="/__harvis/form/contact" method="post">
<input name="email" type="email" required />
<textarea name="message" />
{/* optional — where to land after sending */}
<input type="hidden" name="_harvis_redirect" value="/thanks" />
{/* optional — the decoy harvis would have added */}
<input
type="text"
name="_harvis_hp"
tabIndex={-1}
autoComplete="off"
aria-hidden="true"
style={{ position: "absolute", left: "-9999px", opacity: 0 }}
/>
<button>Send</button>
</form>- action + method
- Endpoint yang tadinya akan ditulis harvis, ditambah post. Segmen terakhir adalah nama formulirnya — huruf kecil, angka, dan tanda hubung; selain itu dikumpulkan di bawah “default”.
- _harvis_redirect
- Opsional, dan versi tulis tangan dari data-harvis-redirect. Harus path di situsmu sendiri; apa pun yang menunjuk ke luar diabaikan.
- _harvis_hp
- Opsional, dan satu-satunya yang hilang kalau kamu menulis formulirnya sendiri: umpan penangkap bot. Dorong ke luar layar alih-alih display:none, dan biarkan kosong — apa pun yang mengisinya dibuang.
- harvis-form
- Jangan dipasang. Atribut itu adalah permintaan agar harvis menuliskan action-nya, dan kamu baru saja menulisnya sendiri.
Biarkan peramban yang mengirim
Tanpa preventDefault, tanpa fetch. Balasannya adalah pengalihan yang diikuti peramban sendiri, dan itulah yang membuat formulir tetap jalan saat skrip tidak jalan.
Prerender tetap terhitung JavaScript
Kalau build-mu menulis formulir ke dalam HTML lalu aplikasimu mengambil alih di peramban, tulis saja tetap field-nya — yang disisipkan harvis tidak ada di komponenmu, jadi hidrasi bisa membuangnya.
Apa yang kamu dapat
Semua di bawah ini sudah aktif sejak awal. Tidak ada halaman pengaturan untuk satu pun dari ini.
Tanpa JavaScript
Formulir mengirim seperti cara HTML mengirim sejak dulu. Tetap jalan meski skrip diblokir, di ponsel yang lambat, dan di browser yang cuma menampilkan teks.
Spam disaring
Setiap formulir disajikan dengan kolom umpan yang tidak terlihat manusia, dan apa pun yang mengisinya dibuang tanpa pemberitahuan. Batas laju membatasi berapa banyak yang bisa dikirim satu pengunjung, dan satu situs, dalam sejam.
Formulir sebanyak yang kamu mau
Beri nama masing-masing — formulir kontak dan formulir pendaftaran di situs yang sama sama-sama punya daftar sendiri, dan bisa kamu filter serta ekspor terpisah.
Halaman terima kasih buatan sendiri
Arahkan formulir ke halaman yang kamu tulis sendiri, dan di situlah orang mendarat setelah mengirim. Kalau tidak diisi, mereka akan melihat halaman konfirmasi sederhana.
Ekspor kapan saja
Satu tombol memberi kamu CSV dengan satu kolom untuk setiap kolom yang pernah dikirim siapa pun, jadi formulir yang menambah pertanyaan di tengah jalan tetap terbuka sebagai satu tabel.
Tidak ada yang mengikuti siapa pun
Tanpa skrip pelacak, tanpa cookie, tanpa pihak ketiga di dalam halaman. Alamat pengunjung di-hash sebelum disimpan, dan itu pun hanya supaya batas laju bisa membedakan dua kiriman.
Batasannya
Longgar untuk formulir kontak, dan cukup ketat supaya skrip yang diarahkan ke situs kamu tidak membanjiri kotak masuk.
- Kolom per kiriman
- 30
- Panjang satu kolom
- 5.000 karakter
- Ukuran satu kiriman
- 64 KB
- Kiriman per situs
- 60 per jam
- Kiriman per pengunjung
- 20 per jam
- Disimpan per situs
- 1.000, terbaru dulu
Pertanyaan
Yang biasa ditanyakan orang sebelum menaruh formulir di situs statis.
Apa itu formulir statis?
Formulir di situs yang tidak punya server sendiri. Biasanya itu berarti formulirnya tidak punya tempat untuk mengirim apa pun, dan karena itulah situs statis biasanya meminjam layanan formulir pihak ketiga. harvis toh sudah menyajikan setiap halaman situs kamu, jadi dia bisa menerima kirimannya sekalian di jalan.
Apakah aku harus bisa coding?
Kamu cuma perlu bisa menambahkan satu kata ke satu baris HTML. Kalau situsmu ditulis AI, minta saja dia menambahkan atribut harvis-form ke formulirnya — dia tahu caranya, karena instruksi yang harvis terbitkan untuk asisten AI memang menyebutkannya.
Apakah tetap jalan kalau JavaScript dimatikan?
Ya. Justru itu alasannya dibuat seperti ini. Formulirnya melakukan post HTML biasa dan browser mengikuti sebuah pengalihan setelahnya, persis seperti cara formulir bekerja sebelum JavaScript ada.
Bisakah aku tetap pakai endpoint sendiri atau layanan formulir lain?
Bisa — cukup jangan tambahkan atributnya. Formulir tanpa harvis-form disajikan persis seperti yang kamu tulis, action dan semuanya. Pada formulir yang punya atribut itu, harvis mengganti action-nya, karena menambahkan atribut itulah cara kamu menyatakan ke mana kiriman harus pergi.
Apakah ini jalan dengan React, Vue, atau Svelte?
Jalan, dengan satu langkah tambahan. Kalau formulirnya ada di HTML yang dihasilkan build-mu, cukup atributnya saja. Kalau ia baru muncul setelah JavaScript berjalan, tulis action="/__harvis/form/contact" dan method="post" di komponennya — endpoint sama, dasbor sama, dan yang mengirim tetap peramban.
Bisakah orang melampirkan file?
Belum. Kolom file di formulir yang dikumpulkan tetap berfungsi untuk pengunjung, tapi filenya tidak disimpan — hanya kolom teks yang dipertahankan.
Apa yang terjadi pada kiriman kalau situsnya aku hapus?
Ikut hilang. Kiriman milik situs, bukan milik satu deploy, jadi deploy ulang tetap menyimpannya dan menghapus situs menghilangkannya untuk selamanya. Ekspor CSV dulu kalau kamu ingin menyimpannya.
Bikin situs online dan coba sendiri
Publikasi itu gratis dan makan waktu sekitar dua detik. Tambahkan atributnya ke sebuah formulir, deploy ulang, lalu kirim pesan uji ke dirimu sendiri.