For humans and agents
Install
Prefer the generated prompt on a project page. If you are an agent, read /llms.txt, /skill.txt, and /skill.md.
Product
One prompt. Four surfaces.
Shake. Tap. Report. One prompt installs a labeled Feedback control in Next.js, Expo, or Swift. User problems land in one inbox and can ping you by email or webhook.
1. Create a project
Sign up (popup on the homepage), pay monthly or lifetime, name the app, copy the prompt. The public key is already in the prompt. You should not paste keys by hand.
2. Next.js / any website
One script. Bottom-right Feedback button that inherits the site’s font, radius, and accent — plus Ctrl/Cmd+Shift+F. Optional data-accent.
<script src="https://www.tryfeedflow.com/embed.js" data-project-key="ff_pk_…" async></script>
3. Expo
Copy sdk/expo (same package as packages/expo). JS-only so Expo Go keeps working. Wrap the root with FeedbackProvider. Pass theme from your existing Colors.tint. Shake opens the sheet. Put FeedbackSettingsRow on Settings — not a floating chip. Defaults: showFab: false, enableShake: true. First install and first launch after an update show “Shake your device to send a report to the founder.” once. If expo-sensors is missing, the Settings row still works; do not fall back to a global FAB.
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 tap door
<FeedbackSettingsRow />4. Swift
Add the local package in sdk/swift (or packages/swift). Call FeedbackFlow.configure, wrap the root in ShakeFeedbackHost (first-responder shake, no swizzle, showFab: false). Put FeedbackSettingsRow on Settings. First install / post-update tip: “Shake your device to send a report to the founder.” The sheet uses Color.accentColor.
FeedbackFlow.configure(publicKey: "ff_pk_…", apiUrl: "https://www.tryfeedflow.com")
ShakeFeedbackHost(screen: "Home", enableShake: true) {
ContentView()
}
// Settings list row
FeedbackSettingsRow()Match the host design
Required. The launcher is not a FeedbackFlow-navy overlay. Web inherits CSS variables and font-family. Expo takes a theme object from your tokens (use themeFromHostColors(Colors)). Swift uses Color.accentColor. The generated prompt highlights this so agents do not hardcode #0F1B31.
Host
Public URL, install prompts, emails, and Stripe return URLs use www.tryfeedflow.com (https://www.tryfeedflow.com). The apex redirects there.
Forgot password
Forgot password opens on the homepage dialog. Email sends a one-hour link that opens /?auth=reset. On localhost and *.vercel.app, if email isn’t sending, the dialog can show a one-time link for that request. On www.tryfeedflow.com reset is email-only.
API
POST https://www.tryfeedflow.com/api/v1/feedback
Content-Type: application/json
{
"publicKey": "ff_pk_…",
"type": "bug" | "feature" | "general",
"message": "Login overlaps the home indicator",
"platform": "web" | "expo" | "ios",
"reporterEmail": "optional@user.dev",
"screen": "Login",
"appVersion": "1.4.2",
"screenshotBase64": "data:image/png;base64,…"
}