
“Sign in overlaps the home indicator on Pro Max. I can’t tap Continue.”

Meet the inboxWeb FABExpo shakeSwift shakeWears your designREST APIOne prompt · one inbox
The hole in indie shipping
App Store reviews are theatre. Twitter is a pile-on. Crash reports are stack traces, not “the paywall ate my receipt.” FeedbackFlow is a labeled control in the product — shake, tap, or POST — that lands on you, not a committee.

“Sign in overlaps the home indicator on Pro Max. I can’t tap Continue.”
Cursor, Claude, or Codex detects Next.js, Expo, or Swift and installs the control. The public key is already in the prompt.
Web: a FAB that inherits your type, radius, and accent — plus Ctrl/Cmd+Shift+F. Expo and iOS: the same sheet in your tint, plus shake-to-report.
One inbox across every surface. Optional email, Discord, or Slack. Reply like a founder, not a ticket queue.
Product
Not a voting board. Not crash reporting. A channel for “this is broken” and “I wish it did X,” from the app they already have open.
Web · Expo · iOS · API
One script tag. A bottom-right Feedback button on desktop and phone. It inherits the site’s font, radius, and accent. Keyboard: Ctrl/Cmd+Shift+F.
embed.js · .ff-fab · inherits --primaryInstall on the site →JS-only provider. Two acceleration peaks open the sheet. Optional haptics. One Settings row — no floating button on every screen. If expo-sensors is missing, Settings still works; do not add a FAB.
FeedbackProvider · shake + SettingsWrap the root →SPM package. ShakeFeedbackHost for first-responder shake. Keep one FeedbackSettingsRow in Settings — not a floating chip.
ShakeFeedbackHost(enableShake: true)Add the package →Anything that can HTTP can report. publicKey, type, message, platform, screen, version, optional screenshot. Rate-limited. Returns 201.
POST https://www.tryfeedflow.com/api/v1/feedbackSee the payload →Highlighted
Looks like yours
The install prompt tells Cursor, Claude, and Codex to copy your type, radius, and accent. The web FAB inherits CSS. Expo and iOS use shake + a Settings row — not a floating button on every screen. Colors.tint / Color.accentColor. Shake opens the same sheet.
Serif, terracotta, 8px corners — the launcher follows the page.
Shake to report. One Settings row — no floating chip on every screen.
Shake + a Settings row in the app’s accent. Not a floating pill.
Inbox
Filter by type and platform. Open a report, walk prev/next, leave a note, ping yourself again. This is your desk, not a customer forum.
Login overlaps the home indicator on Pro Max
Shake · BugI wish offline drafts survived a kill
Settings · IdeaCheckout total flashes $0 before tax loads
Ctrl+Shift+F · BugInstall
Sign up, name the app, copy the generated prompt. Agents read /llms.txt, /skill.txt, and /skill.md. The prompt highlights matching your type and accent. Fallback recipes below — the key always starts with ff_pk_.
<script src="https://www.tryfeedflow.com/embed.js" data-project-key="ff_pk_…" async></script>
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. Defaults: showFab false — do not pass showFab. Color.accentColor sheet.
ShakeFeedbackHost(enableShake: true) { … }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"
}For indies
Monthly
$19
Pilot of 25 inboxes. No tracked users. No seat tax. Unlimited reporters, 10 apps, 5,000 reports a month, email + webhook.
Lifetime
$349
Same product, paid once — about 18 months of monthly. A license for the inbox as it exists, not an infinite enterprise roadmap.
Coming soon
Reports already email the project maker and can POST to Slack or Discord from a saved webhook. Next up is a FeedbackFlow MCP so Cursor or Claude can read inbox items and draft a fix. Bugs may be drafted later. New features and wishes stay in the inbox until a human approves them. No autonomous deploys.
Maker email and founder ping. Slack or Discord JSON webhook. Inbox types already split bugs from wishes.
Read-only MCP. Agents draft. You approve wishes before anyone implements. Manifest at /mcp and /.well-known/mcp.json.
FAQ
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 FAB.
ShakeDetector is a tiny first-responder view controller inside ShakeFeedbackHost. It does not swizzle UIWindow. Keep a FeedbackSettingsRow in Settings as a backup.
POST JSON to /api/v1/feedback with your public key. CORS allows browser apps. Rate limits apply per key + IP.
Bottom-right, labeled Feedback. Not a right-edge tab. It inherits the host font, radius, and accent (CSS --primary / data-accent). z-index stays above chrome so it remains tappable.
Like your app. The install prompt highlights this: web inherits CSS, Expo takes your Colors.tint, Swift uses Color.accentColor. Navy is only the fallback when a host has no tokens.
No. Forgot and reset stay in the same homepage dialog as sign in. /forgot and /reset only open that popup.
Free-forever trains people not to pay, then the bill jumps when the cap hits — Canny’s tracked-user meter is the famous version. FeedbackFlow is pay-first: $19/mo 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 / 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 submit returns 402 until you pay again.
Smarter feedback starts here

Meet the inboxWeb FABExpo shakeSwift shakeWears your designREST APIOne prompt · one inbox
The hole in indie shipping
App Store reviews are theatre. Twitter is a pile-on. Crash reports are stack traces, not “the paywall ate my receipt.” FeedbackFlow is a labeled control in the product — shake, tap, or POST — that lands on you, not a committee.

“Sign in overlaps the home indicator on Pro Max. I can’t tap Continue.”
Cursor, Claude, or Codex detects Next.js, Expo, or Swift and installs the control. The public key is already in the prompt.
Web: a FAB that inherits your type, radius, and accent — plus Ctrl/Cmd+Shift+F. Expo and iOS: the same sheet in your tint, plus shake-to-report.
One inbox across every surface. Optional email, Discord, or Slack. Reply like a founder, not a ticket queue.
Product
Not a voting board. Not crash reporting. A channel for “this is broken” and “I wish it did X,” from the app they already have open.
Web · Expo · iOS · API
One script tag. A bottom-right Feedback button on desktop and phone. It inherits the site’s font, radius, and accent. Keyboard: Ctrl/Cmd+Shift+F.
embed.js · .ff-fab · inherits --primaryInstall on the site →JS-only provider. Two acceleration peaks open the sheet. Optional haptics. One Settings row — no floating button on every screen. If expo-sensors is missing, Settings still works; do not add a FAB.
FeedbackProvider · shake + SettingsWrap the root →SPM package. ShakeFeedbackHost for first-responder shake. Keep one FeedbackSettingsRow in Settings — not a floating chip.
ShakeFeedbackHost(enableShake: true)Add the package →Anything that can HTTP can report. publicKey, type, message, platform, screen, version, optional screenshot. Rate-limited. Returns 201.
POST https://www.tryfeedflow.com/api/v1/feedbackSee the payload →Highlighted
Looks like yours
The install prompt tells Cursor, Claude, and Codex to copy your type, radius, and accent. The web FAB inherits CSS. Expo and iOS use shake + a Settings row — not a floating button on every screen. Colors.tint / Color.accentColor. Shake opens the same sheet.
Serif, terracotta, 8px corners — the launcher follows the page.
Shake to report. One Settings row — no floating chip on every screen.
Shake + a Settings row in the app’s accent. Not a floating pill.
Inbox
Filter by type and platform. Open a report, walk prev/next, leave a note, ping yourself again. This is your desk, not a customer forum.
Login overlaps the home indicator on Pro Max
Shake · BugI wish offline drafts survived a kill
Settings · IdeaCheckout total flashes $0 before tax loads
Ctrl+Shift+F · BugInstall
Sign up, name the app, copy the generated prompt. Agents read /llms.txt, /skill.txt, and /skill.md. The prompt highlights matching your type and accent. Fallback recipes below — the key always starts with ff_pk_.
<script src="https://www.tryfeedflow.com/embed.js" data-project-key="ff_pk_…" async></script>
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. Defaults: showFab false — do not pass showFab. Color.accentColor sheet.
ShakeFeedbackHost(enableShake: true) { … }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"
}For indies
Monthly
$19
Pilot of 25 inboxes. No tracked users. No seat tax. Unlimited reporters, 10 apps, 5,000 reports a month, email + webhook.
Lifetime
$349
Same product, paid once — about 18 months of monthly. A license for the inbox as it exists, not an infinite enterprise roadmap.
Coming soon
Reports already email the project maker and can POST to Slack or Discord from a saved webhook. Next up is a FeedbackFlow MCP so Cursor or Claude can read inbox items and draft a fix. Bugs may be drafted later. New features and wishes stay in the inbox until a human approves them. No autonomous deploys.
Maker email and founder ping. Slack or Discord JSON webhook. Inbox types already split bugs from wishes.
Read-only MCP. Agents draft. You approve wishes before anyone implements. Manifest at /mcp and /.well-known/mcp.json.
FAQ
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 FAB.
ShakeDetector is a tiny first-responder view controller inside ShakeFeedbackHost. It does not swizzle UIWindow. Keep a FeedbackSettingsRow in Settings as a backup.
POST JSON to /api/v1/feedback with your public key. CORS allows browser apps. Rate limits apply per key + IP.
Bottom-right, labeled Feedback. Not a right-edge tab. It inherits the host font, radius, and accent (CSS --primary / data-accent). z-index stays above chrome so it remains tappable.
Like your app. The install prompt highlights this: web inherits CSS, Expo takes your Colors.tint, Swift uses Color.accentColor. Navy is only the fallback when a host has no tokens.
No. Forgot and reset stay in the same homepage dialog as sign in. /forgot and /reset only open that popup.
Free-forever trains people not to pay, then the bill jumps when the cap hits — Canny’s tracked-user meter is the famous version. FeedbackFlow is pay-first: $19/mo 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 / 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 submit returns 402 until you pay again.
Smarter feedback starts here