You already have a Next.js app. Sutrena means you do not need to build the forms backend.
Updated March 2026
Next.js gives you the App Router, Server Components, Server Actions, and built-in optimizations. It runs on Vercel, Cloudflare Pages, AWS, or any Node.js host. It is the most popular React framework. You probably already know it.
Next.js handles routing, rendering, and UI. Sutrena replaces the database for structured data collection. Instead of writing a Prisma schema, an API route, and building a dashboard from scratch, you make one API call. You get a submission endpoint and a live dashboard.
Use client components for interactive forms that POST to Sutrena. Use Server Components or Server Actions if you want to proxy submissions for extra processing. The API works the same from both client and server.
For hosting: if your Next.js app uses SSR, Server Actions, or API routes, it needs a Node.js host like Vercel or Cloudflare Pages. If you export static HTML (next export), you can deploy the output to Sutrena Pages with custom domains and asset uploads — no separate hosting needed. Sutrena Pages host any valid HTML, including complex multi-page sites.
"use client";
import { useState } from "react";
// Step 1: Create the form via API (run once):
// curl -X POST https://sutrena.com/api/forms \
// -H "Authorization: Bearer st_trial_abc123" \
// -H "Content-Type: application/json" \
// -d '{
// "name": "Beta Feedback",
// "fields": [
// { "name": "email", "label": "Email", "type": "email", "required": true },
// { "name": "feature", "label": "Feature", "type": "select",
// "options": ["Dashboard", "API", "Templates", "Webhooks"], "required": true },
// { "name": "rating", "label": "Rating (1-5)", "type": "select",
// "options": ["1", "2", "3", "4", "5"], "required": true },
// { "name": "feedback", "label": "Feedback", "type": "textarea" }
// ],
// "createDashboard": true
// }'
const FORM_ID = "frm_your_id";
export default function BetaFeedback() {
const [status, setStatus] = useState<"idle" | "sending" | "sent" | "error">(
"idle"
);
async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
setStatus("sending");
const data = Object.fromEntries(new FormData(e.currentTarget));
const res = await fetch(
`https://sutrena.com/api/forms/${FORM_ID}/submit`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
}
);
setStatus(res.ok ? "sent" : "error");
}
if (status === "sent") return <p>Thanks for your feedback!</p>;
return (
<form onSubmit={onSubmit} className="space-y-4 max-w-md">
<input name="email" type="email" placeholder="Email" required
className="w-full border p-2 rounded" />
<select name="feature" required className="w-full border p-2 rounded">
<option value="">Which feature?</option>
<option value="Dashboard">Dashboard</option>
<option value="API">API</option>
<option value="Templates">Templates</option>
<option value="Webhooks">Webhooks</option>
</select>
<select name="rating" required className="w-full border p-2 rounded">
<option value="">Rating</option>
{[1, 2, 3, 4, 5].map((n) => (
<option key={n} value={n}>{n}</option>
))}
</select>
<textarea name="feedback" placeholder="Your feedback" rows={4}
className="w-full border p-2 rounded" />
<button type="submit" disabled={status === "sending"}
className="bg-black text-white px-6 py-2 rounded">
{status === "sending" ? "Sending..." : "Submit"}
</button>
{status === "error" && (
<p className="text-red-600">Something went wrong. Please try again.</p>
)}
</form>
);
}Next.js: free, open source. Host on Vercel Hobby (free, non-commercial only) or Cloudflare Pages (free, commercial allowed). Sutrena Free: $0/month for 10 projects. Sutrena Builder: $9/month for 50 projects. Sutrena Pro: $29/month for 200 projects and unlimited submissions. Total: $0/month for a small app, $29/month for a production app with many forms. Vercel Pro for commercial use adds $20/user/month.
Sutrena itself runs on Next.js 15. The examples here work with both v15 and v16. App Router, client components, and fetch usage are the same across versions.
Yes. Create a Server Action that calls the Sutrena submit endpoint server-side. Useful if you want to add validation, rate limiting, or logging before data reaches Sutrena.
For form data collection, yes. You skip the API route for submission, storage, and retrieval. You still use your own routes for app logic unrelated to forms.
Yes. Call the Sutrena API in a Server Component to display data without client JS. Good for admin pages, reports, or public leaderboards.
Yes. Standard React hooks and fetch. Works in both routers. For Pages Router, drop the use client directive.
Sutrena is the web runtime for AI agents. Three primitives — pages, forms, and dashboards — accessible through one API. Your agent creates web artifacts, humans interact with them, and your agent gets the data back. Framework-agnostic. Works from any MCP client or HTTP client.
1. Get a trial key (no auth, no signup)
curl -X POST https://sutrena.com/api/trial2. Create a form + dashboard from a template
curl -X POST https://sutrena.com/api/forms \
-H "Authorization: Bearer st_trial_xxx" \
-H "Content-Type: application/json" \
-d '{"templateId": "waitlist", "createDashboard": true}'Get a trial API key instantly with no signup, or create an account for the full experience.