Getting started
Collect feedback from your product, triage it in one place, and show the roadmap you're working on. Five minutes to your first submission.
What Opini gives you
- Widget. A lightweight script tag that opens a feedback modal on any page, with user + URL context attached.
- Hosted form. A permanent URL you can link from emails, QR codes, status pages — no widget needed.
- Public roadmap API. Render your published umbrellas and releases on your own site via a read-only JSON API.
- Search. Cmd-K across every umbrella, comment, release, and feedback row in the project.
- Tagging. One tag library, attached to any entity, with create-on-the-fly autocomplete.
- Webhooks. Discord-compatible outbound events so your chat, pipelines, or CS tools hear about state changes.
- Releases. Public release notes hosted per project, with visibility controls.
- Follow-ups. Ask a submitter a clarifying question from Triage; they reply from a link in their email.
- AI. Optional assists on the triage flow — more context, suggested action items. See /docs/ai.
5-minute hello world
1. Sign up. Open /app/signup and enter your email. A sign-in link lands in your inbox; click it to land in the dashboard.
2. Pick a project. A default "Main" project ships with every new organization. If you want a second one, there's a "New project" button in the sidebar.
3. Create a public key. Open Settings → API keys, click Create key, pick Public, and add the origins you'll embed the widget on (e.g.
https://example.com). You'll get apk_live_...string right in the table — it's safe to ship in every page, so there's no "copy it now or lose it" flash. Copy it when you need it.Need a server-to-server key instead? Create a Private one; that
sk_live_secret is shown once at creation — copy it then, or rotate to get a new one.Sending feedback from your backend, a game or an app instead of the widget? See Send feedback with the API.
4. Drop the script tag. Paste this into any HTML page, with the key you just copied:
html<script src="https://opini.dev/widget.js" data-opini-key="pk_live_REPLACE_ME" data-opini-label="Send feedback" data-opini-position="bottom-right" defer></script>5. Click the button, submit something. The floating CTA appears in the corner you chose. Fill out the form; the submission goes to your org's Triage tab in the dashboard.
6. See it in Triage. Open the dashboard; your submission is sitting at the top of the list with the URL, user agent, and (if you called
window.opini.identify) the end-user email attached.
Next steps
Widget reference
Every data-* attribute, window.opini.identify, CSP, a11y.
Public surfaces
The board, the hosted form — what's visible, what isn't.
Search
Cmd-K palette + the top-chrome search pill.
Tagging
One polymorphic tag library, attached to any entity.
Webhooks
Outbound events, Discord-compatible payloads, deliveries drawer.
AI
Pull more context out of every submission and generate action items.
Releases
Blog-style release posts, pinned next to the umbrella they shipped.
Follow-ups
Ask a clarifying question; the submitter replies from a link in their email.
Canonical URLs
Short rename-safe URLs backed by a stable public_id.
Public API
Auto-generated OpenAPI reference — every endpoint, request, and response.