Guides

99 guides

  1. Launch

    How to create a waitlist for a new SaaS

    Build a pre-launch waitlist on your own landing page: the form, spam protection, duplicates, confirmation emails and a clean export on launch day.Preet SutharFounder, Ikiform
  2. Contact

    Add a contact form to a static site without a backend

    Add a working contact form to a static site with no server: where the POST goes, spam, replies by email, and code for every host and framework.Preet SutharFounder, Ikiform
  3. Contact

    Send HTML form submissions to your email

    Get every form submission in your inbox without a mail server: why mailto: and PHP mail() fail, and a setup that filters spam and lets you reply.Preet SutharFounder, Ikiform
  1. Spam

    How to stop contact form spam

    Stop contact form spam with layers that cost real people nothing: a honeypot, timing, content scoring, rate limits and a human check only where needed.Preet Suthar
  2. Site builders

    Outgrow your website builder's forms

    When Webflow, Netlify, Carrd or Framer forms hit a cap or a missing feature, keep the form you designed and point it at a form backend instead.Preet Suthar
  3. Feedback

    Add a feedback form to your website or app

    Put a feedback form on any page or inside your app: a rating, a comment, the page it came from, spam filtering, and alerts when a score is low.Preet Suthar
  4. Contact

    Build a lead capture form that reaches you fast

    A lead capture form on your own site that emails you with reply-to, pings team chat and feeds your CRM, so you answer while the lead is still there.Preet Suthar
  5. Launch

    Newsletter signup form without Mailchimp's embed

    Build a newsletter signup form in your own markup, record consent, block bot signups and pass each subscriber to Kit, MailerLite, beehiiv or any tool.Preet Suthar
  6. Developers

    How HTML form submission works

    What a browser does when a form is submitted: which fields it sends, how it encodes them, what the server should answer, and how Ikiform answers.Preet Suthar
  7. Launch

    Event registration and RSVP forms on your own site

    Take RSVPs on your own event page: the form, guest limits, an honest headcount, closing when full and a check-in list, without a ticketing app.Preet Suthar
  8. Developers

    Verify form webhook signatures

    Check that a form webhook really came from Ikiform: the Standard Webhooks HMAC-SHA256 scheme, a test vector, raw bodies, timestamps and secret rotation.Preet Suthar
  9. Launch

    How to build a pre-launch email list for a Product Hunt launch

    Collect a launch list weeks before Product Hunt, tag each signup by channel, and send the launch-day email in two waves timed to the Pacific Time reset.Preet Suthar
  10. Launch

    How to build a beta signup form that screens applicants

    A beta application form with screening questions the server enforces, and a script that scores applicants and picks each cohort from the list.Preet Suthar
  11. Launch

    How to build a waitlist page for a mobile app before App Store launch

    A pre-launch waitlist for an iOS or Android app that asks which phone people use, sends iPhone testers to TestFlight and fills a Play closed test.Preet Suthar
  12. Launch

    How to build a Next.js waitlist with a server action

    A Next.js App Router waitlist: a server action that forwards signups with a secret key, useActionState, an optimistic thank-you and a per-visitor limit.Preet Suthar
  13. Launch

    How to add a waitlist to a Framer site

    Two ways to collect waitlist signups on Framer: Framer's form with a webhook to Ikiform, or a code component that keeps per-visitor limits and spam checks.Preet Suthar
  14. Launch

    How to add a waitlist form to a Webflow site

    Point a Webflow Form Block at Ikiform, tag signups by source with a hidden field, and keep Webflow's success state with a short script for every form.Preet Suthar
  15. Launch

    How to add a waitlist to a Carrd site

    Collect waitlist signups on a Carrd page: a Send to URL form on Pro Plus with UTM tracking, or an embedded HTML form with a honeypot on Pro Standard.Preet Suthar
  16. Launch

    How to add a waitlist form in plain HTML to any landing page

    A complete no-build waitlist page in plain HTML that works with JavaScript off, shows an inline thank-you when it loads, and falls back when it must.Preet Suthar
  17. Launch

    Build a waitlist in Astro

    An Astro waitlist on a static landing page: an Action forwards each signup, a script calls it, and one on-demand page catches posts without JavaScript.Preet Suthar
  18. Launch

    Build a waitlist in TanStack Start

    A TanStack Start waitlist: one server route answers both a plain form post and fetch, and validateSearch carries the source and the result in the URL.Preet Suthar
  19. Launch

    Build a waitlist in React Router

    A React Router waitlist in the footer of every page: a fetcher posts to one route action, tags each signup with its page and works without JavaScript.Preet Suthar
  20. Launch

    Build a waitlist in SvelteKit

    A SvelteKit 3 waitlist: a hook keeps the first ?ref= in a cookie, a named form action forwards the signup, and returning visitors see they joined.Preet Suthar
  21. Launch

    Build a waitlist in Nuxt

    A Nuxt waitlist on a prerendered landing page: one Nitro route takes $fetch and plain form posts, checks them with Zod and redirects without JavaScript.Preet Suthar
  22. Contact

    Add a contact form to a GitHub Pages site

    GitHub Pages can't run server code, so a form POST gets 405 Not Allowed; post to a form backend instead and get project-site redirects right.Preet Suthar
  23. Contact

    Fix the 405 error on a contact form hosted on Vercel

    A static page on Vercel answers a form POST with 405 Method Not Allowed; here is why, and how to send the form to a backend instead.Preet Suthar
  24. Contact

    Add a contact form on Netlify without Netlify Forms

    Run a contact form on a Netlify site without Netlify Forms: no build-time detection, JSON posts from React, and a separate form for deploy previews.Preet Suthar
  25. Contact

    Add a contact form to a Cloudflare Pages site

    Add a contact form to Cloudflare Pages without writing a Function: post to a form backend, set headers in _headers and use your own Turnstile keys.Preet Suthar
  26. Contact

    Add a contact form to an Amazon S3 static website

    S3 website endpoints accept only GET and HEAD over plain HTTP, so post the contact form to a form backend and get redirects right with CloudFront.Preet Suthar
  27. Contact

    Add a contact form to your portfolio website

    A portfolio contact form that asks the questions you'd ask on a first call: project, budget, timing and a link, with no server and replies from your inbox.Preet Suthar
  28. Contact

    Send an HTML form to email without PHP

    Replace a contact.php script that calls mail() with a form that posts to a hosted endpoint, keeping your field names, your thank-you page and replies.Preet Suthar
  29. Contact

    Send a website form to Gmail (and why mailto: fails)

    Get form submissions in Gmail without mailto: links, app passwords or Apps Script, then label them, keep them out of spam and reply from Gmail.Preet Suthar
  30. Contact

    Send one form to several email addresses

    Email one form to your whole team, or route each message to the right person by topic, without letting the form itself pick who gets the mail.Preet Suthar
  31. Contact

    Reply to form submissions straight from your inbox

    Make Reply on a form notification write to the person who filled in the form: which field names work, when to use _replyto, and why replies go astray.Preet Suthar
  32. Contact

    An EmailJS alternative that keeps keys off the client

    Move a contact form off EmailJS: why browser-side email keys are a risk, what changes in your code, and what you give up, such as the auto-reply.Preet Suthar
  33. Contact

    A Next.js contact form that sends email

    Two ways to email a Next.js form with a Server Action: send it yourself with Resend or Nodemailer, or forward it to a form backend, compared honestly.Preet Suthar
  34. Spam

    How to add a honeypot field that bots fill and people don't

    Add a honeypot to any form that catches bots without tripping screen readers, keyboards or autofill, with the server check for every stack.Preet Suthar
  35. Spam

    How to add Cloudflare Turnstile to an HTML form

    Add Cloudflare Turnstile to a plain HTML form: the widget, server-side siteverify, test keys, and a way to run it with no keys or server of your own.Preet Suthar
  36. Spam

    How to stop form spam without a captcha

    Stop most form spam with no captcha at all: a honeypot, a signed render time, a content score and a rate limit, added together instead of used alone.Preet Suthar
  37. Spam

    reCAPTCHA alternatives for website forms

    Compare reCAPTCHA alternatives for forms, from Turnstile and hCaptcha to proof-of-work and no captcha at all, then switch with a small, safe change.Preet Suthar
  38. Spam

    How to rate limit form submissions

    Rate limit form submissions per visitor with a shared store, answer 429 with Retry-After, and avoid locking out offices that share one IP.Preet Suthar
  39. Spam

    How to stop spam on a static site contact form

    Stop spam on a static site form even though it can't keep a secret or count posts, with a honeypot partial, a safe script and server-side checks.Preet Suthar
  40. Spam

    How to stop Webflow form spam

    Protect a Webflow form that posts to a form backend, where Webflow's own spam settings never run, with an off-screen honeypot and a human check.Preet Suthar
  41. Spam

    Next.js form spam protection with Turnstile

    Protect a Next.js form from spam: a honeypot, Turnstile checked in a server action, a per-IP limit on Vercel, Netlify or Cloudflare, and a CSP for it.Preet Suthar
  42. Spam

    Astro form spam protection with Turnstile

    Protect an Astro form from spam with an Action: a honeypot, Turnstile checked with astro:env secrets, a per-IP limit and Astro's built-in CSP.Preet Suthar
  43. Spam

    TanStack Start form spam protection with Turnstile

    Protect a TanStack Start form from spam: function middleware for the client IP, a token bucket, Turnstile verified in a server function, and a CSP.Preet Suthar
  44. Spam

    React Router form spam protection with Turnstile

    Protect a React Router form from spam: a route action with Turnstile, a Workers rate limit keyed on cf-connecting-ip, a .server module and a CSP header.Preet Suthar
  45. Spam

    SvelteKit form spam protection with Turnstile

    Protect a SvelteKit form from spam: a form action with getClientAddress, a per-IP limit, Turnstile behind use:enhance, and a CSP that allows it.Preet Suthar
  46. Spam

    Nuxt form spam protection with Turnstile

    Protect a Nuxt form from spam: a Nitro server route with Turnstile, a per-IP limit in Nitro storage, runtimeConfig secrets and a CSP set in routeRules.Preet Suthar
  47. Site builders

    Webflow form submission limit: what it is and how to get past it

    Webflow's free Starter plan stops collecting after 50 form submissions per site and exported sites get none, so point the Form Block at Ikiform instead.Preet Suthar
  48. Site builders

    Netlify Forms limit: what happens at 100 submissions, and the way out

    Legacy Netlify plans meter form submissions per site and upgrade you automatically, and credit plans can pause the site, so move the form to a backend.Preet Suthar
  49. Site builders

    Carrd forms: send submissions to a form backend

    Carrd's contact form only emails you and custom forms need Pro Plus, so use Send to URL on Plus or an HTML embed on Standard to store every submission.Preet Suthar
  50. Site builders

    Framer forms: when to add a form backend, and how

    Framer forms already send to email, Sheets or a webhook; add Ikiform as the webhook for stored, filtered submissions, team alerts and more destinations.Preet Suthar
  51. Feedback

    Add a bug report form that captures the page, browser and steps

    A bug report form that asks people for steps and severity, and lets the page add the URL, browser, viewport and recent errors on its own.Preet Suthar
  52. Feedback

    Collect feature requests you can count, rank and answer

    A feature request form that asks for the problem instead of the solution, stores requests by theme, counts people not rows, and emails them when it ships.Preet Suthar
  53. Feedback

    Build a floating feedback widget for your React app

    A floating feedback button for a React app that opens a small panel, sends the screen, app version and account with each answer, and never loses a draft.Preet Suthar
  54. Feedback

    Collect beta tester feedback build by build

    A beta feedback form with a personal link per tester and build, two rating scales and a weekly summary that shows whether each build got better.Preet Suthar
  55. Feedback

    Run an NPS survey on your own site, from email link to score

    Run an NPS survey with a 0 to 10 score in the email, a follow-up question on your own page that changes with the score, and a script that calculates NPS.Preet Suthar
  56. Feedback

    Add a cancellation survey to your SaaS cancel flow

    Ask why customers cancel inside your SaaS cancel flow, keep Skip one click away, save the reason to Stripe and Ikiform, and never delay the cancel.Preet Suthar
  57. Feedback

    Build an in-app feedback form in Next.js

    An in-app Next.js feedback form: a server action that reads the session, takes the page from the request and forwards a rating with the user attached.Preet Suthar
  58. Feedback

    Build an in-app feedback form in Astro

    An in-app Astro feedback form: an action that takes the user from middleware locals, the page from the request and the screen from the route pattern.Preet Suthar
  59. Feedback

    Build an in-app feedback form in TanStack Start

    An in-app TanStack Start feedback form: a POST server function with session middleware, the route id as context, and the page read from request headers.Preet Suthar
  60. Feedback

    Build an in-app feedback form with React Router

    A React Router 8 feedback form: a resource route action reads the cookie session, a fetcher posts from the layout, and a no-JS post redirects back.Preet Suthar
  61. Feedback

    Build an in-app feedback form in SvelteKit

    An in-app SvelteKit feedback form: a layout form posts to one form action, which adds the user from locals and the page from the request on the server.Preet Suthar
  62. Feedback

    Build an in-app feedback form in Nuxt

    An in-app Nuxt feedback form: a server route that reads the user session, takes the page from Referer and still works when JavaScript hasn't loaded.Preet Suthar
  63. Contact

    Build a demo request form that books the call

    A book-a-demo form that stores the lead, then sends the visitor to Cal.com or Calendly with their name and email already filled in.Preet Suthar
  64. Contact

    Build a quote request form without file uploads

    A request-a-quote form that collects briefs as shared links instead of uploads, puts a due date on every request, and keeps link-heavy leads out of spam.Preet Suthar
  65. Contact

    Build a consultation request form for a service business

    A consultation request form for accountants, lawyers, coaches and clinics that asks how and when to call, and leaves sensitive details for the call.Preet Suthar
  66. Contact

    Build a project inquiry form for an agency or freelancer

    A start-a-project form for studios and freelancers that sorts inquiries into hot, warm and no-fit by budget and timing before anyone reads the brief.Preet Suthar
  67. Contact

    Send form leads to HubSpot or Pipedrive

    Map each signed Ikiform webhook to HubSpot's contact upsert or Pipedrive's person and lead calls, without duplicate contacts when a delivery is retried.Preet Suthar
  68. Contact

    Build a qualifying lead form in Next.js

    A Next.js App Router lead form that validates with Zod in a server action, keeps first-touch UTMs in a cookie and sends qualified leads to your calendar.Preet Suthar
  69. Contact

    Build a qualifying lead form in Astro

    An Astro lead form built on Actions: Zod validation, first-touch UTMs on a static site, an on-demand contact page and a redirect to your scheduler.Preet Suthar
  70. Contact

    Build a qualifying lead form in TanStack Start

    A TanStack Start lead form: global request middleware for first-touch UTMs, a server function with Zod, and a thrown redirect to your scheduler.Preet Suthar
  71. Contact

    Build a qualifying lead form in React Router

    A React Router framework-mode lead form: root middleware with a signed first-touch cookie, a route action that validates, and a redirect to your scheduler.Preet Suthar
  72. Contact

    Build a qualifying lead form in SvelteKit

    A SvelteKit lead form: the handle hook records first-touch UTMs, a form action validates with Valibot, and redirect() sends qualified leads to a calendar.Preet Suthar
  73. Contact

    Build a qualifying lead form in Nuxt

    A Nuxt lead form: server middleware records first-touch UTMs, one Zod-validated server route serves fetch and plain posts, and good leads book a call.Preet Suthar
  74. Launch

    Double opt-in for a newsletter form you built yourself

    Ikiform doesn't send confirmation emails, so double opt-in runs in your email tool: a relay adds each signup as unconfirmed and the tool sends the link.Preet Suthar
  75. Launch

    Email signup form on a static site, with no server

    Add a newsletter signup form to a Hugo, Jekyll, Eleventy or Astro static site, keep the email tool's API key out of the page and confirm in the tool.Preet Suthar
  76. Launch

    Send your own newsletter form's signups to Kit

    Connect your own newsletter form to Kit with a relay that creates the subscriber, adds them to a Kit form for the incentive email, and tags the placement.Preet Suthar
  77. Launch

    Send your own newsletter form's signups to MailerLite

    Connect your own signup form to MailerLite: a relay adds new readers as unconfirmed for double opt-in and never asks a subscriber to confirm twice.Preet Suthar
  78. Launch

    Send your own newsletter form's signups to beehiiv

    Connect your own signup form to beehiiv: a relay creates each subscription with double opt-in on, the placement as UTM source and the page as referrer.Preet Suthar
  79. Launch

    Build a newsletter signup form in Next.js

    A Next.js footer newsletter form: a server action with a consent check and Turnstile, posting to Ikiform, plus a route handler that adds readers to Kit.Preet Suthar
  80. Launch

    Build a newsletter signup form in Astro

    An Astro newsletter form that stays on prerendered pages: an Astro Action checks consent, posts to Ikiform, and an endpoint adds readers to MailerLite.Preet Suthar
  81. Launch

    Build a newsletter signup form in TanStack Start

    A TanStack Start newsletter form: a server function for in-page signups, a server route as the no-JavaScript fallback, and real signups sent to beehiiv.Preet Suthar
  82. Launch

    Build a newsletter signup form in React Router

    A React Router footer newsletter form: useFetcher posts to a /newsletter route that also works without JavaScript, and a resource route feeds MailerLite.Preet Suthar
  83. Launch

    Build a newsletter signup form in SvelteKit

    A SvelteKit 3 newsletter form in the layout: a form action with consent and an IP limit, use:enhance that stays on the page, and a Kit webhook route.Preet Suthar
  84. Launch

    Build a newsletter signup form in Nuxt

    A Nuxt newsletter form that works with or without JavaScript: a server route with a Turnstile check posts to Ikiform, and a Nitro route feeds beehiiv.Preet Suthar
  85. Developers

    Submit an HTML form without a page reload

    Send a form with fetch and FormData so the visitor stays on the page, with field errors, a loading state, retries and a fallback when scripts fail.Preet Suthar
  86. Developers

    Redirect to a thank-you page after form submit

    Send visitors to your own thank-you page after a form posts: the 303 redirect, the _redirect field, which domains are allowed and what refresh does.Preet Suthar
  87. Developers

    The HTML form action attribute, explained

    What a form's action attribute does, how relative and empty values resolve, how formaction sends one form to two places, and why static hosts answer 405.Preet Suthar
  88. Developers

    HTML form validation in the browser and on the server

    Validate a form with required, type, pattern and min, style errors with :user-invalid, and enforce the same rules on the server with field definitions.Preet Suthar
  89. Launch

    Wedding RSVP form on your own wedding website

    An RSVP form for a wedding website you built yourself: one reply per invitation, a meal per named guest, a deadline and a list of who hasn't replied.Preet Suthar
  90. Launch

    Event registration without Eventbrite, for free community events

    Run registration for a free community event on your own site: session choices, a confirmation email from your own tool, room counts and a check-in list.Preet Suthar
  91. Launch

    Volunteer signup form with shifts, for events and festivals

    A volunteer signup form where people pick shifts, with a phone number for the day, and a script that shows which shifts are short and builds the rota.Preet Suthar
  92. Developers

    Verify webhook signatures in Node.js

    Verify Ikiform webhook signatures in Node.js: raw bodies in Express and Fastify, the SDK, the standardwebhooks package and a tested node:crypto version.Preet Suthar
  93. Developers

    Verify webhook signatures in Python

    Verify Ikiform webhook signatures in Flask, FastAPI and Django, with the standardwebhooks package or the standard library, plus a pytest test.Preet Suthar
  94. Developers

    Verify webhook signatures in Go

    Verify Ikiform webhook signatures in Go with net/http: read the body once, check it with crypto/hmac, test it, or use the Standard Webhooks library.Preet Suthar
  95. Developers

    Verify webhook signatures in PHP and Laravel

    Verify Ikiform webhook signatures in plain PHP with hash_hmac and hash_equals, and in Laravel with the Standard Webhooks library and a CSRF exception.Preet Suthar
  96. Developers

    Verify webhook signatures in Ruby and Rails

    Verify Ikiform webhook signatures in Sinatra with OpenSSL and a Minitest test, and in Rails with the standardwebhooks gem and request.raw_post.Preet Suthar