Feedback links & forms
Hosted pages that collect feedback from people who will never install the widget — a free-text form, a structured questionnaire, or a guest pass for the widget itself.
Not every reviewer will visit your site with the widget loaded. A feedback link
is a hosted page at https://www.annot8.app/p/<slug> that anyone can open, fill in,
and submit — no account, no install.
Manage them in Project → Feedback, which has four tabs: Feed, Forms, Portal, and Changelog.
The three things a public link can be
| Type | The page shows | Submissions land in |
|---|---|---|
| Feedback form | A free-text box, plus optional name and email | The Feed tab and the project inbox, as threads marked form |
| Questionnaire | Your questions, rendered as a form | The Responses view for that link, aggregated |
| Portal | A public, votable feedback board | Its own board |
Forms and questionnaires are a Pro feature. The guest pass for the widget, described below, works on every plan.
Feedback forms
Create one in Feedback → Forms. Give it a name, an optional description, and optionally pin it to an environment so its submissions are filed into the right lane.
Templates
Creating a form starts from a template, and every question stays editable. The builder shows a live preview of the page respondents will get.
| Template | Gives you |
|---|---|
| Open feedback | A feedback form: one message box, submissions land in the Feed |
| Bug report | What they tried, what broke, and how badly it hurts |
| Feature request | The idea, the problem it solves, and how much it matters |
| NPS survey | The 0–10 recommend question and the reason for the score |
| Satisfaction (CSAT) | A 1–5 rating and what could be better |
| Exit survey | Why they're leaving, and whether they'd come back |
| Blank questionnaire | One empty rating question to build from |
Each form can also set its own thank-you message and accent colour.
Each form gets its own slug, so you can run several at once — one per client, per release, per campaign — and filter the Feed by which one a submission came through.
Submissions become ordinary threads. They carry a status, appear in the inbox next to widget threads, and can be triaged, assigned, and pushed to your tracker like anything else. What they don't have is a pin, since they weren't left on a page.
Questionnaires
A questionnaire is the same hosted page with structured questions instead of a free-text box. Five question kinds:
| Kind | Renders as |
|---|---|
rating | A 1–5 rating scale (CSAT) |
nps | A 0–10 "how likely are you to recommend" scale |
yesno | Yes / no |
choice | Multiple choice, from your list of options |
text | Short text |
Mark any question required, and add optional help text. Rating and NPS questions can label their scale ends, for example "Not at all likely" and "Extremely likely".
For an NPS question, Responses shows the score — the percentage of promoters (9–10) minus the percentage of detractors (0–6) — alongside the promoter, passive, and detractor counts and the full distribution. Answers are collected per link and read in the Responses view rather than the inbox — a questionnaire is meant to be aggregated, not triaged one row at a time.
Good for a post-launch survey, a client sign-off checklist, or a "did this fix it?" follow-up.
Archiving
Links are archived rather than deleted, which keeps the submissions you already collected intact. An archived link stops accepting new submissions.
There is no built-in expiry date — if you want a link to stop working after a client review, archive it when the review ends.
The widget's guest pass
Separately from forms, a project can have one public feedback link that lets guests use the widget itself — pinning comments on your real page, without signing in.
Create it in Project → Settings → Configuration → Public feedback link.
Once it exists, the widget finds it automatically: on page load the widget looks
for a public link matching the current environment, falls back to one that isn't
pinned to any environment, and uses it. You generally do not need to add
data-public-slug to your script tag — the generated snippet only includes it
when a link already exists.
<!-- Only needed to force a specific link -->
<script
src="https://www.annot8.app/widget.js"
data-project-id="pj_xxxxxxxxxxxx"
data-convex-url="https://your-deployment.convex.cloud"
data-public-slug="abc123"
async
></script>Guests give a name (and optionally an email) with their first comment. They never consume a paid seat. Guests see the other guest comments left on the page (and their pins), but not your team's internal threads.
Signed-in members can check whether guest access is on from the widget itself: widget → Settings → Guest reviewers shows the current state and links to the project setting above.
The Free plan allows 3 distinct guest reviewers per workspace. When that's reached, further guest submissions are refused with a clear message in the widget rather than failing silently. Every paid plan makes guest reviewers unlimited.
Sharing a link
The hosted page is branded, mobile-friendly, and works in any browser. Paste it into an email, a Slack message, or a client brief:
We'd love your notes on the new checkout flow:
https://www.annot8.app/p/abc123
No sign-up needed — just tell us what you see.Security notes
- Slugs are randomly generated and unguessable.
- Respondents only ever submit. They never see other people's submissions, which stay in your dashboard.
- Public link submissions still pass through the project's moderation and reporting path.
- Archiving takes effect immediately.