Title: Static site forms — collect submissions with one attribute | harvis.dev
Open Graph Title: harvis.dev — deploy any folder with one command
X Title: harvis.dev — deploy any folder with one command
Description: Add harvis-form to a form on your static site and every submission lands in your dashboard. No JavaScript, no backend, no third-party form service — free, and set up in one line of HTML.
Open Graph Description: Run npx harvis in any folder and get a live URL in about two seconds. No account, no config, no build pipeline — plus an HTTP API and an MCP server for agents.
X Description: Run npx harvis in any folder and get a live URL in about two seconds. No account, no config, no build pipeline — plus an HTTP API and an MCP server for agents.
Opengraph URL: https://harvis.dev
Domain: harvis.dev
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is a static form?","acceptedAnswer":{"@type":"Answer","text":"A form on a site that has no server of its own. Normally that means the form has nowhere to send anything, which is why static sites usually borrow a third-party form service. harvis already serves every page of your site, so it can take the submission on the way past instead."}},{"@type":"Question","name":"Do I need to know how to code?","acceptedAnswer":{"@type":"Answer","text":"You need to be able to add one word to a line of HTML. If an AI wrote your site, ask it to add the harvis-form attribute to the form — it knows how, because the instructions harvis publishes for AI assistants say so."}},{"@type":"Question","name":"Does it work with JavaScript turned off?","acceptedAnswer":{"@type":"Answer","text":"Yes. That is the reason it is built this way. The form does an ordinary HTML post and the browser follows a redirect afterwards, exactly as forms worked before JavaScript existed."}},{"@type":"Question","name":"Can I keep using my own endpoint or another form service?","acceptedAnswer":{"@type":"Answer","text":"Yes — just don't add the attribute. Forms without harvis-form are served exactly as you wrote them, action and all. On a form that does have it, harvis replaces the action, because adding the attribute is how you say where the submission should go."}},{"@type":"Question","name":"Does it work with React, Vue or Svelte?","acceptedAnswer":{"@type":"Answer","text":"Yes, with one extra step. If the form is in the HTML your build produces, the attribute is all you need. If it only appears once JavaScript has run, write action=\"/__harvis/form/contact\" and method=\"post\" into the component instead — same endpoint, same dashboard, and the browser still does the posting."}},{"@type":"Question","name":"Can people attach files?","acceptedAnswer":{"@type":"Answer","text":"Not yet. A file input on a collected form still works for the visitor, but the file is not stored — only the text fields are kept."}},{"@type":"Question","name":"What happens to the submissions if I delete the site?","acceptedAnswer":{"@type":"Answer","text":"They go with it. Submissions belong to the site rather than to a deploy, so redeploying keeps them and deleting the site removes them for good. Export a CSV first if you want to keep them."}}]}
| theme-color | #F6F7EE |
| color-scheme | light dark |
| og:site_name | harvis.dev |
| og:image | https://harvis.dev/og-image.png |
| og:image:width | 1200 |
| og:image:height | 630 |
| og:image:alt | The harvis wordmark above the headline "Deploy a folder of static files with one command." and a terminal showing npx harvis printing a live URL. |
| og:type | website |
| twitter:card | summary_large_image |
| twitter:image | https://harvis.dev/og-image.png |
| twitter:image:alt | The harvis wordmark above the headline "Deploy a folder of static files with one command." and a terminal showing npx harvis printing a live URL. |
| twitter:image:width | 1200 |
| twitter:image:height | 630 |
Links:
Viewport: width=device-width, initial-scale=1