Hear what your users think, right inside your app
retro adds a feedback button to any app: bug reports, praise or complaints, feature requests — screenshot included. Everything lands in one inbox per project, becomes a public roadmap people can vote on, and ships as a changelog.
Early access: every account gets full access, free. Plans come later, with notice.
Three ways to collect feedback
Pick the one that fits each app. They all land in the same inbox.
Drop-in widget
One script tag, or a <retro-widget> element in any framework. Users pick bug / feedback / idea, write, attach a screenshot and send. Follows your theme and language.
<script src="https://retro.3m4.net/widget.js"
data-project-key="retro_pub_…" defer></script>Ingest API
A single POST with the project's public key, from curl, fetch, a plain HTML form or your backend. Perfect for games, CLIs and apps without a DOM.
curl -X POST https://retro.3m4.net/api/ingest/feedback \
-H "X-Project-Key: retro_pub_…" \
-H "Content-Type: application/json" \
-d '{"type": "bug", "message": "Export does nothing on Safari"}'Public board
Every project can publish a board: roadmap columns with votes, a changelog, and a form to submit ideas. Link it from your app or your footer.
https://retro.3m4.net/b/my-appHow it works
1. Create a project
One project per app. You get a public key for the widget and the API, and a board slug.
2. Add the widget or the API call
Paste the snippet from the project settings. Feedback starts arriving in the inbox immediately.
3. Triage and close the loop
Set status, priority and tags, add notes, promote requests to the roadmap and announce them in the changelog.
From inbox to roadmap to changelog
Feedback is only useful if something happens with it. retro keeps the whole loop in one place.
- Inbox. Filter by type, status, sentiment, priority or tag. Open an item to see the screenshot, the page, the version and the user's notes.
- Roadmap. Promote a request to a planned / in progress / done item in one click. Users vote on the public board; linked feedback follows the status.
- Changelog. Write release notes in Markdown, keep drafts, publish when it ships.
- #42Export button does nothing on SafariNew
- #41Dark mode for the editorPlanned
- #40Love the new kinegram preview!Done
An ingest API you can call from anywhere
The project's public key is not a secret — it ships inside your app. Abuse is contained by rate limits, size caps and a honeypot field, and you can rotate the key at any time. CORS is open, so a plain fetch from the browser works.
Public keys can only submit feedback. They can never read or change anything.
Read the docscurl -X POST https://retro.3m4.net/api/ingest/feedback \
-H "X-Project-Key: retro_pub_…" \
-H "Content-Type: application/json" \
-d '{"type": "bug", "message": "Export does nothing on Safari"}'{ "id": "…", "number": 42, "status": "new",
"board_url": "https://retro.3m4.net/b/my-app" }Let your AI agent triage the inbox
retro ships an MCP server. Connect it to Claude Code, Claude Desktop, Cursor or any MCP host and ask things like “summarise this week's feedback for kinegram and tag the duplicates” or “promote the three most requested ideas to the roadmap”
- Role-scoped keys. A viewer key never even sees the delete tool; editor and admin unlock more. Enforced by the API too.
- Human in the loop. Destructive actions ask you to confirm before anything happens.
- Audit trail. Every change and every refused call is logged, server-side and agent-side.
- Local or remote. Run it over stdio with
npx retro-feedback-mcp(npm) or point your host athttps://retro.3m4.net/mcpwith your key.
claude mcp add retro --scope user --env RETRO_API_KEY=retro_live_… -- npx -y retro-feedback-mcpclaude mcp add --transport http retro https://retro.3m4.net/mcp --header "Authorization: Bearer retro_live_…"{
"mcpServers": {
"retro": {
"command": "npx",
"args": ["-y", "retro-feedback-mcp"],
"env": { "RETRO_API_KEY": "retro_live_…" }
}
}
}Create a key with the role you want under Dashboard → API keys.
Start listening today
Create a project, paste one script tag and receive your first feedback in under five minutes.
Early access. Every account has full access at no cost right now. Plans and limits will be introduced later, with notice before anything changes.
Self-host it (MIT, open source)
The entire stack — Flask API, widget, MCP server and this Qwik app — is MIT-licensed. Run it on your own VPS with onedocker compose up. No billing code, no limits beyond what you configure.