โšก Quick install

Add a single line before </body> on your website:

<script
  src="https://telltab.com/api/widget.js"
  data-site="my-site.com"></script>

That's it. The feedback button appears in the bottom-right corner. No dependencies, no cookies, zero configuration required.

๐ŸŽฏ First feedback

Once the widget is embedded:

โš™๏ธ Widget options

All options are set through data-* attributes on the <script> tag:

AttributeDefaultDescription
data-sitepage hostnameSite identifier (used to filter feedback per project)
data-langfrWidget language: fr or en
data-color#4F46E5Main color of the button and accents (hex)
data-positionbottom-rightPosition: bottom-right, bottom-left, top-right, top-left
data-useremptyLogged-in user identifier (e.g. ID or email) โ€” used to know who submitted the feedback
data-site-tokenemptySite authentication token (optional, for secured configurations)
data-offset-x20Horizontal offset in px from the edge (left or right depending on data-position)
data-offset-y20Vertical offset in px from the edge (top or bottom depending on data-position)

๐Ÿท๏ธ Categories

The widget ships with 5 standard categories to classify feedback:

๐ŸŒ Languages

<!-- Widget in French (default) -->
<script src="https://telltab.com/api/widget.js"
  data-site="my-site.com"
  data-lang="fr"></script>

<!-- Widget in English -->
<script src="https://telltab.com/api/widget.js"
  data-site="my-site.com"
  data-lang="en"></script>

The language affects every UI string as well as voice recognition (fr-FR or en-US).

๐ŸŽจ Appearance

<script
  src="https://telltab.com/api/widget.js"
  data-site="my-site.com"
  data-color="#E11D48"        <!-- red -->
  data-position="bottom-left"  <!-- bottom-left corner -->
></script>

๐Ÿ“„ HTML integration

<!DOCTYPE html>
<html>
  <body>
    <!-- Your content -->

    <!-- Telltab widget โ€” just before </body> -->
    <script
      src="https://telltab.com/api/widget.js"
      data-site="my-site.com"
      data-lang="en"
      data-color="#4F46E5"
      data-position="bottom-right"></script>
  </body>
</html>

โš›๏ธ React / Next.js

// components/TelltabWidget.tsx
import Script from 'next/script'

export default function TelltabWidget() {
  return (
    <Script
      src="https://telltab.com/api/widget.js"
      data-site={process.env.NEXT_PUBLIC_SITE_ID}
      data-lang="en"
      data-color="#4F46E5"
      data-user={session?.user?.email ?? ''}
      strategy="lazyOnload"
    />
  )
}

Mount the component in your root layout (app/layout.tsx or _app.tsx). The data-user attribute ties each feedback to the logged-in user.

๐Ÿ’š Vue.js

// main.js or App.vue (mounted hook)
mounted() {
  const script = document.createElement('script')
  script.src = 'https://telltab.com/api/widget.js'
  script.setAttribute('data-site', 'my-site.com')
  script.setAttribute('data-lang', 'en')
  script.setAttribute('data-color', '#4F46E5')
  document.body.appendChild(script)
}

๐Ÿ–ฅ๏ธ Admin dashboard

The dashboard is available at:

https://telltab.com/admin

Sign in with your access token. The token is provided by the Telltab administrator.

Available features:

The dashboard automatically detects your browser language (FR or EN).

๐Ÿ”” Email notifications

Telltab automatically sends an email for every feedback with High or Critical priority. Configuration in .env:

NOTIFY_EMAIL=you@email.com
SMTP_HOST=your-smtp-server
SMTP_PORT=587
SMTP_USER=noreply@your-domain.com
SMTP_PASSWORD=password
SMTP_TLS=true   # false for internal relay without STARTTLS

๐Ÿ”— Webhooks

Receive every new feedback in Slack, n8n, or any webhook-compatible service:

SITE_WEBHOOKS={"my-site.com":"https://hooks.slack.com/services/xxx","other-site":"https://n8n.xxx/webhook/yyy"}

Payload sent:

{
  "id": 42,
  "site": "my-site.com",
  "category": "bug",
  "priority": "critical",
  "message": "Crash on startup on Safari",
  "created_at": 1744143600,
  "dashboard_url": "https://telltab.com"
}

๐Ÿ“ฅ CSV export

Export all your feedback (with optional filters) through the API:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://telltab.com/api/feedback/export?site=my-site.com" \
  -o feedbacks.csv

Supported parameters: site, category, status, date_from (YYYY-MM-DD), date_to, search.

๐Ÿ”Œ REST API

All admin endpoints require the Authorization: Bearer TOKEN header.

MethodEndpointDescription
GET/api/feedbackList feedback (filters: site, category, status, search, date_from, date_to, limit, offset)
GET/api/feedback/statsGlobal statistics
PATCH/api/feedback/{id}Update status, priority or reply
DELETE/api/feedback/{id}Delete a feedback
DELETE/api/feedback/bulkBulk delete (body: {"ids": [1,2,3]})
GET/api/feedback/exportCSV export (same filters as list)
GET/api/feedback/statsStats per category and per site
GET/api/admin/weekly-summaryWeekly AI summary (VPN only)

๐ŸŽ™๏ธ Voice feedback

The widget includes a dictation mode with automatic transcription. The user clicks "Dictate", speaks, then submits. The transcription runs server-side and is stored with the feedback.

Compatibility: Chrome, Edge, Safari 15+. Firefox partially supported. Real-time speech recognition (SpeechRecognition) requires HTTPS.

๐Ÿ› Enriched bug mode

When the Bug category is selected, the widget automatically captures:

A ๐Ÿ“ท button also lets the user capture a screenshot of the page at the time of the bug (html2canvas technology, loaded on demand).

๐Ÿค– Weekly AI summary

Get an intelligent summary of the week's feedback:

curl -H "X-Forwarded-For: 100.x.x.x" \  # from Tailscale VPN
  "http://172.20.0.107:3000/api/admin/weekly-summary"

The summary identifies recurring themes, critical bugs and suggests a priority action recommendation. Requires the LITELLM_URL environment variable to be configured.