Skip to main content

Configuration

Feedback widget

Thumbs + reason radios at the bottom of every docs page. Submissions flow into the analytics dashboard and optionally open GitHub issues.

Every docs page renders a feedback block under the "Last updated" line:

  1. Collapsed state — the prompt (default "Was this page helpful?") plus Yes / No thumbs.

  2. Expanded state (after picking a thumb) — a radio list of reasons, an optional comment field for "Something else", and Cancel / Submit feedback buttons.

  3. Submitted state — a single line of confirmation: "Thanks for your feedback".

Submissions land in two places:

  • page_feedback table — the triage backlog (rating, reason, comment, status).

  • page_events table — a feedback_up / feedback_down event so the Analytics dashboard totals stay consistent without joins.

The widget at the bottom of every docs page

Triage dashboard

Dashboard → your project → sidebar → Feedback

The Feedback page renders the full page_feedback backlog (up to 200 rows per request) with a status tab filter (Open / Resolved / Dismissed / All), a rating dropdown (All / Thumbs up / Thumbs down), and counts. Each row shows:

  • Rating icon, status pill, timestamp, page path.

  • Reason key (when selected) + free-text comment (when provided).

  • Linked issue URL (when GitHub auto-issue created one).

Row actions:

  • Resolve — marks the feedback done, stamps resolved_at, hides from Open.

  • Dismiss — marks as noise, hides from Open.

  • Reopen — reopens a resolved / dismissed row and clears resolved_at.

Transitions hit PATCH /api/v1/projects/:projectId/feedback/:feedbackId with the new status.

Bots (GPTBot, ClaudeBot, PerplexityBot, Googlebot, Bingbot, generic crawlers) are dropped silently — thumbs from a scraper isn't signal.

Configure from the dashboard

Dashboard → your project → Editor → Configurations → AI & Advanced → Feedback widget

The panel has four controls:

  • Enable — toggle the widget on or off for this tenant.

  • Prompt — override the default "Was this page helpful?" text. Leave empty for the default.

  • Auto-open GitHub issue on negative feedback — when on, a thumbs-down with a comment opens an issue on the connected managed repo. Requires the project to have a PAT / GitHub App installation linked.

  • Issue labels — comma-separated labels applied to auto-opened issues. Default: docs-feedback.

Reason options (the radio lists shown after Yes / No) are still customizable, but currently only by hand-editing nookdocs.config.json#feedback.positiveReasons and negativeReasons. See below.

Config reference

feedback.enabledbooleandefault: true

Toggle the widget per tenant. When false, no "Was this helpful?" block renders.

feedback.promptstring

Override the top prompt. Default: "Was this page helpful?".

feedback.positiveReasonsArray<{id, label}>

Radio options shown after Yes. Each entry has a stable id (written to page_feedback.reason, so don't rename these once you ship) and a display label.

feedback.negativeReasonsArray<{id, label}>

Radio options shown after No. Use this to surface your team's own improvement themes.

feedback.github.autoIssuebooleandefault: false

Open a GitHub issue when a thumbs-down submission carries a non-empty comment. Requires a connected managed repo.

feedback.github.labelsstring[]default: ["docs-feedback"]

Labels attached to auto-opened issues.

Defaults

When feedback.positiveReasons / negativeReasons are omitted, the widget uses these:

Yes — Glad it landed. What worked?

  • Solved what I opened it for

  • Examples matched my actual use case

  • Easy to scan and skim

  • Depth and tone felt right

  • Something else

No — Got it. What would have helped?

  • Needs a runnable code sample

  • Missing context I had to guess at

  • Too much jargon for my level

  • Feels out of date with the product

  • Something else

Picking Something else reveals a free-text comment field (2000 char cap).

Example — custom reasons

{
  "feedback": {
    "enabled": true,
    "prompt": "Was this guide clear?",
    "positiveReasons": [
      { "id": "clear-example", "label": "The example matched my use case" },
      { "id": "complete", "label": "All the information was there" },
      { "id": "something-else", "label": "Something else" }
    ],
    "negativeReasons": [
      { "id": "missing-example", "label": "Needs a code example for my language" },
      { "id": "outdated", "label": "Content is outdated" },
      { "id": "hard-to-find", "label": "I couldn't find what I was looking for" },
      { "id": "something-else", "label": "Something else" }
    ],
    "github": {
      "autoIssue": true,
      "labels": ["docs-feedback", "triage"]
    }
  }
}

API

POST /api/v1/projects/:projectId/feedback — public ingestion.

{
  "path": "/guides/auth",
  "rating": "up",
  "reason": "easy-to-find",
  "comment": "Great explanation of the OAuth flow.",
  "session_id": "abc123…"
}

Returns 202 Accepted on success. Rate-limit and retention live in the platform's ingestion layer — no client-side tuning required.

Privacy

No IPs, no cookies, no localStorage. The widget reads a per-tab sessionStorage id that the analytics beacon also uses, so one session's view + feedback tie together on the dashboard without tracking anyone across sessions.

Was this page helpful?

Last updated August 7, 2026