Blueprints/Build an anonymous posting board

Build an anonymous posting board

No accounts. No tracking. People type something, tag a mood, hit submit. Fetch confessions via the API.

Updated March 2026

No accounts, no login, no tracking. People type a confession, pick a mood, and submit. Everyone can see what others have shared. Fetch submissions via the public API to display a feed of recent confessions. Works well for campus boards, team icebreakers, or just letting people vent. Sutrena Pages hosts the site -- included with your plan. `sutrena_collect` creates the confession form and webhooks in one call.

Architecture

ToolRoleCost
Sutrena PagesStatic site hosting (included)Included
SutrenaConfession storage, public API$0 (free) / $29/mo (Pro)

Total cost: $0-$29/mo

Pro is $29/month for 100 projects and all your other work too. Build five blueprints on Pro and it is still $29/month. That is where the value is — at scale.

A static HTML page deployed on Sutrena Pages. Users type a confession, optionally pick a mood, and submit. Sutrena stores it and makes it available through the public API.

publicResults is on, so anyone can fetch the confessions feed. Build a separate page that fetches submissions and renders the mood breakdown, recent confessions, and total count.

Form Definition

A required textarea for the confession and an optional mood selector. publicResults is on so anyone can view submissions. No identity fields collected at all.

{
  "name": "Anonymous Confessions",
  "fields": [
    {
      "name": "confession",
      "label": "Your Confession",
      "type": "textarea",
      "required": true
    },
    {
      "name": "mood",
      "label": "Mood",
      "type": "select",
      "options": [
        "Happy",
        "Sad",
        "Angry",
        "Confused",
        "Relieved"
      ]
    }
  ],
  "publicResults": true
}

Frontend Integration

A minimal form. No login, no cookies. Mood is optional. After posting, users can read the confessions feed via the public API. Replace the form ID with yours.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Anonymous Confessions</title>
  <style>
    body { font-family: system-ui, sans-serif; max-width: 480px; margin: 2rem auto; padding: 0 1rem; }
    textarea { width: 100%; min-height: 120px; padding: 0.75rem; font-size: 1rem; }
    select { width: 100%; padding: 0.5rem; margin-top: 0.5rem; }
    button { margin-top: 1rem; padding: 0.75rem 2rem; font-size: 1rem; cursor: pointer; }
    .success { color: green; margin-top: 1rem; }
  </style>
</head>
<body>
  <h1>Confess Anonymously</h1>
  <p>No accounts, no tracking. Just say what you need to say.</p>

  <form id="confession-form">
    <textarea name="confession" placeholder="What's on your mind?" required></textarea>
    <select name="mood">
      <option value="">Pick a mood (optional)</option>
      <option value="Happy">Happy</option>
      <option value="Sad">Sad</option>
      <option value="Angry">Angry</option>
      <option value="Confused">Confused</option>
      <option value="Relieved">Relieved</option>
    </select>
    <button type="submit">Post Anonymously</button>
  </form>

  <p id="status"></p>
  <p><a href="#confessions-feed">Read confessions</a></p>

  <script>
    const FORM_ID = "frm_YOUR_FORM_ID";

    document.getElementById("confession-form").addEventListener("submit", async (e) => {
      e.preventDefault();
      const fd = new FormData(e.target);
      const body = { confession: fd.get("confession") };
      const mood = fd.get("mood");
      if (mood) body.mood = mood;

      const res = await fetch(
        `https://sutrena.com/api/forms/${FORM_ID}/submit`,
        {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify(body),
        }
      );

      const status = document.getElementById("status");
      if (res.ok) {
        status.textContent = "Posted! Your confession is now live.";
        status.className = "success";
        e.target.reset();
      } else {
        status.textContent = "Something went wrong. Try again.";
      }
    });
  </script>
</body>
</html>

FAQ

Can I use compound tools instead of individual API calls?

Yes. sutrena_collect creates the form and webhooks in one call. sutrena_launch deploys pages with analytics. The code examples below show primitive APIs for full control, but compound tools handle most setups faster.

Is it really anonymous?

Sutrena does not collect IP addresses or fingerprints in submissions. There are no identity fields. The only data stored is what the user types. That said, if you add identity fields yourself, it stops being anonymous. Do not do that.

How do I moderate inappropriate content?

Delete submissions via the API. For automation, set up a webhook that forwards posts to a content moderation service and deletes flagged ones. Manual moderation works fine at small scale.

Can I show the confession feed on the same page?

Yes. publicResults is true, so you can fetch submissions from the API and render them on your page. No auth needed for that.

Can people spam the board?

Sutrena rate-limits the submit endpoint per IP. You can also set maxSubmissions to cap total posts, or closesAt for a deadline. It will not stop a determined spammer, but it handles casual abuse.

Do I need separate hosting?

No. Sutrena Pages hosts the HTML. Forms are also on Sutrena. One platform, one API key.

What is Sutrena?

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

Get started in two API calls

1. Get a trial key (no auth, no signup)

curl -X POST https://sutrena.com/api/trial

2. 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>"}'

Ready to build?

Get a trial API key instantly with no signup, or create an account for the full experience.

Build an anonymous posting board — Sutrena | Sutrena