Fix it before they leave

11 claimed9 left

Talk to theminside the app.

A 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.

  • Unlimited reporters
  • No seat tax
  • Web · Expo · iOS · API
  • 4surfaces
    one install
  • 1inbox
    for every app
  • $0per reporter
    no meter
Meet the inbox
In the app

A thread they can answer.

The 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.

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.

Ask while they’re still smiling

Mild pain can open the store’s write-review page. We don’t know if they submitted it.

See who hit it

Screen, URL, viewport, platform, app version, and any metadata the app passes in.

One inbox

Web, Expo, and Swift. Up to 10 projects.

Fix it before they leave

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.

Ask while they’re still smiling

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.

See who hit it

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.

One inbox

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.

Looks like you built it

Host font, radius, and accent.

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.

Highlighted in every prompt

Your type. Your radius. Your accent.

The same report sheet, dressed three different ways.

  1. Reads your tokensFont, radius, and accent come from the host. Title and welcome come from project settings.
  2. Inherits the CSSThe web button follows --primary, or data-accent.
  3. Uses your tintExpo takes Colors.tint. Swift uses Color.accentColor.
StorefrontSerif, terracotta, 8px corners — the launcher follows the page.
Expo appShake to report. One Settings row — no chip on every screen.
Swift appShake plus a Settings row in the app’s accent. Not a floating pill.

Installs where you already ship — and with the agent you already use

  • Next.js
  • Any website
  • Expo
  • Swift
  • REST API
  • Cursor
  • Claude
  • Codex
How it works

Three moves. No dashboard to babysit.

Install once with your coding agent. After that, reports find you — you never have to go looking.

  1. You, once

    Paste one prompt

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

  2. Your users

    They shake or tap

    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.

  3. Your inbox

    You get pinged

    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.

Web · Expo · iOS · API

Same report. Every stack you actually ship.

Web

Your button, not a foreign tab.

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 site
Inbox

One desk. Web, Expo, and iOS in the same list.

This is your desk, not a customer forum. Everything from every app lands in one place, sorted newest first.

  • Filter by type, platform, and status
  • Walk prev and next, and leave a private note
  • Mail the reporter when it’s fixed
Why it exists

Why FeedbackFlow exists

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.

$0per reporter. Unlimited people can write in.
4surfaces — web, Expo, iOS, and a REST API.
10projects on every plan, each with its own key.
5,000reports a month per account, fair use.
A founder reading a report on his phone at a desk in the evening
Built for one-person teams

Catch it while they still care.

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.

Install

Agents paste the prompt. Humans can still copy a snippet.

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_.

Website
<script src="https://www.tryfeedflow.com/embed.js" data-project-key="ff_pk_…" async></script>
API
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"
}
Expo
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 />
Swift
FeedbackFlow.configure(publicKey: "ff_pk_…", apiUrl: "https://www.tryfeedflow.com")
// Shake + Settings row. showFab defaults to false. Sheet uses Color.accentColor.
ShakeFeedbackHost(enableShake: true) { … }
Why teams leave the others

The bill, the silence, the missing screenshot.

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.

What founders hit elsewhere

  • Meters that punish successCanny’s tracked-user pricing climbs as more people vote.
  • Crash-suite pricingShake starts around $160/mo. Instabug / Luciq is sales-only.
  • Seats and page viewsMarker.io and Usersnap nail annotated screenshots, then charge by seat or view.
  • SilenceThe person who reported it never hears what happened.

What FeedbackFlow does

  • No meterUnlimited reporters. $19/mo, $99/year, or $349 lifetime.
  • Mail that landsEvery new report emails your signup address, plus any extra ping.
  • Enough to reproduceMarked screenshot, URL, viewport, user agent, and the last console errors.
  • Close the loopMark it fixed and the reporter gets a short status note.
For indies

Pay first. Keep the line open.

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.

  • Unlimited reporters — no tracked-user meter
  • Up to 10 projects
  • 5,000 reports / month
  • Web, Expo, Swift, and the public API
  • Owner Gmail on every new report
  • Cancel anytime. Access through the paid month.

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.

  • Same product as the subscriptions, paid once
  • Numbered seats. Small run — not a fire sale
  • Owner Gmail, reporter mail, and webhook
  • Fair-use stays at 5,000 reports a month

Lifetime covers this inbox and the fair-use quota. Monthly and yearly stay active through the paid period if you cancel.

Coming soon

MCP for Slack and Claude. Humans approve features first.

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.

Live now

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.

Next Coming soon

Read-only MCP. Agents draft; you approve wishes before anyone builds them. Manifest at /mcp and /.well-known/mcp.json.

FAQ

Straight answers.

Lifetime seats: 11 claimed, 9 left. Anything else is in the install guide.

Do they need an account?

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.

Does shake work in Expo Go?

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.

How does iOS shake work without breaking my window?

ShakeDetector is a tiny first-responder view controller inside ShakeFeedbackHost. It does not swizzle UIWindow. Keep a FeedbackSettingsRow in Settings as a backup.

Can I send reports without a UI?

Yes. POST JSON to /api/v1/feedback with your public key. CORS allows browser apps. Rate limits apply per key and IP.

Where does the web button sit?

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.

Does the widget look like FeedbackFlow or like my app?

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.

Is forgot password a separate page?

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.

Why isn’t this free?

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.

What does lifetime include?

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.

If I cancel monthly, do I lose the inbox today?

No. Access stays through the paid period. After that, the widget still loads but submitting returns 402 until you pay again.

Smarter feedback starts here

Ship the control tonight. Read the reports in the morning.