Clerk knows who your users are. Sutrena knows what they submit.
Updated March 2026
Clerk handles signup, login, MFA, user profiles, and sessions. Free up to 50,000 monthly active users. It has embeddable UI components for React and Next.js, plus a backend API. The thing is, auth is the part you do not want to build yourself. Clerk takes it off your plate.
Pass Clerk's user_id as a hidden field in your Sutrena form. Now every submission is linked to a specific user. You get per-user tracking, uniqueBy dedup on user_id, and filtered queries.
This works for feature voting, feedback, surveys -- anything where you need to know who submitted what. Clerk handles auth. Sutrena handles data and analytics. Your app just connects the two.
"use client";
import { useUser } from "@clerk/nextjs";
import { useState } from "react";
export default function FeatureRequest() {
const { user } = useUser();
const [status, setStatus] = useState<"idle" | "sending" | "sent">("idle");
async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
setStatus("sending");
const formData = Object.fromEntries(new FormData(e.currentTarget));
const res = await fetch(
"https://sutrena.com/api/forms/frm_your_id/submit",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
...formData,
user_id: user?.id,
user_email: user?.primaryEmailAddress?.emailAddress,
}),
}
);
setStatus(res.ok ? "sent" : "idle");
}
if (!user) return <p>Please sign in to submit a feature request.</p>;
if (status === "sent") return <p>Thanks! Your request has been recorded.</p>;
return (
<form onSubmit={handleSubmit}>
<label htmlFor="title">Feature title</label>
<input id="title" name="title" required />
<label htmlFor="category">Category</label>
<select id="category" name="category" required>
<option value="">Select</option>
<option value="Integration">Integration</option>
<option value="UI/UX">UI/UX</option>
<option value="Performance">Performance</option>
<option value="New Feature">New Feature</option>
</select>
<label htmlFor="description">Description</label>
<textarea id="description" name="description" rows={4} required />
<button type="submit" disabled={status === "sending"}>
{status === "sending" ? "Submitting..." : "Submit Request"}
</button>
</form>
);
}
// Sutrena form fields (created via API):
// { "name": "title", "type": "text", "required": true }
// { "name": "category", "type": "select", "options": ["Integration", "UI/UX", "Performance", "New Feature"], "required": true }
// { "name": "description", "type": "textarea", "required": true }
// { "name": "user_id", "type": "hidden" }
// { "name": "user_email", "type": "hidden" }
//
// Set uniqueBy: "user_id" to allow one vote per user per form,
// or omit it to allow multiple submissions per user.Clerk: free up to 50,000 MAU. Sutrena Free: $0/month for 10 projects. Sutrena Pro: $29/month for 100 projects and unlimited submissions. Total: $0/month for a free setup with user tracking. Most indie projects stay on Clerk's free tier and only pay for Sutrena when they outgrow the free plan.
Pass Clerk's user_id as a hidden field. It shows up in the dashboard, API responses, and CSV exports. You can filter by user_id in data tables.
Yes. Set uniqueBy to user_id. Same user submits again, Sutrena returns 409. Good for one-vote-per-user or single-response surveys.
The embed renders in an iframe, so it cannot access Clerk's session. For authenticated submissions, build a custom form that reads the Clerk user and POSTs to Sutrena directly, like the example above.
Use the submissions API to filter and search by user_email. Export as CSV if you need to analyze the data externally.
Sutrena is the web runtime for AI agents. Forms, Pages, Analytics, Webhooks, Automations — all through 67 MCP tools and one REST API. Your agent creates web artifacts, humans interact with them, and your agent gets the data back. Use any one feature or all of them together.
Pages
Deploy HTML instantly
Forms
Collect structured data
Automations
DSL-based pipelines with 14 step types
Analytics
Privacy-first, no cookies
Webhooks
Slack, Discord, Telegram
1. Get a trial key (no auth, no signup)
curl -X POST https://sutrena.com/api/trial2. Create anything — a page, form, automation, or analytics site
# Create a form
curl -X POST https://sutrena.com/api/forms \
-H "Authorization: Bearer st_trial_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "waitlist", "fields": [{"name": "email", "label": "Email", "type": "email", "required": true}]}'
# Or deploy a page
curl -X POST https://sutrena.com/api/pages \
-H "Authorization: Bearer st_trial_xxx" \
-H "Content-Type: application/json" \
-d '{"slug": "index", "title": "My Site", "html": "<h1>Live</h1>"}'Get a trial API key instantly with no signup, or create an account for the full experience.