<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Allen Jones</title>
    <description>The latest articles on DEV Community by Allen Jones (@allenarduino).</description>
    <link>https://dev.to/allenarduino</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F679555%2F89b03aae-198c-48b1-acb5-9637c4f5ef61.jpeg</url>
      <title>DEV Community: Allen Jones</title>
      <link>https://dev.to/allenarduino</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/allenarduino"/>
    <language>en</language>
    <item>
      <title>How to Manage Leads Without a CRM</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sat, 25 Apr 2026 16:58:36 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-manage-leads-without-a-crm-1nhh</link>
      <guid>https://dev.to/allenarduino/how-to-manage-leads-without-a-crm-1nhh</guid>
      <description>&lt;p&gt;You have enquiries coming in.&lt;/p&gt;

&lt;p&gt;People are contacting you about your &lt;br&gt;
services. Potential customers are filling &lt;br&gt;
in your form. Interested buyers are reaching out.&lt;/p&gt;

&lt;p&gt;But somewhere between the first message and the closed deal, something is falling through the cracks.&lt;/p&gt;

&lt;p&gt;Maybe you are managing leads in your inbox and losing track of who you replied to. Maybe you have a spreadsheet you update &lt;br&gt;
inconsistently. Maybe you bought a CRM subscription, spent two days setting it up, and stopped using it after a week because it was too complicated.&lt;/p&gt;

&lt;p&gt;You do not need a CRM. You need something simpler. Something that fits the way a small business actually works.&lt;/p&gt;

&lt;p&gt;This guide shows you how to manage leads without a CRM using a lightweight system that takes about 10 minutes to set up.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Most Small Businesses Do Not
&lt;/h2&gt;

&lt;p&gt;Need a CRM&lt;/p&gt;

&lt;p&gt;HubSpot, Salesforce, and Pipedrive are built for sales teams. They assume you have a dedicated sales person, a pipeline with six stages, lead scoring, deal tracking, activity logging, and someone whose full-time job is keeping the system updated.&lt;/p&gt;

&lt;p&gt;Most small businesses have none of that. &lt;br&gt;
You have a contact form, an inbox, and a growing pile of enquiries you are trying to keep on top of while also running the actual business.&lt;/p&gt;

&lt;p&gt;A full CRM does not help with that. &lt;br&gt;
It adds complexity you do not need on top of a problem you are already struggling with.&lt;/p&gt;

&lt;p&gt;The real question is not which CRM to use. &lt;br&gt;
It is what is the minimum system that actually keeps leads from falling through the cracks.&lt;/p&gt;

&lt;p&gt;The answer is three things:&lt;br&gt;
A pipeline with simple stages.&lt;br&gt;
A way to add notes to each lead.&lt;br&gt;
A follow-up reminder system.&lt;/p&gt;

&lt;p&gt;That is it. If you have those three things, you can manage leads effectively without a CRM.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Three Things That Actually Matter
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. A Simple Pipeline
&lt;/h3&gt;

&lt;p&gt;Most leads move through three stages:&lt;br&gt;
New → Contacted → Converted&lt;/p&gt;

&lt;p&gt;New means the lead has come in, and you have not reached out yet.&lt;/p&gt;

&lt;p&gt;Contacted means you have been in touch and the conversation is ongoing.&lt;/p&gt;

&lt;p&gt;Converted means they became a customer.&lt;/p&gt;

&lt;p&gt;That is the entire pipeline. You do not need a stage for Qualified, Proposal Sent, Negotiation, Contract Review, and Closed &lt;br&gt;
Won. You need to know whether you have talked to this person yet and whether they became a customer.&lt;/p&gt;

&lt;p&gt;At a glance, you can see:&lt;br&gt;
New:        8 people waiting for&lt;br&gt;
a response&lt;br&gt;
Contacted:  5 people in conversation&lt;br&gt;
Converted:  2 people who became customers&lt;/p&gt;

&lt;p&gt;You know immediately where your attention needs to go. &lt;br&gt;
You know your conversion rate without counting anything manually.&lt;br&gt;
2 of 15 leads converted (13%)&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Notes on Every Lead
&lt;/h3&gt;

&lt;p&gt;After every conversation, you need to write something down. Not in a separate notebook. Not in a Google Doc. Right there on the &lt;br&gt;
lead.Called Monday. Interested, but said the budget is tight until next quarter. Wants to revisit in July. Seemed genuinely keen. Worth following up.&lt;/p&gt;

&lt;p&gt;That note is worth more than any CRM feature. When you follow up in July, you know exactly where the conversation left off. You sound prepared. You sound like someone worth doing business with.&lt;/p&gt;

&lt;p&gt;Without the note, you are starting from scratch every time. You ask the same questions again. &lt;br&gt;
You sound like you do not remember them. You lose the deal to someone who does.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Follow-Up Reminders
&lt;/h3&gt;

&lt;p&gt;Most leads do not convert on the first contact. &lt;br&gt;
They need a second email. A second call. A gentle nudge at the right &lt;br&gt;
moment.&lt;/p&gt;

&lt;p&gt;The problem is that "follow up next month" is not a system. It is a hope.&lt;/p&gt;

&lt;p&gt;A follow-up reminder turns that hope into a certainty. You set a date on the lead, and on that date, you receive an email with everything you need to make the follow-up count.&lt;br&gt;
Follow-up reminder: James Garside&lt;br&gt;
from Contact Form&lt;br&gt;
Lead: James Garside&lt;br&gt;
Email: &lt;a href="mailto:james@gmail.com"&gt;james@gmail.com&lt;/a&gt;&lt;br&gt;
Current status: Contacted&lt;br&gt;
Notes: Called Monday. Interested but&lt;br&gt;
budget tight until next quarter.&lt;br&gt;
Revisit in July.&lt;br&gt;
View this lead: [link]&lt;/p&gt;

&lt;p&gt;You open that email. You have the context. &lt;br&gt;
You send the follow-up. You close the deal.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Build This System in 10 Minutes
&lt;/h2&gt;

&lt;p&gt;Formgrid is a form builder and form backend that has all three of those things built directly into every form. A lead pipeline. &lt;br&gt;
Notes on every lead. Follow up reminders with email alerts.&lt;/p&gt;

&lt;p&gt;You do not need a separate CRM. You do not need a Zapier integration to connect your form tool to your lead tracker. Everything is in one place.&lt;/p&gt;

&lt;p&gt;Here is how to set it up.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 1: Sign Up and Create Your Form
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up with Google or your email &lt;br&gt;
address. No credit card required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa590ejt2zmv83285bt64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa590ejt2zmv83285bt64.png" alt="Formgrid signup page" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you are logged in, click &lt;strong&gt;New Form&lt;/strong&gt; and give it a name that matches your use case:&lt;br&gt;
Website Contact Form&lt;br&gt;
Photography Booking Enquiries&lt;br&gt;
Cleaning Service Quote Requests&lt;br&gt;
Contractor Estimate Requests&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkw73gs1mo5ra6bjuszx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkw73gs1mo5ra6bjuszx1.png" alt="Formgrid new form creation" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 2: Connect Your Form
&lt;/h3&gt;

&lt;p&gt;You have two options, depending on whether you already have a form on your website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Use your existing HTML form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already have a contact form on your website, just replace the form action with your Formgrid endpoint URL. One change. &lt;br&gt;
Everything else stays exactly as it is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev/api/f/your-form-id"&lt;/span&gt; 
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Name"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Email"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Message"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send Message&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy your endpoint URL from the form details page in your Formgrid dashboard and paste it into the action attribute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flafra8ygljruiylpilbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flafra8ygljruiylpilbc.png" alt="Formgrid endpoint URL on form details page" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Use the drag and drop builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you do not have a website or you want a standalone shareable form link, click &lt;br&gt;
&lt;strong&gt;Open Builder&lt;/strong&gt; on your form details page.&lt;/p&gt;

&lt;p&gt;Build your form with drag and drop fields. &lt;br&gt;
When you are done, click Save and copy your shareable link. Send it via WhatsApp, email, or embed it on any page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fjeafzj9jij0xoxszqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fjeafzj9jij0xoxszqp.png" alt="Formgrid drag and drop form builder" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Watch Enquiries Become
&lt;/h3&gt;

&lt;p&gt;Tracked Leads&lt;/p&gt;

&lt;p&gt;The moment someone fills in your form, two things happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You receive an instant email notification:&lt;/strong&gt;&lt;br&gt;
New Lead: Website Contact Form&lt;br&gt;
Name: James Grside&lt;br&gt;
Email: &lt;a href="mailto:james@email.com"&gt;james@email.com&lt;/a&gt;&lt;br&gt;
Phone: (555) 234-5678&lt;br&gt;
Message: Hi, I am interested in your&lt;br&gt;
cleaning service for a commercial&lt;br&gt;
property in the city center. Can you&lt;br&gt;
send me a quote?&lt;br&gt;
Submitted: 2 minutes ago&lt;/p&gt;

&lt;p&gt;No more digging through your inbox to find out who contacted you and when. Every lead arrives formatted and ready to act on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The submission appears in your Leads tab:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your form in the Formgrid dashboard &lt;br&gt;
and click the &lt;strong&gt;Leads&lt;/strong&gt; tab. Every submission appears there as a tracked lead with its current status, the time it came in, and the submitter's details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x25753iyrhrosb7p2bs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x25753iyrhrosb7p2bs.png" alt="Formgrid leads tab showing tracked submissions" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the top of the leads tab, you will see &lt;br&gt;
your pipeline summary:&lt;br&gt;
New: 8    Contacted: 5    Converted: 2&lt;/p&gt;

&lt;p&gt;And your conversion rate:&lt;br&gt;
2 of 15 leads converted (13%)&lt;/p&gt;

&lt;p&gt;That is your entire lead pipeline at a glance without a single spreadsheet or CRM.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Move Leads Through the Pipeline
&lt;/h3&gt;

&lt;p&gt;When you reply to a lead, open it in your dashboard and change its status from &lt;br&gt;
&lt;strong&gt;New&lt;/strong&gt; to &lt;strong&gt;Contacted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When they become a customer, change it &lt;br&gt;
to &lt;strong&gt;Converted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lyv3sjeczegm31elrta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lyv3sjeczegm31elrta.png" alt="Lead status dropdown in Formgrid dashboard" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also update multiple leads at once using bulk actions. Select the leads you replied to this morning and mark them all as Contacted in one click.&lt;/p&gt;

&lt;p&gt;The pipeline updates instantly. Your conversion rate updates automatically. You always know where things stand.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 5: Add Notes After Every
&lt;/h3&gt;

&lt;p&gt;Conversation&lt;/p&gt;

&lt;p&gt;When you have a call or exchange emails with a lead, open their record in the dashboard and add a note.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpl2u4j43dpklj6zfzhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpl2u4j43dpklj6zfzhp.png" alt="Lead detail view showing notes field in Formgrid" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a notes field on every lead that accepts up to 2000 characters. Write whatever you need to remember:&lt;br&gt;
Called Tuesday. Interested in the monthly cleaning package for their office.Wants a quote for 3 visits per week. The said budget is around $800 per month. Partner needs to approve. Follow up&lt;br&gt;
after the 20th.&lt;/p&gt;

&lt;p&gt;The next time you open that lead, your note is right there. You always know where the conversation stands before you pick up the phone.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 6: Set Follow-Up Reminders
&lt;/h3&gt;

&lt;p&gt;If a lead asks you to follow up in two weeks, set a reminder directly on the lead.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Follow Up Reminder&lt;/strong&gt; section on the lead detail page, pick a date, and click Set Reminder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohsj1btyitpsmn08cc31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohsj1btyitpsmn08cc31.png" alt="Follow up date picker on lead detail page" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On that date, Formgrid sends you an email with the lead details and your notes so you have everything you need before you follow up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqomp8ege8stlze7tpq7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqomp8ege8stlze7tpq7p.png" alt="Follow up reminder email from Formgrid" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You set the reminder once. Formgrid handles the rest.&lt;/p&gt;

&lt;p&gt;No calendar invite. No sticky note. &lt;br&gt;
No, hoping you remember. Just an email &lt;br&gt;
at the right moment with everything you need to close the deal.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 7: Track Your Conversion Rate
&lt;/h3&gt;

&lt;p&gt;The leads tab shows your conversion rate at all times.&lt;/p&gt;

&lt;p&gt;As you move leads through the pipeline from New to Contacted to Converted, the rate updates automatically:&lt;br&gt;
2 of 15 leads converted (13%)&lt;/p&gt;

&lt;p&gt;That number tells you things you cannot see from an inbox.&lt;/p&gt;

&lt;p&gt;If your conversion rate drops, you know something changed. Maybe leads are coming in from a new source that is lower quality. &lt;br&gt;
Maybe you are taking too long to reply. &lt;br&gt;
Maybe your pricing conversation needs work.&lt;/p&gt;

&lt;p&gt;If your conversion rate is climbing, you know your process is working. Keep doing what you are doing.&lt;/p&gt;

&lt;p&gt;Without that number, you are guessing.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Example: How a Cleaning
&lt;/h2&gt;

&lt;p&gt;Business Manages 30 Enquiries a Month&lt;/p&gt;

&lt;p&gt;Mark runs a commercial cleaning company. &lt;br&gt;
He was getting 25 to 30 enquiries per month through his website contact form and managing them entirely in his inbox.&lt;/p&gt;

&lt;p&gt;Some got replies the same day. Some got buried under supplier emails and invoices. Some he followed up on. Mostly, he did not.&lt;/p&gt;

&lt;p&gt;He had no idea what his conversion rate was. &lt;br&gt;
He had no idea which enquiries were &lt;br&gt;
still warm. He had no system for follow-ups beyond hoping he remembered.&lt;/p&gt;

&lt;p&gt;He connected his existing contact form to Formgrid by replacing the form action URL. That took about five minutes.&lt;/p&gt;

&lt;p&gt;Now every enquiry lands in his Leads tab as a New lead. He has a simple rule: every new lead gets a reply within 4 hours &lt;br&gt;
and gets marked Contacted the moment he sends it.&lt;/p&gt;

&lt;p&gt;After every call, he adds a note. When someone asks him to follow up, he sets a &lt;br&gt;
reminder. When they sign a contract, he marks them Converted.&lt;/p&gt;

&lt;p&gt;After six weeks, his conversion rate is sitting at 28%. Before, he had no idea what it was.&lt;/p&gt;

&lt;p&gt;He also realised he had been losing enquiries from commercial properties because he was taking 3 to 4 days to reply. The leads tab showed him exactly how many New leads were sitting untouched for more than 24 hours. He fixed his reply time, and his conversion rate jumped immediately.&lt;/p&gt;

&lt;p&gt;None of that came from a CRM. It came from a pipeline, a notes field, and a follow-up reminder.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This System Costs
&lt;/h2&gt;

&lt;p&gt;Formgrid is free to start.&lt;/p&gt;

&lt;p&gt;The free plan gives you 25 submissions per month, which is enough to test the whole system and run a low-volume form.&lt;/p&gt;

&lt;p&gt;When your enquiry volume grows, upgrade to Premium at $8 per month for 1,000 submissions per month.&lt;/p&gt;

&lt;p&gt;The Business plan at $29 per month adds auto-responder emails so every person who fills in your form automatically receives a confirmation email from you the moment they submit. That one feature alone stops the "did my message come through" follow up emails that waste &lt;br&gt;
your time.&lt;br&gt;
Free:      $0/month    25 submissions&lt;br&gt;
Premium:   $8/month    1,000 submissions&lt;br&gt;
Business:  $29/month   15,000 submissions&lt;br&gt;
plus auto-responder&lt;br&gt;
emails and more&lt;/p&gt;

&lt;p&gt;No contracts. Cancel any time.&lt;/p&gt;




&lt;h2&gt;
  
  
  How This Compares to Other Options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your inbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your inbox is not a lead management system. It is a communication tool. Using it to track leads means your leads are mixed in with everything else, with no pipeline, no notes, no reminders, and no conversion rate.&lt;/p&gt;

&lt;p&gt;It works for 5 enquiries a month. It does &lt;br&gt;
not work for 30.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Google Sheet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A spreadsheet works if you are disciplined about updating it every time something happens. Most people are not. The moment you get busy, the spreadsheet falls behind, and you are back to managing things in &lt;br&gt;
your head.&lt;/p&gt;

&lt;p&gt;The advantage of tracking leads inside your form tool is that the leads are already there. &lt;br&gt;
The moment someone submits your form, their details are in the system. &lt;br&gt;
You just need to update the status and add a note.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A full CRM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HubSpot, Salesforce, and Pipedrive are genuinely powerful. They are also built for sales teams with complex pipelines and dedicated people to run them.&lt;/p&gt;

&lt;p&gt;For a small business owner with 10 to 50 enquiries per month, they are overkill. The setup takes days. The learning curve takes weeks. The cost starts at $50 per month and climbs as you add features.&lt;/p&gt;

&lt;p&gt;Formgrid gives you 20 percent of CRM features that handle 80 percent of your actual needs. &lt;br&gt;
A pipeline. Notes. Follow-up reminders. A conversion rate. All &lt;br&gt;
built into your form tool, so you do not have to manage a separate system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who This Works Best For
&lt;/h2&gt;

&lt;p&gt;This system works particularly well for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service businesses&lt;/strong&gt; taking enquiries for cleaning, landscaping, plumbing, electrical, photography, design, and similar trades. &lt;br&gt;
You have a high volume of inbound enquiries, and each one needs a follow-up conversation before converting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event organizers&lt;/strong&gt; are collecting &lt;br&gt;
registrations and managing attendee communications. Every registration is a lead you need to confirm, follow up with, and track to attendance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freelancers and consultants&lt;/strong&gt; handling project enquiries. You need to know which potential clients you have spoken to, what they need, and when to follow up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Small retail and hospitality businesses&lt;/strong&gt; taking custom orders, reservations, or booking enquiries. &lt;br&gt;
You need a simple way to track what stage each enquiry is at without a full CRM.&lt;/p&gt;

&lt;p&gt;If you are getting more than 10 enquiries per month and managing them in your inbox, this system will make an immediate difference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started Today
&lt;/h2&gt;

&lt;p&gt;You do not need a CRM. You need a pipeline, notes, and follow-up reminders. &lt;br&gt;
Those three things are all built into Formgrid, and they take about 10 minutes to set up.&lt;/p&gt;

&lt;p&gt;If you already have an HTML contact form on your website, connect it to Formgrid by replacing the form action URL. Five minutes.&lt;/p&gt;

&lt;p&gt;If you are starting from scratch, use the Formgrid form builder to get a shareable form link live in under 5 minutes.&lt;/p&gt;

&lt;p&gt;Either way, every enquiry that comes in from that point forward is a tracked lead with a status, a notes field, and a follow-up reminder waiting to be set.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. Free plan &lt;br&gt;
available. Upgrade when your volume grows, and your process needs it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about setting up lead &lt;br&gt;
management for your specific business? &lt;br&gt;
Email &lt;a href="mailto:allen@formgrid.dev"&gt;allen@formgrid.dev&lt;/a&gt;, and I will &lt;br&gt;
help you get it working.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>management</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Turn Your Contact Form Into a Simple Lead Tracking System</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sat, 25 Apr 2026 14:34:33 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-turn-your-contact-form-into-a-simple-lead-tracking-system-463p</link>
      <guid>https://dev.to/allenarduino/how-to-turn-your-contact-form-into-a-simple-lead-tracking-system-463p</guid>
      <description>&lt;p&gt;Your contact form is working.&lt;/p&gt;

&lt;p&gt;People are filling it in. Submissions are arriving in your inbox. You are getting enquiries from potential customers.&lt;/p&gt;

&lt;p&gt;But here is the problem.&lt;/p&gt;

&lt;p&gt;Three days later, you cannot remember which ones you replied to. A week later, you find an email buried under 50 others from someone &lt;br&gt;
ready to buy. A month later, you realise you never followed up on half the enquiries that came in during your busiest week.&lt;/p&gt;

&lt;p&gt;Your contact form is not the problem. &lt;br&gt;
What happens after the submission is.&lt;/p&gt;

&lt;p&gt;Most form tools treat their job as done the moment your inbox receives a notification. But for a small business owner that is &lt;br&gt;
exactly where the real work begins.&lt;/p&gt;

&lt;p&gt;This guide shows you how to turn your existing contact form into a simple lead tracking system so every enquiry gets the follow-up it deserves.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Problem With a Standard Contact Form
&lt;/h2&gt;

&lt;p&gt;A standard contact form does one thing. &lt;br&gt;
It sends you an email.&lt;/p&gt;

&lt;p&gt;That email lands in your inbox alongside everything else. &lt;br&gt;
Your newsletter subscriptions. Your supplier invoices. Your team messages. Your spam.&lt;/p&gt;

&lt;p&gt;The enquiry from a potential customer sits in the same place as everything else, with no way to tell at a glance:&lt;br&gt;
Which leads have I replied to?&lt;br&gt;
Which ones are still waiting?&lt;br&gt;
Which ones became customers?&lt;br&gt;
Which ones need a follow-up this week?&lt;/p&gt;

&lt;p&gt;Without answers to those questions, you are managing leads the same way most small businesses do. &lt;br&gt;
In your head. With sticky notes. With starred emails, you forgot to &lt;br&gt;
unstar. With a spreadsheet, you update when you remember.&lt;/p&gt;

&lt;p&gt;That system works when you have 5 enquiries a month. &lt;br&gt;
It breaks down at 20. It falls apart completely at 50.&lt;/p&gt;


&lt;h2&gt;
  
  
  What a Lead Tracking System Actually Means
&lt;/h2&gt;

&lt;p&gt;A lead tracking system does not have to be a CRM. &lt;br&gt;
You do not need HubSpot. &lt;br&gt;
You do not need Salesforce. You do not need a subscription that costs more per month than your form tool.&lt;/p&gt;

&lt;p&gt;For a small business, a lead tracking system is simply a way to answer three questions about every enquiry that comes in:&lt;br&gt;
Where does this lead in my process?&lt;br&gt;
What do I know about this person?&lt;br&gt;
When do I need to follow up?&lt;/p&gt;

&lt;p&gt;That is it. Three questions. Everything else is noise.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Simple Pipeline That Changes Everything
&lt;/h2&gt;

&lt;p&gt;The most useful thing you can add to your contact form workflow is a three-stage pipeline:&lt;br&gt;
New → Contacted → Converted&lt;/p&gt;

&lt;p&gt;Every submission starts as New. The moment you reach out to that person, they become Contacted. &lt;br&gt;
The moment they become a customer, they become converted.&lt;/p&gt;

&lt;p&gt;That one change transforms your inbox from a list of unread emails into a visible picture of your entire lead pipeline.&lt;/p&gt;

&lt;p&gt;At a glance, you can see:&lt;br&gt;
New:        12 people waiting for a response&lt;br&gt;
Contacted:  8 people in conversation&lt;br&gt;
Converted:  3 people who became customers&lt;/p&gt;

&lt;p&gt;You know exactly where your attention needs to go. &lt;br&gt;
You know exactly how your form is &lt;br&gt;
performing. You know your conversion rate without counting anything manually.&lt;br&gt;
3 of 23 leads converted&lt;br&gt;
Conversion rate: 13%&lt;/p&gt;

&lt;p&gt;That number tells you something. &lt;br&gt;
If your conversion rate drops from 20% to 8% over a month, you know something changed. Maybe a new traffic source is bringing lower &lt;br&gt;
quality leads. Maybe you stopped following up quickly enough. Maybe your pricing conversation needs work.&lt;/p&gt;

&lt;p&gt;You cannot see any of that from an inbox.&lt;/p&gt;


&lt;h2&gt;
  
  
  Adding Notes to Every Lead
&lt;/h2&gt;

&lt;p&gt;The second most important thing you can do is add a private note to each lead.&lt;/p&gt;

&lt;p&gt;After you call someone and they say they are interested but want to think about it for two weeks, you need to write that down somewhere that is attached to that specific person.&lt;/p&gt;

&lt;p&gt;Not in a separate document. Not in a different app. Right there on the lead.&lt;br&gt;
Called Sarah on Tuesday. &lt;br&gt;
She liked the proposal but wants to check with her partner first. Said to follow up in two weeks. She mentioned the budget is around $500.&lt;/p&gt;

&lt;p&gt;That note is worth more than any CRM feature. When you follow up two weeks later, you remember exactly where the &lt;br&gt;
conversation left off. You sound prepared. &lt;br&gt;
You sound professional. You close the deal.&lt;/p&gt;

&lt;p&gt;Without the note, you are starting the conversation from scratch every time.&lt;/p&gt;


&lt;h2&gt;
  
  
  Setting Follow-Up Reminders
&lt;/h2&gt;

&lt;p&gt;The third piece is follow-up reminders.&lt;/p&gt;

&lt;p&gt;Most leads do not convert on the first contact. &lt;br&gt;
They need a second email. A third &lt;br&gt;
call. A gentle nudge two weeks later, when they have had time to think.&lt;/p&gt;

&lt;p&gt;The problem is that "follow up in two weeks" is not a system. It is a hope.&lt;/p&gt;

&lt;p&gt;A proper follow-up reminder turns that hope into a certainty. You set a date on the lead, and on that date, you receive an email:&lt;br&gt;
Subject: Follow-up reminder: Sarah Thompson&lt;br&gt;
from Contact Form&lt;br&gt;
You set a follow-up reminder for this lead.&lt;br&gt;
Lead: Sarah Thompson&lt;br&gt;
Email: &lt;a href="mailto:sarah@email.com"&gt;sarah@email.com&lt;/a&gt;&lt;br&gt;
Current status: Contacted&lt;br&gt;
Notes: Called on Tuesday. Interested but&lt;br&gt;
wants to check with partner.&lt;br&gt;
Budget around $500.&lt;br&gt;
View this lead: [link]&lt;/p&gt;

&lt;p&gt;You open that email, you have all the context you need, and you send the follow-up immediately. No hunting through old emails. &lt;br&gt;
No, trying to remember what you talked about.&lt;/p&gt;

&lt;p&gt;That is what a follow-up reminder does. &lt;br&gt;
It turns intention into action.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Set This Up With Formgrid
&lt;/h2&gt;

&lt;p&gt;Formgrid is a form builder and form backend that has lead tracking built directly into every form. You do not need a separate CRM. &lt;br&gt;
You do not need a Zapier integration. &lt;br&gt;
Everything is in one place.&lt;/p&gt;

&lt;p&gt;Here is how to set it up in under 10 minutes.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 1: Sign Up and Create Your Form
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up with Google or your email address.&lt;/p&gt;

&lt;p&gt;No credit card required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa590ejt2zmv83285bt64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa590ejt2zmv83285bt64.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wu6zd0qqc1zzrusdb1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wu6zd0qqc1zzrusdb1h.png" alt=" " width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you are logged in, click &lt;strong&gt;New Form&lt;/strong&gt; &lt;br&gt;
and give it a name that matches your use case:&lt;br&gt;
Website Contact Form&lt;br&gt;
Photography Booking Enquiries&lt;br&gt;
Quote Request Form&lt;br&gt;
Workshop Registration&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkw73gs1mo5ra6bjuszx1.png" alt=" " width="800" height="443"&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 2: Connect Your Form
&lt;/h3&gt;

&lt;p&gt;You have two options, depending on whether you already have a form on your website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Use your existing HTML form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already have a contact form on your website, just replace the form action with your Formgrid endpoint URL. One change. &lt;br&gt;
Everything else stays exactly as it is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev/api/f/your-form-id"&lt;/span&gt; 
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Name"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Email"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Message"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send Message&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy your endpoint URL from the form details page in your Formgrid dashboard and paste it into the action attribute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flafra8ygljruiylpilbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flafra8ygljruiylpilbc.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Use the drag and drop builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you do not have a website or you want a standalone shareable form link, click &lt;br&gt;
&lt;strong&gt;Open Builder&lt;/strong&gt; on your form details page.&lt;/p&gt;

&lt;p&gt;Build your form with drag and drop fields. &lt;br&gt;
When you are done, click Save and copy your shareable link. Send it via WhatsApp, email, or embed it on any page.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fjeafzj9jij0xoxszqp.png" alt=" " width="800" height="435"&gt;
&lt;/h2&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnwul8t8rxionpc3srbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnwul8t8rxionpc3srbq.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqk6d9r8ccp8l7ke9kt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqk6d9r8ccp8l7ke9kt5.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Watch Submissions Become Leads
&lt;/h3&gt;

&lt;p&gt;The moment someone fills in your form, two things happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You receive an instant email notification:&lt;/strong&gt;&lt;br&gt;
New Lead: Website Contact Form&lt;br&gt;
Name: James Garside&lt;br&gt;
Email: &lt;a href="mailto:james@email.com"&gt;james@email.com&lt;/a&gt;&lt;br&gt;
Phone: (555) 234-5678&lt;br&gt;
Message: Hi, I am interested in your&lt;br&gt;
photography packages for a corporate&lt;br&gt;
event in June. Can you send me pricing?&lt;br&gt;
Submitted: 2 minutes ago&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The submission appears in your Leads tab:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your form in the Formgrid dashboard &lt;br&gt;
and click the &lt;strong&gt;Leads&lt;/strong&gt; tab. Every submission &lt;br&gt;
appears there as a tracked lead with its &lt;br&gt;
current status, the time it came in, and &lt;br&gt;
the submitter's details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x25753iyrhrosb7p2bs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x25753iyrhrosb7p2bs.png" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the top of the leads tab, you will see your conversion summary:&lt;br&gt;
3 of 23 leads converted (13%)&lt;/p&gt;

&lt;p&gt;And a status breakdown:&lt;br&gt;
New: 12    Contacted: 8    Converted: 3&lt;/p&gt;

&lt;p&gt;That is your entire pipeline at a glance.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Update Lead Status as You Work
&lt;/h3&gt;

&lt;p&gt;When you reply to a lead, open it in your &lt;br&gt;
dashboard and change its status from &lt;br&gt;
&lt;strong&gt;New&lt;/strong&gt; to &lt;strong&gt;Contacted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When they become a customer, change it &lt;br&gt;
to &lt;strong&gt;Converted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lyv3sjeczegm31elrta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lyv3sjeczegm31elrta.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also update multiple leads at once &lt;br&gt;
using bulk actions. Select the leads you &lt;br&gt;
replied to this morning and mark them all &lt;br&gt;
as Contacted in one click.&lt;/p&gt;

&lt;p&gt;That keeps your pipeline accurate without &lt;br&gt;
slowing you down.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 5: Add Notes to Every Lead
&lt;/h3&gt;

&lt;p&gt;When you have a conversation with a lead, open their record in the dashboard and add a note.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpl2u4j43dpklj6zfzhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpl2u4j43dpklj6zfzhp.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a notes field on every lead that accepts up to 2000 characters. &lt;br&gt;
Write whatever is useful:&lt;br&gt;
Called Thursday. Interested in the June&lt;br&gt;
package. Wants to include a team lunch&lt;br&gt;
in the brief. Budget is flexible.&lt;br&gt;
Said to follow up after the 15th.&lt;/p&gt;

&lt;p&gt;The next time you open that lead, your note is right there. You always know where the conversation stands.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 6: Set a Follow-Up Reminder
&lt;/h3&gt;

&lt;p&gt;If a lead needs a follow-up in a few days or a few weeks, set a reminder directly on the lead.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Follow Up Reminder&lt;/strong&gt; section &lt;br&gt;
on the lead detail page, pick a date, &lt;br&gt;
and click Set Reminder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohsj1btyitpsmn08cc31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohsj1btyitpsmn08cc31.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqomp8ege8stlze7tpq7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqomp8ege8stlze7tpq7p.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On that date, Formgrid sends you an email with the lead details and your notes so you have everything you need before you pick up the phone or type the email.&lt;/p&gt;

&lt;p&gt;You set the reminder once. &lt;br&gt;
Formgrid handles the rest.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 7: See Your Conversion Rate
&lt;/h3&gt;

&lt;p&gt;The leads tab shows your conversion rate &lt;br&gt;
at all times.&lt;/p&gt;

&lt;p&gt;As you move leads through the pipeline from New to Contacted to Converted, the rate updates automatically:&lt;br&gt;
3 of 23 leads converted (13%)&lt;/p&gt;

&lt;p&gt;If that number is low, it tells you something. Maybe you need to follow up faster. &lt;br&gt;
Maybe your form is attracting the wrong audience. &lt;br&gt;
Maybe your proposal needs work.&lt;/p&gt;

&lt;p&gt;If that number is high, it tells you something, too. Your form is working. Your follow-up process is working. Keep doing what you are doing.&lt;/p&gt;

&lt;p&gt;Without that number, you are guessing.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Example: How a Photographer Uses Formgrid to Track Booking Enquiries
&lt;/h2&gt;

&lt;p&gt;Sarah runs a photography studio. &lt;br&gt;
She was getting 15 to 20 booking enquiries per month through her website contact form.&lt;/p&gt;

&lt;p&gt;The enquiries were going to her inbox, and she was replying to them when she had time. Some got replies the same day. Some got &lt;br&gt;
replies a week later. Some got buried.&lt;/p&gt;

&lt;p&gt;She had no idea how many enquiries were converting to bookings or how long it was taking her to respond.&lt;/p&gt;

&lt;p&gt;She switched to Formgrid and connected her existing contact form in about five minutes by replacing the form action URL.&lt;/p&gt;

&lt;p&gt;Now every enquiry lands in her Leads tab as a New lead. &lt;br&gt;
She has a rule for herself: every new lead gets a reply within 24 hours, and she marks it Contacted the moment she &lt;br&gt;
sends the reply.&lt;/p&gt;

&lt;p&gt;She adds a note after every call with what the client wants and what she quoted. She sets a follow-up reminder if they said they would get back to her.&lt;/p&gt;

&lt;p&gt;After two months, her conversion rate is sitting at 31%. She knows that because Formgrid shows her. &lt;br&gt;
Before, she had no idea.&lt;/p&gt;

&lt;p&gt;She also discovered that leads who get a reply within 4 hours convert at almost twice the rate of leads who wait a day or more. &lt;br&gt;
She would never have known that from an inbox.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Costs
&lt;/h2&gt;

&lt;p&gt;Formgrid is free to start.&lt;/p&gt;

&lt;p&gt;The free plan gives you 25 submissions per month, which is enough to test the whole system and run a low-volume form.&lt;/p&gt;

&lt;p&gt;When your form starts generating real lead volume, upgrade to Premium at $8 per month for 1,000 submissions.&lt;/p&gt;

&lt;p&gt;The Business plan at $29 per month adds auto-responder emails, so every person who fills in your form automatically receives &lt;br&gt;
a confirmation email from you the moment they submit. That one feature alone reduces the number of people who email you asking &lt;br&gt;
whether their submission came through.&lt;br&gt;
Free:     $0/month   25 submissions&lt;br&gt;
Premium:  $8/month   1,000 submissions&lt;br&gt;
Business: $29/month  15,000 submissions&lt;br&gt;
plus auto-responder&lt;br&gt;
emails and more&lt;/p&gt;

&lt;p&gt;There are no contracts. Cancel any time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Beats a Spreadsheet
&lt;/h2&gt;

&lt;p&gt;Some people track leads in a Google Sheet. &lt;br&gt;
That works if you are disciplined about &lt;br&gt;
updating it every time something happens. &lt;br&gt;
Most people are not.&lt;/p&gt;

&lt;p&gt;The advantage of tracking leads inside your form tool is that the leads are already there. You do not have to copy &lt;br&gt;
anything anywhere. The moment someone submits your form, their details are in the system. You just need to update the status and add a note.&lt;/p&gt;

&lt;p&gt;That friction reduction matters more than it sounds. &lt;br&gt;
Any system that requires you to do extra work to keep it updated will &lt;br&gt;
eventually fall behind. A system that puts the lead in the right place automatically just needs you to close the loop.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Beats a Full CRM
&lt;/h2&gt;

&lt;p&gt;HubSpot, Salesforce, and Pipedrive are powerful tools. They are also built for sales teams with dozens of leads per day, &lt;br&gt;
complex pipelines, and dedicated sales &lt;br&gt;
operations staff.&lt;/p&gt;

&lt;p&gt;For a small business owner with 10 to 50 enquiries per month, they are overkill. The setup takes days. The learning curve &lt;br&gt;
takes weeks. The cost starts at $50 per month and climbs fast.&lt;/p&gt;

&lt;p&gt;Formgrid gives you the 20% of CRM features that handle 80% of your actual needs. A pipeline. Notes. Follow-up reminders. &lt;br&gt;
A conversion rate. All is built into your form tool, so you do not have to manage a separate system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started Today
&lt;/h2&gt;

&lt;p&gt;Your contact form is already collecting &lt;br&gt;
leads. The only question is whether you &lt;br&gt;
are tracking what happens to them.&lt;/p&gt;

&lt;p&gt;Setting up lead tracking with Formgrid takes about 10 minutes if you already have an HTML form. If you are starting from scratch, the form builder gets you live in under 5 minutes.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. &lt;br&gt;
Free plan available. &lt;br&gt;
Upgrade when your volume grows, and your process needs it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about setting up lead &lt;br&gt;
tracking for your specific use case? &lt;br&gt;
Email &lt;a href="mailto:allen@formgrid.dev"&gt;allen@formgrid.dev&lt;/a&gt;, and I will &lt;br&gt;
help you get it working.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best Google Forms Alternatives in 2026 (Free &amp; Paid)</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sun, 19 Apr 2026 17:49:37 +0000</pubDate>
      <link>https://dev.to/allenarduino/the-best-google-forms-alternatives-in-2026-free-and-paid-jnp</link>
      <guid>https://dev.to/allenarduino/the-best-google-forms-alternatives-in-2026-free-and-paid-jnp</guid>
      <description>&lt;p&gt;If you have been using Google Forms and hit a wall, you are not alone.&lt;/p&gt;

&lt;p&gt;Google Forms is free, and it works for basic surveys and internal data collection. But the moment you need custom branding, a professional-looking page, file uploads without a Google account, or a form that actually looks like your business, Google Forms starts showing its limits.&lt;/p&gt;

&lt;p&gt;In this article, I will walk through the best Google &lt;br&gt;
Forms alternatives in 2026, covering price, features, and which one is right for your use case.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why People Look for Google Forms Alternatives
&lt;/h2&gt;

&lt;p&gt;Here are the most common reasons people switch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No custom branding.&lt;/strong&gt; Every Google Form looks like &lt;br&gt;
a Google Form. There is no way to make it look like your business, your event, or your brand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File uploads require a Google account.&lt;/strong&gt; If you add a file upload question to Google Forms, every respondent must sign in with a Google account to upload. &lt;br&gt;
No Google account means no upload. For customers, event participants, and external contacts, that is a real problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No shareable landing page.&lt;/strong&gt; Google Forms gives you a bare form on a white page. There is no hero section, no event details, no schedule, no photos. &lt;br&gt;
It does not look like something worth filling in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No HTML form backend.&lt;/strong&gt; If you have a static site or a custom HTML form, you cannot point it at Google Forms. You are stuck using their builder only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No instant email notifications.&lt;/strong&gt; Google Forms sends submissions to a Google Sheet. You have to check the sheet to see new responses. There is no instant email notification to your inbox by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No self-hosting or open source option.&lt;/strong&gt; Your data lives on Google's servers. If data ownership or GDPR compliance matters to you, Google Forms gives you no alternative.&lt;/p&gt;

&lt;p&gt;If any of those hit home, keep reading.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Best Google Forms Alternatives in 2026
&lt;/h2&gt;


&lt;h3&gt;
  
  
  1. Formgrid: Form Builder, Landing Page Templates,
&lt;/h3&gt;

&lt;p&gt;and Form Backend in One Place&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Event organizers, small businesses, and developers who want a form that looks professional and works without a backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it different:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most form tools pick a lane. Either a drag-and-drop form builder or a form backend for developers. &lt;br&gt;
Formgrid does both. And it adds something neither Google Forms nor most alternatives offer: world-class landing page templates that wrap your form in a complete branded page.&lt;/p&gt;

&lt;p&gt;Here is how it works:&lt;/p&gt;


&lt;h4&gt;
  
  
  Option A: Build a Form With a Landing Page Template
&lt;/h4&gt;

&lt;p&gt;This is the most powerful thing Formgrid does that &lt;br&gt;
Google Forms cannot.&lt;/p&gt;

&lt;p&gt;Instead of getting a bare form on a white page, you choose a professionally designed landing page template, and your form is embedded inside it. The result is a complete branded page that you are proud to share anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Sign Up and Create a Form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; and &lt;br&gt;
sign up with Google or your email address. &lt;br&gt;
No credit card required.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayfulytj8845e34vriww.png" alt=" " width="800" height="444"&gt;
&lt;/h2&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbt8i4w6l2l6qt2x20d0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbt8i4w6l2l6qt2x20d0.png" alt=" " width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once logged in, you land on your dashboard. &lt;br&gt;
Click &lt;strong&gt;New Form&lt;/strong&gt; to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frag4619sjsb9i4jvpg5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frag4619sjsb9i4jvpg5q.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Open the Form Builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After creating your form, you will be taken to the form details page. Click &lt;strong&gt;Open Builder&lt;/strong&gt; to enter the form builder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998dcx9eq3rzpvivclau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998dcx9eq3rzpvivclau.png" alt="Form details page showing Open Builder button" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Choose a Landing Page Template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where Formgrid goes beyond every other form tool on this list.&lt;/p&gt;

&lt;p&gt;At the top of the builder, click &lt;strong&gt;Choose Template&lt;/strong&gt;. &lt;br&gt;
A template gallery opens, showing professionally designed landing page templates for different industries and use cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjgkve21ijcihccqodec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjgkve21ijcihccqodec.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Templates available include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horse Ride Registration&lt;/li&gt;
&lt;li&gt;Event Registration&lt;/li&gt;
&lt;li&gt;Wedding RSVP&lt;/li&gt;
&lt;li&gt;Photography Booking&lt;/li&gt;
&lt;li&gt;Cleaning Service Booking&lt;/li&gt;
&lt;li&gt;Personal Trainer Enquiry&lt;/li&gt;
&lt;li&gt;Real Estate Enquiry&lt;/li&gt;
&lt;li&gt;Plumbing Quote Request&lt;/li&gt;
&lt;li&gt;Job Application&lt;/li&gt;
&lt;li&gt;Blank Form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select the template that matches your use case, and Formgrid immediately loads a complete, beautiful landing page with your form embedded inside it.&lt;/p&gt;

&lt;p&gt;This is not a basic form on a white page. It is a full landing page that looks like a real business website.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Edit the Template Inline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every piece of text on the page is editable. &lt;br&gt;
Click directly on any text element, and it becomes editable in place. Just like editing a document.&lt;/p&gt;

&lt;p&gt;Click on the headline and change it to your event name. &lt;br&gt;
Click on the date and update it. Click on the description and write something about your specific event or business.&lt;/p&gt;

&lt;p&gt;Change the primary color using the color picker on the right panel and the button, accents, and highlights across the entire page update instantly to match your brand.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5an3vg7ts01sshgeoa0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5an3vg7ts01sshgeoa0.png" alt="Inline text editing in the Formgrid builder" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Customize Your Form Fields&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Switch to the &lt;strong&gt;Form Fields&lt;/strong&gt; tab to add, remove, and reorder the fields in your form. Drag fields from the left sidebar onto the canvas. Every field is fully customizable with labels, placeholder text, required status, and validation rules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mih0erydk1ws7gn570l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mih0erydk1ws7gn570l.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 6: Share Your Form Link&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you are happy with the page, click &lt;strong&gt;Save Changes&lt;/strong&gt;. &lt;br&gt;
Go back to the form details page and copy your unique shareable link.&lt;/p&gt;

&lt;p&gt;That link is a real, live landing page. Share it &lt;br&gt;
anywhere: WhatsApp groups, email newsletters, Instagram bio, Facebook events, or embed it on your website.&lt;/p&gt;

&lt;p&gt;Your participants or customers visit the link and see a complete branded page. Not a Google Form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdumqqbfjd11ehmkjhlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdumqqbfjd11ehmkjhlp.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5tvlct2kq6q1f5tn65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5tvlct2kq6q1f5tn65.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 7: Receive Instant Email Notifications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The moment someone submits the form, you receive an instant email notification with all their details formatted cleanly:&lt;/p&gt;

&lt;p&gt;New Registration: Blue Ridge Endurance&lt;br&gt;
Classic 2026&lt;br&gt;
Rider Name: Sarah Johnson&lt;br&gt;
Email: &lt;a href="mailto:sarah@email.com"&gt;sarah@email.com&lt;/a&gt;&lt;br&gt;
Phone: (555) 123-4567&lt;br&gt;
Horse Name: Midnight Storm&lt;br&gt;
Division: 50 Mile&lt;br&gt;
Experience: Advanced&lt;/p&gt;

&lt;p&gt;No checking a spreadsheet. No logging into a &lt;br&gt;
dashboard. Every submission arrives in your inbox the moment it happens.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc4l42ixk2nzqc7bbypv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc4l42ixk2nzqc7bbypv.png" alt=" " width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 8: View and Export Submissions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All submissions are stored in your Formgrid dashboard. Go to the &lt;strong&gt;Submissions&lt;/strong&gt; tab to view, search, filter, and export your complete &lt;br&gt;
list as a CSV file.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7r4slrdvxn387ncx2tv9.png" alt=" " width="800" height="444"&gt;
&lt;/h2&gt;
&lt;h4&gt;
  
  
  Option B: Use Your Existing HTML Form
&lt;/h4&gt;

&lt;p&gt;If you already have an HTML form on your website, just point it at your Formgrid endpoint URL. &lt;br&gt;
No other changes needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev/api/f/your-form-id"&lt;/span&gt;
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Name"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Email"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Message"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send Message&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Formgrid handles receiving submissions, sending email notifications, and storing the data. Your form stays exactly as it is.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;World-class landing page templates for different 
industries&lt;/li&gt;
&lt;li&gt;Inline text editing directly on the template&lt;/li&gt;
&lt;li&gt;Drag and drop form builder with shareable link&lt;/li&gt;
&lt;li&gt;HTML form endpoint for static sites&lt;/li&gt;
&lt;li&gt;File uploads from anyone without a Google account&lt;/li&gt;
&lt;li&gt;Instant email notifications&lt;/li&gt;
&lt;li&gt;Submissions dashboard with CSV export&lt;/li&gt;
&lt;li&gt;Spam protection with honeypot and rate limiting&lt;/li&gt;
&lt;li&gt;Color picker for brand matching&lt;/li&gt;
&lt;li&gt;Auto-responder emails on Business plan&lt;/li&gt;
&lt;li&gt;Google Sheets native integration on Business plan&lt;/li&gt;
&lt;li&gt;Webhooks on Business plan&lt;/li&gt;
&lt;li&gt;Self-hostable with Docker&lt;/li&gt;
&lt;li&gt;100% open source under MIT license&lt;/li&gt;
&lt;li&gt;GDPR friendly with no tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Submissions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0/month&lt;/td&gt;
&lt;td&gt;25/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$8/month&lt;/td&gt;
&lt;td&gt;1,000/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$29/month&lt;/td&gt;
&lt;td&gt;15,000/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The bottom line:&lt;/strong&gt; Google Forms is free but it &lt;br&gt;
gives you a bare form that looks nothing like your &lt;br&gt;
brand. Formgrid gives you a complete branded &lt;br&gt;
landing page with your form embedded inside it, &lt;br&gt;
instant email notifications, and a submissions &lt;br&gt;
dashboard starting at $8 per month.&lt;/p&gt;

&lt;p&gt;A horse riding club manager in San Diego found Formgrid through one of our blog posts. She was collecting ride registrations by email and manually scanning each one for rider and horse details. &lt;br&gt;
She set up a Formgrid registration page, shared the link with her 200 riders, and now every registration arrives in her inbox formatted and &lt;br&gt;
ready to act on. She upgraded to the Business plan at $29 per month without hesitation.&lt;/p&gt;

&lt;p&gt;That is the difference between a Google Form and &lt;br&gt;
a Formgrid landing page.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Tally: Clean Free Form Builder
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Non-technical users who want a clean, minimal form experience at no cost.&lt;/p&gt;

&lt;p&gt;Tally is a popular alternative with a simple interface. Their free plan is genuinely useful, with unlimited forms and unlimited responses, though some features are locked behind the paid plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited forms and responses on the free plan&lt;/li&gt;
&lt;li&gt;Conditional logic&lt;/li&gt;
&lt;li&gt;File uploads on paid plan&lt;/li&gt;
&lt;li&gt;Notion integration&lt;/li&gt;
&lt;li&gt;Embeddable forms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan available. Paid plan at &lt;br&gt;
$29/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No landing page templates. No HTML &lt;br&gt;
form backend. No self-hosting. No instant email &lt;br&gt;
notifications by default. No open source. Forms look like Tally forms, not like your brand.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Typeform: Best for Conversational Forms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Marketers who want a beautiful conversational form experience for surveys and lead generation.&lt;/p&gt;

&lt;p&gt;Typeform pioneered the one question at a time conversational format. It produces high completion rates for surveys and research forms, and the design is genuinely beautiful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversational one question at a time format&lt;/li&gt;
&lt;li&gt;Beautiful design templates&lt;/li&gt;
&lt;li&gt;Logic jumps and conditional branching&lt;/li&gt;
&lt;li&gt;Payment integrations&lt;/li&gt;
&lt;li&gt;Data analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan limited to 10 responses &lt;br&gt;
per month. Paid plans start at $25/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; Extremely limited free plan. No HTML &lt;br&gt;
form backend. No landing page templates. No &lt;br&gt;
self-hosting. No open source. Overkill and &lt;br&gt;
overpriced for simple contact forms or event &lt;br&gt;
registrations.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Jotform: Most Feature Rich
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Businesses that need advanced form logic, payment integrations, and a full form management suite.&lt;/p&gt;

&lt;p&gt;Jotform is the most feature-rich form builder on this list. Hundreds of templates, payment integrations, conditional logic, and approval &lt;br&gt;
workflows, PDF generation, and e-signatures. &lt;br&gt;
If you need advanced functionality, Jotform has it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10,000+ templates&lt;/li&gt;
&lt;li&gt;Payment integrations&lt;/li&gt;
&lt;li&gt;Conditional logic&lt;/li&gt;
&lt;li&gt;PDF generation&lt;/li&gt;
&lt;li&gt;E-signatures&lt;/li&gt;
&lt;li&gt;Approval workflows&lt;/li&gt;
&lt;li&gt;150+ integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan available with 100 monthly &lt;br&gt;
responses. Paid plans start at $34/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; Expensive. No HTML form backend. No &lt;br&gt;
self-hosting. No open source. Significant overkill &lt;br&gt;
for most small businesses and event organizers' &lt;br&gt;
use cases.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Web3Forms: Lightweight Form Backend
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who just need a simple form endpoint for their static site with no frills.&lt;/p&gt;

&lt;p&gt;Web3Forms is a lightweight form backend service. &lt;br&gt;
No form builder. No landing page templates. &lt;br&gt;
Just an endpoint URL you point your HTML form at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple HTML form endpoint&lt;/li&gt;
&lt;li&gt;Email notifications&lt;/li&gt;
&lt;li&gt;Spam protection&lt;/li&gt;
&lt;li&gt;Free plan available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan available. Pro plan at &lt;br&gt;
$18/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No form builder. No landing page &lt;br&gt;
templates. No submission dashboard on the free &lt;br&gt;
plan. No self-hosting. No file upload support &lt;br&gt;
at a reasonable price.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Google Forms&lt;/th&gt;
&lt;th&gt;Formgrid&lt;/th&gt;
&lt;th&gt;Tally&lt;/th&gt;
&lt;th&gt;Typeform&lt;/th&gt;
&lt;th&gt;Jotform&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Form builder&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Landing page templates&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inline page editing&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML form endpoint&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File upload (no Google account)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instant email notifications&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hostable&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom branding&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free submissions&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;25/month&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;10/month&lt;/td&gt;
&lt;td&gt;100/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starting price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$8/month&lt;/td&gt;
&lt;td&gt;$29/month&lt;/td&gt;
&lt;td&gt;$25/month&lt;/td&gt;
&lt;td&gt;$34/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDPR friendly&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Which One Should You Use?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Formgrid if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You want a form that looks like a real business page, not a Google Form.&lt;/p&gt;

&lt;p&gt;You are an event organizer, photographer, cleaning service, or small business owner who shares form links with customers or participants.&lt;/p&gt;

&lt;p&gt;You need file uploads from people without a Google account.&lt;/p&gt;

&lt;p&gt;You want instant email notifications when someone submits.&lt;/p&gt;

&lt;p&gt;You need a form backend for your existing HTML site.&lt;/p&gt;

&lt;p&gt;You care about open source and self-hosting.&lt;/p&gt;

&lt;p&gt;GDPR compliance matters to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Google Forms if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need something completely free with unlimited responses.&lt;/p&gt;

&lt;p&gt;Branding and design do not matter.&lt;/p&gt;

&lt;p&gt;You are collecting internal data or running simple surveys within your organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Tally if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You want a clean, minimal form builder for free.&lt;/p&gt;

&lt;p&gt;You are a Notion user.&lt;/p&gt;

&lt;p&gt;You do not need landing page templates or &lt;br&gt;
an HTML form backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Typeform if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need a conversational one-question-at-a-time &lt;br&gt;
time experience.&lt;/p&gt;

&lt;p&gt;You are running surveys or research forms where completion rate matters most.&lt;/p&gt;

&lt;p&gt;Visual design is your top priority, and budget is not a constraint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Jotform if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need advanced logic, payments, approval workflows, and PDF generation.&lt;/p&gt;

&lt;p&gt;Budget is not a constraint.&lt;/p&gt;

&lt;p&gt;You are building complex enterprise forms.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Google Forms is genuinely useful for basic internal surveys and simple data collection. &lt;br&gt;
If that is all you need, it is hard to argue against free.&lt;/p&gt;

&lt;p&gt;But the moment you need your form to look professional, collect file uploads from anyone without a Google account, and send you an instant email when someone submits, or give participants a page that reflects your brand and event, Google Forms falls short.&lt;/p&gt;

&lt;p&gt;Formgrid is the only tool on this list that combines world-class landing page templates, inline editing, an HTML form backend, and instant email notifications, and a submissions dashboard starting at $8 per month.&lt;/p&gt;

&lt;p&gt;You can try it free at &lt;br&gt;
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;. &lt;br&gt;
No credit card required. 25 submissions per month on the free plan to test your full setup.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full disclosure: I built Formgrid. I wrote &lt;br&gt;
this comparison as honestly as I could. If &lt;br&gt;
anything looks inaccurate, let me know in &lt;br&gt;
the comments.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>google</category>
      <category>productivity</category>
      <category>resources</category>
      <category>saas</category>
    </item>
    <item>
      <title>How to Build a Professional Quote Request Form With File Upload for Your Small Business</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sat, 18 Apr 2026 15:34:47 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-build-a-professional-quote-request-form-with-file-upload-for-your-small-business-3j25</link>
      <guid>https://dev.to/allenarduino/how-to-build-a-professional-quote-request-form-with-file-upload-for-your-small-business-3j25</guid>
      <description>&lt;p&gt;Your customer wants a quote.&lt;/p&gt;

&lt;p&gt;They visit your website, fill in your contact form, &lt;br&gt;
and hit send. You get an email with their name and &lt;br&gt;
a vague description of what they need.&lt;/p&gt;

&lt;p&gt;But where is the logo file? Where is the artwork? &lt;br&gt;
Where is the reference photo of the job they want done?&lt;/p&gt;

&lt;p&gt;It is not there. So you reply, asking them to send it. &lt;br&gt;
They send it in a separate email. Now the details are in one thread, and the file is in another. You are manually piecing together a quote before you have even started the actual work.&lt;/p&gt;

&lt;p&gt;This guide shows you how to fix that in under 20 minutes using a free HTML template and Formgrid as the form backend. &lt;br&gt;
No coding experience required. &lt;br&gt;
No monthly fees to get started. No backend to build.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Will End Up With
&lt;/h2&gt;

&lt;p&gt;By the end of this guide, you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A professional multi-section quote request page 
deployed live on the internet&lt;/li&gt;
&lt;li&gt;A file upload field that accepts artwork, logos, 
photos, and design files from customers&lt;/li&gt;
&lt;li&gt;An instant email notification every time someone 
submits a quote request with all their details 
and their uploaded file&lt;/li&gt;
&lt;li&gt;A submissions dashboard where you can view and 
manage every quote request in one place&lt;/li&gt;
&lt;li&gt;A live pricing estimate that updates as the 
customer fills in the form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is what the finished quote request page &lt;br&gt;
looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://allenarduino.github.io/formgrid-examples/industries/quote-request-form/" rel="noopener noreferrer"&gt;Link to Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyav706l5zpak6yw0lukv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyav706l5zpak6yw0lukv.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The template includes a branded hero panel with trust points and stats, a five-section quote form with file upload, a live pricing estimate panel, and a slim footer with your contact details. &lt;br&gt;
All in one self-contained HTML file.&lt;/p&gt;


&lt;h2&gt;
  
  
  Who This Is For
&lt;/h2&gt;

&lt;p&gt;This guide is for small business owners who need &lt;br&gt;
customers to submit files alongside a quote request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom apparel and print shops collecting 
artwork files for t-shirts, hats, and hoodies&lt;/li&gt;
&lt;li&gt;Photographers asking clients to upload 
reference images before a shoot&lt;/li&gt;
&lt;li&gt;Graphic designers collecting client logos 
and brand assets&lt;/li&gt;
&lt;li&gt;Contractors asking customers to upload 
photos of the job site&lt;/li&gt;
&lt;li&gt;Embroidery shops receiving design files 
from customers&lt;/li&gt;
&lt;li&gt;Any business where customers need to send 
you a file before you can give them a price&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  What You Need Before You Start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A free Formgrid account at 
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A free Netlify account at 
&lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;netlify.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A text editor (VS Code, Sublime Text, or 
even Notepad works fine)&lt;/li&gt;
&lt;li&gt;About 20 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Node.js. No build tools. No command line required.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Get the Template From GitHub
&lt;/h2&gt;

&lt;p&gt;Go to the Formgrid examples repository:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/allenarduino/formgrid-examples" rel="noopener noreferrer"&gt;github.com/allenarduino/formgrid-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see a collection of free HTML templates built for different industries. &lt;br&gt;
Find the &lt;strong&gt;Quote Request&lt;/strong&gt; template. You will see&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;quote-request-form:&lt;/strong&gt; A clean, focused version with just the brand panel, form, and live estimate. &lt;br&gt;
Best for businesses that want to embed or share a standalone quote page.&lt;/p&gt;

&lt;p&gt;You have two options to get the files:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Clone with Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have Git installed, open your terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/allenarduino/formgrid-examples.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then navigate to the quote request template folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Download as ZIP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click the green &lt;strong&gt;Code&lt;/strong&gt; button on the GitHub page &lt;br&gt;
and select &lt;strong&gt;Download ZIP&lt;/strong&gt;. Extract the folder to your desktop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9rfacmzk99wcoxjuo5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9rfacmzk99wcoxjuo5n.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the folder, and you will find either &lt;br&gt;
&lt;strong&gt;quote-request-form/index.html&lt;/strong&gt; or &lt;/p&gt;

&lt;p&gt;Open it in your browser right now by double-clicking it. You will see the full professional quote request page working locally on your computer. The only thing missing is a real form endpoint so submissions go somewhere.&lt;/p&gt;

&lt;p&gt;That is what Formgrid provides.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Create Your Formgrid Account
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; and &lt;br&gt;
sign up with Google or your email address.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayfulytj8845e34vriww.png" alt=" " width="800" height="444"&gt;
&lt;/h2&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbt8i4w6l2l6qt2x20d0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbt8i4w6l2l6qt2x20d0.png" alt=" " width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. The free plan gives you 25 submissions per month, which is enough to test your entire setup before you go live.&lt;/p&gt;

&lt;p&gt;Once you sign up, you land on the Formgrid dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxi7hkef26jtfst9591k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxi7hkef26jtfst9591k.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: Create a New Form
&lt;/h2&gt;

&lt;p&gt;From the dashboard click &lt;strong&gt;New Form&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give it a name that reflects your business. &lt;br&gt;
Something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apex Studio: Quote Requests&lt;/li&gt;
&lt;li&gt;LP Custom Tees: Quote Form&lt;/li&gt;
&lt;li&gt;Studio Quote Requests 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frag4619sjsb9i4jvpg5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frag4619sjsb9i4jvpg5q.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create Form&lt;/strong&gt; and you will be taken &lt;br&gt;
to the form details page.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 4: Copy Your Endpoint URL
&lt;/h2&gt;

&lt;p&gt;On the form details page, you will see a section called &lt;strong&gt;Endpoint Information&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your endpoint URL looks like this:&lt;br&gt;
&lt;a href="https://formgrid.dev/api/f/your-form-id" rel="noopener noreferrer"&gt;https://formgrid.dev/api/f/your-form-id&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Copy&lt;/strong&gt; next to the endpoint URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbwulsuyd95jtzqgkg7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbwulsuyd95jtzqgkg7i.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This URL is your form backend. When a customer fills in the quote request form and uploads their artwork file, everything is sent to this URL. Formgrid receives it, stores it in your dashboard, and sends you an instant email notification with all the details and a link to download the file.&lt;/p&gt;

&lt;p&gt;Keep this URL copied. You need it in the next step.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 5: Enable File Uploads
&lt;/h2&gt;

&lt;p&gt;File uploads are available on the Premium plan &lt;br&gt;
at $8 per month.&lt;/p&gt;

&lt;p&gt;Go to your billing page at &lt;br&gt;
&lt;a href="https://formgrid.dev/app/dashboard/billing" rel="noopener noreferrer"&gt;formgrid.dev/app/dashboard/billing&lt;/a&gt; &lt;br&gt;
and upgrade to Premium.&lt;/p&gt;

&lt;p&gt;Once you are on Premium, your form will accept file uploads, and the files will be delivered to your inbox alongside the submission details.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 6: Add Your Endpoint URL to the Template
&lt;/h2&gt;

&lt;p&gt;Open the HTML file in your text editor.&lt;/p&gt;

&lt;p&gt;Use the Find function (Ctrl+F or Cmd+F) &lt;br&gt;
and search for:&lt;br&gt;
YOUR_FORMGRID_ENDPOINT_URL&lt;/p&gt;

&lt;p&gt;You will find it in the JavaScript section &lt;br&gt;
near the bottom of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;strong&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/strong&gt; with your &lt;br&gt;
actual Formgrid endpoint URL. It should look like &lt;br&gt;
this after the change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://formgrid.dev/api/f/your-form-id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjulxdolxtwfycwn0tbj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjulxdolxtwfycwn0tbj6.png" alt=" " width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That one change connects your quote request page to Formgrid. Every submission, including the uploaded file, now goes directly to your inbox &lt;br&gt;
and your dashboard.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 7: Customize the Template for Your Business
&lt;/h2&gt;

&lt;p&gt;Now open the file in your text editor and make the template your own.&lt;/p&gt;

&lt;p&gt;Here are the key things to update:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The page title&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find this near the top of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Get a Quote — Apex Studio&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to your business name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The business name in the nav&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the nav logo section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Apex Studio&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change this to your business name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The phone number&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the nav phone link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"tel:+16304415244"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  (630) 441-5244
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace with your actual phone number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hero headline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the h1 in the brand panel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"brand-h1 anim-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  GET YOUR&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;FREE&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  QUOTE
&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can leave this as is or change it to something more specific to your business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trust points&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the three trust items and update the text to reflect your actual business promises:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"trust-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Response within 24 hours&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
  We review your artwork and send a final 
  itemized quote.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The stats&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the three stat boxes and update them to reflect your business:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bstat-num"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;600&lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;+&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bstat-label"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Orders Completed&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The product dropdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the product selector and update the options to match what your business actually offers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;select&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"product"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"product"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Select a product&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&amp;gt;&lt;/span&gt;Standard T-Shirt (Heat Print / DTF)&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&amp;gt;&lt;/span&gt;Standard T-Shirt (Screen Printed)&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- Add your own products here --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The pricing data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the PRICING object in the JavaScript section and update the price ranges to match your actual pricing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PRICING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Standard T-Shirt (Heat Print / DTF)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;8.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;14.00&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;minQty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the min and max values for each product to reflect what you actually charge. The live estimate panel updates automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The footer contact details&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the footer and update the email, phone, and address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:hello@apexstudio.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  hello@apexstudio.com
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The colors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the top of the file in the CSS variables section, you will find:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--amber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8a020&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0a0a08&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--cream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f5f2ea&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the amber accent color to match your brand. &lt;br&gt;
Every button, highlight, and accent across the page updates automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ey51t2tm7jmxjs0j1os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ey51t2tm7jmxjs0j1os.png" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Test Your Form Locally
&lt;/h2&gt;

&lt;p&gt;Before you deploy, test that the form submission and file upload work correctly.&lt;/p&gt;

&lt;p&gt;Open the HTML file in your browser by double-clicking it. Fill in all the fields, attach a test file, and hit submit.&lt;/p&gt;

&lt;p&gt;Check two things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your Formgrid submissions dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your form on &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and click the &lt;strong&gt;Submissions&lt;/strong&gt; tab. Your test submission should include all fields and a download link for the uploaded file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32yj7fubvqiywxgjgreb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32yj7fubvqiywxgjgreb.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your email inbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You should have received an instant notification with all the quote details formatted cleanly and a link to download the attached file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh940c5xzw0c1b8bu27gm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh940c5xzw0c1b8bu27gm.png" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8lsw7ku8dxk5fg6ozeid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8lsw7ku8dxk5fg6ozeid.png" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If both of those worked, your template is connected and ready to deploy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Deploy to Netlify
&lt;/h2&gt;

&lt;p&gt;Netlify is the simplest way to get a static HTML file live on the internet for free.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;netlify.com&lt;/a&gt; and create a free account if you do not have one already.&lt;/p&gt;

&lt;p&gt;Once you are logged in to the Netlify dashboard, you will see a large drag-and-drop area that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Want to deploy a new site without connecting &lt;br&gt;
to Git? Drag and drop your site output folder here."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Take the folder containing your HTML file and drag it directly onto that area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl7p9fypj0bymcnx5xse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl7p9fypj0bymcnx5xse.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Netlify uploads your file and gives you a live &lt;br&gt;
URL in about 30 seconds. It looks something like:&lt;br&gt;
&lt;a href="https://random-name-abc123.netlify.app" rel="noopener noreferrer"&gt;https://random-name-abc123.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the URL, and your quote request page is &lt;br&gt;
live on the internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: Give Your Site a Better URL
&lt;/h2&gt;

&lt;p&gt;The random Netlify URL works, but it is not what you want to put on your business cards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Custom Netlify subdomain (free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In your Netlify site settings, go to &lt;br&gt;
&lt;strong&gt;Site Configuration&lt;/strong&gt; then &lt;strong&gt;Change site name&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can change it to something like:&lt;br&gt;
apex-studio-quote.netlify.app&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Your own domain (if you have one)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already own a domain, you can point it to Netlify in the &lt;strong&gt;Domain Management&lt;/strong&gt; section of your site settings. Netlify handles the SSL certificate automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Arrives in Your Inbox
&lt;/h2&gt;

&lt;p&gt;Every time a customer submits a quote request, you receive an email that looks like this:&lt;br&gt;
New Quote Request&lt;br&gt;
First Name: Sarah&lt;br&gt;
Last Name: Thompson&lt;br&gt;
Company: Lakewood Community Center&lt;br&gt;
Email: &lt;a href="mailto:sarah@lakewoodcc.org"&gt;sarah@lakewoodcc.org&lt;/a&gt;&lt;br&gt;
Phone: (555) 234-5678&lt;br&gt;
Project Type: New Design / First Order&lt;br&gt;
Product: Standard T-Shirt (Heat Print / DTF)&lt;br&gt;
Quantity: 150&lt;br&gt;
Decoration Method: Heat Print / DTF&lt;br&gt;
Placement: Full Front, Left Chest&lt;br&gt;
Need By Date: May 30, 2026&lt;br&gt;
Artwork: community-event-logo.pdf&lt;br&gt;
[Download File]&lt;br&gt;
Additional Instructions:&lt;br&gt;
Navy blue shirts. Logo on the left chest.&lt;br&gt;
Need them for our annual fundraiser gala.&lt;br&gt;
Open to color recommendations.&lt;/p&gt;

&lt;p&gt;Everything in one email. Name, contact details, what they need, how many, when they need it, and the artwork file ready to download.&lt;/p&gt;

&lt;p&gt;No back and forth asking for missing information. &lt;br&gt;
No hunting through two separate email threads. &lt;br&gt;
Just a complete quote request you can act on &lt;br&gt;
immediately.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3z3ib6wirkvc9mtjizys.png" alt=" " width="800" height="691"&gt;
&lt;/h2&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn6h5k4acek8j0dsp5d3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn6h5k4acek8j0dsp5d3.png" alt=" " width="800" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing Your Quote Requests
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;Submissions&lt;/strong&gt; tab on your form details page on formgrid.dev to see every quote request in one place.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for a specific customer by name or email&lt;/li&gt;
&lt;li&gt;View the full details of any submission&lt;/li&gt;
&lt;li&gt;Download attached files&lt;/li&gt;
&lt;li&gt;Export all quote requests as a CSV spreadsheet&lt;/li&gt;
&lt;li&gt;Mark submissions as read or responded to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd88zo2cs4zlo5vkjzuq6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd88zo2cs4zlo5vkjzuq6.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The CSV export is useful at the end of each month if you want to review your quote volume or track which products are most requested.&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrading When You Go Live
&lt;/h2&gt;

&lt;p&gt;The free plan gives you 25 submissions per month, which is enough to test your setup.&lt;/p&gt;

&lt;p&gt;When you go live, and quote requests start coming &lt;br&gt;
in you will want to upgrade:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Premium at $8 per month&lt;/strong&gt; gives you 1,000 &lt;br&gt;
submissions per month with file uploads included. &lt;br&gt;
This is the plan you need to accept artwork files from customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business at $29 per month&lt;/strong&gt; gives you 15,000 &lt;br&gt;
submissions per month, plus auto-responder emails so every customer automatically receives a confirmation the moment they submit their quote request. Something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Sarah, we have received your quote request &lt;br&gt;
for 150 t-shirts and will review your artwork &lt;br&gt;
and get back to you within one business day. &lt;br&gt;
Questions? Call us at (555) 000-1234.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That one automated email eliminates a significant number of follow-up calls from customers asking whether their request came through.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Beats Every Alternative
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Over a basic contact form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Standard contact forms do not support file uploads. &lt;br&gt;
Your customer fills in their name and hits send. &lt;br&gt;
The artwork arrives in a separate email. You spend &lt;br&gt;
time matching the two. Formgrid receives everything &lt;br&gt;
together in one submission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over Google Forms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Forms cannot accept file uploads unless &lt;br&gt;
the submitter has a Google account. Formgrid &lt;br&gt;
accepts files from anyone with no account &lt;br&gt;
required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overbuilding your own backend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building a file upload backend from scratch requires server configuration, file storage setup, security handling, and ongoing maintenance. Formgrid handles all of that so you can focus &lt;br&gt;
on your actual business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over-expensive form tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jotform charges $49 per month. Typeform charges &lt;br&gt;
$29 to $99 per month. Formgrid is $8 per month &lt;br&gt;
for 1,000 submissions with file uploads included.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Example
&lt;/h2&gt;

&lt;p&gt;Jose Pineda runs LP Custom Tees, a custom apparel shop in Aurora, Illinois. He was using a basic contact form, but it could not accept artwork files.&lt;/p&gt;

&lt;p&gt;He used AI to build a more advanced quote form and then searched for a form backend that could receive file uploads. He found Formgrid, added his endpoint URL, upgraded to Premium, and his new quote form was live the same day.&lt;/p&gt;

&lt;p&gt;Now every customer who requests a quote submits their artwork alongside their order details in one submission. Jose gets everything he needs to prepare an accurate quote in a single email.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get the Template
&lt;/h2&gt;

&lt;p&gt;The quote request templates and all other &lt;br&gt;
Formgrid HTML templates are available for &lt;br&gt;
free on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/allenarduino/formgrid-examples" rel="noopener noreferrer"&gt;github.com/allenarduino/formgrid-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star the repo to stay updated as new templates are added.&lt;/p&gt;

&lt;p&gt;Templates currently available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quote Request with Live Estimate (this guide)&lt;/li&gt;
&lt;li&gt;Event Registration&lt;/li&gt;
&lt;li&gt;Horse Ride Registration&lt;/li&gt;
&lt;li&gt;Wedding RSVP&lt;/li&gt;
&lt;li&gt;Photography Booking&lt;/li&gt;
&lt;li&gt;Cleaning Service Booking&lt;/li&gt;
&lt;li&gt;Personal Trainer Enquiry&lt;/li&gt;
&lt;li&gt;Real Estate Enquiry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each template follows the same pattern. Clone it, add your Formgrid endpoint URL, customize the text and colors, and deploy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Start Collecting Quote Requests Today
&lt;/h2&gt;

&lt;p&gt;Your customers are sending you files in separate emails right now. Or they are filling in a bare contact form, and you are chasing them for their artwork afterward.&lt;/p&gt;

&lt;p&gt;This template fixes both of those problems in under 20 minutes.&lt;/p&gt;

&lt;p&gt;Clone the template. Sign up for Formgrid. Deploy &lt;br&gt;
to Netlify. Share the link.&lt;/p&gt;

&lt;p&gt;Your customers get a professional quote request experience that makes your business look established. You get complete quote requests in your inbox, artwork file included, ready to respond immediately.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. Free plan available to test your setup. Upgrade to Premium at $8 per month when you are ready to go live &lt;br&gt;
with file uploads.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about the template or the &lt;br&gt;
Formgrid setup? Email &lt;a href="mailto:allen@formgrid.dev"&gt;allen@formgrid.dev&lt;/a&gt; &lt;br&gt;
and I will help you get it working for &lt;br&gt;
your specific business.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Free Event Registration Page Template You Can Deploy in 20 Minutes</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Fri, 17 Apr 2026 23:11:50 +0000</pubDate>
      <link>https://dev.to/allenarduino/free-event-registration-page-template-you-can-deploy-in-20-minutes-3k06</link>
      <guid>https://dev.to/allenarduino/free-event-registration-page-template-you-can-deploy-in-20-minutes-3k06</guid>
      <description>&lt;p&gt;You have an event coming up, and you need a registration page.&lt;/p&gt;

&lt;p&gt;Not a Google Form. Not an Eventbrite listing that takes a cut of every ticket. A real, beautiful, branded registration page that &lt;br&gt;
looks like your event deserves to be attended.&lt;/p&gt;

&lt;p&gt;This guide shows you how to deploy a world-class event registration page using a free HTML template and Formgrid as the &lt;br&gt;
form backend. No coding experience required. &lt;br&gt;
No monthly fees to get started. No backend to build.&lt;/p&gt;

&lt;p&gt;You will be live in under 20 minutes.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Will End Up With
&lt;/h2&gt;

&lt;p&gt;By the end of this guide, you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A complete event registration landing page 
deployed live on the internet&lt;/li&gt;
&lt;li&gt;A working form that collects attendee details 
and sends them directly to your inbox&lt;/li&gt;
&lt;li&gt;A submissions dashboard where you can view 
and export all your registrations as CSV&lt;/li&gt;
&lt;li&gt;A professional page you are proud to share 
in WhatsApp groups, emails, and social media&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is what the finished page looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrs8wmp79txwp9hcvq9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrs8wmp79txwp9hcvq9q.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The template includes a hero section with your event name and stats, an animated ticker bar, a photo strip, an about section, event &lt;br&gt;
highlights, a full schedule timeline, and guest reviews, a how it works section, a CTA band, and a complete footer. &lt;br&gt;
All in one self-contained HTML file.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Need Before You Start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A free Formgrid account at 
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A free Netlify account at 
&lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;netlify.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A text editor (VS Code, Sublime Text, or 
even Notepad works fine)&lt;/li&gt;
&lt;li&gt;About 20 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is it. No Node.js. No build tools. No command line required.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Get the Template From GitHub
&lt;/h2&gt;

&lt;p&gt;Go to the Formgrid examples repository:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/allenarduino/formgrid-examples" rel="noopener noreferrer"&gt;github.com/allenarduino/formgrid-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see a collection of free HTML templates &lt;br&gt;
built for different industries. Find the &lt;br&gt;
&lt;strong&gt;Event Registration&lt;/strong&gt; template.&lt;/p&gt;

&lt;p&gt;You have two options to get the files:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Clone with Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have Git installed, open your terminal &lt;br&gt;
and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/allenarduino/formgrid-examples.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then navigate to the event registration &lt;br&gt;
template folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Download as ZIP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click the green &lt;strong&gt;Code&lt;/strong&gt; button on the GitHub page and select &lt;strong&gt;Download ZIP&lt;/strong&gt;. &lt;br&gt;
Extract the folder to your desktop.&lt;/p&gt;

&lt;p&gt;Open the folder and you will find a single another folder called event-registration, in that folder you will find a file called &lt;br&gt;
file: &lt;strong&gt;index.html&lt;/strong&gt;&lt;br&gt;
If you want to copy the code directly, you can visit this link:&lt;br&gt;
&lt;a href="https://github.com/allenarduino/formgrid-examples/blob/main/industries/event-registration/index.html" rel="noopener noreferrer"&gt;https://github.com/allenarduino/formgrid-examples/blob/main/industries/event-registration/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open it in your browser right now by double-clicking it. You will see the full, beautiful registration page working locally on your computer. &lt;br&gt;
The only thing missing is a real form endpoint, so submissions &lt;br&gt;
go somewhere.&lt;/p&gt;

&lt;p&gt;That is what Formgrid provides.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Create Your Formgrid Account
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up with Google or your email address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayfulytj8845e34vriww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayfulytj8845e34vriww.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. The free plan gives you 25 submissions per month, which is enough to test the whole setup and run a small event.&lt;/p&gt;

&lt;p&gt;Once you sign up, you land on the Formgrid dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc9j9f0ojdxlpds6qf23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc9j9f0ojdxlpds6qf23.png" alt=" " width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: Create a New Form
&lt;/h2&gt;

&lt;p&gt;From the dashboard click &lt;strong&gt;New Form&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give your form a name that matches your event. &lt;br&gt;
Something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Westside Community Gala 2026&lt;/li&gt;
&lt;li&gt;Annual Members Meetup: Summer Edition&lt;/li&gt;
&lt;li&gt;Blue Ridge Photography Workshop 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9t06sgvadxwfqx912es.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9t06sgvadxwfqx912es.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create Form&lt;/strong&gt;. You will be taken to the form details page.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 4: Copy Your Endpoint URL
&lt;/h2&gt;

&lt;p&gt;On the form details page you will see a section called &lt;strong&gt;Endpoint Information&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your endpoint URL looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://formgrid.dev/api/f/your-form-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click &lt;strong&gt;Copy&lt;/strong&gt; next to the endpoint URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2y7hnm70aa5x5hha55i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2y7hnm70aa5x5hha55i.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhiq52f286b42qzbduav6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhiq52f286b42qzbduav6.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This URL is your form backend. When someone fills in the registration form on your page and hits submit, their details are sent to &lt;br&gt;
this URL. Formgrid receives the submission, stores it in your dashboard, and sends you an instant email notification.&lt;/p&gt;

&lt;p&gt;Keep this URL copied. You need it in the next step.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 5: Add Your Endpoint URL to the Template
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;event-registration-template.html&lt;/strong&gt; in your text editor.&lt;/p&gt;

&lt;p&gt;Use the Find function (Ctrl+F or Cmd+F) &lt;br&gt;
and search for:&lt;br&gt;
YOUR_FORMGRID_ENDPOINT_URL&lt;/p&gt;

&lt;p&gt;You will find it in the JavaScript section near the bottom of the file inside the form submit handler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;strong&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/strong&gt; with your actual Formgrid endpoint URL. It should look like this after the change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://formgrid.dev/api/f/your-form-id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlss3ldi5cx7ll7ntq0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlss3ldi5cx7ll7ntq0j.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That one change connects your beautiful registration page to Formgrid. Every submission now goes directly to your inbox and your dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Customize the Template for Your Event
&lt;/h2&gt;

&lt;p&gt;Now open the file in your text editor and make the template your own. Everything is clearly labeled in the HTML comments.&lt;/p&gt;

&lt;p&gt;Here are the key things to update:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The page title&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find this near the top of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Westside Gala 2026 — Register Now&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to your event name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hero headline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the hero section and update the h1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"anim-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  An evening worth&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;remembering.&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change this to something that captures your event. For a photography workshop, it might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"anim-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Two days of learning&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;and creating together.&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The event description&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the hero description paragraph and replace the placeholder text with a sentence about your actual event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The event stats&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the three stat boxes in the hero and update the numbers and labels to match your event:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"stat-num"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;400&lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;+&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"stat-label"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Expected Guests&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change 400 to your expected attendance and update all three stats to reflect your event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ticker bar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the ticker section and update the &lt;br&gt;
items to match your event details:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ticker-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ticker-dot"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  Saturday June 14, 2026
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the date, venue name, dress code, and other details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The schedule timeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the timeline section and replace the placeholder schedule with your actual event schedule. Each timeline item follows this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"timeline-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"timeline-time"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    6:30 PM
    &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Saturday&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"timeline-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h4&amp;gt;&lt;/span&gt;Doors Open and Welcome Reception&lt;span class="nt"&gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Your description here.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"timeline-tag"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Your Tag&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The footer contact details&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the footer and update the email address and phone number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:hello@westsidegala.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  hello@westsidegala.com
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The colors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the top of the file in the CSS variables section, you will find:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--forest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1b3a2d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--gold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#c9973a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--cream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#faf6ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change these to match your event branding. &lt;br&gt;
The entire page updates automatically because every color reference in the file points back to these variables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer5gcw5hww97bz4zrmac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer5gcw5hww97bz4zrmac.png" alt=" " width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Test Your Form Locally
&lt;/h2&gt;

&lt;p&gt;Before you deploy, test that the form &lt;br&gt;
submission works.&lt;/p&gt;

&lt;p&gt;Open the HTML file in your browser by double-clicking it. Fill in the form with your own details and hit submit.&lt;/p&gt;

&lt;p&gt;Check two things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your Formgrid inbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your form details page on &lt;br&gt;
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and click the &lt;strong&gt;Submissions&lt;/strong&gt; tab. &lt;br&gt;
You should see your test submission appear there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your email&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check the email address you signed up with. &lt;br&gt;
You should have received an instant notification with all the &lt;br&gt;
details you submitted.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tq79p196ko6xzd1gt1c.png" alt=" " width="800" height="442"&gt;
&lt;/h2&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5066v91xm2idkzsd9qi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5066v91xm2idkzsd9qi.png" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;br&gt;
If both of those worked, your template is connected and ready to deploy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Deploy to Netlify
&lt;/h2&gt;

&lt;p&gt;Netlify is the simplest way to get a static HTML file live on the internet for free.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;netlify.com&lt;/a&gt; and create a free account if you do not have one already.&lt;/p&gt;

&lt;p&gt;Once you are logged in to the Netlify dashboard, you will see a large drag and drop area that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Want to deploy a new site without &lt;br&gt;
connecting to Git? Drag and drop your &lt;br&gt;
site output folder here."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Take the folder containing your &lt;br&gt;
&lt;strong&gt;event-registration-template.html&lt;/strong&gt; &lt;br&gt;
file and drag it directly onto that area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjpkls511piygfdkqrs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjpkls511piygfdkqrs4.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Netlify uploads your file and gives you &lt;br&gt;
a live URL in about 30 seconds. It looks &lt;br&gt;
something like:&lt;br&gt;
&lt;a href="https://random-name-abc123.netlify.app" rel="noopener noreferrer"&gt;https://random-name-abc123.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the URL, and your event registration page is live on the internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Give Your Site a Better URL
&lt;/h2&gt;

&lt;p&gt;The random Netlify URL works but it is not the kind of link you want to share in a WhatsApp group with 200 riders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: Custom Netlify subdomain (free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In your Netlify site settings go to &lt;br&gt;
&lt;strong&gt;Site Configuration&lt;/strong&gt; then &lt;strong&gt;Change site name&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can change it to something like:&lt;br&gt;
westside-gala-2026.netlify.app&lt;/p&gt;

&lt;p&gt;That is a much cleaner link to share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: Your own domain (if you have one)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already own a domain you can point it to Netlify in the &lt;strong&gt;Domain Management&lt;/strong&gt; section of your site settings. &lt;br&gt;
Netlify handles the SSL certificate &lt;br&gt;
automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happens When Someone Registers
&lt;/h2&gt;

&lt;p&gt;The moment an attendee submits the form &lt;br&gt;
on your live page two things happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You receive an instant email notification:&lt;/strong&gt;&lt;br&gt;
New Registration: Westside Gala 2026&lt;br&gt;
Name: Allen Jones&lt;br&gt;
Email: &lt;a href="mailto:allen@gmail.com"&gt;allen@gmail.com&lt;/a&gt;&lt;br&gt;
Phone: (555) 234-5678&lt;br&gt;
Ticket Type: VIP&lt;br&gt;
Number of Guests: 2&lt;br&gt;
Dietary Requirements: Vegetarian&lt;br&gt;
Notes: Looking forward to the evening!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhcmud61d7y9b416n6zf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhcmud61d7y9b416n6zf.png" alt=" " width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No inbox archaeology. No reply threads to dig through. Every registration arrives formatted and ready to read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The submission is saved to your dashboard:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your form on formgrid.dev and click the &lt;strong&gt;Submissions&lt;/strong&gt; tab to see every registration. Search by name, view individual submissions, and export the complete attendee list as a CSV file with one click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fapapml4dvz19zckll42k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fapapml4dvz19zckll42k.png" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrading When Your Registrations Open
&lt;/h2&gt;

&lt;p&gt;The free plan gives you 25 submissions &lt;br&gt;
per month, which is enough for testing and small events.&lt;/p&gt;

&lt;p&gt;When your registrations open, you will &lt;br&gt;
want to upgrade:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Premium at $8 per month&lt;/strong&gt; gives you &lt;br&gt;
1,000 submissions per month. Enough &lt;br&gt;
for most community events and workshops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business at $29 per month&lt;/strong&gt; gives you &lt;br&gt;
15,000 submissions per month, plus auto-responder emails so every registrant automatically receives a confirmation message from you.&lt;/p&gt;

&lt;p&gt;The auto-responder is worth the upgrade &lt;br&gt;
on its own. Instead of manually replying to every registration confirmation request, every attendee gets an instant email the moment they submit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for registering for the &lt;br&gt;
Westside Gala 2026. We have received &lt;br&gt;
your registration for 2 guests on &lt;br&gt;
the VIP plan. Doors open at 6:30 PM &lt;br&gt;
on Saturday June 14 at the Grand &lt;br&gt;
Westside Ballroom. We look forward &lt;br&gt;
to seeing you on the night.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One automated email. Zero inbox clutter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Approach Beats Every Alternative
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Eventbrite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eventbrite charges a service fee per &lt;br&gt;
ticket plus a payment processing fee. &lt;br&gt;
For a free community event, you still pay Eventbrite to host your page. &lt;br&gt;
For a paid event, they take a percentage of every ticket you sell.&lt;/p&gt;

&lt;p&gt;With this approach, you pay nothing to Eventbrite. Your registrations &lt;br&gt;
go directly to your inbox and dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Forms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Forms is free and functional, but it gives you a bare form on a &lt;br&gt;
white page with Google branding. &lt;br&gt;
There is no hero section, no event details, no schedule, no photos, &lt;br&gt;
and no customization that makes the page look like your event.&lt;/p&gt;

&lt;p&gt;This template gives you a complete event website in a single HTML file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building from scratch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building a registration page from scratch takes days or weeks. &lt;br&gt;
This template is ready in 20 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get the Template
&lt;/h2&gt;

&lt;p&gt;The event registration template and all other Formgrid HTML templates are available for free on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/allenarduino/formgrid-examples" rel="noopener noreferrer"&gt;github.com/allenarduino/formgrid-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star the repo to stay updated as new templates are added.&lt;/p&gt;

&lt;p&gt;Templates currently available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event Registration (this guide)&lt;/li&gt;
&lt;li&gt;Horse Ride Registration&lt;/li&gt;
&lt;li&gt;Wedding RSVP&lt;/li&gt;
&lt;li&gt;Photography Booking&lt;/li&gt;
&lt;li&gt;Cleaning Service Booking&lt;/li&gt;
&lt;li&gt;Personal Trainer Enquiry&lt;/li&gt;
&lt;li&gt;Real Estate Enquiry&lt;/li&gt;
&lt;li&gt;Plumbing Quote Request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each template follows the same pattern. &lt;br&gt;
Clone it, add your Formgrid endpoint URL, and customize the text &lt;br&gt;
and colors, and deploy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Start Your Registration Page Today
&lt;/h2&gt;

&lt;p&gt;Your event deserves a registration page that matches the effort you &lt;br&gt;
have put into organizing it.&lt;/p&gt;

&lt;p&gt;Clone the template. Sign up for Formgrid. Deploy to Netlify. &lt;br&gt;
Share the link.&lt;/p&gt;

&lt;p&gt;Your attendees get a registration experience that looks and feels &lt;br&gt;
professional. &lt;br&gt;
You get a clean attendee list in your inbox and dashboard. No chasing reply-all email threads to find out who is coming.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. Free plan available. Upgrade when your &lt;br&gt;
registrations open.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about the template &lt;br&gt;
or the Formgrid setup? Email &lt;br&gt;
&lt;a href="mailto:allen@formgrid.dev"&gt;allen@formgrid.dev&lt;/a&gt; and I will &lt;br&gt;
help you get live before your &lt;br&gt;
event opens.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>eventregistration</category>
      <category>forms</category>
    </item>
    <item>
      <title>The Simplest Way to Create a Horse Show Registration Form Online</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Fri, 17 Apr 2026 13:19:33 +0000</pubDate>
      <link>https://dev.to/allenarduino/the-simplest-way-to-create-a-horse-show-registration-form-online-34h5</link>
      <guid>https://dev.to/allenarduino/the-simplest-way-to-create-a-horse-show-registration-form-online-34h5</guid>
      <description>&lt;p&gt;If you are organizing an endurance ride, a horse show, or any equestrian event, you already know the problem.&lt;br&gt;
Entries come in by email. Some people forget to include their horse's name. Others send the wrong division.&lt;br&gt;
You spend hours chasing information that should have been on a form in the first place.&lt;/p&gt;

&lt;p&gt;The traditional fix is expensive event management software that charges per-entry fees, takes a cut of your registration fees, or locks you into a platform your participants have never heard of.&lt;/p&gt;

&lt;p&gt;There is a simpler way. This guide shows you how to build a professional horse show registration page in under 10 minutes using Formgrid, no coding, no expensive software, no per-entry fees.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Will End Up With
&lt;/h2&gt;

&lt;p&gt;By the end of this guide, you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A beautiful, branded registration page for your
participants can visit on any device&lt;/li&gt;
&lt;li&gt;A form that collects exactly the information
you need from each rider and horse&lt;/li&gt;
&lt;li&gt;An instant email notification every time
someone registers&lt;/li&gt;
&lt;li&gt;A submissions dashboard where you can view,
search, and export all your entries as a CSV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is what the finished registration page&lt;br&gt;
looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafbl32270md50shgwgb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafbl32270md50shgwgb7.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Create Your Formgrid Account
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; and&lt;br&gt;
sign up with Google or your email address.&lt;/p&gt;

&lt;p&gt;No credit card required. The free plan gives you&lt;br&gt;
25 submissions per month, which is enough to test&lt;br&gt;
the whole setup before your entries open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2td5782bmcfjpa30ew0l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2td5782bmcfjpa30ew0l.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zvxnjgjfol38b0u4ot3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zvxnjgjfol38b0u4ot3.png" alt=" " width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you sign up, you land on your dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Create a New Form
&lt;/h2&gt;

&lt;p&gt;From the dashboard click &lt;strong&gt;New Form&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give your form a name that makes sense for your&lt;br&gt;
event. Something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Descanso Endurance Ride 2026&lt;/li&gt;
&lt;li&gt;Spring Horse Show Entries&lt;/li&gt;
&lt;li&gt;Club Championship Registration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qqwfs6uxfgbi4aur5km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qqwfs6uxfgbi4aur5km.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create Form&lt;/strong&gt; and you will be taken to&lt;br&gt;
the form details page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Open the Form Builder
&lt;/h2&gt;

&lt;p&gt;On the form details page, you will see the&lt;br&gt;
&lt;strong&gt;Form Builder&lt;/strong&gt; section. Click &lt;strong&gt;Open Builder&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998dcx9eq3rzpvivclau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998dcx9eq3rzpvivclau.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This takes you into the Formgrid builder, where&lt;br&gt;
everything happens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcru045g17m1t1iy9xnel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcru045g17m1t1iy9xnel.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Choose the Horse Riding Template
&lt;/h2&gt;

&lt;p&gt;When the builder opens you will see a&lt;br&gt;
&lt;strong&gt;Choose Template&lt;/strong&gt; button at the top of the page.&lt;/p&gt;

&lt;p&gt;Click it. A template gallery appears, showing&lt;br&gt;
all the available landing page templates.&lt;/p&gt;

&lt;p&gt;Find the &lt;strong&gt;Horse Ride Registration&lt;/strong&gt; template&lt;br&gt;
and click &lt;strong&gt;Use This Template&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfbmehb58tgwv5d2l8mm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfbmehb58tgwv5d2l8mm.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The builder immediately loads a complete,&lt;br&gt;
professional horse ride registration page with a hero section, event details, registration form, and footer, all ready for you to customize.&lt;/p&gt;

&lt;p&gt;This is not a basic form on a white page. It is&lt;br&gt;
a full landing page that looks like a real event website.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Customize the Template to Match Your Event
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting. Every piece&lt;br&gt;
of text on the page is editable. You do not need&lt;br&gt;
to know any code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Switch to Page View
&lt;/h3&gt;

&lt;p&gt;At the top of the builder, you will see two buttons:&lt;br&gt;
&lt;strong&gt;Form Fields&lt;/strong&gt; and &lt;strong&gt;Page View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Page View&lt;/strong&gt; to see and edit your&lt;br&gt;
landing page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fav9tmem9m05tssxnievs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fav9tmem9m05tssxnievs.png" alt=" " width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Edit Text by Clicking Directly on It
&lt;/h3&gt;

&lt;p&gt;Click any text element on the page to make it editable instantly. Just like editing a document.&lt;/p&gt;

&lt;p&gt;Click on the headline that says&lt;br&gt;
&lt;strong&gt;"Ride Registration 2026"&lt;/strong&gt; and change it to&lt;br&gt;
your actual ride name:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Blue Ridge Endurance Classic 2026&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click on the date and change it to your event date.&lt;br&gt;
Click on the location and add your venue.&lt;br&gt;
Click on the description and write something that captures what makes your ride special.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5an3vg7ts01sshgeoa0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5an3vg7ts01sshgeoa0.png" alt=" " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every click saves you a support email from a&lt;br&gt;
confused participant who could not find the date.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change the Colors to Match Your Brand
&lt;/h3&gt;

&lt;p&gt;On the right side panel, you will see a&lt;br&gt;
&lt;strong&gt;Primary Color&lt;/strong&gt; picker.&lt;/p&gt;

&lt;p&gt;Click it and choose a color that matches your&lt;br&gt;
club or event branding. The button, the accents,&lt;br&gt;
and the highlights across the entire page update&lt;br&gt;
instantly to match.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97yqig9rjbm33b88zdk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97yqig9rjbm33b88zdk8.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also change the background color to&lt;br&gt;
give the page a completely different feel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update Your Contact Details
&lt;/h3&gt;

&lt;p&gt;Scroll to the footer section of the template&lt;br&gt;
editor panel on the right. Update:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your club or organization name&lt;/li&gt;
&lt;li&gt;Your contact email address&lt;/li&gt;
&lt;li&gt;Your phone number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These appear in the footer of your registration&lt;br&gt;
page so participants can reach you if they have&lt;br&gt;
questions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Customize Your Registration Form Fields
&lt;/h2&gt;

&lt;p&gt;Now switch back to &lt;strong&gt;Form Fields&lt;/strong&gt; by clicking&lt;br&gt;
the Form Fields button at the top.&lt;/p&gt;

&lt;p&gt;The horse ride template comes pre-loaded with the most common fields for an equestrian event.&lt;br&gt;
registration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rider Full Name&lt;/li&gt;
&lt;li&gt;Email Address&lt;/li&gt;
&lt;li&gt;Phone Number&lt;/li&gt;
&lt;li&gt;Horse Name&lt;/li&gt;
&lt;li&gt;Breed&lt;/li&gt;
&lt;li&gt;Division (50 Mile, 25 Mile, 12 Mile Intro,
Limited Distance)&lt;/li&gt;
&lt;li&gt;Experience Level&lt;/li&gt;
&lt;li&gt;Emergency Contact&lt;/li&gt;
&lt;li&gt;Additional Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need to add more fields, like a waiver&lt;br&gt;
acknowledgment, a vet card number, or a&lt;br&gt;
t-shirt size, click &lt;strong&gt;Add Field&lt;/strong&gt; from the&lt;br&gt;
left sidebar and drag it into position on&lt;br&gt;
the canvas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mih0erydk1ws7gn570l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mih0erydk1ws7gn570l.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can make any field required or optional,&lt;br&gt;
change the label, add placeholder text, and&lt;br&gt;
reorder fields by dragging them up or down.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Preview Your Registration Page
&lt;/h2&gt;

&lt;p&gt;Want to see exactly what your participants&lt;br&gt;
will see before you share it?&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Page View&lt;/strong&gt; again to see the live&lt;br&gt;
preview of your complete registration page&lt;br&gt;
with all your customizations applied.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdumqqbfjd11ehmkjhlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdumqqbfjd11ehmkjhlp.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5tvlct2kq6q1f5tn65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5tvlct2kq6q1f5tn65.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a moment to read through it as if you were a participant. Is the date clear? Is the division selector labeled correctly? Does the page reflect your event's personality?&lt;/p&gt;

&lt;p&gt;Make any final adjustments by clicking directly&lt;br&gt;
on the text or updating the panel on the right.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Save Your Form
&lt;/h2&gt;

&lt;p&gt;When you are happy with everything, click&lt;br&gt;
&lt;strong&gt;Save Changes&lt;/strong&gt; at the top of the builder.&lt;/p&gt;

&lt;p&gt;Formgrid saves your template design, your&lt;br&gt;
form fields, and all your customizations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Share Your Registration Link
&lt;/h2&gt;

&lt;p&gt;Go back to the form details page. You will see&lt;br&gt;
your unique registration link.&lt;/p&gt;

&lt;p&gt;It looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://formgrid.dev/forms/v/cholgycu" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a real, working landing page. Share&lt;br&gt;
it anywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post it in your WhatsApp group&lt;/li&gt;
&lt;li&gt;Add it to your club website or Facebook page&lt;/li&gt;
&lt;li&gt;Put it in your event announcement email&lt;/li&gt;
&lt;li&gt;Share it in equestrian Facebook groups&lt;/li&gt;
&lt;li&gt;Add it to your Instagram bio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Participants visit the link, see your branded&lt;br&gt;
registration page, fill in the form, and hit&lt;br&gt;
submit. That is it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happens When Someone Registers
&lt;/h2&gt;

&lt;p&gt;The moment a participant submits the form, two things happen simultaneously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rvaazni4d2ep9w1edtk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rvaazni4d2ep9w1edtk.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You receive an instant email notification&lt;/strong&gt;&lt;br&gt;
with all their details formatted cleanly:&lt;br&gt;
Blue Ridge Endurance Classic 2026&lt;/p&gt;

&lt;p&gt;Rider Name: Sarah Johnson&lt;br&gt;
Email: &lt;a href="mailto:sarah@email.com"&gt;sarah@email.com&lt;/a&gt;&lt;br&gt;
Phone: (555) 123-4567&lt;br&gt;
Horse Name: Midnight Storm&lt;br&gt;
Breed: Arabian&lt;br&gt;
Division: 50 Mile&lt;br&gt;
Experience Level: Advanced&lt;br&gt;
Additional Notes: First 50 at this ride.&lt;br&gt;
Looking forward to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc4l42ixk2nzqc7bbypv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc4l42ixk2nzqc7bbypv.png" alt=" " width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No more digging through a chain of reply-all emails trying to find someone's horse's name. Every registration arrives in your inbox in the same format, ready to read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The submission is also saved to your dashboard&lt;/strong&gt;&lt;br&gt;
where you can view every entry, search by name, filter by division, and export the complete list as a CSV file for your records or to share with your ride manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7r4slrdvxn387ncx2tv9.png" alt=" " width="800" height="444"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Managing Your Entries
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;Submissions&lt;/strong&gt; tab on your form&lt;br&gt;
details page to see everything in one place.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for a specific rider by name&lt;/li&gt;
&lt;li&gt;See every detail they submitted&lt;/li&gt;
&lt;li&gt;Export all entries as a CSV spreadsheet&lt;/li&gt;
&lt;li&gt;Mark entries as read or responded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are on the Business plan you can set up&lt;br&gt;
an auto-responder email that goes to every&lt;br&gt;
participant automatically when they register.&lt;br&gt;
Something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for entering the Descanso 50 Mile&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We have received your registration for
[Horse Name] in the [Division] division.
You will receive your ride packet information
and camp details approximately two weeks
before the ride. See you at the start line.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;That one automated email eliminates a week of&lt;br&gt;
answering the same question from 200 riders.&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrading When Your Entries Open
&lt;/h2&gt;

&lt;p&gt;The free plan gives you 25 submissions per month&lt;br&gt;
which is useful for testing and small events.&lt;/p&gt;

&lt;p&gt;When your entries open and registrations start coming in, you will want to upgrade to Premium at $8 per month for 1,000 submissions or&lt;br&gt;
Business at $29 per month for 15,000 submissions with the auto-responder and custom email templates included.&lt;/p&gt;

&lt;p&gt;For context, Annie, who manages the San Diego Endurance Riders events, use the Business plan for her ride registrations. At $29 per month it is a fraction of what dedicated event management software costs, and there are no per-entry fees.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Event Organizers Choose Formgrid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No per-entry fees.&lt;/strong&gt; Eventbrite and similar&lt;br&gt;
platforms charge a percentage of each registration. Formgrid charges a flat monthly fee regardless of how many entries you collect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your participants do not need an account.&lt;/strong&gt;&lt;br&gt;
They just visit the link, fill in the form, and submit. No login required. No app to download.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works on any device.&lt;/strong&gt; The registration page&lt;br&gt;
looks great on a phone, tablet, or desktop.&lt;br&gt;
Most of your participants will register on their phones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You own your data.&lt;/strong&gt; Every submission is yours.&lt;br&gt;
Export it anytime as a CSV. No lock-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant notifications.&lt;/strong&gt; You know the moment&lt;br&gt;
someone registers. No logging into a platform&lt;br&gt;
to check. It arrives in your email inbox just&lt;br&gt;
like any other message.&lt;/p&gt;




&lt;h2&gt;
  
  
  Start Your Registration Page Today
&lt;/h2&gt;

&lt;p&gt;Setting up your horse show or endurance ride registration page takes less than 10 minutes.&lt;/p&gt;

&lt;p&gt;The template does the heavy lifting. You just&lt;br&gt;
fill in your event details, pick your colors, and share the link.&lt;/p&gt;

&lt;p&gt;Your participants get a professional registration experience. &lt;br&gt;
You get clean, organized entries&lt;br&gt;
in your inbox and dashboard. Nobody has to chase anyone by email.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. Free plan available.&lt;br&gt;
Upgrade when your entries open.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about setting up your registration&lt;br&gt;
form? Email &lt;a href="mailto:allen@formgrid.dev"&gt;allen@formgrid.dev&lt;/a&gt; and I will help&lt;br&gt;
you get it live before your entries open.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Build a Waitlist Page for Your Startup in 2026</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sat, 11 Apr 2026 11:00:39 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-build-a-waitlist-page-for-your-startup-in-2026-21ag</link>
      <guid>https://dev.to/allenarduino/how-to-build-a-waitlist-page-for-your-startup-in-2026-21ag</guid>
      <description>&lt;p&gt;You have an idea. Maybe you are still building it. Maybe &lt;br&gt;
it is ready, but you want to build an audience before you &lt;br&gt;
launch. Either way, the worst thing you can do is wait until launch day to start collecting emails.&lt;/p&gt;

&lt;p&gt;A waitlist page solves that problem. It lets you validate &lt;br&gt;
demand, build excitement, and collect real email addresses &lt;br&gt;
from genuinely interested people  before you write a single line of production code or spend a dollar &lt;br&gt;
on ads.&lt;/p&gt;

&lt;p&gt;In this guide, you will build a complete, working waitlist &lt;br&gt;
page from scratch using plain HTML and CSS, with a form &lt;br&gt;
backend powered by &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Formgrid.dev&lt;/a&gt;. &lt;br&gt;
Every email collected goes straight to your inbox and your dashboard. No backend. No server. No complex setup.&lt;/p&gt;

&lt;p&gt;By the end, you will have a live waitlist page you can &lt;br&gt;
deploy on GitHub Pages, Netlify, Cloudflare Pages, or &lt;br&gt;
any static host for free.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv9rw4o31ax7jjjupqjk.png" alt=" " width="800" height="443"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Why a Waitlist Page Matters Before You Launch
&lt;/h2&gt;

&lt;p&gt;Most founders make the same mistake. They build for &lt;br&gt;
months, launch to the public, and discover nobody is &lt;br&gt;
waiting. The problem was not the product. It was the &lt;br&gt;
absence of a pre-launch audience.&lt;/p&gt;

&lt;p&gt;A waitlist page does three things at once:&lt;/p&gt;

&lt;p&gt;It validates demand. If people will not give you their &lt;br&gt;
email address, they will not give you their money either. &lt;br&gt;
A hundred signups before launch is proof that real humans &lt;br&gt;
care about what you are building.&lt;/p&gt;

&lt;p&gt;It gives you a launch list. When you are ready to go &lt;br&gt;
live, you have a warm audience to email. That first wave &lt;br&gt;
of users does not come from cold outreach. It comes from &lt;br&gt;
people who already said yes.&lt;/p&gt;

&lt;p&gt;It creates momentum. Showing "1,200 people on the &lt;br&gt;
waitlist" on your landing page is social proof that &lt;br&gt;
compounds. Every new visitor sees it and thinks, &lt;br&gt;
"maybe I should sign up too."&lt;/p&gt;

&lt;p&gt;The good news: you do not need a fancy tool or a &lt;br&gt;
monthly subscription to build one. You need HTML, &lt;br&gt;
CSS, and a form backend.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Will Build
&lt;/h2&gt;

&lt;p&gt;A clean, professional waitlist page with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A compelling hero section with your headline 
and value proposition&lt;/li&gt;
&lt;li&gt;A working email capture form&lt;/li&gt;
&lt;li&gt;A success message after submission&lt;/li&gt;
&lt;li&gt;Spam protection built in&lt;/li&gt;
&lt;li&gt;Email notification to your inbox on every signup&lt;/li&gt;
&lt;li&gt;A submission dashboard to track all your signups&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Step 1: Create Your Formgrid Account
&lt;/h2&gt;

&lt;p&gt;Head to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;https://formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up using Google or Email.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. The free plan gives you &lt;br&gt;
50 submissions per month, which is more than enough &lt;br&gt;
to validate your idea before you launch.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Create a New Form
&lt;/h2&gt;

&lt;p&gt;Once logged in, click &lt;strong&gt;New Form&lt;/strong&gt; from your dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name your form something descriptive, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Waitlist Signups"&lt;/li&gt;
&lt;li&gt;"Early Access"&lt;/li&gt;
&lt;li&gt;"Pre-Launch Leads"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Create Form&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: Copy Your Endpoint URL
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;Overview&lt;/strong&gt; tab of your new form and &lt;br&gt;
copy your unique endpoint URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It looks like this:&lt;br&gt;
&lt;a href="https://formgrid.dev/api/f/your-form-id" rel="noopener noreferrer"&gt;https://formgrid.dev/api/f/your-form-id&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the URL your waitlist form will submit &lt;br&gt;
data to. Keep it handy for the next step.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 4: Build Your Waitlist Page
&lt;/h2&gt;

&lt;p&gt;Create a new file called &lt;code&gt;index.html&lt;/code&gt; and paste &lt;br&gt;
this complete waitlist page. Replace &lt;br&gt;
&lt;code&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/code&gt; with the endpoint &lt;br&gt;
you copied in Step 3, and update the headline, &lt;br&gt;
description, and colours to match your product.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; 
        &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, 
                 initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Join the Waitlist&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preconnect"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preconnect"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.gstatic.com"&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt;
    &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com/css2?family=Outfit:wght@600;700;800&amp;amp;family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&amp;amp;display=swap"&lt;/span&gt;
    &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;*,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="py"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1d4f3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8f3ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#111827&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6b7280&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e5e7eb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f9fafb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Plus Jakarta Sans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlinkMacSystemFont&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;--font-display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Outfit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Plus Jakarta Sans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--bg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;-moz-osx-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grayscale&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* NAV */&lt;/span&gt;
    &lt;span class="nc"&gt;.site-nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="py"&gt;backdrop-filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;-webkit-backdrop-filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;229&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;231&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;inset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="m"&gt;-4px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;39&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.site-nav-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1100px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;94vw&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.65rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.02em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo-mark&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="m"&gt;145deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="m"&gt;#163d30&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo-mark&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;inset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.35&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex-start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo-name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.logo-kicker&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.65rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.12em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.nav-cta&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.875rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5rem&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;999px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;background&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;border-color&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;white-space&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;nowrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.nav-cta&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#dceee5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.35&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;480px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;.logo-kicker&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.logo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.logo-mark&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.nav-cta&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.8125rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.45rem&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* HERO — wide column, large type */&lt;/span&gt;
    &lt;span class="nc"&gt;.hero&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;8vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;6rem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1100px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;94vw&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.badge&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.8125rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.14em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;999px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3.5vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.hero&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-display&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3.125rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;9vw&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5.75rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.035em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.02&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.hero&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="nc"&gt;.hero-accent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;@supports&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;-webkit-background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;.hero&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="nc"&gt;.hero-accent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="m"&gt;120deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="m"&gt;#2d7a5c&lt;/span&gt; &lt;span class="m"&gt;45%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="m"&gt;#1a5c46&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nl"&gt;-webkit-background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.subtitle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-sans&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.35rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2.8vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1.75rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.015em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;48rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* FORM */&lt;/span&gt;
    &lt;span class="nf"&gt;#waitlist-form&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="py"&gt;scroll-margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-wrap&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;640px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.0625rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-color&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="m"&gt;28px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.0625rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;white-space&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;nowrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:disabled&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;not-allowed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.form-hint&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.82rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* SUCCESS STATE */&lt;/span&gt;
    &lt;span class="nc"&gt;.success&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#cde3d8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.success&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.success&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.95rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* SOCIAL PROOF */&lt;/span&gt;
    &lt;span class="nc"&gt;.proof&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.95rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1.5vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1.05rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;52rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.proof-dot&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* FEATURES */&lt;/span&gt;
    &lt;span class="nc"&gt;.features&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;64px&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;960px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.features&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--font-display&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3vw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1.85rem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.03em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.features-grid&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;auto-fit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;240px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.feature-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.feature-icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.feature-icon&lt;/span&gt; &lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="py"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;stroke-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;stroke-linecap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="py"&gt;stroke-linejoin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.feature-card&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.feature-card&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.9rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* FOOTER */&lt;/span&gt;
    &lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.85rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--muted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nl"&gt;border-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;560px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;.form-row&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"site-nav"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"banner"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"site-nav-inner"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"logo"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"YourProduct home"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"logo-mark"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"logo-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"logo-name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;YourProduct&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"logo-kicker"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Waitlist&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#waitlist-form"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-cta"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join waitlist&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hero"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"badge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Coming Soon&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;
      The smarter way to&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hero-accent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;do the thing you do&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"subtitle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      We are building something that solves 
      your problem better than anything else 
      out there. Join the waitlist and be 
      the first to know when we launch.
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-wrap"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"waitlist-form"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
          &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"hidden"&lt;/span&gt; 
          &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_subject"&lt;/span&gt; 
          &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"New Waitlist Signup"&lt;/span&gt; 
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="c"&gt;&amp;lt;!-- Honeypot spam protection --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
          &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
          &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
          &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
          &lt;span class="na"&gt;tabindex=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; 
          &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt; 
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
            &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
            &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
            &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Enter your email address"&lt;/span&gt; 
            &lt;span class="na"&gt;required&lt;/span&gt; 
          &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"submit-btn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            Join Waitlist
          &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-hint"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          No spam. Unsubscribe anytime.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"success"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"success-msg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;You are on the list!&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
          We will email you the moment we launch. 
          Thank you for your interest.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"proof"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"proof-dot"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Join 500+ people already on the waitlist&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"features"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Why people are excited&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"features-grid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 24 24"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;polyline&lt;/span&gt; &lt;span class="na"&gt;points=&lt;/span&gt;&lt;span class="s"&gt;"20 6 9 17 4 12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/polyline&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Benefit One&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
          Describe the first key benefit of your 
          product in one or two sentences. 
          Be specific and outcome focused.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 24 24"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;circle&lt;/span&gt; &lt;span class="na"&gt;cx=&lt;/span&gt;&lt;span class="s"&gt;"12"&lt;/span&gt; &lt;span class="na"&gt;cy=&lt;/span&gt;&lt;span class="s"&gt;"12"&lt;/span&gt; &lt;span class="na"&gt;r=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/circle&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;polyline&lt;/span&gt; &lt;span class="na"&gt;points=&lt;/span&gt;&lt;span class="s"&gt;"12 6 12 12 16 14"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/polyline&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Benefit Two&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
          Describe the second key benefit. 
          What problem does this solve? 
          How does it save time or money?
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"feature-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 24 24"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/path&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Benefit Three&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
          Describe the third benefit. 
          What makes your approach different 
          from everything else out there?
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
    Built with HTML and 
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev"&lt;/span&gt; 
       &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color: var(--brand);"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Formgrid
    &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;waitlist-form&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit-btn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;successMsg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success-msg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

      &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Joining...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nx"&gt;successMsg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Join Waitlist&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Something went wrong. Please try again.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
          &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Join Waitlist&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Network error. Please check your connection.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace these three things before you deploy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YourProduct&lt;/strong&gt; with your actual product name&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The headline and subtitle&lt;/strong&gt; with your real value &lt;br&gt;
proposition&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/strong&gt; with the endpoint &lt;br&gt;
URL from Step 3&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 5: Email Notifications Are Already Set Up
&lt;/h2&gt;

&lt;p&gt;Good news: you do not need to configure anything. &lt;br&gt;
Formgrid automatically sends every new signup to the &lt;br&gt;
email address you used to create your account.&lt;/p&gt;

&lt;p&gt;The moment someone joins your waitlist, you will &lt;br&gt;
receive an email like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want signups sent to a different address, go &lt;br&gt;
to your form's &lt;strong&gt;Settings&lt;/strong&gt; tab, find &lt;br&gt;
&lt;strong&gt;Email Notifications&lt;/strong&gt;, and update it there.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 6: Deploy Your Waitlist Page for Free
&lt;/h2&gt;

&lt;p&gt;You have several free options for hosting your &lt;br&gt;
waitlist page. All of them serve static HTML &lt;br&gt;
with no setup required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Pages:&lt;/strong&gt; Push your &lt;code&gt;index.html&lt;/code&gt; to a &lt;br&gt;
GitHub repo and enable Pages in the repository &lt;br&gt;
settings. Your page goes live at &lt;br&gt;
&lt;code&gt;username.github.io/repo-name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Netlify:&lt;/strong&gt; Drag and drop your &lt;code&gt;index.html&lt;/code&gt; file &lt;br&gt;
onto &lt;a href="https://app.netlify.com/drop" rel="noopener noreferrer"&gt;netlify.com/drop&lt;/a&gt; &lt;br&gt;
and it goes live instantly at a random Netlify URL. &lt;br&gt;
Connect a custom domain in settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Pages:&lt;/strong&gt; Connect your GitHub repo and &lt;br&gt;
Cloudflare deploys on every push. Fast, free, and &lt;br&gt;
global CDN included.&lt;/p&gt;

&lt;p&gt;All three options are completely free for a static &lt;br&gt;
HTML page. Pick whichever you are most comfortable &lt;br&gt;
with.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 7: View and Manage Your Signups
&lt;/h2&gt;

&lt;p&gt;Every signup is stored automatically in your &lt;br&gt;
Formgrid dashboard. Go to the &lt;strong&gt;Submissions&lt;/strong&gt; tab &lt;br&gt;
to see everyone who has joined your waitlist.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can search, filter, and export all your &lt;br&gt;
signups as a CSV file at any time. When you are &lt;br&gt;
ready to launch, export the list, and import it &lt;br&gt;
into your email tool of choice to send your &lt;br&gt;
launch announcement.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Makes a Waitlist Page Convert
&lt;/h2&gt;

&lt;p&gt;Based on the research behind this guide, here are &lt;br&gt;
the elements that separate high-converting waitlist &lt;br&gt;
pages from ones that collect zero signups:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A specific headline.&lt;/strong&gt; "The future of productivity." &lt;br&gt;
converts nobody. "The form backend for developers &lt;br&gt;
who hate maintaining servers" converts the right &lt;br&gt;
people. Be specific about who it is for and what &lt;br&gt;
it does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One clear action.&lt;/strong&gt; Your only CTA should be the &lt;br&gt;
email field. No navigation links, no secondary &lt;br&gt;
buttons, no distractions. One page. One goal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Social proof near the form.&lt;/strong&gt; "Join 500 people &lt;br&gt;
already on the waitlist" creates FOMO and builds &lt;br&gt;
trust. Even if you are starting from zero, update &lt;br&gt;
this number as you grow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A reason to sign up now.&lt;/strong&gt; "Early access" or &lt;br&gt;
"be first to know" gives people a reason to act &lt;br&gt;
today instead of coming back later and forgetting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep the form short.&lt;/strong&gt; Email only for first &lt;br&gt;
contact. You can ask for more information in a &lt;br&gt;
follow-up survey after signing up. Every extra field &lt;br&gt;
reduces conversion.&lt;/p&gt;


&lt;h2&gt;
  
  
  Customising the Page for Your Brand
&lt;/h2&gt;

&lt;p&gt;The template above uses a green brand colour &lt;br&gt;
defined as &lt;code&gt;--brand: #1d4f3d&lt;/code&gt; in the CSS variables &lt;br&gt;
at the top. To match your own brand, just change &lt;br&gt;
that one value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;your-colour-here&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--brand-light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;lighter-version-here&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else on the page inherits those two &lt;br&gt;
values automatically. No need to hunt through &lt;br&gt;
the CSS changing colours one by one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A waitlist page is not a nice-to-have. It is the &lt;br&gt;
difference between launching to silence and &lt;br&gt;
launching to a warm, engaged audience.&lt;/p&gt;

&lt;p&gt;The page in this guide takes less than 30 minutes &lt;br&gt;
to set up. It costs nothing to host. And every &lt;br&gt;
signup goes straight to your inbox and your &lt;br&gt;
dashboard the moment it happens.&lt;/p&gt;

&lt;p&gt;Stop waiting to start collecting. Build your &lt;br&gt;
waitlist today.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Formgrid.dev&lt;/a&gt; you get:&lt;/p&gt;

&lt;p&gt;✅ Working form with email capture in minutes&lt;br&gt;&lt;br&gt;
✅ Instant email notification on every signup&lt;br&gt;&lt;br&gt;
✅ Spam protection built in&lt;br&gt;&lt;br&gt;
✅ Submission dashboard to track all signups&lt;br&gt;&lt;br&gt;
✅ CSV export when you are ready to launch&lt;br&gt;&lt;br&gt;
✅ Free to start, no credit card required  &lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>startup</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Add an Email Capture Form to Your Landing Page Without a Backend</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Sat, 11 Apr 2026 02:34:55 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-add-an-email-capture-form-to-your-landing-page-without-a-backend-28e3</link>
      <guid>https://dev.to/allenarduino/how-to-add-an-email-capture-form-to-your-landing-page-without-a-backend-28e3</guid>
      <description>&lt;p&gt;You built a landing page. It looks great. But when &lt;br&gt;
someone fills out your contact form and clicks submit, nothing happens.&lt;/p&gt;

&lt;p&gt;That is because HTML forms need a server to process &lt;br&gt;
submissions. And setting up a server just to collect &lt;br&gt;
email addresses is overkill for most landing pages.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn exactly how to add a working email capture form to any landing page without writing any backend code, using &lt;br&gt;
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Formgrid.dev&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why HTML Forms Do Not Work on Their Own
&lt;/h2&gt;

&lt;p&gt;When someone submits an HTML form, the browser sends the data to whatever URL is in the &lt;br&gt;
&lt;code&gt;action&lt;/code&gt; attribute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"WHERE_DOES_THIS_GO"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a static site, there is no server listening at that URL. So the data goes nowhere. The visitor gets an error. You get nothing.&lt;/p&gt;

&lt;p&gt;You have three options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1:&lt;/strong&gt; Set up your own server. Node.js, &lt;br&gt;
PHP, Python. Configure email sending. Handle spam. &lt;br&gt;
Maintain it forever. This is weeks of work for &lt;br&gt;
something that should take 10 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 2:&lt;/strong&gt; Use a form backend service. Point &lt;br&gt;
your form at their endpoint. They handle everything. &lt;br&gt;
You get submissions in your inbox and dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 3:&lt;/strong&gt; Do nothing. Lose every lead that &lt;br&gt;
tries to contact you.&lt;/p&gt;

&lt;p&gt;Option 2 is the right call for 90% of landing pages.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Solution: Formgrid.dev
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Formgrid&lt;/a&gt; is a form backend &lt;br&gt;
that works with any HTML form on any website. Point &lt;br&gt;
your form's &lt;code&gt;action&lt;/code&gt; attribute at your Formgrid &lt;br&gt;
endpoint and it just works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free plan includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited forms&lt;/li&gt;
&lt;li&gt;50 submissions per month&lt;/li&gt;
&lt;li&gt;Instant email notifications&lt;/li&gt;
&lt;li&gt;Spam protection built in&lt;/li&gt;
&lt;li&gt;Submission dashboard&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Step by Step Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create your Formgrid account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; and &lt;br&gt;
sign up with Google or Email. No credit card needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a new form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;New Form&lt;/strong&gt;, give it a name like &lt;br&gt;
"Landing Page Leads" or Contact Form, and click &lt;strong&gt;Create Form&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Copy your endpoint URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the &lt;strong&gt;Overview&lt;/strong&gt; tab and copy your endpoint:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://formgrid.dev/api/f/your-form-id" rel="noopener noreferrer"&gt;https://formgrid.dev/api/f/your-form-id&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Add the form to your landing page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is a complete email capture form ready to &lt;br&gt;
drop into any landing page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"lead-form"&lt;/span&gt;
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_FORMGRID_ENDPOINT_URL"&lt;/span&gt; 
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"hidden"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_subject"&lt;/span&gt; 
    &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"New Lead Signup"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Enter your email address"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Get Early Access
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Honeypot spam protection --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
    &lt;span class="na"&gt;tabindex=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; 
    &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"form-status"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lead-form&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form-status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Submitting...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
          &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;You are on the list. We will be in touch!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
          &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Something went wrong. Please try again.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Network error. Please try again.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_FORMGRID_ENDPOINT_URL&lt;/code&gt; with your &lt;br&gt;
actual endpoint from Step 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Test it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fill out the form yourself and submit. Within &lt;br&gt;
seconds, you should receive a notification email. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your Formgrid dashboard, and you will see &lt;br&gt;
the submission logged there too.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" alt=" " width="800" height="443"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  What If I Want to Capture More Than Just Email
&lt;/h2&gt;

&lt;p&gt;You can add any fields you need. Here is a version &lt;br&gt;
that captures name, email, and company:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"lead-form"&lt;/span&gt;
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_FORMGRID_ENDPOINT_URL"&lt;/span&gt; 
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your name"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Work email"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"company"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Company name"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;select&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"role"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Select your role&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"developer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Developer&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"designer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Designer&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"founder"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Founder&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"other"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Other&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Honeypot --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
    &lt;span class="na"&gt;tabindex=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; 
    &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Request Access
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every field value appears in your notification &lt;br&gt;
email and your dashboard are automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Spam Protection Included
&lt;/h2&gt;

&lt;p&gt;Formgrid includes two layers of spam protection &lt;br&gt;
out of the box.&lt;/p&gt;

&lt;p&gt;The honeypot field is invisible to real users, but &lt;br&gt;
bots fill it in automatically. Any submission with &lt;br&gt;
that field filled is rejected silently.&lt;/p&gt;

&lt;p&gt;Rate limiting blocks the same IP address from &lt;br&gt;
submitting too many times in a short window. &lt;br&gt;
This stops bot floods before they reach your inbox.&lt;/p&gt;

&lt;p&gt;You never see spam submissions. Only real leads.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deploy Your Landing Page for Free
&lt;/h2&gt;

&lt;p&gt;Once your form is working, deploy your landing &lt;br&gt;
page on any of these free platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Pages:&lt;/strong&gt; Push to a repo and enable &lt;br&gt;
Pages in settings. Free forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Netlify:&lt;/strong&gt; Drag and drop your HTML file at &lt;br&gt;
netlify.com/drop. Goes live instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Pages:&lt;/strong&gt; Connect your GitHub repo &lt;br&gt;
and deploy on every push.&lt;/p&gt;

&lt;p&gt;Your Formgrid endpoint works regardless of where &lt;br&gt;
you host. No platform lock-in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Adding a working email capture form to your landing &lt;br&gt;
page does not require a backend. It does not require &lt;br&gt;
a server. It does not require any infrastructure.&lt;/p&gt;

&lt;p&gt;Point your form at Formgrid. Get submissions in &lt;br&gt;
your inbox. Done.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Start free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full disclosure: I built Formgrid. This post &lt;br&gt;
shows the exact workflow I recommend to everyone &lt;br&gt;
who asks how to add a form to their landing page.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>serverless</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Jotform Alternatives in 2026: Cheaper, Open Source, and Self-Hostable</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Fri, 10 Apr 2026 18:19:31 +0000</pubDate>
      <link>https://dev.to/allenarduino/jotform-alternatives-in-2026-cheaper-open-source-and-self-hostable-2cac</link>
      <guid>https://dev.to/allenarduino/jotform-alternatives-in-2026-cheaper-open-source-and-self-hostable-2cac</guid>
      <description>&lt;p&gt;If you have been using Jotform and recently looked at your bill, you are not alone. &lt;br&gt;
Jotform's free plan limits you to 100 responses per month and &lt;br&gt;
their paid plans start at $34/month for features that other tools offer for free or at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;For developers, indie hackers, and small businesses that is hard to &lt;br&gt;
justify in 2026.&lt;/p&gt;

&lt;p&gt;In this article, I will walk through the best Jotform alternatives in 2026, covering price, features, self-hosting options, and which one is right for your use case.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Developers and Businesses Look for Jotform Alternatives
&lt;/h2&gt;

&lt;p&gt;Before jumping into the list, here are the most common reasons people switch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Jotform's free plan is limited to 100 responses per month &lt;br&gt;
and 5 forms. Paid plans start at $34/month, which is expensive for &lt;br&gt;
what most people actually need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No HTML form backend:&lt;/strong&gt; Jotform is a hosted form builder only. You cannot point your existing HTML form at a Jotform endpoint. &lt;br&gt;
If you have a static site, you are out of luck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No self-hosting:&lt;/strong&gt; If you care about &lt;br&gt;
data ownership or GDPR compliance, Jotform gives you no option to run &lt;br&gt;
it on your own infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overkill for simple use cases:&lt;/strong&gt; &lt;br&gt;
Jotform has 10,000 templates, approval workflows, PDF generation, and &lt;br&gt;
e-signatures. If you just need a contact form or event registration &lt;br&gt;
form that is a lot of complexity you will never use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No open source option:&lt;/strong&gt; You are locked in with no transparency and no way to customize the core behavior.&lt;/p&gt;

&lt;p&gt;If any of those hit home, keep reading.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Best Jotform Alternatives in 2026
&lt;/h2&gt;


&lt;h3&gt;
  
  
  1. Formgrid.dev: Form Builder and Form Backend in One Place
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who want a form backend AND non-technical users who need a shareable form link. Both in one tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it different:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most form tools pick a lane. Either a form backend for developers or a no-code form builder for everyone else. &lt;br&gt;
Formgrid does both.&lt;/p&gt;

&lt;p&gt;You can point your existing HTML form at a Formgrid endpoint URL just like you would with Formspree. Or you can use the drag and drop form builder, get a shareable link, and send it via WhatsApp or email without touching any code.&lt;/p&gt;

&lt;p&gt;Here is how both workflows look:&lt;/p&gt;


&lt;h4&gt;
  
  
  Option A: Use Your Existing HTML Form
&lt;/h4&gt;

&lt;p&gt;If you already have an HTML form on your static site, just point the action attribute at your Formgrid endpoint. No other changes needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; 
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev/api/f/your-form-id"&lt;/span&gt;
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Name"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Email"&lt;/span&gt; 
    &lt;span class="na"&gt;required&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; 
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your Message"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Honeypot spam protection --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; 
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; 
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt; 
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt; 
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Send Message
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your form stays exactly as it is. &lt;br&gt;
Formgrid handles receiving submissions, sending email notifications, and storing the data.&lt;/p&gt;




&lt;h4&gt;
  
  
  Option B: Build a Form With the Drag and Drop Builder
&lt;/h4&gt;

&lt;p&gt;If you are non-technical or just want a shareable form link without writing any HTML, Formgrid has a full drag-and-drop form builder built in.&lt;/p&gt;

&lt;p&gt;Here is how it works step by step:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Sign Up and Create a Form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up using Google or Email. &lt;br&gt;
No credit card required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1cqi77okjivpv89ffsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1cqi77okjivpv89ffsp.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once logged in you will land on your &lt;br&gt;
dashboard. Click New Form to get started.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Choose Your Path&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After creating your form you will be taken to the form overview page. &lt;br&gt;
You will see two options:&lt;/p&gt;

&lt;p&gt;Build with Form Builder: Opens the &lt;br&gt;
drag and drop editor.&lt;/p&gt;

&lt;p&gt;Use Endpoint URL: Gives you the URL &lt;br&gt;
to point your existing HTML form at.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoy2c2w7bryqr9obfqe6.png" alt=" " width="800" height="441"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Build Your Form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click Build with Form Builder and you will be taken to the builder page. &lt;br&gt;
Drag fields from the left panel onto the canvas: text fields, email fields, dropdowns, checkboxes, file uploads, and more.&lt;/p&gt;

&lt;p&gt;Each field is fully customizable. Click any field to edit its label, &lt;br&gt;
placeholder, required status, and validation rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nc7en2b8mjlrtqghdhg.png" alt=" " width="800" height="441"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Customize Your Brand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Formgrid includes a color picker so you can match the form to your brand or your client's brand. Change the primary color, background, and button style directly in the builder.&lt;/p&gt;

&lt;p&gt;Every form you share looks as if it belongs to your brand. Not like a &lt;br&gt;
generic third-party tool.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Preview and Share&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you are happy with the form, click Preview to see exactly how it &lt;br&gt;
looks to your users. When it is ready, click Share to get your shareable form link.&lt;/p&gt;

&lt;p&gt;You can send that link via:&lt;br&gt;
WhatsApp, Email, SMS, or embed it on any website.&lt;/p&gt;

&lt;p&gt;No code. No hosting. Just a link.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9rg67rirrfoqjhehcm1.png" alt=" " width="800" height="743"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Configure Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the Settings tab on your form to:&lt;/p&gt;

&lt;p&gt;Add notification email addresses so you receive an email every time &lt;br&gt;
someone submits.&lt;/p&gt;

&lt;p&gt;Enable spam protection with a honeypot and rate limiting built in.&lt;/p&gt;

&lt;p&gt;Set a custom redirect URL after &lt;br&gt;
submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0d8ayuksfp1tmakip36.png" alt=" " width="800" height="441"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 7: View Submissions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All submissions are stored in your Formgrid dashboard. Go to the &lt;br&gt;
Submissions tab to view, search, filter, and export your data as CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" alt=" " width="800" height="443"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drag and drop form builder with shareable link.&lt;/p&gt;

&lt;p&gt;HTML form endpoint that works with any static site.&lt;/p&gt;

&lt;p&gt;Spam protection with honeypot and rate limiting.&lt;/p&gt;

&lt;p&gt;Instant email notifications.&lt;/p&gt;

&lt;p&gt;File uploads up to 1GB.&lt;/p&gt;

&lt;p&gt;CSV export.&lt;/p&gt;

&lt;p&gt;Color picker for brand matching.&lt;/p&gt;

&lt;p&gt;Google Sheets sync on Professional &lt;br&gt;
plan at $16/month.&lt;/p&gt;

&lt;p&gt;Self-hostable with Docker.&lt;/p&gt;

&lt;p&gt;100% open source under MIT license.&lt;/p&gt;

&lt;p&gt;GDPR friendly with no tracking &lt;br&gt;
and no data selling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Submissions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0/month&lt;/td&gt;
&lt;td&gt;50/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$8/month&lt;/td&gt;
&lt;td&gt;5,000/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;$16/month&lt;/td&gt;
&lt;td&gt;10,000/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$29/month&lt;/td&gt;
&lt;td&gt;15,000/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The bottom line:&lt;/strong&gt; Jotform charges &lt;br&gt;
$34/month for their starter paid plan. &lt;br&gt;
Formgrid gives you a form builder, &lt;br&gt;
a form backend, self-hosting, and &lt;br&gt;
open source code starting at $8/month. &lt;br&gt;
If you are paying for Jotform just to &lt;br&gt;
build and share forms, this is the &lt;br&gt;
obvious switch.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Google Forms: Best Free Option
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Anyone who needs a completely free form builder for &lt;br&gt;
basic use cases.&lt;/p&gt;

&lt;p&gt;Google Forms is completely free with no submission limits. It is the most widely used form of tool in the world for good reason. It works, it is fast, and everyone knows how to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Completely free.&lt;br&gt;
Unlimited responses.&lt;br&gt;
Google Sheets integration built in.&lt;br&gt;
Conditional logic.&lt;br&gt;
Simple analytics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No custom branding. &lt;br&gt;
No custom domain. No HTML form &lt;br&gt;
backend. No self-hosting. Forms look &lt;br&gt;
like Google Forms, not like your brand. &lt;br&gt;
Not suitable for professional &lt;br&gt;
client work.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Tally: Clean and Free Form Builder
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Non-technical users who &lt;br&gt;
want a Typeform-like experience at a lower price.&lt;/p&gt;

&lt;p&gt;Tally is a popular alternative with a clean, minimal interface. Their free plan is genuinely useful, with unlimited forms and unlimited responses, though some features are locked behind the paid plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlimited forms on the free plan.&lt;br&gt;
Unlimited responses.&lt;br&gt;
Conditional logic.&lt;br&gt;
File uploads on paid plan.&lt;br&gt;
Notion integration.&lt;br&gt;
Embeddable forms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan available. &lt;br&gt;
Paid plan at $29/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No HTML form backend. &lt;br&gt;
No self-hosting. No open source. &lt;br&gt;
Heavier than you need for a simple &lt;br&gt;
contact form.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Typeform: Best for Conversational Forms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Marketers who want a &lt;br&gt;
beautiful conversational form &lt;br&gt;
experience for surveys and lead &lt;br&gt;
generation.&lt;/p&gt;

&lt;p&gt;Typeform pioneered the one question at a time conversational form format. It is visually stunning and produces high completion rates for surveys and research forms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conversational one question at a time format.&lt;br&gt;
Beautiful design templates.&lt;br&gt;
Logic jumps and conditional branching.&lt;br&gt;
Payment integrations.&lt;br&gt;
Data analysis and insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan limited to &lt;br&gt;
10 responses per month. Paid plans &lt;br&gt;
start at $25/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; Extremely limited free &lt;br&gt;
plan. No HTML form backend. &lt;br&gt;
No self-hosting. No open source. &lt;br&gt;
Expensive compared to alternatives. &lt;br&gt;
Overkill for simple contact forms.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Paperform: Best for Beautiful Landing Page Forms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Marketers and creators who want visually stunning forms with a strong brand feel.&lt;/p&gt;

&lt;p&gt;Paperform focuses on beautiful landing page-style forms that feel &lt;br&gt;
like a designed experience rather than a generic form. &lt;br&gt;
Strong media embedding, payment support, and good conditional logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beautiful form design.&lt;br&gt;
Payment integrations.&lt;br&gt;
Conditional logic.&lt;br&gt;
Calculator fields.&lt;br&gt;
Media embedding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Starts at $24/month. &lt;br&gt;
No free plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No free plan. No HTML &lt;br&gt;
form backend. No self-hosting. &lt;br&gt;
Expensive for what it offers compared &lt;br&gt;
to alternatives.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Web3Forms: Lightweight Form Backend
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who just need a simple form endpoint for &lt;br&gt;
their static site with no frills.&lt;/p&gt;

&lt;p&gt;Web3Forms is a lightweight form backend service. No form builder. &lt;br&gt;
Just an endpoint URL you point your HTML form at. Simple and fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Simple HTML form endpoint.&lt;br&gt;
Email notifications.&lt;br&gt;
Spam protection.&lt;br&gt;
Free plan available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free plan available. &lt;br&gt;
Pro plan at $18/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawback:&lt;/strong&gt; No form builder. &lt;br&gt;
No submission dashboard on the free plan. No self-hosting. No Google Sheets integration at a reasonable price.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Jotform&lt;/th&gt;
&lt;th&gt;Formgrid&lt;/th&gt;
&lt;th&gt;Google Forms&lt;/th&gt;
&lt;th&gt;Tally&lt;/th&gt;
&lt;th&gt;Typeform&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Form builder&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML endpoint&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shareable link&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hostable&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Sheets&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ $16/mo&lt;/td&gt;
&lt;td&gt;✅ Free&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File uploads&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;td&gt;✅ Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free responses&lt;/td&gt;
&lt;td&gt;100/month&lt;/td&gt;
&lt;td&gt;50/month&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;10/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starting price&lt;/td&gt;
&lt;td&gt;$34/month&lt;/td&gt;
&lt;td&gt;$8/month&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$29/month&lt;/td&gt;
&lt;td&gt;$25/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDPR friendly&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Which One Should You Use?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Formgrid if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You want a form backend AND a form builder in one tool.&lt;/p&gt;

&lt;p&gt;You need to point an existing HTML form at an endpoint.&lt;/p&gt;

&lt;p&gt;You care about open source and self-hosting.&lt;/p&gt;

&lt;p&gt;You are paying too much for Jotform and want to cut costs significantly.&lt;/p&gt;

&lt;p&gt;You need to share a form link with someone non-technical.&lt;/p&gt;

&lt;p&gt;GDPR compliance matters to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Google Forms if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need something completely free.&lt;br&gt;
Branding does not matter. You are collecting internal data or running simple surveys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Tally if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You want a clean, minimal form builder for free.&lt;br&gt;
You do not need an HTML form backend.&lt;br&gt;
You are a Notion user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Jotform if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need advanced logic, payments, &lt;br&gt;
approval workflows, and PDF generation.&lt;br&gt;
Budget is not a constraint.&lt;br&gt;
You are building a complex enterprise &lt;br&gt;
forms that require heavy customization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Typeform if:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need a conversational one question at a time experience.&lt;br&gt;
You are running surveys or research forms where completion rate matters. Visual design is your top priority.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Jotform built a genuinely powerful product. But in 2026, it is hard to &lt;br&gt;
justify $34/month for a starter plan when better alternatives exist at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;If you are a developer who needs both a form backend for your static site AND a no-code builder for non-technical clients or teammates, there is no better option than Formgrid. It is the only tool on this list that does both, starting at $8/month.&lt;/p&gt;

&lt;p&gt;If you need something completely free &lt;br&gt;
for basic use cases, Google Forms or Tally will serve you well.&lt;/p&gt;

&lt;p&gt;But if you are paying $34/month or more for Jotform and not using its &lt;br&gt;
advanced approval workflows, PDF generation, or e-signature features you are significantly overpaying.&lt;/p&gt;

&lt;p&gt;You can try Formgrid free at &lt;br&gt;
&lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt;. &lt;br&gt;
No credit card required.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full disclosure: I built Formgrid. &lt;br&gt;
I wrote this comparison as honestly &lt;br&gt;
as I could. If anything looks &lt;br&gt;
inaccurate, let me know in the comments.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>forms</category>
      <category>opensource</category>
      <category>api</category>
      <category>nocode</category>
    </item>
    <item>
      <title>How to Use Google Sheets as a CMS for Your Webflow Website (Without Zapier)</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Fri, 10 Apr 2026 15:20:25 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-use-google-sheets-as-a-cms-for-your-webflow-website-without-zapier-1pki</link>
      <guid>https://dev.to/allenarduino/how-to-use-google-sheets-as-a-cms-for-your-webflow-website-without-zapier-1pki</guid>
      <description>&lt;p&gt;If you build websites in Webflow for clients, you have probably had &lt;br&gt;
this conversation at least once.&lt;/p&gt;

&lt;p&gt;You finish the site. It looks great. The client is happy. Then they &lt;br&gt;
ask: "How do I update the menu?" or "Can I add a new team member &lt;br&gt;
myself?"&lt;/p&gt;

&lt;p&gt;You explain Webflow CMS. You walk them through it. They nod along. &lt;br&gt;
Then two weeks later, you get a message: "Can you just update it for &lt;br&gt;
me? I can't figure out the CMS."&lt;/p&gt;

&lt;p&gt;This is not a client problem. It is a workflow problem. And the &lt;br&gt;
answer, most Webflow designers reach for syncing Google Sheets to &lt;br&gt;
Webflow CMS via Zapier — turns out to create a different set of &lt;br&gt;
headaches that are arguably worse than the original one.&lt;/p&gt;

&lt;p&gt;This post covers why the Zapier approach breaks down, what the &lt;br&gt;
real pain points are, and how to use Google Sheets as a live CMS &lt;br&gt;
for your Webflow site without touching Zapier at all.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Real Pain Points Webflow Designers Face With Google Sheets and CMS
&lt;/h2&gt;

&lt;p&gt;Before getting to the solution, it is worth naming the problems &lt;br&gt;
clearly because the Webflow forum and Reddit communities are full &lt;br&gt;
of people running into the same walls.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pain Point 1: Clients Simply Will Not Learn Webflow CMS
&lt;/h3&gt;

&lt;p&gt;This is the most common frustration, and it is completely &lt;br&gt;
understandable from the client's side. Most small business owners &lt;br&gt;
already live in Google Sheets. They manage their inventory there, &lt;br&gt;
their staff roster, their menu, and their event list. Asking them to &lt;br&gt;
learn a new interface just to update a row of data is a genuine &lt;br&gt;
barrier that most of them quietly abandon.&lt;/p&gt;

&lt;p&gt;The result is that content goes stale. A menu shows items that &lt;br&gt;
are no longer available. A team page shows people who left the &lt;br&gt;
company. An event listing shows events that have already happened. &lt;br&gt;
And the client either pays you to make every update manually or &lt;br&gt;
just lives with outdated content.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pain Point 2: The Zapier Sync Creates More Problems Than It Solves
&lt;/h3&gt;

&lt;p&gt;The natural workaround Webflow designers reach for is Zapier or &lt;br&gt;
Make. Connect Google Sheets to Webflow CMS, trigger a sync when &lt;br&gt;
a row changes, and the CMS updates automatically.&lt;/p&gt;

&lt;p&gt;In practice, this breaks down in several ways that users report &lt;br&gt;
consistently on the Webflow forum.&lt;/p&gt;

&lt;p&gt;The slug problem is the most common. Webflow CMS requires a slug &lt;br&gt;
for every item and generates it automatically. When Zapier tries &lt;br&gt;
to create or update items, it cannot easily match an existing &lt;br&gt;
Webflow CMS item to a Google Sheets row, which means it often &lt;br&gt;
creates duplicates instead of updating the correct item.&lt;/p&gt;

&lt;p&gt;As one Webflow forum user described it: "I keep running into &lt;br&gt;
issues comparing an existing item on the Webflow database to &lt;br&gt;
update instead of just creating a new one."&lt;/p&gt;

&lt;p&gt;Rate limits add another layer of fragility. Webflow's API allows &lt;br&gt;
60 requests per minute with batches capped at 100 items per call. &lt;br&gt;
For sites with frequent updates or large datasets, this means &lt;br&gt;
delays, failed syncs, and content that is out of date, even when &lt;br&gt;
the workflow is technically working.&lt;/p&gt;

&lt;p&gt;The deprecation of Webflow API v1 in March 2025 also broke many &lt;br&gt;
existing Zapier and Make integrations, leaving designers scrambling &lt;br&gt;
to rebuild workflows that had been running for years.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pain Point 3: The Webflow CMS Item Limits Hit Harder Than Expected
&lt;/h3&gt;

&lt;p&gt;Webflow's CMS plan allows 2,000 items per site. The Business Plan &lt;br&gt;
caps at 10,000 items with the option to purchase up to 20,000. &lt;br&gt;
For a restaurant with a large menu, a directory site, a job board, &lt;br&gt;
or any content-heavy project, these limits become a real constraint &lt;br&gt;
fast.&lt;/p&gt;

&lt;p&gt;Workarounds like splitting content across multiple collections &lt;br&gt;
or setting up reverse proxies works, but add significant complexity &lt;br&gt;
to what should be a simple content management task.&lt;/p&gt;

&lt;p&gt;Google Sheets has none of these limits. A single spreadsheet can &lt;br&gt;
hold hundreds of thousands of rows with no additional cost.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pain Point 4: The Default Google Sheets Embed Is Unusable
&lt;/h3&gt;

&lt;p&gt;The simplest approach using Webflow's Embed element to drop &lt;br&gt;
in a Google Sheets iframe, it produces results that designers &lt;br&gt;
consistently described as broken.&lt;/p&gt;

&lt;p&gt;As one Webflow forum user put it: "I need to embed a Google &lt;br&gt;
Sheet, but after inserting the code, I have no control over the &lt;br&gt;
size. It defaults to a tiny square."&lt;/p&gt;

&lt;p&gt;The native iframe embed shows the full Google Sheets interface, including tabs, header rows, and the Google branding. It is not &lt;br&gt;
responsive, it cannot be styled to match your site design, and &lt;br&gt;
it looks nothing like a purpose-built website element.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pain Point 5: Custom Code Solutions Are Fragile and Hard to Hand Off
&lt;/h3&gt;

&lt;p&gt;Some designers solve the problem with custom JavaScript that calls &lt;br&gt;
the Google Sheets API directly. This works technically, but &lt;br&gt;
introduces a new problem: the client now has a custom-coded &lt;br&gt;
integration that requires an API key, a specific sheet format, &lt;br&gt;
and code that lives somewhere in the Webflow custom code panel.&lt;/p&gt;

&lt;p&gt;When something breaks, which it will, the client calls you. When &lt;br&gt;
you want to hand the project off to another designer, you have &lt;br&gt;
to explain the entire custom integration. The maintenance burden &lt;br&gt;
never goes away.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Better Approach: Skip the CMS Sync and Use a Live Widget Instead
&lt;/h2&gt;

&lt;p&gt;Here is the insight that changes how this problem feels: you do &lt;br&gt;
not need to sync Google Sheets to Webflow CMS at all.&lt;/p&gt;

&lt;p&gt;The reason people try to sync is that Webflow CMS is the only &lt;br&gt;
way to show dynamic content in Webflow, or so it seems. But &lt;br&gt;
there is a simpler path. Instead of pushing your sheet data &lt;br&gt;
into Webflow CMS, you render it directly on the page using &lt;br&gt;
an embeddable widget that pulls live data from the sheet on &lt;br&gt;
every page load.&lt;/p&gt;

&lt;p&gt;No sync. No Zapier. No slug conflicts. No item limits. No &lt;br&gt;
duplicate entries.&lt;/p&gt;

&lt;p&gt;The client updates the Google Sheet. The page reflects the &lt;br&gt;
change immediately. That is it.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Set This Up With SheetRocket
&lt;/h2&gt;

&lt;p&gt;Sheetrocket is a tool that turns any Google Sheet into a &lt;br&gt;
live REST API and an embeddable widget. The widget is what &lt;br&gt;
matters for the Webflow use case.&lt;/p&gt;

&lt;p&gt;Here is the exact process.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Connect Your Google Sheet
&lt;/h3&gt;

&lt;p&gt;Sign up at (sheetrocket.com)[sheetrocket.com] and sign in with Google. Paste &lt;br&gt;
your Google Sheet URL into the dashboard. Sheetrocket &lt;br&gt;
connects to your sheet via a service account, which means &lt;br&gt;
your sheet stays private, and no OAuth consent screen appears &lt;br&gt;
for your clients.&lt;/p&gt;

&lt;p&gt;Example Google Sheet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mr76qnbsefauy499fpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mr76qnbsefauy499fpt.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Share it with this service account email and copy your google sheet link&lt;br&gt;
Service account email:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="mailto:sheetrocket-api@sheetrocket-491214.iam.gserviceaccount.com"&gt;sheetrocket-api@sheetrocket-491214.iam.gserviceaccount.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr5t36y9oxy62fu7ojyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr5t36y9oxy62fu7ojyd.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paste your Google Sheet URL, and Sheetrocket generates your API and widget configuration in seconds.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt9awjpf0oyebc8eep04.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt9awjpf0oyebc8eep04.png" alt=" " width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Open the Widgets Tab
&lt;/h3&gt;

&lt;p&gt;On the API details page, click the Widgets tab. This is where &lt;br&gt;
you configure what your embedded widget looks like and how &lt;br&gt;
it behaves.&lt;/p&gt;

&lt;p&gt;You will see two layout options: Table and Cards. Choose &lt;br&gt;
Table if you want a traditional rows-and-columns layout. &lt;br&gt;
Choose Cards if you want each row displayed as a visual card.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Widgets tab. Choose between a table or cards layout depending on your content type.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9sfgnhzbx7z8fmfpv72.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9sfgnhzbx7z8fmfpv72.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Choose a Card Template (For Cards View)
&lt;/h3&gt;

&lt;p&gt;If you choose Cards, SheetRocket gives you six card template &lt;br&gt;
designs to choose from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple:&lt;/strong&gt; Clean stacked fields. Works for any data type. &lt;br&gt;
  Good for staff directories, resource lists, FAQs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compact:&lt;/strong&gt; Two-column field grid. Good for dense datasets &lt;br&gt;
  like price lists or inventory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile:&lt;/strong&gt; Large name with avatar image. Good for team &lt;br&gt;
  pages, speaker directories, member rosters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product:&lt;/strong&gt; Full-width image at top with title and price &lt;br&gt;
  below. Good for restaurant menus, product catalogues, &lt;br&gt;
  service offerings. If a row has no image URL the card &lt;br&gt;
  renders cleanly without a broken placeholder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Color-coded status badge on each card. Green &lt;br&gt;
  for active or available, yellow for pending, red for &lt;br&gt;
  closed or sold, blue for featured. Good for job boards, &lt;br&gt;
  real estate listings, event availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Horizontal:&lt;/strong&gt; Image left, content right, stacked as a &lt;br&gt;
  list. Good for blog post feeds, news listings, recipes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pick a card design. Each preview shows your actual layout so there are no surprises.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vi8j96op0j3u66vnwrw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vi8j96op0j3u66vnwrw.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Configure the Widget
&lt;/h3&gt;

&lt;p&gt;After selecting your template, the customization panel gives &lt;br&gt;
you full control over what appears and how it looks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sheet Tab:&lt;/strong&gt; Which tab of your spreadsheet to display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row Limit:&lt;/strong&gt; How many rows to show in the widget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theme:&lt;/strong&gt; Light or dark, to match your Webflow site design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; An optional heading above the widget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Column Visibility:&lt;/strong&gt; A checkbox list of every column in &lt;br&gt;
  your sheet. This is the feature that matters most for &lt;br&gt;
  client work. If your sheet has internal columns like &lt;br&gt;
  cost price, supplier name, or internal notes, you uncheck &lt;br&gt;
  them here, and they are completely hidden. They are &lt;br&gt;
  filtered server-side before the data ever leaves &lt;br&gt;
  SheetRocket, so there is no risk of a visitor finding &lt;br&gt;
  them by inspecting network requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row Filter:&lt;/strong&gt; Show only rows that match a condition. &lt;br&gt;
  For a restaurant menu: show only rows where Status &lt;br&gt;
  equals Available. For a job board: show only rows where &lt;br&gt;
  Status equals Open. For an events page: show only rows &lt;br&gt;
  where Date is not empty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typography:&lt;/strong&gt; Customize font size, font weight, color, &lt;br&gt;
  text alignment, and letter spacing for column headers &lt;br&gt;
  and cell values independently. This is how you make &lt;br&gt;
  the widget feels like part of your Webflow design rather &lt;br&gt;
  than a generic embedded element.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Control exactly what appears. Column hiding keeps sensitive data private. Row filtering keeps content relevant.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr0apf30nent1zxvp6os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr0apf30nent1zxvp6os.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9xp3d1ylsfff8zf5ew9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9xp3d1ylsfff8zf5ew9.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Copy the Embed Code
&lt;/h3&gt;

&lt;p&gt;When your widget is configured, SheetRocket generates an &lt;br&gt;
embed code that updates in real time as you adjust settings. &lt;br&gt;
For a restaurant menu, it might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-sheetrocket=&lt;/span&gt;&lt;span class="s"&gt;"your-sheet-id"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://sheetrocket.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy that code. Go to your Webflow project. Add an Embed &lt;br&gt;
element wherever you want the widget to appear. Paste the &lt;br&gt;
code in and publish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx518g8c1mm8g99nwmhon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx518g8c1mm8g99nwmhon.png" alt=" " width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The embed code updates live as you configure the widget. The preview below shows exactly what visitors will see.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the entire setup. There is no Zapier zap to maintain, &lt;br&gt;
no slug to manage, no CMS item count to worry about, and no &lt;br&gt;
Webflow Editor access required for your client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Show the Client How to Update Content
&lt;/h3&gt;

&lt;p&gt;This is the part that changes client relationships. Open the &lt;br&gt;
Google Sheet with your client. Show them that editing a cell &lt;br&gt;
and saving the sheet is all they need to do. Within seconds, &lt;br&gt;
the live website reflects the change.&lt;/p&gt;

&lt;p&gt;No new software to learn. No login to a separate CMS. No &lt;br&gt;
calls to you asking how to add a row.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3svpwkpv24jnybyavms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3svpwkpv24jnybyavms.png" alt=" " width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The finished result on a live Webflow site. The client updates the Google Sheet, and the page updates automatically.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Use Cases Where This Works Better Than Webflow CMS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Restaurant and Cafe Menus
&lt;/h3&gt;

&lt;p&gt;A restaurant client changes their menu regularly. Seasonal &lt;br&gt;
items come and go. Prices update. Items sell out mid-service. &lt;br&gt;
With Webflow CMS, they would need to log in, find the right &lt;br&gt;
CMS item, make the change, and publish. With Sheetrocket, &lt;br&gt;
they open their Google Sheet, change Available to Sold Out &lt;br&gt;
in the Status column, and the website updates immediately. &lt;br&gt;
No publish step required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team and Staff Directories
&lt;/h3&gt;

&lt;p&gt;A company's team page needs to stay current as people join &lt;br&gt;
and leave. The HR team already maintains a staff spreadsheet. &lt;br&gt;
With Sheetrocket, that spreadsheet becomes the team page. &lt;br&gt;
When HR updates the sheet, the website reflects it. The web &lt;br&gt;
designer is not in the loop for every staff change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Event Listings and Schedules
&lt;/h3&gt;

&lt;p&gt;An events page needs to show upcoming events and hide past &lt;br&gt;
ones. Set a row filter for Date is not empty and only filter &lt;br&gt;
by upcoming dates. The client adds new events as rows, and &lt;br&gt;
past events disappear automatically based on the filter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Catalogues and Price Lists
&lt;/h3&gt;

&lt;p&gt;A retail client has hundreds of products. Webflow CMS on &lt;br&gt;
the Business plan allows 10,000 items, but that cap starts &lt;br&gt;
to matter for larger catalogues. Google Sheets has no row &lt;br&gt;
limit that a typical small business would ever hit, and &lt;br&gt;
the client already manages their inventory there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Job Boards
&lt;/h3&gt;

&lt;p&gt;A company posts open roles in a Google Sheet with columns &lt;br&gt;
for Title, Department, Location, Type, and Status. Set the &lt;br&gt;
row filter to Status equals Open, and only active listings &lt;br&gt;
appear on the website. When a role is filled, change the &lt;br&gt;
status to Filled, and it disappears from the site instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How This Compares to the Zapier Approach
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SheetRocket Widget&lt;/th&gt;
&lt;th&gt;Zapier to Webflow CMS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup time&lt;/td&gt;
&lt;td&gt;Under 5 minutes&lt;/td&gt;
&lt;td&gt;30 to 60 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slug conflicts&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;Common problem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate entries&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;Common problem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update speed&lt;/td&gt;
&lt;td&gt;Instant on page load&lt;/td&gt;
&lt;td&gt;Delayed by polling interval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMS item limits&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;Yes, plan dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API deprecation risk&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Webflow API v1 deprecated March 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ongoing maintenance&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Ongoing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client needs Webflow access&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works if Zapier is down&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What SheetRocket Cannot Do
&lt;/h2&gt;

&lt;p&gt;It is worth being direct about the limitations so you can &lt;br&gt;
decide if this is the right fit for your project.&lt;/p&gt;

&lt;p&gt;Sheetrocket widgets are rendered client-side, which means &lt;br&gt;
the data is not indexed by Google. If you need your content &lt;br&gt;
to appear in search results, blog posts, individual product &lt;br&gt;
pages, or SEO-driven directory listings. Webflow CMS is still &lt;br&gt;
the right tool because it renders server-side, and Google &lt;br&gt;
can index it.&lt;/p&gt;

&lt;p&gt;Sheetrocket is the right tool for content that does not &lt;br&gt;
need to be indexed: menus, team directories, event &lt;br&gt;
schedules, price lists, and product catalogues on a page &lt;br&gt;
that is already indexed, and any content that changes &lt;br&gt;
frequently enough that the client cannot realistically &lt;br&gt;
manage it through a CMS.&lt;/p&gt;

&lt;p&gt;If your content needs SEO and your client needs Google &lt;br&gt;
Sheets, those two requirements point toward a more complex &lt;br&gt;
architecture like Webflow DevLink with an external framework. &lt;br&gt;
For most small to medium client projects, that level of &lt;br&gt;
complexity is not warranted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;SheetRocket has a free plan that includes 1,000 API calls &lt;br&gt;
requests per month and 2 embeddable widgets. That is &lt;br&gt;
enough to set up a complete restaurant menu or team &lt;br&gt;
directory and show your client how it works before &lt;br&gt;
committing to anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sheetrocket.com" rel="noopener noreferrer"&gt;Try SheetRocket free at sheetrocket.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Will the widget look good on mobile?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. SheetRocket widgets are responsive by default. The &lt;br&gt;
table view becomes horizontally scrollable on small screens. &lt;br&gt;
The cards view collapses from three columns to one column &lt;br&gt;
on mobile. You can also adjust font sizes and spacing in &lt;br&gt;
the typography customizer to match your site's mobile &lt;br&gt;
design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if my client accidentally deletes a row?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Sheets keeps a full version history. Your client &lt;br&gt;
can restore any deleted row from the Edit menu by &lt;br&gt;
accessing the version history. This is actually more &lt;br&gt;
reliable than Webflow CMS, which has no native undo &lt;br&gt;
for CMS item deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use this on a Webflow site that is already using CMS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. SheetRocket widgets and Webflow CMS are not mutually &lt;br&gt;
exclusive. You might use Webflow CMS for your blog posts &lt;br&gt;
(which need SEO) and SheetRocket for your menu or team &lt;br&gt;
page (which the client needs to update frequently). They &lt;br&gt;
coexist on the same page without any conflict.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the widget slow down my Webflow site?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The widget script loads asynchronously, which means it &lt;br&gt;
does not block your page from rendering. The data fetch &lt;br&gt;
happens after the page loads. For most use cases, the &lt;br&gt;
widget renders within one to two seconds of page load, &lt;br&gt;
which is acceptable for content like menus, directories, &lt;br&gt;
and product lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if I want to show different subsets of the same &lt;br&gt;
sheet on different pages?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can create multiple embed codes from the same sheet &lt;br&gt;
with different filters. For example, a food menu page &lt;br&gt;
could show only Food category items and a drinks menu &lt;br&gt;
page could show only the Drinks category items, both pulling &lt;br&gt;
from the same spreadsheet with a different row filter &lt;br&gt;
configurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can my client see which columns are hidden?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Hidden columns are filtered server-side before the &lt;br&gt;
response is sent to the browser. If a visitor opens &lt;br&gt;
their browser's developer tools and inspects the network &lt;br&gt;
response, they will only see the columns you chose to &lt;br&gt;
display. Internal columns never appear.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last updated: April 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sheetrocket is built by Allen Jones, a solo founder &lt;br&gt;
based in Ghana, building tools that make the web &lt;br&gt;
more accessible for small businesses and designers &lt;br&gt;
who work with them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>google</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best Sheet2API Alternatives in 2026 (One Gives You an API AND a Website Widget)</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Fri, 10 Apr 2026 00:25:30 +0000</pubDate>
      <link>https://dev.to/allenarduino/best-sheet2api-alternatives-in-2026-one-gives-you-an-api-and-a-website-widget-33i6</link>
      <guid>https://dev.to/allenarduino/best-sheet2api-alternatives-in-2026-one-gives-you-an-api-and-a-website-widget-33i6</guid>
      <description>&lt;p&gt;If you have been using Sheet2API or shopping around for a tool that &lt;br&gt;
turns Google Sheets into a usable API, you are in the right place. &lt;br&gt;
Sheet2API does a reasonable job at the core problem. But it has &lt;br&gt;
limitations that push a lot of users to look elsewhere, and there &lt;br&gt;
is now one tool in this category that does something none of the &lt;br&gt;
others have even attempted.&lt;/p&gt;

&lt;p&gt;This guide covers the five best Sheet2API alternatives in 2026. &lt;br&gt;
what makes each one worth considering, and which one is the right one &lt;br&gt;
fit depending on what you actually need.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why People Look for Sheet2API Alternatives
&lt;/h2&gt;

&lt;p&gt;Sheet2API is a legitimate tool. It converts Google Sheets into a &lt;br&gt;
RESTful API quickly supports read and write operations. But &lt;br&gt;
here is what users run into after signing up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing is steep for what you get.&lt;/strong&gt; The Starter plan costs &lt;br&gt;
around £24.99 per month, billed annually, and limits you to 15 &lt;br&gt;
spreadsheet APIs and only 1,500 rows per sheet. The Pro plan &lt;br&gt;
jumps to £39.99 per month. For a tool built around a free product &lt;br&gt;
like Google Sheets, that price point catches many users off guard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It only speaks to developers.&lt;/strong&gt; Sheet2API gives you a JSON &lt;br&gt;
endpoint. What you do with that endpoint is entirely up to you. &lt;br&gt;
If you are a small business owner, a Webflow designer, or anyone &lt;br&gt;
who does not write code for a living? The tool stops being useful &lt;br&gt;
the moment you get your API URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No visual output.&lt;/strong&gt; You get data. You do not get anything to &lt;br&gt;
show that data on a website without building something custom on &lt;br&gt;
top of it.&lt;/p&gt;

&lt;p&gt;These are not criticisms that make Sheet2API a bad tool. They &lt;br&gt;
are simply gaps that the alternatives below address in different &lt;br&gt;
ways. Let us go through them.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. SheetRocket: Best Overall Alternative (API + Embeddable Widgets)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;sheetrocket.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who need a REST API, small businesses &lt;br&gt;
who want to display sheet data on their website, and anyone who &lt;br&gt;
wants both in one product.&lt;/p&gt;

&lt;p&gt;SheetRocket is the most complete tool in this category and the &lt;br&gt;
only one that gives you a REST API and an embeddable website &lt;br&gt;
widget from the same Google Sheet simultaneously. This is not &lt;br&gt;
a minor feature difference. It is a fundamentally different &lt;br&gt;
product vision.&lt;/p&gt;
&lt;h3&gt;
  
  
  How Sheetrocket Works
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Sign up and connect your sheet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You create an account, sign in with Google, and paste your &lt;br&gt;
Google Sheet URL into the dashboard. Sheetrocket connects to &lt;br&gt;
your sheet via a service account, which means no OAuth popups &lt;br&gt;
for your users and no complicated permissions setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhc8j3gdybjf0je24w0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhc8j3gdybjf0je24w0x.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxojvhdwvj6zvotefm9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxojvhdwvj6zvotefm9t.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4v7da7a4m8iopwbhger.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4v7da7a4m8iopwbhger.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Sheetrocket dashboard. Paste your Google Sheet URL, and your API is created in seconds.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Your API is live immediately&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The moment your sheet is connected, SheetRocket generates a &lt;br&gt;
full REST API endpoint. On the API details page, you will see &lt;br&gt;
the Overview tab first. This is where your API URL lives, along &lt;br&gt;
with HTTP method controls. You can toggle GET, POST, PUT, and &lt;br&gt;
DELETE on or off, depending on what you want to allow. A code &lt;br&gt;
snippet below shows exactly how to start making requests in &lt;br&gt;
JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Overview tab on the API details page. Your endpoint URL is ready to use immediately.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjso8mz8mjwgmg7dx9nk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjso8mz8mjwgmg7dx9nk7.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Move to the Widgets tab&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where SheetRocket separates itself from every other &lt;br&gt;
tool in this list. Click the Widgets tab and you are presented &lt;br&gt;
with two options: a Table widget or a Cards widget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgftmfj5ia51qr3jm6to.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgftmfj5ia51qr3jm6to.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Widgets tab. Choose between a table layout or a cards layout for your embedded widget.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Choose a card template (if using cards)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you choose the Cards view, SheetRocket offers six distinct &lt;br&gt;
card template designs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple:&lt;/strong&gt; A clean stacked layout that works for any data. Good for contact directories and general content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compact:&lt;/strong&gt; A tighter two-column grid for dense datasets. &lt;br&gt;
  Good for inventory lists and price tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile:&lt;/strong&gt; Title and avatar image prominent. Good for the team &lt;br&gt;
  directories, speaker lists, and member rosters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product:&lt;/strong&gt; Full image at top with title and price below. &lt;br&gt;
  Good for restaurant menus, product catalogues, and service &lt;br&gt;
  listings. If a row has no image URL, the card displays &lt;br&gt;
  cleanly without an image placeholder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Color-coded status badges for each record. Green &lt;br&gt;
  for active, yellow for pending, red for closed, and blue for &lt;br&gt;
  featured. Good for job boards, property listings, and &lt;br&gt;
  availability tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Horizontal:&lt;/strong&gt; Image on the left with content on the right, &lt;br&gt;
  stacked as a list. Good for blog post feeds, news listings, &lt;br&gt;
  and recipe directories.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzm2rmvnu7a4jes0olvj1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzm2rmvnu7a4jes0olvj1.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The template picker shows a live visual preview of each design. Pro templates are clearly labeled.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Customize the widget&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After selecting your template, you get full customization &lt;br&gt;
panel:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sheet Tab:&lt;/strong&gt; Choose which tab of your spreadsheet to &lt;br&gt;
  pull data from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row Limit:&lt;/strong&gt; Control how many rows appear in the widget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theme:&lt;/strong&gt; Light or dark, matching your website design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; An optional heading displayed above the widget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Column Visibility:&lt;/strong&gt; A checkbox list of every column in &lt;br&gt;
  your sheet. Uncheck any column to hide it from the widget. &lt;br&gt;
  This is critical for privacy. If your sheet has sensitive &lt;br&gt;
  columns like internal pricing, email addresses, or staff &lt;br&gt;
  notes, you can hide them completely. Hidden columns are &lt;br&gt;
  never sent to the widget at all. They are filtered on &lt;br&gt;
  the server before the response leaves SheetRocket.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row Filtering:&lt;/strong&gt; Show only rows that match a condition. &lt;br&gt;
  For example, only show rows where Status equals Active. &lt;br&gt;
  Supports contains, equals, starts with, and is not empty &lt;br&gt;
  operators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typography and Colors:&lt;/strong&gt; Customize font size, font &lt;br&gt;
  weight, font style, text color, text alignment, text &lt;br&gt;
  transform, and letter spacing for column headers, cell &lt;br&gt;
  values, and the widget title independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-Column Styles:&lt;/strong&gt; Apply different typography settings &lt;br&gt;
  to individual columns. Make the Price column bold and green &lt;br&gt;
  while the Description column stays default gray.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7t8cmrwncqs4c3877sd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7t8cmrwncqs4c3877sd.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The customization panel. Column visibility, row filtering, and typography controls all in one place.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Copy and paste the embed code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When your widget is configured, SheetRocket generates an embed &lt;br&gt;
code in real time. It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
  &lt;span class="na"&gt;data-sheetrocket=&lt;/span&gt;&lt;span class="s"&gt;"your-sheet-id"&lt;/span&gt;
&lt;span class="err"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="na"&gt;div&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://sheetrocket.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy that snippet and paste it into any website. Webflow users &lt;br&gt;
paste it into an Embed element. WordPress users paste it into a &lt;br&gt;
Custom HTML block. Plain HTML sites just drop it into the body. &lt;br&gt;
The widget renders your live Google Sheet data with your chosen &lt;br&gt;
design and all your customizations applied.&lt;/p&gt;

&lt;p&gt;Your configuration saves automatically. Come back the next day &lt;br&gt;
and everything is exactly where you left it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwtvwobh3o2svntxxj6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwtvwobh3o2svntxxj6w.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The embed code updates in real time as you change settings. The live preview below it shows exactly what visitors will see.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d8c8y3cghcvmme6sr12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d8c8y3cghcvmme6sr12.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A live Sheetrocket widget embedded on an external website. The data comes directly from a Google Sheet.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sheetrocket Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;API Requests&lt;/th&gt;
&lt;th&gt;Widgets&lt;/th&gt;
&lt;th&gt;Active APIs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0/month&lt;/td&gt;
&lt;td&gt;1,000/month&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$12/month&lt;/td&gt;
&lt;td&gt;50,000/month&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$29/month&lt;/td&gt;
&lt;td&gt;500,000/month&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The free plan includes the "Powered by Sheetrocket" branding on &lt;br&gt;
widgets. The Pro plan removes it, which is the primary upgrade &lt;br&gt;
trigger for anyone using widgets on a professional or client site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who SheetRocket Is For
&lt;/h3&gt;

&lt;p&gt;Sheetrocket works for two very different people. The first is a &lt;br&gt;
developer who wants a clean REST API to power an app or a &lt;br&gt;
dashboard without setting up a backend. The second is a Webflow &lt;br&gt;
designer, a WordPress site owner, or a small business owner who &lt;br&gt;
has product data or team information in a Google Sheet and wants &lt;br&gt;
it to appear on their website without writing any code.&lt;/p&gt;

&lt;p&gt;No other tool in this category serves both audiences. Most &lt;br&gt;
alternatives stop at the JSON endpoint and expect developers &lt;br&gt;
to do the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Sheetrocket Does Not Do
&lt;/h3&gt;

&lt;p&gt;Sheetrocket is built specifically for Google Sheets. It does not &lt;br&gt;
support Excel Online or other spreadsheet formats. If your data &lt;br&gt;
lives in Excel rather than Google Sheets, look at the other &lt;br&gt;
options below.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Sheety: Free and Fast for Simple Projects
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;sheety.co&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who need a quick read-only API for &lt;br&gt;
personal or prototype projects.&lt;/p&gt;

&lt;p&gt;Sheety has been around since 2019 and remains one of the most &lt;br&gt;
popular tools in this space because of how simple it is. Paste &lt;br&gt;
a Google Sheet URL, click a button, and you have a JSON endpoint. &lt;br&gt;
No account setup required on the free tier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sheety's dashboard. Clean and minimal with a single focus on generating your API URL.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The free plan is genuinely generous for personal use. For &lt;br&gt;
anything production-facing, the limitations show up quickly. &lt;br&gt;
Write support is restricted on free tiers, request limits are &lt;br&gt;
low, and there is nothing beyond the API itself. No widgets, &lt;br&gt;
no visual output, no customization.&lt;/p&gt;

&lt;p&gt;Sheety is a solid starting point for a proof of concept or a &lt;br&gt;
static site build-time data fetch. It is not the right tool &lt;br&gt;
for anything that needs to display data on a website or handle &lt;br&gt;
meaningful traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier available. Paid plans start at &lt;br&gt;
approximately $10 per month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; Quick prototypes, personal projects, and &lt;br&gt;
read-only API needs where you just need JSON and nothing else.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. SheetDB: Clean API With Strong Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;sheetdb.io&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers building applications who need &lt;br&gt;
well-documented read and write API access.&lt;/p&gt;

&lt;p&gt;SheetDB offers a clean REST API that supports the full range &lt;br&gt;
of CRUD operations: create, read, update, and delete. What stands out compared to other tools in this category is the &lt;br&gt;
quality of its documentation. If you are integrating Google &lt;br&gt;
Sheets data into a custom application, and your team needs clear &lt;br&gt;
reference docs; SheetDB delivers that better than most.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;SheetDB's documentation is detailed and includes code examples for multiple languages.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It supports filtering rows by column value using query &lt;br&gt;
parameters, pagination, and basic authentication. The &lt;br&gt;
dashboard is straightforward and shows request usage clearly.&lt;/p&gt;

&lt;p&gt;Like every other tool on this list except SheetRocket, &lt;br&gt;
SheetDB gives you a JSON endpoint and nothing else. There &lt;br&gt;
is no way to display your data on a website without building &lt;br&gt;
something custom on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier available with 500 monthly requests. &lt;br&gt;
Paid plans start at approximately $9 per month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; Application backends where a developer &lt;br&gt;
needs solid documentation and reliable write support.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. SheetBest: Simple API With a Clean Interface
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;sheet.best&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Users who want a polished dashboard experience &lt;br&gt;
with minimal configuration.&lt;/p&gt;

&lt;p&gt;SheetBest positions itself as the easiest way to turn a Google &lt;br&gt;
Sheet into an API, and the dashboard backs that up. The &lt;br&gt;
interface is clean, the setup flow is short, and you can have &lt;br&gt;
an endpoint ready in under two minutes.&lt;/p&gt;

&lt;p&gt;It supports GET, POST, PUT, PATCH, and DELETE operations and &lt;br&gt;
handles basic filtering well. For straightforward read and &lt;br&gt;
write use cases, it competes well with both Sheet2API and &lt;br&gt;
SheetDB.&lt;/p&gt;

&lt;p&gt;The pricing puts it in a similar bracket to Sheet2API, which &lt;br&gt;
is where it tends to lose users to Sheetrocket. For a similar &lt;br&gt;
price you get more with Sheetrocket, particularly if you need &lt;br&gt;
to display data visually on a website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier with limited requests. Paid plans &lt;br&gt;
start at approximately $9 per month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; Users who want a polished dashboard and &lt;br&gt;
straightforward API access without needing any visual output &lt;br&gt;
features.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Airtable: When You Need More Than a Spreadsheet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;airtable.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams who have outgrown Google Sheets and need &lt;br&gt;
a proper database with API access.&lt;/p&gt;

&lt;p&gt;Airtable is not a direct Sheet2API alternative in the same way &lt;br&gt;
sense as the other tools here. It is a relational database &lt;br&gt;
with a spreadsheet interface and a built-in REST API. If your &lt;br&gt;
frustration with Sheet2API comes from Google Sheets itself &lt;br&gt;
being too limited, with no relationships between tables, slow &lt;br&gt;
performance on large datasets, and limited formula power. &lt;br&gt;
Airtable solves those problems.&lt;/p&gt;

&lt;p&gt;The API is well-documented and supports complex queries that &lt;br&gt;
go beyond what any of the Google Sheets tools can offer. &lt;br&gt;
Airtable also offers views, automations, forms, and &lt;br&gt;
integrations that Google Sheets simply does not have.&lt;/p&gt;

&lt;p&gt;The tradeoff is price and complexity. Airtable is &lt;br&gt;
significantly more expensive than the other tools here and &lt;br&gt;
requires learning a new platform. If your data is already &lt;br&gt;
well-managed in Google Sheets, and you just need to expose it, &lt;br&gt;
Airtable is more than you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier available. Paid plans start at $20 &lt;br&gt;
per user per month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; Teams who need a relational database with &lt;br&gt;
API access and are ready to move off Google Sheets entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;SheetRocket&lt;/th&gt;
&lt;th&gt;Sheet2API&lt;/th&gt;
&lt;th&gt;Sheety&lt;/th&gt;
&lt;th&gt;SheetDB&lt;/th&gt;
&lt;th&gt;SheetBest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddable widgets&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Card templates&lt;/td&gt;
&lt;td&gt;6 designs&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table widget&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column visibility control&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row filtering in widget&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typography customization&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works on any website&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free plan&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Trial only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starting paid price&lt;/td&gt;
&lt;td&gt;$12/month&lt;/td&gt;
&lt;td&gt;~£25/month&lt;/td&gt;
&lt;td&gt;~$10/month&lt;/td&gt;
&lt;td&gt;~$9/month&lt;/td&gt;
&lt;td&gt;~$9/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excel Online support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Which Tool Should You Choose
&lt;/h2&gt;

&lt;p&gt;Here is a direct answer depending on your situation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are a developer who needs a quick JSON API for a &lt;br&gt;
personal project or prototype, and price is the top concern:&lt;/strong&gt;&lt;br&gt;
Use Sheety. It is free, it is fast, and it requires almost &lt;br&gt;
no setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are a developer building an application and need solid &lt;br&gt;
documentation and reliable write access:&lt;/strong&gt;&lt;br&gt;
Use SheetDB. The documentation quality justifies the price &lt;br&gt;
for production application backends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need to display Google Sheet data on a website, and you &lt;br&gt;
do not want to write any code to do it:&lt;/strong&gt;&lt;br&gt;
Use SheetRocket. It is the only tool in this category that &lt;br&gt;
lets you embed your sheet data as a styled, customizable &lt;br&gt;
widget on any website. The other tools on this list give &lt;br&gt;
you a JSON endpoint and leave the display layer entirely &lt;br&gt;
to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are a developer who needs the API today and knows you &lt;br&gt;
will eventually need to display that data on a website:&lt;/strong&gt;&lt;br&gt;
Use SheetRocket. You get both from the start without having &lt;br&gt;
to build a custom frontend on top of your API later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need Excel Online support alongside Google Sheets:&lt;/strong&gt;&lt;br&gt;
Use Sheet2API. It is one of the few tools that handles both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have outgrown Google Sheets and need relationships &lt;br&gt;
between tables, advanced automations, and a proper database:&lt;/strong&gt;&lt;br&gt;
Use Airtable. You are solving a different problem than the &lt;br&gt;
other tools on this list address.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Verdict on Sheet2API
&lt;/h2&gt;

&lt;p&gt;Sheet2API is a solid tool that has been around long enough to &lt;br&gt;
prove it works. It handles authentication, supports webhooks, &lt;br&gt;
and offers filtering. For a developer who needs a reliable API &lt;br&gt;
with Excel Online support and does not need anything visual, &lt;br&gt;
it remains a legitimate choice.&lt;/p&gt;

&lt;p&gt;The problem is value. At its price point, you are paying for &lt;br&gt;
a pure API tool in a market where a competitor now offers the &lt;br&gt;
same API capability plus six card template designs, an &lt;br&gt;
embeddable table widget, column visibility controls, row &lt;br&gt;
filtering, typography customization, and a free plan with &lt;br&gt;
1,000 monthly requests at a lower starting price.&lt;/p&gt;

&lt;p&gt;For most users discovering this category today, Sheetrocket &lt;br&gt;
is the better place to start.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started With Sheetrocket
&lt;/h2&gt;

&lt;p&gt;SheetRocket is free to start. No credit card required. &lt;br&gt;
Connect your Google Sheet, get your API endpoint, and &lt;br&gt;
build your first embeddable widget in under five minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sheetrocket.com" rel="noopener noreferrer"&gt;Start for free at sheetrocket.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is there a free Sheet2API alternative?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Sheetrocket, Sheety, and SheetDB all offer free plans. &lt;br&gt;
SheetRocket's free plan includes 1,000 API requests per month, &lt;br&gt;
2 embeddable widgets, and 3 active APIs — which is more &lt;br&gt;
generous than most free tiers in this category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I embed Google Sheets data on a Webflow site?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, with Sheetrocket. Connect your sheet, configure your &lt;br&gt;
widget, and paste the generated embed code into a Webflow &lt;br&gt;
Embed element. Your live sheet data appears on your site &lt;br&gt;
automatically. The other tools on this list do not offer &lt;br&gt;
an embed code. They only provide a JSON API endpoint &lt;br&gt;
that requires custom code to display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between a Google Sheets API &lt;br&gt;
tool and the Google Sheets API itself?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Google Sheets API is Google's own API for reading &lt;br&gt;
and writing spreadsheet data programmatically. Using it &lt;br&gt;
directly requires setting up OAuth credentials, handling &lt;br&gt;
authentication, and writing code to manage requests. Tools &lt;br&gt;
like SheetRocket and Sheet2API sit on top of the Google &lt;br&gt;
Sheets API and handle all of that for you, giving you a &lt;br&gt;
simple endpoint you can use immediately without any setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does SheetRocket work with private Google Sheets?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Sheetrocket connects to your sheets via a service &lt;br&gt;
account that you share editor access with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sheetrocket-api@sheetrocket-491214.iam.gserviceaccount.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Your sheet stays private. Only the data you choose to &lt;br&gt;
expose through Sheetrocket becomes accessible via your &lt;br&gt;
API or widget, and you control exactly which columns &lt;br&gt;
are visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens to my widget if I edit my Google Sheet?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your changes appear automatically. Sheetrocket fetches &lt;br&gt;
live data on every request, so your widget always reflects &lt;br&gt;
the current state of your sheet. There is no manual sync &lt;br&gt;
or rebuild required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use Sheetrocket on WordPress?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Paste the embed code into a Custom HTML block in &lt;br&gt;
the WordPress block editor. Your widget will render &lt;br&gt;
anywhere you can add custom HTML, including page builders &lt;br&gt;
like Elementor and Divi.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Last updated: April 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sheetrocket is built by Allen Jones, a solo founder &lt;br&gt;
based in Ghana. If you found this post useful, the best &lt;br&gt;
way to support it is to try Sheetrocket at &lt;br&gt;
sheetrocket.com.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Add a Contact Form to Your Astro Site Without a Backend</title>
      <dc:creator>Allen Jones</dc:creator>
      <pubDate>Thu, 09 Apr 2026 16:04:10 +0000</pubDate>
      <link>https://dev.to/allenarduino/how-to-add-a-contact-form-to-your-astro-site-without-a-backend-13no</link>
      <guid>https://dev.to/allenarduino/how-to-add-a-contact-form-to-your-astro-site-without-a-backend-13no</guid>
      <description>&lt;p&gt;If you are building a portfolio, landing &lt;br&gt;
page, or blog with Astro, chances are you need a contact form.&lt;/p&gt;

&lt;p&gt;But here is the catch:&lt;/p&gt;

&lt;p&gt;Astro is a static site framework. &lt;br&gt;
It generates fast, lightweight HTML with no server-side backend. That means your forms have nowhere to send data by default.&lt;/p&gt;

&lt;p&gt;Setting up a backend to handle a contact form feels unnecessary &lt;br&gt;
work for most Astro developers. &lt;br&gt;
And that is exactly why thousands of people search for things like "Astro contact form without backend" every month.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn exactly how to handle form submissions in your Astro site without building your own backend, using &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Formgrid&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We will walk through a step-by-step tutorial with code you can copy, paste, and deploy immediately.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Astro Developers Need a Form Backend
&lt;/h2&gt;

&lt;p&gt;Astro builds static HTML files. &lt;br&gt;
That is its biggest strength. Fast. Lightweight. &lt;br&gt;
No server required.&lt;/p&gt;

&lt;p&gt;But static HTML forms cannot process their own submissions. When someone clicks submit on a plain HTML form, the data has nowhere to go unless something on the server receives it.&lt;/p&gt;

&lt;p&gt;Setting up your own backend just to collect form submissions means:&lt;/p&gt;

&lt;p&gt;You need a server running Node, PHP, or Python. &lt;br&gt;
You need routing, validation, and spam protection. You must configure &lt;br&gt;
email notifications. You need a database &lt;br&gt;
to store submissions. You must maintain &lt;br&gt;
it indefinitely.&lt;/p&gt;

&lt;p&gt;All this work just to receive a message from a website visitor.&lt;/p&gt;

&lt;p&gt;That is why most Astro developers use a form submission service instead.&lt;/p&gt;


&lt;h2&gt;
  
  
  Popular Ways to Handle Forms in Astro Without a Backend
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Formspree&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the oldest form backend services. &lt;br&gt;
Simple and reliable, but paid plans get &lt;br&gt;
expensive quickly. &lt;br&gt;
Google Sheets integration starts at $90/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Netlify Forms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A great free option, but only works if your site is deployed on Netlify. If you host on Vercel, Cloudflare, or GitHub Pages, it does not work at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formgrid.dev (Open-Source)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A newer privacy-first alternative that works with any Astro site, regardless of where it is deployed.&lt;/p&gt;

&lt;p&gt;Features include:&lt;/p&gt;

&lt;p&gt;Open source under MIT license&lt;/p&gt;

&lt;p&gt;Works on any website or deployment platform&lt;/p&gt;

&lt;p&gt;Email notifications for every submission&lt;/p&gt;

&lt;p&gt;Spam protection with a honeypot and rate limiting&lt;/p&gt;

&lt;p&gt;Optional Proof-of-Work CAPTCHA&lt;/p&gt;

&lt;p&gt;Free plan: unlimited forms and &lt;br&gt;
50 submissions per month&lt;/p&gt;

&lt;p&gt;Google Sheets sync on the &lt;br&gt;
Professional plan at $16/month&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Use Formgrid for Your Astro Site
&lt;/h2&gt;

&lt;p&gt;Formgrid is a privacy-first open source alternative to services like Formspree and Netlify Forms. &lt;br&gt;
Here is why it works well with Astro specifically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant email notifications:&lt;/strong&gt; Receive every submission immediately in your inbox with clean, organized formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works anywhere:&lt;/strong&gt; Unlike Netlify Forms, &lt;br&gt;
Formgrid works whether you deploy on Vercel, Netlify, Cloudflare Pages, GitHub Pages, or your own server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spam protection:&lt;/strong&gt; Built-in honeypot fields, rate limiting, and optional Proof-of-Work CAPTCHA keep bots out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hostable:&lt;/strong&gt; Run Formgrid on your own infrastructure using Docker for complete data control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Submission dashboard:&lt;/strong&gt; Every submission is saved to your Formgrid &lt;br&gt;
dashboard. No submission is ever lost, even if the email fails to arrive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open source:&lt;/strong&gt; MIT license, no vendor &lt;br&gt;
lock-in, fully auditable.&lt;/p&gt;

&lt;p&gt;Whether you are a solo developer building a portfolio or a freelancer building client websites, Formgrid makes form handling fast, simple, and secure.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Create a Formgrid Account
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;formgrid.dev&lt;/a&gt; &lt;br&gt;
and sign up using Google or Email. &lt;br&gt;
No credit card required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjigvrqx9ko4dex0r3udb.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Formgrid offers free and paid plans. &lt;br&gt;
The free plan includes:&lt;/p&gt;

&lt;p&gt;Unlimited forms&lt;/p&gt;

&lt;p&gt;50 submissions per month&lt;/p&gt;

&lt;p&gt;Email notifications&lt;/p&gt;

&lt;p&gt;Spam protection&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Create a New Form
&lt;/h2&gt;

&lt;p&gt;Once logged in, go to your dashboard and click New Form.&lt;/p&gt;

&lt;p&gt;Give your form a name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Astro Contact Form"
"Portfolio Enquiry Form"  
"Client Contact Form"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click Create Form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozar28d2u9v4whi05ogg.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Copy Your Endpoint URL
&lt;/h2&gt;

&lt;p&gt;After creating your form, you will land on the form overview page.&lt;/p&gt;

&lt;p&gt;Go to the Overview tab and copy your unique endpoint URL. It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;https://formgrid.dev/api/f/your-form-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2n2wk1glt9b8u3dp89g.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will use this URL as the action attribute on your HTML form or inside your fetch call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Add the Form to Your
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Astro Site
&lt;/h2&gt;

&lt;p&gt;There are two ways to add Formgrid to your Astro site. &lt;br&gt;
Choose the one that fits your project.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option A: Simple HTML Form
&lt;/h3&gt;

&lt;p&gt;This is the fastest approach and requires zero JavaScript. &lt;br&gt;
Perfect for straightforward contact forms.&lt;/p&gt;

&lt;p&gt;In any &lt;code&gt;.astro&lt;/code&gt; file, add this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt;
  &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://formgrid.dev/api/f/your-form-id"&lt;/span&gt;
  &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Your Name&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
    &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email Address&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
    &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Your Message&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt;
    &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;
    &lt;span class="na"&gt;rows=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Honeypot spam protection --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"_honey"&lt;/span&gt;
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:none"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send Message&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your-form-id&lt;/code&gt; with the actual endpoint slug from your Formgrid overview tab.&lt;/p&gt;

&lt;p&gt;When someone submits the form the page redirects to a Formgrid confirmation page. &lt;br&gt;
You receive the submission instantly by email.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option B: Fetch-Based Form
&lt;/h3&gt;
&lt;h3&gt;
  
  
  with No Page Redirect
&lt;/h3&gt;

&lt;p&gt;This approach keeps the user on your page after submission and shows a success message without any page reload. &lt;br&gt;
It uses Astro's built-in &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;

&lt;p&gt;Create a new file called &lt;br&gt;
&lt;code&gt;ContactForm.astro&lt;/code&gt; in your components folder and add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
// ContactForm.astro
---

&amp;lt;div class="form-wrapper"&amp;gt;
  &amp;lt;form id="contact-form"&amp;gt;

    &amp;lt;!-- Honeypot spam protection --&amp;gt;
    &amp;lt;input
      type="text"
      name="_honey"
      style="display:none"
      aria-hidden="true"
    /&amp;gt;

    &amp;lt;div class="field"&amp;gt;
      &amp;lt;label for="name"&amp;gt;Your Name&amp;lt;/label&amp;gt;
      &amp;lt;input
        type="text"
        id="name"
        name="name"
        placeholder="Allen Jones"
        required
      /&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="field"&amp;gt;
      &amp;lt;label for="email"&amp;gt;Email Address&amp;lt;/label&amp;gt;
      &amp;lt;input
        type="email"
        id="email"
        name="email"
        placeholder="allen@example.com"
        required
      /&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="field"&amp;gt;
      &amp;lt;label for="message"&amp;gt;Message&amp;lt;/label&amp;gt;
      &amp;lt;textarea
        id="message"
        name="message"
        rows="5"
        placeholder="Write your message here"
        required
      &amp;gt;&amp;lt;/textarea&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;p 
      id="success-message" 
      style="display:none; color: green;"
    &amp;gt;
      Your message was sent successfully.
    &amp;lt;/p&amp;gt;

    &amp;lt;p 
      id="error-message" 
      style="display:none; color: red;"
    &amp;gt;
      Something went wrong. Please try again.
    &amp;lt;/p&amp;gt;

    &amp;lt;button type="submit" id="submit-btn"&amp;gt;
      Send Message
    &amp;lt;/button&amp;gt;

  &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
  const form = document.getElementById(
    'contact-form'
  ) as HTMLFormElement

  const submitBtn = document.getElementById(
    'submit-btn'
  ) as HTMLButtonElement

  const successMsg = document.getElementById(
    'success-message'
  ) as HTMLParagraphElement

  const errorMsg = document.getElementById(
    'error-message'
  ) as HTMLParagraphElement

  form.addEventListener('submit', async (e) =&amp;gt; {
    e.preventDefault()

    submitBtn.textContent = 'Sending...'
    submitBtn.disabled = true
    successMsg.style.display = 'none'
    errorMsg.style.display = 'none'

    const formData = new FormData(form)
    const data = Object.fromEntries(
      formData.entries()
    )

    try {
      const response = await fetch(
        'https://formgrid.dev/api/f/your-form-id',
        {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
          },
          body: JSON.stringify(data),
        }
      )

      if (response.ok) {
        form.reset()
        successMsg.style.display = 'block'
      } else {
        errorMsg.style.display = 'block'
      }
    } catch {
      errorMsg.style.display = 'block'
    } finally {
      submitBtn.textContent = 'Send Message'
      submitBtn.disabled = false
    }
  })
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your-form-id&lt;/code&gt; with the actual endpoint slug from your Formgrid overview tab.&lt;/p&gt;

&lt;p&gt;Now import the component on any page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
// src/pages/contact.astro
import ContactForm from 
  '../components/ContactForm.astro'
---

&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;title&amp;gt;Contact&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Get In Touch&amp;lt;/h1&amp;gt;
    &amp;lt;ContactForm /&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Receive Submissions Instantly
&lt;/h2&gt;

&lt;p&gt;Whenever someone submits your form you will receive an email notification that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;New Submission&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; Astro Contact Form&lt;/span&gt;

Name: Allen Jones
Email: allen@example.com
Message: Hi, I would love to work 
         with you on my next project.

Submitted: 10:30 AM, April 9, 2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0lu1tjfb1gpstvhesgu.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clean. Organized. Ready to act on.&lt;/p&gt;

&lt;p&gt;You can also view all submissions &lt;br&gt;
in your Formgrid dashboard at any time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9avjnvjdz3vq950iznj8.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every submission is saved to your &lt;br&gt;
dashboard regardless of whether the &lt;br&gt;
email was delivered. You never &lt;br&gt;
lose a submission.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: Send Astro Form Submissions
&lt;/h2&gt;

&lt;h2&gt;
  
  
  to Google Sheets
&lt;/h2&gt;

&lt;p&gt;If you want every form submission to automatically appear as a new row in a Google Sheet with no Zapier and no API setup, this is available on the Professional plan at $16/month.&lt;/p&gt;

&lt;p&gt;Here is how it works:&lt;/p&gt;

&lt;p&gt;Share a Google Sheet with the Formgrid service account email address. Paste the sheet URL into your form settings. Done. &lt;br&gt;
Every submission flows in automatically as a new row.&lt;/p&gt;

&lt;p&gt;Column headers are created from your form field names on the very first submission, so you do not need to set anything up in the spreadsheet.&lt;/p&gt;




&lt;h2&gt;
  
  
  When to Use a Form Service
&lt;/h2&gt;

&lt;h2&gt;
  
  
  vs Building Your Own Backend
&lt;/h2&gt;

&lt;p&gt;Use Formgrid if:&lt;/p&gt;

&lt;p&gt;You need a simple contact or enquiry form. You do not want to &lt;br&gt;
build or maintain a backend. &lt;br&gt;
You want instant email notifications. You want spam protection without configuration. You are deploying a static Astro site. &lt;br&gt;
You want submissions saved to a dashboard automatically.&lt;/p&gt;

&lt;p&gt;Build your own backend if:&lt;/p&gt;

&lt;p&gt;You need custom authentication logic. You need advanced server-side validation. &lt;br&gt;
You want to store submissions in your own database. &lt;br&gt;
You are building a full SaaS application with complex form workflows.&lt;/p&gt;

&lt;p&gt;For 90% of Astro portfolios, landing pages, and client websites, a form service is more than enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Handling form submissions in an Astro site without a backend used to mean hacks, expensive services, or deploying a server you did not need.&lt;/p&gt;

&lt;p&gt;With Formgrid, you can:&lt;/p&gt;

&lt;p&gt;Build a working contact form in under 5 minutes. &lt;br&gt;
Receive submissions &lt;br&gt;
instantly by email. &lt;br&gt;
Avoid all backend code entirely. &lt;br&gt;
Self-host if you want full data control. &lt;br&gt;
Connect to Google Sheets automatically on the &lt;br&gt;
Professional plan.&lt;/p&gt;

&lt;p&gt;If you want a simple, open source, privacy-first way to handle form &lt;br&gt;
submissions in your Astro site, give Formgrid a try.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://formgrid.dev" rel="noopener noreferrer"&gt;Try Formgrid free at formgrid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/allenarduino/formgrid" rel="noopener noreferrer"&gt;GitHub: github.com/allenarduino/formgrid&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full disclosure: I built Formgrid. &lt;br&gt;
Written as honestly as I could. &lt;br&gt;
Let me know in the comments if &lt;br&gt;
anything looks off.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #astro #webdev #javascript &lt;/p&gt;

&lt;h1&gt;
  
  
  tutorial #formgrid
&lt;/h1&gt;

</description>
    </item>
  </channel>
</rss>
