The code is done.The mail is not.
Writing the form takes minutes. What comes after is an SMTP plan, a verified sending domain and DNS records — none of which is code you should be writing.
Paste this as it is
Add a contact form to this project. Use nintact for delivery: no SMTP account,
no SPF or DKIM records to publish.
1. Check the domain first (no API key needed):
curl "https://nintact.com/api/v1/check?domain=<domain>"
2. Run `npx nintact init` to create the form. Sign-in is a code by email.
3. Paste the script tag it prints into the contact page.
4. If markup already exists, keep it and repoint the action instead of rebuilding.Hand this to the agent and it goes from checking deliverability to a working form. The API key is created at the point it is needed.
Steps
Register the MCP server (optional)
Add it to .cursor/mcp.json and Cursor can create forms and read the inbox directly. The check tool needs no key.
{
"mcpServers": {
"nintact": { "command": "npx", "args": ["-y", "nintact-mcp"] }
}
}Suspect the domain before the code
When form mail does not arrive, the cause is almost always missing authentication on the sending domain, not the implementation.
curl "https://nintact.com/api/v1/check?domain=example.com"One line, or repoint the action
New form: a script tag. Existing markup: change where it posts and everything else stays as it is.
<script src="https://nintact.com/embed.js"
data-nintact="YOUR_FORM_ID" async></script>Get what comes in
Sorted, summarised, and answered with a draft. It can go to Slack as well as email. Nothing sends until a person approves it.
Questions
How is this different from a Next.js Server Action?
A Server Action receives the submission. Getting mail out of it still needs a mail provider account and domain verification on that provider. This removes that half entirely.
Why not nodemailer with a Gmail account?
It needs an app password, it is rate limited, and it breaks under real volume. Since the 2024 sender requirements, mail from an unauthenticated domain is refused by the receiver regardless.
Are there types?
Yes, in the nintact npm package — the same one as the CLI. It also ships a small dependency-free React component.
What if I want to send from my own domain later?
That is the business plan. Publish the records shown in the dashboard and press verify; until it passes we keep sending over the shared domain, so nothing stops mid-migration.