In-place feedback for React

Where your users talk to you, and you talk back.

Feedback lands on the exact component it is about. Put one elementId beside your checkout, and every rating, vote and bug report arrives tagged with the component it came from. Your users never leave for a separate board. The widget does not set cookies or load third-party scripts.

<PricingCard>
  <Gotcha elementId="pricing-card" mode="vote" />
</PricingCard>

Free tier · No credit card · React SDK

Five minutes

One provider, one component. That is the whole API.

app.tsxTypeScript
import { GotchaProvider, Gotcha } from 'gotcha-feedback';

<GotchaProvider apiKey="your-api-key">
  <App />
</GotchaProvider>

<Gotcha elementId="checkout" mode="nps" />
<Gotcha elementId="search" mode="vote" />
<Gotcha elementId="app" enableBugFlag enableScreenshot />
The Loop

Your users ask. You ship. They hear back.

Capture is the first step. Gotcha also covers what happens next: triage, a public roadmap, and a note back to the person who asked.

01

A user says something

They tap the button in your product. Rate, vote, report a bug, answer a poll. One click. Their feedback is tied to the exact screen they were on.

02

You see where it clusters

Every response is filed under the component it came from, so the dashboard can show which part of your product drew the most feedback this week, and read the responses behind it.

03

You triage and ship

Move feedback from new to planned to building to shipped. It reads like a changelog your users can follow. Public roadmap if you want one.

04

They hear back

When you mark their request shipped, they get an email, if you passed their address to the widget and they have not unsubscribed (up to 200 a month per project). Not a newsletter: one note about the thing they asked for.

Most active element this week
14 responses on checkout-form, up from 3 last week.
Example · 14 responses

Want to see a real one? Our own roadmap runs on Gotcha.

See the Gotcha roadmap
Privacy posture

Feedback without surveillance.

Here is what the widget stores and sends, so you can check it against the published package before it goes anywhere near your users.

CookiesNone from the widget
The SDK sets no cookie. It keeps a random anonymous id, any submission waiting for a connection, and a few display counters in localStorage. gotcha.cx itself uses cookies for dashboard sign-in and team invitations.
ScriptsNothing from another domain
The screenshot code ships inside the package and the glyph font is embedded. To draw a screenshot, the widget re-fetches the images, fonts and styles your page already loads.
SentWith each submission
Each submission carries the page URL, browser user agent, screen and window size, language and timezone, and by default the last few JavaScript errors on the page.
ControlsYou decide what travels
Turn error capture off with captureErrors={false}. Send a route template instead of the real path with contextPath. Pass your own userId, or the widget uses its anonymous id.

Before anyone submits: by default the widget sends nothing to Gotcha, apart from earlier submissions that were waiting for a connection. Two opt-in features do send a request. With onePerUser it asks whether this user has already answered, and GotchaScore fetches an element’s average rating. The full list is in our privacy policy, and the code is on npm.

Open the line.

Five minutes to install. No credit card. Free on every plan until your users keep talking back.

npm install gotcha-feedback