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.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.