Field notes

Forms for a static page

How to put a real contact form on HTML that never runs a server — describe it in EdgeForms, embed it in HTML Studio, and get the message in your inbox.

RegisterMySite 7 min read
staticHTML Studioemail
A visual representation of a robot using a retro computer inside of a computer lab, while typing on a keyboard and generating a submission form on forms.registermysite.com

--- title: "Forms for a static page" description: "How to put a real contact form on HTML that never runs a server — describe it in EdgeForms, embed it in HTML Studio, and get the message in your inbox." pubDate: 2026-09-29 tags: ["forms", "static", "HTML Studio", "email"] featured: true readingMinutes: 11 ---

A marketing site does not need PHP to take a message. It needs a form that posts somewhere honest, an inbox that actually receives the mail, and a page that still caches like a brochure.

That is the job of EdgeForms at forms.registermysite.com. You describe a form, save it, and paste the embed into a page. Submissions land on the form's own link. You get an email when someone sends one. The page itself can stay static.

This walkthrough builds a contact form named Studio contact — name, email, message — embeds it in HTML Studio, and publishes. The live form is forms.registermysite.com/f/zus3pggrzy. The page it sits on is sites.registermysite.com/studio-walkthrough.

Why static pages used to lose here

A static file can show a form. It cannot, by itself, accept one. POST has to hit a process that stores the body, checks it is not junk, and notifies a human. People solved that with WordPress, a $5 VPS, or a third-party form host that wanted an API key and a monthly plan.

The cost was never the <form> tag. The cost was running software so a stranger could say hello.

EdgeForms is the missing process, hosted on the Cloudflare edge: Workers, D1 for accounts, R2 for the submission archive, KV for sessions, a Durable Object per form for rate limits, and Cloudflare Email Sending so the notification leaves from forms@registermysite.com. Nothing in that path is your origin. The site can stay a folder of HTML.

What you are actually publishing

Two URLs, on purpose.

  1. The form endpoint — https://forms.registermysite.com/f/zus3pggrzy. This is the action. Browsers POST here. You can open it alone if you want to test without the surrounding page.
  2. The page — https://sites.registermysite.com/studio-walkthrough/. This is the brochure. It embeds the form so the visitor never has to leave the site.

Keep those jobs separate. If you redesign the page, the form slug does not change. If you pause or retarget the form, the page HTML does not have to move.

Build Studio contact

In the EdgeForms dashboard, create a form. Name it something a human would recognize in an inbox — Studio contact, not form-03. The slug in this walkthrough is zus3pggrzy. Yours will be different. Treat the slug like a password you printed on a page: guessable slugs get more junk.

Give it three fields that match how a studio actually gets hired:

| Field | name | Why | | --- | --- | --- | | Name | name | So the reply can start with a person, not "hi." | | Email | email | The only address you should write back to. Type it email so password managers and mobile keyboards behave. | | Message | message | The work. A <textarea>, not a single line. |

Required flags belong on all three. A form that accepts a blank message is a guestbook.

You can add more later — phone, company, budget band, how they found you — without republishing the whole site. EdgeForms accepts any field name. Whatever the HTML posts, the archive and the email keep.

Two hidden fields are worth adding before you embed anything:

  • _gotcha — leave it empty and hide it with CSS. Bots fill every input. Humans do not see it. If it comes back with text, drop the submission.
  • A thank-you redirect — a hidden field that sends the browser to a page you host (/thanks on the same site) instead of a generic EdgeForms receipt. The thank-you page is part of the brand. Put a phone number on it.

Paste it into HTML Studio

HTML Studio is the editor for the static page. You do not rebuild a Worker to change a headline. You also should not hand-type a form every time the copy changes.

The useful move is a custom embed block: paste the EdgeForms markup (or an iframe/snippet the dashboard gives you) into the Studio page, then publish. The walkthrough page is that result — studio curriculum above, Studio contact below, submit at the bottom.

Rules that keep the embed from fighting the page:

  • The form's action must be the https://forms.registermysite.com/f/… URL, method POST.
  • Field name attributes must match what you care about in the email. Labels are for humans; names are for you.
  • Do not wrap the embed in another <form>. Nested forms submit the wrong thing in half the browsers.
  • Give every visible input an associated <label>. Screen readers and tap targets are not optional on a contact block.
  • Set autocomplete (name, email) so mobile does not punish the visitor.
  • If the Studio theme sets input { color: inherit } on a dark page, check contrast. A form you cannot read is not a form.

Publish the Studio page. Then submit once yourself, from a different address than the destination inbox. If that test is not in your email in a minute, stop decorating the page and fix delivery.

What happens when someone hits Submit

On a good request the edge does four things:

  1. Reads the fields, including the honeypot.
  2. Scores obvious junk and applies the per-form Durable Object limiter so one IP cannot fill the archive.
  3. Writes the submission to R2 so you can read it later if mail is late or you delete a thread.
  4. Sends you mail from forms@registermysite.com through Cloudflare Email Sending.

CORS is on, so a page on sites.registermysite.com (or your own domain) can fetch() the endpoint with Accept: application/json if you want a thank-you state without a full navigation. A no-JS form still works. That is the point of a static page.

You can also POST JSON. Same slug. Useful when the "form" is a button in a widget rather than a classic <form>.

Mail you will actually open

The destination address lives on the form in the dashboard. Change it there when the studio hires a coordinator. Do not bury it in the HTML.

If Cloudflare Email Sending is restricted to verified destinations, verify that inbox in the Cloudflare dashboard or the notification never leaves. This is the quiet failure mode: the form looks fine, R2 has the row, your Gmail does not.

From-address is forms@registermysite.com. Teach staff it is not spam. Add a filter. If you reply, reply to the visitor's email field, not to the EdgeForms sender.

The dashboard can resend a stored submission. Use that when the first message landed in promotions or the destination was wrong for a week.

Lock it down like it is a public mailbox

Because it is.

  • Lock origins to the sites that embed the form (sites.registermysite.com, later yourdomain.com). A public slug with no origin lock will be copied onto scam pages that use your inbox as a relay.
  • Pause the slug when a campaign ends or a bot finds you. The page can stay up; the action can refuse.
  • Do not ask for secrets. No passwords, no card numbers, no SSNs, no photos of IDs. A contact form is not a HIPAA vault. If you need file uploads of contracts, that is a different product.
  • Say where the message goes. A one-line privacy note under the button — "We use this to answer you. We do not sell the list." — is enough for a studio contact block and better than silence.
  • Rate limits are not a personality. They stop floods. They will not stop a patient human. Origin lock plus _gotcha plus required email is the adult trio.

What this does not replace

EdgeForms will not:

  • Book a calendar slot
  • Charge a deposit
  • Open a support ticket in a tool you already hate
  • Prove the sender owns the address (unless you add a confirmation step yourself)

It will take a name, an email, and a paragraph while the rest of the site stays cached HTML. For a walkthrough page, a shop-window site, or a one-landing-page studio, that is the whole requirement.

If you outgrow it, the HTML does not become a hostage. Point action at a new endpoint. Keep the labels.

A short checklist before you call it shipped

  • Submit from a phone on cellular, not only from the desktop on the same Wi-Fi as you.
  • Confirm the notification From / To / subject would make sense at 11pm.
  • Open the R2 / dashboard archive and match it to the email.
  • Click the thank-you path. Dead /thanks pages are how good leads bounce.
  • View source on the published Studio page and confirm there is exactly one <form> around those fields.
  • Add the form URL to your own notes. Six months from now you will not remember zus3pggrzy.

The useful part is small on purpose. A static page can take messages without you running a server for the form. Describe it, embed it, publish the page, and go back to the work the message is about.

1000010292

Comments

No approval queue. Be decent. 5 comments per visitor per post.

Keep going

Put this on a real domain

Search a name, ship a static site, and wire business email without leaving RegisterMySite.

Open the platform