opini
New — Pulses

Per-feature feedback, in five lines of JSX.

"Checkout button: 78% positive (412 reactions, 14 comments, +9 pts week-over-week)." That's a pulse. Wrap a region of your UI with <OpiniPulse> and you get 👍 / 👎 chips, scoped comments, and a sentiment headline on the dashboard — without polluting your triage inbox.

tsx
import { OpiniPulse, OpiniReactions, OpiniComment } from "@opini-dev/react"

<OpiniPulse name="checkout-button" projectKey="pk_live_xxx">
  <button>Buy now</button>
  <OpiniReactions />
  <OpiniComment placeholder="Tell us why" />
</OpiniPulse>

First reaction with a new name auto-registers the pulse. No dashboard setup before shipping.

Why Opini, not your analytics vendor

One tool, one inbox, one source of truth for product signal.

PostHog Surveys, Hotjar, and Sprig give you reaction widgets. Opini gives you reactions that roll up into the same triage / board / umbrella system your free-text feedback already lives in. A 👎 on the checkout button isn't a number in a separate analytics dashboard — it's tagged on the same feedback row your team is already triaging, threaded into the umbrella you're already shipping against, and visible in the search palette alongside everything else.

What it unlocks

Three roles, one primitive.

PM

See which features people love and which they hate, at the feature level, without running a survey.

Designer

A/B a redesign and watch sentiment move on the chip in near-real-time — no week-long debrief loop.

Engineer

Ship a feature flag, see if reactions skew negative the day rollout hits, roll back before the inbox fills.

Coming in v1.1

No-code pulses — tag a CSS selector in the dashboard, no JSX required.

For teams whose product surface is gated by a separate sprint from the Opini integration. Drop a selector (#buy-now), pick a label, and reactions attach client-side without a code change. v1.0 ships JSX-first; the no-code path lands in v1.1.

Pulses ship in @opini-dev/[email protected]. Self-hosted? Pulses ship unconditionally — no env-var flag, no migration toggle. Just point your baseUrl at your Opini deployment and the reactions endpoint comes online with the binary. Read the full docs →