Hey @stordahl 
And welcome to the forums 
For starters, what is βthe BEβ? Thatβs the second time Iβve seen βBEβ in the forums in the last couple of days but I have no idea what it stands for 
Why
Anyway, I believe youβre experiencing a common issue with javascript frameworks / SSGs that leverage a workflow similar to Reactβs render-on-server then hydrate-on-client: where the javascript framework runs during the static build to build the HTML tree into files, then once those files are loaded into the clientβs browser, React re-hydrates the virtual DOM and attaches to the current markup / HTML via a βhydrateβ process. This process was designed to work when the raw HTML markup printed to files in the build / renderToServer is totally untouched and unchanged by the time it gets to the clientβs browser. Netlify Forms technically breaks that promise β it changes the HTML after the files have been created but before the code hits the browser. As such, the Javascript framework tends to re-write the HTML in the DOM to fit what it wants it to be: what you wrote in your editorβ¦ which is the version with the netlify
tag and no form-name
attribute.
That workflow and discrepancy is specifically why I wrote react-ssg-netlify-forms, a React library for making Netlify forms βjust workβ the way youβre wanting them to with Sapper. Personally I donβt know a lick of Svelte and honestly didnβt know that Svelte also had this kind of server/hydrate premise yet, but neat!
Proof
We can see whatβs going on here by checking out the HTML file contents that Netlify delivers before Svelte spins up in the browser and starts playing with the DOM in two ways. First, we can just query your site on command line and see what the raw content back contains:
(Using httpie)
$> http https://fix-form--evergreen-fitness.netlify.app/contact/
lots of other stuff....
<form action='POST' class='svelte-13hcb2f' name='Contact Form' method='post'><input type='hidden' name='form-name' value='Contact Form' />
....lots of other stuff
Good! That means that the Netlify Form scanner did its job and correctly injected the form-name
while removing the netlify
tag.
Alternatively, we can disable javascript in the browser then load your contact page (Evergreen Fitness in Port Townsend, Washington):
Then on the flip side, if we make sure the page is generated via Javascript (I did this by hitting βHomeβ, then βContactβ again since this is an SPA and I wanted to force the Contact page to be generated / loaded by JS) what happens to the HTML?
Thatβll do it.
The Fix
Short of writing a library that does a similar job as mine, just for Svelte, the easiest and quickest way to fix this problem and get your forms working is to just add the <input type='hidden' name='form-name' value='Contact Form' />
to the form code you wrote in Svelte. I know that may seem counter-intuitive and/or overkill, but thatβs the simplest way to make sure that the form-name
parameter is present when the page is loaded via JS. That form field not being present in the submission is almost certainly whatβs causing your 404 β Netlify gets this form POST but has no idea what Form it goes to 
Hope that helps!
β
Jon