Fix it before they leave
A thread in the app. Screenshot, page, device, and console lines come with the first note. You get the email and the webhook.
Fix it before they leave
11 claimed9 leftA support thread that wears your design. They write from the app. You reply from one inbox. Happy people get one tap to the App Store or Play Store. Unhappy people never have to leave a public review to be heard.
Meet the inboxThe sheet stays open as a conversation. You reply from one inbox. Telegram and a draft button live in project settings and stay quiet until you connect them.
A thread in the app. Screenshot, page, device, and console lines come with the first note. You get the email and the webhook.
Mild pain can open the store’s write-review page. We don’t know if they submitted it.
Screen, URL, viewport, platform, app version, and any metadata the app passes in.
Web, Expo, and Swift. Up to 10 projects.
They open the sheet and see the thread, not a form that dies after one send. The first note still carries the pain faces, the kind of report, an optional email, a screenshot, and the console lines from that page. You reply from the inbox. The next time they open the sheet, your reply is there. A new message from them emails you and fires the same webhook, with the conversation id attached.
When they pick 🙂 or 😐 and the project has a store URL, the sheet shows one button: Rate on the App Store, or Rate on Google Play. It opens that URL. FeedbackFlow does not record a submitted review, because the store doesn’t tell us.
The thread keeps the screen, the page URL, the viewport, the platform, and the app version. The app can also pass a JSON object — a plan name, a user id — and that object shows on the conversation.
Next.js, Expo, and Swift land in the same list. Each row shows the latest line, the platform, and whether the thread is open or closed. Private notes stay off the thread. Ten projects is the cap on every paid plan.
The sheet inherits the product around it. You set the title and the welcome text in project settings, and the next open picks them up — no app update. No FeedbackFlow mark on a customer app unless the credit toggle is on.

The same report sheet, dressed three different ways.
Installs where you already ship — and with the agent you already use
Install once with your coding agent. After that, reports find you — you never have to go looking.

Cursor, Claude, or Codex detects Next.js, Expo, or Swift and installs the control. Your public key is already in the prompt.

Web gets a Feedback button in your type, radius, and accent, plus Ctrl/Cmd+Shift+F. Expo and iOS open the same thread on shake, in your tint. They can write again. Your reply is there the next time the sheet opens.

One inbox across every surface. The latest line, the platform, and open or closed. Email to the address you signed up with, and an optional Slack or Discord webhook.
One script tag. A bottom-right Feedback button on desktop and phone that inherits the site’s font, radius, and accent. Keyboard: Ctrl/Cmd+Shift+F.
embed.js · inherits --primary or data-accentInstall on the siteJavaScript-only provider. Two acceleration peaks open the sheet, with optional haptics. One Settings row — no floating button on every screen. If expo-sensors is missing, Settings still works.
<FeedbackProvider enableShake> + <FeedbackSettingsRow />Wrap the rootSwift package. ShakeFeedbackHost catches the shake as a first responder. Keep one FeedbackSettingsRow in Settings — the sheet uses Color.accentColor.
ShakeFeedbackHost(enableShake: true) { … }Add the packageAnything that can make an HTTP request can report: publicKey, type, message, platform, screen, version, and an optional screenshot. Rate-limited per key and IP.
POST https://www.tryfeedflow.com/api/v1/feedbackSee the payloadThis is your desk, not a customer forum. Everything from every app lands in one place, sorted newest first.
Feedback shouldn’t cost more the moment people start to care. FeedbackFlow is pay-first, flat, and built for the founder who reads every report personally.

Indie apps lose people quietly. A labeled control in the product, a sheet that looks like yours, and an email to the one person who can fix it — that’s the whole idea.
Sign up, name the app, copy the generated prompt. Agents read /llms.txt, /skill.txt, and /skill.md. Fallback recipes are below — the key always starts with ff_pk_.
<script src="https://www.tryfeedflow.com/embed.js" data-project-key="ff_pk_…" async></script>
POST https://www.tryfeedflow.com/api/v1/feedback
Content-Type: application/json
{
"publicKey": "ff_pk_…",
"type": "bug",
"message": "Login overlaps the home indicator",
"platform": "web" | "expo" | "ios"
}import { FeedbackProvider, FeedbackSettingsRow, themeFromHostColors } from "./sdk/expo/src"
<FeedbackProvider
publicKey="ff_pk_…"
apiUrl="https://www.tryfeedflow.com"
enableShake
theme={themeFromHostColors(Colors)}
>
<App />
</FeedbackProvider>
// Settings list row — the only persistent tap door. Do not pass showFab.
<FeedbackSettingsRow />FeedbackFlow.configure(publicKey: "ff_pk_…", apiUrl: "https://www.tryfeedflow.com")
// Shake + Settings row. showFab defaults to false. Sheet uses Color.accentColor.
ShakeFeedbackHost(enableShake: true) { … }Founders say the same three things: the reporter never hears back, the owner has to refresh a dashboard, and “it broke” arrives with no URL or console line.
No trial. No seat tax. Yearly is the cheap keep. Lifetime is a numbered run of 20 — 11 claimed, 9 left.
Post about FeedbackFlow on X by October 15 and get 50% back. 5,000 views and it’s on us.See the offer
Monthly
$19
per month · cancel anytime
Flexible. $19 keeps the line open while you ship. Reporters stay free.
Yearly
Best value · save $129$99
one year · about $8/mo
The cheap way to stay on. $99 for the year — about $8 / mo.
Lifetime · limited run
9 left$349
pay once · numbered seat
11 claimed. 9 left in this 20-seat run.
Seats 01–11 are claimed. 9 numbered seats left.
Lifetime covers this inbox and the fair-use quota. Monthly and yearly stay active through the paid period if you cancel.
Next up is a FeedbackFlow MCP so Cursor or Claude can read inbox items and draft a fix. New features and wishes stay in the inbox until a human approves them. No autonomous deploys.
In-app threads for web, Expo, and Swift. Owner email, founder ping, and a Slack or Discord webhook on each new reporter message. Mild pain can open a store link. Telegram and draft replies stay off until you connect them in project settings.
Read-only MCP. Agents draft; you approve wishes before anyone builds them. Manifest at /mcp and /.well-known/mcp.json.
No. The reporter is an unguessable token stored on the device — localStorage on the web, Expo storage, UserDefaults on Swift. You sign in. They don’t.
Yes. The Expo SDK is JavaScript-only. It uses expo-sensors when present, checks isAvailableAsync, and still opens from the Settings row if sensors are missing. Do not add a global floating button.
ShakeDetector is a tiny first-responder view controller inside ShakeFeedbackHost. It does not swizzle UIWindow. Keep a FeedbackSettingsRow in Settings as a backup.
Yes. POST JSON to /api/v1/feedback with your public key. CORS allows browser apps. Rate limits apply per key and IP.
Bottom-right, labeled Feedback — not a right-edge tab. It inherits the host font, radius, and accent (CSS --primary or data-accent), and its z-index keeps it above your chrome so it stays tappable.
Like your app. The install prompt makes this the priority: web inherits CSS, Expo takes your Colors.tint, Swift uses Color.accentColor. A neutral ink-on-white sheet is only the fallback when a host has no tokens.
Ask on this page or at /forgot. We email the link and show “Mail sent” right there — the form does not send you somewhere else. The link in the email opens the new-password dialog.
Free-forever trains people not to pay, then the bill jumps when a cap hits — Canny’s tracked-user meter is the famous version. FeedbackFlow is pay-first: $19/mo, $99/year, or $349 lifetime, no trial, unlimited reporters, no seat tax.
The same inbox as monthly: 10 projects, 5,000 reports a month, web, Expo, Swift, and the API. It is a license for the current product plus that quota — not a promise of every future enterprise feature.
No. Access stays through the paid period. After that, the widget still loads but submitting returns 402 until you pay again.
