Optional later: OAuth providers, transactional email (status notifications, password reset), and object storage for attachments.
Duplicate feature requests are the silent killer of feedback boards. FeedLog’s similar-idea path stores embeddings (documented as OpenAI text-embedding-3-large at 768 dimensions in the project README) and uses pgvector so new posts can surface near-duplicates before the board fragments.
Engineering takeaway: treat vector as a first-class dependency in your infra checklist, same as the app image. If you migrate hosts later, back up embeddings with the rest of Postgres — they are part of product memory, not cache.
Customers should not leave your product to ask a question or cast a vote. Install the package:
npm install @feedlog/widget
Guest-only bootstrap:
import { createWidget } from '@feedlog/widget'
createWidget({
baseUrl: 'https://acme.feedlog.ai', // your workspace URL
theme: 'auto',
})
For product accounts, pass auth.getToken (server-signed HS256 JWT with required email and exp) and optional auth.login that opens your existing sign-in UI. Call createWidget() once in client-only startup — a Nuxt .client plugin is a natural fit; the package can be imported during SSR, but initialization must run in the browser.
openWidget() / closeWidget() / updateWidget() let you hide the default launcher and drive Help from your own nav, sync theme, and adjust zIndex so the panel does not fight your modals. When a customer sends a message, the widget shares page path, title, and meta description as Agent context (query strings and body content are excluded).
Step-by-step options, SSO claims, and troubleshooting live in the widget installation guide.
vector.
@feedlog/widget behind your auth.