Mamtack User Guide
1. Getting Started — From Zero to Feedback in 60 Seconds
Mamtack is a human-in-the-loop feedback tool for AI-generated prototypes and live websites. Pin comments directly to UI elements, let AI tag and triage, then close the feedback-to-code loop from your IDE. One script tag, no build step, real-time collaboration. Feedback stays anchored to the element it references — so nothing gets lost in screenshots or chat threads.
How It Works
- Embed the widget — Add a single script tag to your site.
- Click to comment — Team members click the + button, select an element, and type their feedback.
- Collaborate — Threads, replies, and @mentions keep the conversation in context.
- Triage — AI tagging, assignment, and issue-tracker integrations turn feedback into action.
Embedding the Widget
Add this script tag before the closing </body> tag on any page:
<script
src="https://unpkg.com/@mamtack/widget@0.3/dist/mamtack.iife.js"
data-project="my-site"
data-key="ww_live_..."
data-theme="auto"
data-position="bottom-right"
></script>
| Attribute | Required | Description |
|---|---|---|
| `src` | Yes | CDN URL for the widget script |
| `data-project` | Yes | Your project slug (visible on your Dashboard site card) |
| `data-key` | No | Your live API key. Omit to run in local-only mode. |
| `data-theme` | No | Color theme: `dark` (default), `light`, or `auto` (follows OS preference). All plans. |
| `data-position` | No | Widget position: `bottom-right` (default) or `bottom-left`. All plans. |
| `data-storage` | No | Set to `local` to force local-only mode (no server sync, even if a key is provided). |
| `data-require-auth` | No | Set to `true` to require verified identity before commenting (alternative to Dashboard toggle). Team+ only. |
| `data-hide-banners` | No | Set to `true` to suppress promotional/info banners (e.g., local-mode nudge). |
| `data-app-base` | No | Override the base URL for cross-page thread grouping. Only needed for custom routing (hash-based or non-standard paths). |
CDN Versioning
The @0.3 in the URL is a semver alias. Choose the strategy that fits your risk tolerance:
| Version Pattern | Behavior | Best For |
|---|---|---|
| `@0.3` | Auto-updates to latest 0.3.x patch | Most teams — you get bug fixes automatically |
| `@^0.3` | Same as above (caret range) | Equivalent alias |
| `@0.3.0` | Pinned to exact version | Regulated environments needing explicit upgrade control |
Major and minor bumps are never automatic — only patch fixes ship through the alias.
WordPress Plugin
If your site runs on WordPress, you can install the Mamtack plugin instead of editing theme files:
- Download the plugin from the Mamtack website or search "Mamtack" in the WordPress plugin directory.
- Activate the plugin and go to Settings → Mamtack.
- Enter your API key and project name from the Mamtack Dashboard.
- Click Save Changes. The widget loads automatically on all public pages.
| Setting | Description | Default |
|---|---|---|
| API Key | Your live key from the Dashboard | (none) |
| Project | Your project slug from the Dashboard | (none) |
| Update strategy | Auto-update patches (recommended), Pinned, or Always latest | Auto-update patches |
| Widget version | Base version for the update strategy | 0.3.0 |
| Load position | Header places the script in <head> (loads before page renders). Footer places it before </body> (loads after page renders, doesn't block paint). Footer is recommended. | Footer |
| Exclude pages | Comma-separated page/post IDs to skip | (none) |
The plugin injects the widget script tag with the correct data-project, data-key, and data-app-base attributes automatically. Widget theme and position are controlled from the Mamtack Dashboard, not the WordPress settings page.
CSP note: If your site uses a Content Security Policy, add unpkg.com and *.supabase.co to your script-src and connect-src directives.
Local-Only Mode (No API Key)
If you omit data-key, Mamtack runs entirely in your browser using localStorage. This is a great way to try the product without creating an account:
- All threads and comments are stored locally in the browser.
- Data does not sync between team members or devices.
- Server-side features — AI tagging, suggestions, integrations, notifications, and team collaboration — are not available. These require a connected account with an API key.
- A small banner at the bottom of the sidebar nudges you to sign up for full collaboration.
Once you add an API key, existing local threads are not migrated — start fresh with the connected version.
API Key Management
- Sign in to the Mamtack Dashboard at mamtack.com.
- Click your site card, then Copy Key to grab your live key.
- To rotate a compromised key: click Rotate Key, type the site name to confirm, then update the
data-keyattribute on your site.
Rotated keys are invalidated immediately. The widget will show an authentication error until you deploy the new key.
Site Domain
Each site in the Dashboard is tied to a single domain. When you create a site, you specify the domain where the widget will run (e.g., app.example.com). The server enforces this — if the widget loads on a different domain, it displays an error and refuses to sync.
To change the domain, go to your site's settings in the Dashboard and update it. Use this to prevent unauthorized sites from consuming your thread quota. If you need feedback on multiple domains, create a separate site for each one.
FAQ
Q: Does the widget affect my site's performance? A: The script is ~110 KB gzipped, loads asynchronously, and does not block rendering. It has minimal impact on your page load.
Q: Can I use Mamtack on localhost during development?
A: Yes. Set your site's domain to localhost (or localhost:3000, etc.), or use local-only mode with no API key.
Q: What happens if my API key is exposed in a public repo? A: Rotate it immediately from the Dashboard. The domain check provides a second layer of defense — even with a valid key, requests from a different domain are rejected.
2. Feedback Threads & Comments — Pin Feedback Where It Belongs
Mamtack threads are anchored directly to UI elements — not floating in a separate tool. Every comment lives in context, so your team never wastes time asking "which button are you talking about?"
How It Works
- Start a thread — Click the + button in the toolbar, then click any element on the page. A pin appears on that element and the comment form opens.
- Write your feedback — Type your comment. Mention team members with @. Hit Enter to post.
- Reply and discuss — Others see the pin, click it, and reply in-thread. The conversation stays attached to the element.
- Resolve when done — Mark the thread as resolved. The pin fades but remains accessible for reference.
Pin-to-Element Anchoring
When you pin a comment, Mamtack generates a CSS selector for the target element. The pin stays anchored to that selector across page loads.
+-------------------------------+
| [Logo] Nav Nav Nav |
|-------------------------------|
| |
| [ Sign Up Button ] <-- Pin |
| |
| "Button text is confusing" |
| — Sarah, 2 min ago |
+-------------------------------+
Element Fingerprinting
Layouts change. When a selector breaks — because a class was renamed or an element moved — Mamtack falls back to fingerprint matching. It stores a snapshot of the element's characteristics:
| Property | Example |
|---|---|
| Tag | `button` |
| Text content | "Sign Up Free" |
| ARIA role | `button` |
| aria-label | "Create account" |
| CSS classes | `btn-primary`, `cta-main` |
If the original selector fails, Mamtack scans the page for elements matching the fingerprint and repositions the pin automatically. If no match is found, the pin appears in the sidebar with a "could not locate element" notice.
Threaded Replies and @Mentions
Every thread supports unlimited replies. To mention a team member:
- Type
@in the comment box. - An autocomplete dropdown appears with your team members.
- Navigate with arrow keys, press Enter to select.
- The mentioned user receives a notification (email or Slack, depending on their settings).
Resolve and Reopen
- Resolve: The thread owner or any admin can click the checkmark icon to mark a thread resolved. Resolved threads are dimmed on the page and can be hidden from the sidebar.
- Reopen: Click the thread pin or find it in the sidebar, then click "Reopen." The thread returns to active status and notifications resume.
Cross-Page Navigation
The sidebar displays threads from all pages on your site, not just the current one. Threads on other pages show the page path beneath the thread title. Clicking one of these threads navigates your browser to that page and opens the thread.
Deep Links
Every thread has a shareable URL in this format:
https://yoursite.com/page?ww_thread=abc123
Opening a deep link scrolls to the pinned element, opens the sidebar, and highlights the thread. Mamtack uses these links in Slack notifications and email digests so your team can jump straight to the conversation.
3. Sidebar Panel & Search — Find Any Conversation Instantly
The sidebar is your command center for all feedback across your site. It groups threads by page, tracks what you haven't read, and lets you filter down to exactly what needs your attention.
How It Works
- Open the sidebar — Click the Mamtack toolbar button (or the unread badge if new comments exist).
- Browse threads — Threads are grouped by page URL. The current page's group is labeled "(this page)" and appears first.
- Search or filter — Use the search bar to find threads by content, or apply filters for tags, assignees, or status.
- Take action — Click any thread to jump to it, reply, resolve, or assign.
Sidebar Layout
+----------------------------------+
| Mamtack [x] |
| 12 comments in 5 threads |
| (2 resolved) |
|----------------------------------|
| [Search threads...] [filter] |
|----------------------------------|
| /pricing (this page) |
| * "CTA button unclear" - Sam |
| * "Price table needs update" |
|----------------------------------|
| /about |
| * "Hero image too large" |
| * "Typo in paragraph 2" |
|----------------------------------|
| /contact |
| * "Form submits twice" [!] |
+----------------------------------+
Stats Header
The top of the sidebar shows a summary line:
12 comments in 5 threads (2 resolved)
This updates in real time as your team adds, resolves, or deletes threads.
Real-Time Search
The search bar filters threads by comment content as you type:
- Case-insensitive matching across all comment text in all threads.
- Results update instantly — no need to press Enter.
- Click the X button to clear the search and return to the full list.
- If nothing matches, the sidebar shows a "No results for [query]" empty state.
Unread Tracking
Mamtack tracks which threads and comments you have not yet seen:
| Indicator | Location | Meaning |
|---|---|---|
| Badge with count | Toolbar button | Total unread comments across all threads |
| Bold thread title | Sidebar list | Thread contains unread comments |
| Dot indicator | Pin on page | That pin's thread has new replies |
Viewing a thread marks all its comments as read.
Hide Resolved Toggle
Click the filter icon in the sidebar header to toggle resolved threads on or off. When hidden:
- Resolved threads disappear from the list and their pins fade to near-invisible.
- The stats header still counts them ("2 resolved") so you know they exist.
- Toggle again to bring them back.
Filters
Beyond search, the sidebar supports structured filters:
| Filter | Description |
|---|---|
| By tag | Show only threads with a specific AI-generated or manual tag (e.g., "Bug", "UX", "Copy") |
| Assigned to me | Show threads assigned to your account |
| Flagged for Fix | Show threads marked for developer action |
Filters combine with search — you can search within filtered results. Active filters show a colored indicator on the filter button.
FAQ
Q: Does search look at thread titles or just comments? A: Search matches against all comment text within threads. Thread titles (the first comment) are included.
Q: Can I sort threads by date instead of grouping by page? A: Not currently — threads are always grouped by page URL with most-recently-active groups first within each page.
4. Identity & Authentication — Know Who's Talking
OAuth and Email OTP require the Pro plan or above. "Require Verified Identity" requires Team plan or above.
Mamtack supports multiple identity levels so you can balance ease-of-use with accountability. Start with display names for quick feedback, then layer in verification as your team grows.
How It Works
- Guest commenting — Anyone types a display name and starts posting immediately. No sign-up required.
- Verified sign-in — Commenters authenticate via Google, GitHub, or email code to prove their identity.
- Enforce verification — Admins can require all commenters to sign in before posting.
Identity Levels
| Level | How It Works | Verified Badge | Plan |
|---|---|---|---|
| Display name (guest) | Type any name in the comment form | No | Free |
| Google OAuth | Click "Sign in with Google" | Yes | Pro+ |
| GitHub OAuth | Click "Sign in with GitHub" | Yes | Pro+ |
| Email OTP | Enter email, receive 6-digit code, verify | Yes | Pro+ |
Verified Badge
When a commenter authenticates through OAuth or Email OTP, their comments and pins display a checkmark badge next to their name. This tells your team at a glance which feedback comes from a verified identity versus a guest display name.
+----------------------------------+
| Sam Chen [checkmark] |
| "The hover state is wrong here" |
| 2 min ago · Reply |
|----------------------------------|
| visitor-42 |
| "Looks good to me" |
| 5 min ago · Reply |
+----------------------------------+
Email OTP Flow
For teams that want verification without requiring third-party accounts:
- Commenter clicks "Sign in" and selects "Email."
- They enter their email address.
- Mamtack sends a 6-digit code to that address.
- They enter the code in the widget — verified. No password created or stored.
Codes expire after 10 minutes. The session persists until the browser is cleared or the user signs out.
Require Verified Identity (Team+)
For teams that need full accountability on every comment:
- Go to the Mamtack Dashboard.
- Navigate to your site's settings under Dashboard > General.
- Toggle Require Verified Identity to on.
When enabled:
- The widget's comment form is locked until the user signs in.
- The sign-in prompt appears when anyone clicks the + button or tries to reply.
- Guest display names are no longer accepted.
- Existing guest comments remain visible but are labeled "Unverified."
Setup
- Free tier — No setup needed. Guest display names work out of the box.
- Enable OAuth (Pro+) — Go to Dashboard > General > Identity Providers and toggle Google and/or GitHub on. No client ID configuration required — Mamtack handles the OAuth flow.
- Enable Email OTP (Pro+) — Toggle "Email verification" in the same section. Mamtack sends codes from
noreply@mamtack.com. - Require sign-in (Team+) — Toggle "Require Verified Identity" under Dashboard > General.
FAQ
Q: Can guests still view threads if "Require Verified Identity" is enabled? A: Yes. Anyone can view the sidebar, read threads, and see pins. The restriction only applies to posting new comments and replies.
Q: What if a team member uses different emails for Google and Email OTP? A: Each sign-in method creates a separate identity. To consolidate, team members should use the same email across providers.
Q: Are OAuth tokens stored in the widget? A: No. Authentication is handled server-side. The widget receives a session token — no OAuth credentials are stored in the browser.
5. Content Moderation — Keep Conversations Productive
Banning users requires the Team plan or above.
When feedback threads grow, you need tools to manage noise, remove inappropriate content, and keep bad actors out. Mamtack gives admins fine-grained control without disrupting the experience for everyone else.
How It Works
- Moderate individual comments — Hide or delete specific comments from the kebab menu.
- Moderate entire threads — Hide or delete a thread and all its replies at once.
- Ban disruptive users — Block a user from posting across your entire site.
Admin Kebab Menu
Every thread and comment shows a three-dot menu (kebab menu) for admins. The available actions depend on context:
+----------------------------------+
| visitor-99 |
| "This is spam content" |
| 3 min ago · Reply [...] |
| |--------|
| | Hide |
| | Delete |
| | Ban |
| |--------|
+----------------------------------+
Non-admin users see a simpler menu (report only). Admin actions are only visible to team members with the Admin role.
Hide / Unhide
Hiding is a soft action — content is suppressed but not destroyed.
| Who | What They See |
|---|---|
| Non-admin users | "This comment was hidden by a moderator." (no content visible) |
| Admin users | The full comment with a "Hidden by moderator" label and an **Unhide** button |
Use hiding when content is off-topic or unhelpful but doesn't warrant deletion. You can unhide at any time to restore visibility.
Hiding works on both individual comments and entire threads. When a thread is hidden, all its comments are hidden from non-admins, and the pin disappears from the page for non-admin viewers.
Delete
Deletion is a soft-delete with a confirmation step:
- Click the kebab menu on a comment or thread.
- Select Delete.
- A confirmation modal appears: "Delete this comment? This cannot be undone."
- Confirm to delete.
Important behaviors:
- Deleting the last comment in a thread deletes the entire thread (including its pin).
- Deleted threads free up your thread quota immediately.
- Deleted content is retained server-side for 30 days (for compliance), then permanently purged.
Ban / Block Users (Team+)
When a user is persistently disruptive, banning removes their ability to post:
- Open the kebab menu on any comment by that user.
- Select Ban.
- Confirm in the modal.
What happens after a ban:
| Aspect | Behavior |
|---|---|
| Posting | Banned user sees a banner: "You have been banned from commenting on this site." |
| Reading | They can still view all threads and comments (read-only) |
| Existing comments | Remain visible unless individually hidden or deleted |
| Scope | Site-wide — applies across all pages for that site |
Managing Banned Users
To view or unban users:
- Go to the Mamtack Dashboard.
- Open your site settings and navigate to the Team tab.
- Scroll to the Banned Members list.
- Click Unban next to any user to restore their posting ability.
Unbanning takes effect immediately — the user can post again on their next page load.
FAQ
Q: Can I hide a single reply without hiding the whole thread? A: Yes. Each comment has its own kebab menu. Hiding one reply leaves the rest of the thread visible.
Q: What happens to pins when a thread is deleted? A: The pin is removed from the page immediately. Other users will no longer see it.
Q: Does banning notify the user? A: Not directly via email or push notification. They discover the ban the next time they try to post — the widget displays the ban banner at that point.
Q: Can a banned user still sign in? A: Yes, they can still authenticate. The ban only prevents posting new comments and replies.
6. Thread Assignment — Route Feedback to the Right Person
Requires: Team plan or higher
When multiple people review feedback, things fall through the cracks. Thread assignment gives admins and owners a way to route threads to specific team members, so every piece of feedback has a clear owner.
How It Works
- Admin assigns — Open the thread's kebab menu and choose an assignment action. The thread is routed to the selected team member.
- Assignee is notified — The assigned member receives an in-widget toast, an email, and a Slack message (if configured). The thread card displays an assignee badge.
- Filter by assignment — Use the "Assigned to me" filter in the sidebar to see only your threads.
- Reassign or unassign — Ownership can shift as priorities change. Admins can reassign or unassign at any time.
Kebab Menu Actions
Open the three-dot menu on any thread to see assignment options:
+-------------------------------+
| Assign to me |
| Assign to... > picker |
| Reassign... > picker |
| Unassign |
+-------------------------------+
| Action | When it appears | What it does |
|---|---|---|
| **Assign to me** | Thread is unassigned | Claims the thread for yourself |
| **Assign to...** | Thread is unassigned | Opens the assignee picker to choose a team member |
| **Reassign...** | Thread is already assigned | Opens the assignee picker to transfer ownership |
| **Unassign** | Thread is already assigned | Removes the current assignee |
Only admins and site owners can assign threads. Regular members can view assignments but cannot change them.
Assignee Picker
The assignee picker is a keyboard-navigable list of all non-banned site members. Start typing a name to filter, use arrow keys to navigate, and press Enter to confirm.
+---------------------------+
| Assign to... |
| +------------------------+|
| | Search members... ||
| +------------------------+|
| > Sarah Chen |
| Marcus Rodriguez |
| Priya Patel |
| James Kim |
+---------------------------+
Banned users do not appear in the picker.
Assignee Badge
Once assigned, the thread card in the sidebar displays a badge with the assignee's name. This makes it easy to scan the thread list and see who owns what.
+--------------------------------------+
| "Button color is wrong" |
| bug ux Sarah Chen <- |
| Page: /checkout 2 comments |
+--------------------------------------+
Filtering by Assignment
The sidebar filter menu includes an Assigned to me option. When active, only threads assigned to you appear in the list — everything else is hidden. This is the fastest way to find your open work.
Notifications
When a thread is assigned or reassigned, the assignee is notified through all configured channels:
| Channel | Behavior |
|---|---|
| **In-widget toast** | Appears immediately in the widget (real-time) |
| **Email** | Sent to the assignee's registered email address |
| **Slack** | Posted to the project's Slack channel (if the Slack integration is configured) |
Notifications include the thread title, who assigned it, and a deep link to open the thread directly.
FAQ
Q: Can a thread be assigned to multiple people? A: No. Each thread has at most one assignee. If multiple people need to collaborate, use @mentions in comments and assign to the primary owner.
Q: What happens when I unassign a thread? A: The assignee badge is removed and the thread returns to the unassigned pool. No notification is sent for unassignment.
Q: Can non-admin members assign threads? A: No. Only admins and site owners have permission to assign, reassign, or unassign threads.
7. AI Tagging & Suggestions — Let AI Classify and Analyze Feedback
Feature availability varies by plan — see details below.
Manually sorting feedback is slow and inconsistent. Mamtack's AI layer automatically tags every thread by category, then offers deeper analysis on demand. You get consistent classification without the overhead, and your team can focus on acting instead of triaging.
AI Auto-Tagging
Included on all plans (requires API key — not available in local-only mode)
Every new thread is automatically classified by Mamtack's AI. Tags are applied within seconds of submission — no manual step required.
Default tag taxonomy:
| Tag | Description |
|---|---|
| `bug` | Something is broken or behaving incorrectly |
| `ux` | Usability issue or interaction friction |
| `performance` | Slow load times, jank, or resource issues |
| `accessibility` | Barrier to access for users with disabilities |
| `content` | Typo, copy issue, or misleading text |
| `urgent` | High-severity issue needing immediate attention |
| `rfe` | Request for enhancement — a feature suggestion |
Confidence scores: Each AI-applied tag includes a confidence score. High-confidence tags appear with standard styling. Low-confidence tags are shown with a trailing ? (e.g., performance?) to signal that they may need human review.
+------------------------------------------+
| "Checkout crashes on Safari" |
| |
| [bug] [urgent] [performance?] |
| ^-- confirmed ^-- low-confidence |
+------------------------------------------+
Tag Management
Admins can edit tags on any thread using the tag edit modal. Open it from the thread detail view or the kebab menu.
| Action | What it does |
|---|---|
| **Add tag** | Manually apply any tag from the taxonomy |
| **Remove tag** | Remove an AI-applied or manual tag |
| **Approve** | Promote a low-confidence AI tag to confirmed status |
Approving a tag upgrades it from the low-confidence visual style to a standard tag. This is useful when the AI got it right but wasn't confident enough to commit.
Customizing the Tag Taxonomy
Go to Dashboard > AI to manage your tag taxonomy. You can:
- Add custom tags that match your team's workflow (e.g.,
design-system,i18n,legal) - Remove default tags you don't use
- Set display order and colors
The AI uses your custom taxonomy when classifying new threads.
Tag-Based Filtering
The sidebar filter menu includes a tag filter. Select one or more tags to narrow the thread list — for example, show only bug + urgent threads to focus on critical issues.
AI Suggestions
Requires: Pro plan or higher
For deeper analysis, open the kebab menu on any thread and choose Ask AI for suggestion. Mamtack's AI reads the full thread — all comments, tags, element context, and page URL — and posts an analysis comment containing:
- Summary — A concise description of the issue
- Key points — The main observations from the discussion
- Suggested action items — Concrete next steps for your team
- Complexity estimate — How much effort a fix likely requires (low / medium / high)
- Conflict detection — Flags when commenters disagree, so you don't miss dissenting opinions
The suggestion appears as a special AI comment in the thread, visible to all team members.
Bring Your Own Key (BYOK)
Available on all plans
By default, Mamtack uses its own AI infrastructure. If you prefer to use your own API keys — for cost control, compliance, or model preference — configure BYOK in Dashboard > AI.
Supported providers:
| Provider | Models |
|---|---|
| **Google Gemini** | Gemini Pro, Gemini Flash |
| **OpenAI** | GPT-4o, GPT-4o mini |
| **Anthropic** | Claude Sonnet, Claude Haiku |
Setup:
- Go to Dashboard > AI.
- Select a provider and paste your API key.
- Choose a model tier: Fast (cheaper, lower latency) or Smart (higher quality, slightly slower).
- Click Save. Mamtack validates the key immediately.
Health monitoring: Mamtack checks your key's health on every AI call. If your key fails three consecutive times (expired, quota exceeded, invalid), the system automatically falls back to Mamtack's built-in AI and notifies you in the Dashboard. Re-enter a valid key to switch back.
FAQ
Q: Can I disable AI tagging entirely? A: Yes. Go to Dashboard > AI and toggle off auto-tagging. Threads will no longer receive automatic tags, but you can still tag manually.
Q: Are my threads sent to third-party AI providers? A: Only if you configure BYOK. By default, Mamtack uses its own hosted models. Thread content is never used for model training.
Q: What happens if the AI tags something incorrectly? A: Remove the incorrect tag and add the right one. Over time, the AI improves from your team's corrections across the platform.
8. Flag for Fix — Turn Feedback into Code Changes
Requires: Team plan or higher
Flag for Fix bridges the gap between product feedback and code. When a thread has been discussed and the fix is clear, an admin flags it — and a developer picks it up directly in their IDE using MCP. No copy-pasting feedback, no context-switching. The developer's IDE AI reads the full thread context (comments, tags, element selector, admin notes) and generates a real fix against the actual codebase.
How It Works
- Admin flags a thread — Open the kebab menu and click "Flag for Fix." The thread card shows a badge and notifications go out.
- Developer pulls context via MCP — In their IDE, the developer asks for flagged threads and the MCP server returns full context.
- IDE AI generates the fix — With thread context plus source code, the AI produces a concrete code change.
- Fix is applied and reported — The MCP tool marks the fix as applied, posts a summary comment on the thread, and resolves it automatically.
Admin reviews thread -> Flags for fix -> Developer sees it in IDE -> Fix applied automatically
(widget) (widget) (MCP) (MCP + IDE AI)
Step 1: Admin Flags a Thread
Open the thread's kebab menu and click Flag for Fix.
+-------------------------------+
| Ask AI for suggestion |
| Flag for Fix <- Team+ |
| Assign to... |
| Delete thread |
+-------------------------------+
The thread card updates with a Flagged for Fix badge. If Jira, Linear, or GitHub Issues is connected, an issue is auto-created. Connected developers receive an email or Slack notification.
To cancel, open the same menu and click Un-flag.
Step 2: Developer Pulls Context via MCP
In their IDE (Cursor, Claude Code, VS Code + Copilot, etc.), the developer asks:
"Show me Mamtack threads flagged for fix"
The IDE calls list_flagged_threads via MCP, returning all flagged threads with their tags, comments, and who flagged them.
The developer picks a thread:
"Show me the button color thread and fix it"
The IDE calls get_fix_context, which returns:
- All comments and discussion history
- The CSS selector and page URL where the element lives
- AI-generated tags and suggestions
- The admin's decision (extracted from their comments)
- Links to related Jira/Linear/GitHub issues
With this context plus the actual source code open in the IDE, the AI generates a concrete fix.
Step 3: IDE AI Generates the Fix
The IDE AI now has two things no external tool can match: the full feedback context from Mamtack and the actual source code. It uses both to produce a concrete code change — real file paths, real imports, real design tokens.
For example, if the feedback says "the submit button color is wrong," the AI can:
- Read the thread's CSS selector to locate the exact element
- Find the corresponding component file in the codebase
- Check the project's design token definitions
- Generate a targeted fix that uses existing patterns
The developer reviews the proposed changes, adjusts if needed, and applies them. No copy-pasting from a browser, no guessing which file to edit.
Step 4: Fix Is Applied and Reported Back
After the developer applies the fix, the IDE automatically calls mark_fix_applied. This:
- Posts a rich "Fix Applied" comment on the thread with file-level details
- Resolves the thread
- Posts a "Fix Applied" comment on any linked Jira, Linear, or GitHub issues — automatically
- Fires a
thread.fix_appliedwebhook event
The tracker commenting is best-effort: if one tracker fails (e.g., an expired token), the fix is still applied and the other trackers still receive their comments. The MCP response includes a tracker_updates field showing the status per tracker.
No manual "mark as done" step — the fix-mamtack-thread MCP Prompt orchestrates the full cycle.
+--------------------------------------------------+
| Mamtack -- Fix Applied |
| |
| Fixed by: John via MCP |
| Commit: a3f9b2c |
| Note: "Changed to brand-blue, added hover state" |
| |
| src/components/Button.tsx |
| Updated button color to use design system token |
| Before: <button className="bg-red-500"> |
| After: <button className="bg-blue-600"> |
+--------------------------------------------------+
The same comment (with before/after diffs) is automatically posted to linked issue trackers:
| Tracker | Comment format | Token refresh |
|---|---|---|
| **Jira** | Atlassian Document Format (ADF) | Automatic via OAuth refresh |
| **Linear** | Markdown (native) | Automatic via OAuth refresh |
| **GitHub** | Markdown (native) | No refresh needed (tokens don't expire) |
If no tracker is linked for a thread, the step is silently skipped — no error, no extra action needed.
Setting Up MCP
Flag for Fix requires the Mamtack MCP server. Setup takes under five minutes:
Generate a token — Go to Dashboard > AI > MCP and create a token. Add your email to receive flag notifications.
Connect your IDE — Add the Mamtack MCP server to your IDE configuration:
Cursor (
.cursor/mcp.json):{ "mcpServers": { "mamtack": { "url": "https://mcp.mamtack.com/mcp", "headers": { "Authorization": "Bearer mcp_YOUR_TOKEN_HERE" } } } }Claude Code:
claude mcp add mamtack \ --transport http \ --url https://mcp.mamtack.com/mcp \ --header "Authorization: Bearer mcp_YOUR_TOKEN_HERE"VS Code (
.vscode/mcp.json):{ "servers": { "mamtack": { "type": "http", "url": "https://mcp.mamtack.com/mcp", "headers": { "Authorization": "Bearer mcp_YOUR_TOKEN_HERE" } } } }Use the prompt — In your IDE, invoke the
fix-mamtack-threadprompt to run the full workflow in one conversation.
IDE rule (optional): Add this to your project's IDE configuration file to automate reporting:
When fixing a Mamtack thread, always call mark_fix_applied after applying changes. Include the commit SHA, a short note, and a changes array listing each modified file.
Notifications
When a thread is flagged, developers are notified through configured channels:
| Channel | Who receives it | Setup required |
|---|---|---|
| **Email** | MCP token holders with an email address | Add email when generating MCP token |
| **Slack** | Everyone in the project's Slack channel | Configure Slack integration |
| **Issue tracker** | Assigned/watching developers | Jira, Linear, or GitHub Issues integration |
| **Webhook** | External systems | Configure outbound webhook endpoint |
Tip: Enable mcp_require_email in your project settings to ensure all MCP token holders provide an email. This guarantees direct notifications when threads are flagged.
The email field supports multiple comma-separated addresses (e.g., john@co.com, jane@co.com) for shared team tokens.
Webhook Events
Three webhook events are available for Flag for Fix:
| Event | Fires when |
|---|---|
| `thread.flagged_for_fix` | Admin flags a thread |
| `thread.unflagged` | Admin un-flags a thread |
| `thread.fix_applied` | Developer marks a fix as applied via MCP |
Event payloads follow the same structure as other thread events and include the full thread object with ai_fix_status, flagged_at, and flagged_by fields.
Filtering Flagged Threads
The sidebar filter menu includes a Flagged for Fix option to show only threads waiting for a developer to pick up. This helps admins track which flagged threads have been addressed and which are still pending.
Reopen and Re-flag
If a fix doesn't fully resolve the issue:
- Admin reopens the thread.
- Admin flags it again.
- Developer sees the prior "Fix Applied" note in the context, so the IDE AI knows what was already tried and can generate a targeted follow-up fix.
FAQ
Q: Does Mamtack generate the code fix? A: No. Mamtack collects and routes feedback. The developer's IDE AI generates the fix — it has access to the actual source code, design tokens, framework config, and type definitions. This produces better fixes than any backend could generate without repo access.
Q: What if we don't use MCP-compatible IDEs? A: Flag for Fix still works for triage — the badge and filter help admins track actionable threads. Developers can read the thread context manually via the widget or issue tracker. The automated MCP workflow is a bonus, not a requirement.
Q: Can I flag threads without an issue tracker? A: Yes. Issue auto-creation is optional. The flag, badge, MCP tools, and notifications all work independently.
Q: What plan do I need? A: Team or Enterprise. Flag for Fix depends on MCP, which is also Team+.
Q: Do developers need to manually mark threads as fixed?
A: No, if they use the fix-mamtack-thread MCP Prompt or have an IDE rule configured. The prompt chains the full workflow: list, context, fix, mark applied. The reporting step is automatic.
9. Issue Tracker Integrations — Smart Issue Routing
Requires: Pro plan or higher
Feedback threads are valuable, but your development team lives in their issue tracker. Mamtack connects to the tools your team already uses, so issues are created automatically — with full context, deep links, and bidirectional badges.
Smart Issue Routing
When an issue tracker integration is active, Mamtack's AI works alongside it to route feedback intelligently:
- Tag-aware routing — AI auto-tags every thread (bug, UX, content, etc.). When tag-triggered mode is enabled, matching tags automatically create issues in the connected tracker — no manual step required.
- Rich ticket content — Created issues include the full thread discussion, element CSS selector, page URL, AI tags, and a deep link back to the thread. Developers get complete context without leaving their tracker.
- Multi-tracker support — Connect Jira, Linear, and GitHub Issues simultaneously. A single thread can create issues in multiple trackers, each with native formatting (ADF for Jira, Markdown for Linear and GitHub).
- Fix-Applied comments — When a developer marks a fix as applied via MCP, Mamtack automatically posts a "Fix Applied" comment (with before/after diffs) on the linked Jira, Linear, or GitHub issue.
Supported Trackers
| Tracker | Badge format | Example |
|---|---|---|
| **Jira Cloud** | Project key + number | `PROJ-123` |
| **Linear** | Team prefix + number | `LIN-456` |
| **GitHub Issues** | Hash + number | `#42` |
Setup
- Go to Dashboard > Integrations and select your tracker.
- Click Connect to authorize via OAuth. You will be redirected to your tracker's login page.
- Map your Mamtack project to the target project, team, or repository in the tracker.
- Choose an auto-create mode (see below).
- Click Save.
Auto-Create Modes
Choose how and when issues are created from feedback threads:
| Mode | How it works | Best for |
|---|---|---|
| **Manual** | Admin clicks "Create [Tracker] Issue" from the thread's kebab menu | Teams that want full control over what becomes an issue |
| **Tag-triggered** | An issue is auto-created when a thread's AI tags match your configured trigger tags (e.g., any thread tagged `bug` creates a Jira issue) | Balanced automation — only high-signal threads become issues |
| **Immediate** | Every new thread automatically creates an issue | Teams that want a 1:1 record of all feedback in their tracker |
You can change modes at any time in Dashboard > Integrations without losing existing issue links.
Issue Content
Created issues include rich context from the Mamtack thread:
- Thread content and all comments
- Element CSS selector and page URL
- AI tags applied to the thread
- A deep link back to the thread in Mamtack
This means developers see the full discussion, know exactly where the element is on the page, and can click through to the original thread for follow-up.
+------------------------------------------+
| PROJ-123: Button color is wrong |
|------------------------------------------|
| Reported via Mamtack |
| |
| Thread: "The sign-up button should be |
| blue, not red" |
| |
| Page: https://app.example.com/signup |
| Element: button.cta-primary |
| Tags: bug, ux |
| |
| View in Mamtack: |
| https://app.example.com/signup?ww_thread |
| =abc123 |
+------------------------------------------+
Issue Badges
Once an issue is created, the thread card in Mamtack's sidebar displays a clickable badge linking to the issue. Click the badge to open the issue directly in your tracker.
+------------------------------------------+
| "Button color is wrong" |
| bug ux [PROJ-123] <-|
| Page: /signup 2 comments |
+------------------------------------------+
clickable badge -------^
Multiple Trackers
You can connect more than one tracker to the same project. For example, your product team might use Jira while your engineering team uses Linear. Both integrations run independently — a single thread can have issue badges from multiple trackers simultaneously.
FAQ
Q: Can I change which project or repo issues are created in? A: Yes. Update the mapping in Dashboard > Integrations at any time. Existing issues are not moved — only new issues use the updated mapping.
Q: What happens if I disconnect a tracker? A: Existing issue badges remain on thread cards as static text, but clicking them may not work if the tracker no longer recognizes the OAuth connection. No new issues will be created.
Q: Do issue status changes sync back to Mamtack? A: Not currently. Closing an issue in your tracker does not automatically resolve the Mamtack thread. This is on the roadmap.
Q: Which Jira project types are supported? A: Jira Cloud company-managed and team-managed projects are both supported. Jira Server and Data Center are not supported at this time.
10. Notifications & Communication — Stay in the Loop
Feedback is only useful if the right people see it. Mamtack delivers notifications through three channels — in-widget toasts, email, and Slack — so your team stays informed without constantly checking the sidebar.
In-Widget Toasts and Browser Notifications
Mamtack shows real-time toast notifications inside the widget for key events: new comments on threads you participated in, assignments, flags, and @mentions.
For notifications when you're not looking at the widget, click the bell icon in the toolbar to opt in to browser desktop notifications. Once enabled, you receive system-level alerts for:
- New comments on threads you created or replied to
- @mentions in any thread
- Threads assigned to you
+-------------------------------------+
| Mamtack - yoursite.com |
| Sarah mentioned you in "Button |
| color is wrong" |
| [View Thread] |
+-------------------------------------+
Toast messages also appear for operational events — assignment changes, flag-for-fix updates, and issue creation — keeping admins aware of triage activity without refreshing.
Email Notifications
Requires: Pro plan or higher
Configure email notifications in Dashboard > Integrations > Email. Add up to 10 recipient email addresses and choose which events trigger emails.
Supported events:
| Event | Description |
|---|---|
| **Thread created** | A new feedback thread is submitted |
| **Comment added** | A reply is posted to any thread |
| **Thread resolved** | A thread is marked as resolved |
| **Thread reopened** | A resolved thread is reopened |
| **Thread assigned** | A thread is assigned or reassigned |
Delivery options:
| Mode | Behavior |
|---|---|
| **Instant** | One email per event, sent immediately |
| **Daily digest** | A summary of the day's activity, sent once per day |
| **Weekly digest** | A summary of the week's activity, sent every Monday |
Each email includes a direct deep link to the relevant thread, so recipients can click through and see the full context in the widget.
Every email includes a one-click unsubscribe link at the bottom. Unsubscribing uses a secure token — no login required. Admins can also remove recipients from the Dashboard at any time.
Slack Channel Notifications
Requires: Pro plan or higher
Connect Slack in Dashboard > Integrations > Slack to receive structured notifications in a channel of your choice.
Setup:
- Go to Dashboard > Integrations > Slack.
- Paste an incoming webhook URL from your Slack workspace.
- Choose which events to post (same event list as email notifications).
- Click Save. Mamtack sends a test message to confirm the connection.
Message format: Notifications use Slack's Block Kit for rich, scannable messages — not plain text dumps. Each message includes the thread content, author, tags, and a deep link button that opens the thread directly in Mamtack.
+------------------------------------------+
| Mamtack - New Thread |
|------------------------------------------|
| "Checkout button is invisible on mobile" |
| by Sarah Chen - /checkout |
| Tags: bug, urgent, accessibility |
| |
| [View in Mamtack] |
+------------------------------------------+
Notification Summary
| Channel | Plan required | Setup location | Key advantage |
|---|---|---|---|
| **In-widget toasts** | All plans | Automatic | Real-time, zero setup |
| **Browser notifications** | All plans | Bell icon in widget | Alerts when widget is not visible |
| **Email** | Pro+ | Dashboard > Integrations > Email | Reaches people who don't use the widget daily |
| **Slack** | Pro+ | Dashboard > Integrations > Slack | Meets your team where they already communicate |
FAQ
Q: Can I customize which events trigger notifications per channel? A: Yes. Email and Slack event selections are independent — you can receive all events in Slack but only "thread created" via email, for example.
Q: Do I get notified about my own actions? A: No. You will not receive notifications for threads you create, comments you post, or assignments you make yourself.
Q: How do I stop getting emails without asking an admin? A: Click the unsubscribe link at the bottom of any Mamtack email. It takes effect immediately — no login required.
11. Outbound Webhooks — Integrate Mamtack with Any System
Requires: Pro plan or higher
Mamtack can push real-time event data to any system you control. Outbound webhooks send an HTTP POST to your endpoint whenever something happens in your threads — so you can build custom automations, sync feedback to internal tools, or trigger downstream workflows without polling.
How It Works
- Configure an endpoint — Provide an HTTPS URL where Mamtack should deliver events.
- Select event types — Choose which thread and comment events trigger a delivery.
- Verify payloads — Use the HMAC signing secret to confirm each delivery is authentic.
- Monitor deliveries — Check the delivery log for status codes, timestamps, and failures.
Setup
- Go to Dashboard > Integrations > Webhooks.
- Click Add Endpoint.
- Enter your HTTPS URL (HTTP is not accepted).
- Select the events you want to subscribe to (or choose "All events").
- Copy the generated signing secret and store it securely — you will need it to verify payloads.
- Click Save. Mamtack begins delivering events immediately.
You can register up to 5 webhook endpoints per site.
Event Types
| Event | Fires when |
|---|---|
| `thread.created` | New thread posted |
| `comment.created` | New comment added |
| `thread.resolved` | Thread resolved |
| `thread.reopened` | Thread reopened |
| `thread.assigned` | Thread assigned to a member |
| `thread.flagged_for_fix` | Admin flags thread for fix |
| `thread.fix_applied` | Developer marks fix applied via MCP |
| `thread.unflagged` | Admin un-flags thread |
| `issue.created` | Issue created in Jira, Linear, or GitHub |
HMAC Payload Signing
Every delivery includes a X-Mamtack-Signature header containing an HMAC-SHA256 hash of the request body, signed with your endpoint's secret. To verify:
- Read the raw request body (before JSON parsing).
- Compute HMAC-SHA256 using your signing secret as the key.
- Compare the result to the value in
X-Mamtack-Signatureusing a timing-safe comparison.
If the signatures do not match, reject the request — it did not originate from Mamtack.
Delivery Log
Each endpoint has a delivery log accessible from Dashboard > Integrations > Webhooks > [your endpoint]. The log shows:
- Event type and timestamp
- HTTP response code from your server
- Delivery duration
- Request payload (expandable)
Use this to debug integration issues or confirm events are arriving as expected.
Auto-Disable and Retries
Mamtack retries failed deliveries (non-2xx responses or timeouts) up to 3 times with exponential backoff. If an endpoint fails consistently over 24 hours, Mamtack automatically disables it and sends a notification email to the site owner. Re-enable it from the Dashboard once the issue is resolved.
Test Deliveries
Click the Send Test button next to any endpoint to deliver a sample thread.created payload. This lets you verify your endpoint is reachable and your signature verification logic works before real events start flowing.
FAQ
Q: Can I filter events by page or tag?
A: Not currently. Webhooks fire for all matching events across the entire site. Filter on your end using the page_url or tags fields in the payload.
Q: What timeout does Mamtack use for delivery? A: Your endpoint must respond within 10 seconds. Anything longer is treated as a failure and queued for retry.
Q: Are webhook payloads sent in order?
A: Mamtack delivers events in approximate chronological order, but retries may arrive out of sequence. Use the event_timestamp field in the payload to determine ordering.
12. MCP Server — AI-Powered Development from Your IDE
Requires: Team plan or higher
Mamtack's MCP server brings your feedback data directly into AI-powered development tools. Instead of switching between the Dashboard and your editor, you can query threads, triage issues, and mark fixes complete — all from your IDE's AI assistant.
What Is MCP?
Model Context Protocol (MCP) is an open standard that lets AI-powered IDEs connect to external data sources. When your IDE supports MCP (Cursor, Claude Code, VS Code with Copilot, and others), it can call Mamtack's server to read feedback, take action on threads, and orchestrate multi-step fix workflows — all through natural language prompts.
What It Enables
- Ask your AI assistant "What open feedback threads are on the pricing page?" and get structured results.
- Say "Fix the thread about the broken submit button" and your IDE can pull context, generate code, and mark the thread resolved.
- Triage a batch of threads without leaving your editor.
- Delete spam threads or comments in bulk through conversational commands.
Token Management
- Go to Dashboard > AI > MCP.
- Click Generate Token.
- Enter a display name (e.g., "Nir's Cursor") and optionally an email address for attribution.
- Click Create. The token is displayed once — copy it immediately.
- The token is hashed server-side. If lost, revoke and generate a new one.
To support shared team tokens, enter comma-separated email addresses in the email field. Actions taken through that token will be attributed to the matching team member based on the IDE's user context.
Available Tools
The MCP server exposes these capabilities to your IDE:
| Category | Tools |
|---|---|
| Read | `list_open_threads`, `get_thread_detail`, `get_element_context`, `list_pages` |
| Act | `mark_thread_addressed`, `add_reply` |
| Delete | `delete_thread`, `bulk_delete_threads`, `delete_comment`, `bulk_delete_comments` |
| Flag for Fix | `list_flagged_threads`, `get_fix_context`, `mark_fix_applied` (auto-comments on linked Jira/Linear/GitHub issues) |
Your IDE's AI assistant discovers these tools automatically once the MCP connection is configured.
IDE Setup
Add the Mamtack MCP server to your IDE's configuration:
{
"mcpServers": {
"mamtack": {
"url": "https://mcp.mamtack.com/sse",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}
Replace YOUR_TOKEN_HERE with the token you generated in the Dashboard. The configuration file location varies by IDE — consult your editor's MCP documentation for the exact path.
Pre-Built Prompts
Mamtack ships 4 pre-built prompts that orchestrate multi-step workflows. These prompts appear in your IDE's prompt library once the MCP server is connected.
| Prompt | What it does | Tools used |
|---|---|---|
| `fix-mamtack-thread` | Chains the full fix workflow in one conversation: lists flagged threads, fetches context, guides your AI to generate a fix, and marks the thread as fix-applied when you confirm. | `list_flagged_threads`, `get_fix_context`, `mark_fix_applied` |
| `review-open-feedback` | Reviews all unresolved feedback for your project and summarizes it by priority. Useful for a quick overview of what's pending before a sprint or standup. | `list_open_threads`, `get_thread_detail` |
| `triage-page` | Shows all feedback for a specific page, grouped by tag (bug, UX, copy, etc.). Useful when you want to focus on one page at a time. | `list_open_threads` (with `page_url` filter) |
| `element-audit` | For each unresolved thread, shows the CSS selector and element context. Useful for understanding the scope of UI changes needed across a project. | `list_open_threads`, `get_element_context` |
FAQ
Q: Do I need a separate token per developer? A: Recommended but not required. Individual tokens provide clearer attribution in the Dashboard's activity log. Shared tokens with comma-separated emails work for smaller teams.
Q: Is the MCP connection real-time? A: The server uses Server-Sent Events (SSE) for the transport layer. Your IDE maintains a persistent connection and receives tool responses in real time.
Q: What happens if my token is revoked while I'm working? A: Your IDE will receive an authentication error on the next tool call. Generate a new token from the Dashboard and update your configuration.
13. Data Export & Archiving — Download and Manage Your Data
Requires: Pro plan or higher (export). Archive available on all plans.
Your feedback data belongs to you. Mamtack lets you export threads and comments for offline analysis, compliance records, or migration — and archive inactive projects to keep your Dashboard clean without losing history.
How It Works
- Export — Download your site's feedback as structured data files.
- Filter — Narrow exports by resolved status and date range.
- Archive — Freeze inactive projects so they remain readable but accept no new feedback.
- Unarchive — Restore an archived project to active status at any time.
Exporting Data
- Go to Dashboard > [your site] > General tab.
- Scroll to the Export Data section.
- Choose your format: CSV or JSON.
- Optionally filter by:
- Status — All threads, resolved only, or open only.
- Date range — Threads created within a start and end date.
- Click Export. Your browser downloads the file immediately.
The export includes threads, all comments within them, commenter identities, timestamps, tags, assignments, and resolution status.
Free-plan users see the Export section in a locked state with a prompt to upgrade.
Export Formats
| Format | Best for |
|---|---|
| CSV | Spreadsheet analysis, importing into other tools, quick review |
| JSON | Programmatic processing, backup, migration to other platforms |
Archiving a Project
When a project is complete or inactive, archiving removes it from active use without deleting any data.
- Go to Dashboard > [your site] > General tab.
- Click Archive Project.
- Confirm in the modal.
Once archived:
- The site card in your Dashboard shows an "Archived" badge.
- All threads and comments become read-only — no new comments, replies, or resolutions.
- The widget on your live site becomes inactive (the toolbar disappears for visitors).
- Existing pins and threads remain visible in the sidebar for reference.
- A notification email is sent to the site owner confirming the archive.
Unarchiving
To restore an archived project:
- Find the archived site in your Dashboard (filter by "Archived" if needed).
- Click the site card, then go to General tab.
- Click Unarchive Project.
- Confirm in the modal.
The widget reactivates, comments are unlocked, and a notification email confirms the restoration. No data is lost during the archive/unarchive cycle.
FAQ
Q: Does archiving free up my site slot? A: No. Archived sites still count toward your plan's site limit. Delete the site entirely if you need to free a slot.
Q: Can I export data from an archived project? A: Yes. Export remains available on archived projects — the data is read-only, not inaccessible.
Q: Is there a size limit on exports? A: Exports include all matching threads and comments with no row limit. Very large sites may take a few seconds to generate.
14. Branding & Customization — Make Mamtack Yours
Mamtack works behind the scenes so your users see your brand, not ours. Higher plan tiers progressively remove Mamtack branding from the widget, emails, and third-party integrations — so feedback feels native to your product. You can also customize the widget's theme and position from the Dashboard.
How It Works
- All plans — Customize widget theme (dark, light, auto) and position (bottom-right, bottom-left) from the Dashboard or via script-tag attributes.
- Pro plan — Widget branding is automatically removed. No toggle needed.
- Team plan — Notification branding is also removed from emails, Slack messages, and issue tracker integrations.
- Enterprise plan — Custom white-label branding: replace Mamtack's logo and name with your own across the widget and email notifications.
Widget Appearance (All Plans)
Every site owner can control the widget's visual appearance — no plan upgrade needed.
From the Dashboard: Go to Dashboard > [your site] > General and scroll to the Widget Appearance section. Choose your theme and position, then click Save appearance. Changes take effect on the next widget load — no code changes needed.
From the script tag: Add data-theme and data-position attributes to your embed snippet. When both Dashboard settings and script-tag attributes are set, the Dashboard takes precedence.
| Setting | Options | Default | What changes |
|---|---|---|---|
| Theme | `dark`, `light`, `auto` | `dark` | Widget background, text colors, borders, and accents for toolbar, sidebar, popovers, and pins |
| Position | `bottom-right`, `bottom-left` | `bottom-right` | Toolbar and all panels anchor to the chosen corner of the viewport |
Theme details:
- Dark — Dark background (#1e1e2e) with light text. Best for design review tools, dark-themed sites, and reducing visual distraction during focused review sessions.
- Light — White/light background with dark text. Blends naturally with light-themed marketing sites, documentation, and content-heavy pages.
- Auto — Follows the visitor's OS dark/light mode preference (
prefers-color-scheme). Adapts automatically without user action.
Position details:
- Bottom-right — Toolbar and sidebar anchor to the bottom-right corner. The sidebar panel opens to the left of the toolbar.
- Bottom-left — Toolbar and sidebar anchor to the bottom-left corner. The sidebar panel opens to the right of the toolbar.
Position affects all widget UI: the toolbar, sidebar panel, pin-mode instruction banner, new-comment popovers, and toast notifications.
Widget Branding (Pro+)
On the Pro plan and above, the "Powered by Mamtack" text that appears in the authentication modals and at the bottom of the sidebar is automatically hidden. Your users interact with the widget without any indication of the underlying platform.
FREE PLAN: PRO+ PLAN:
+------------------------+ +------------------------+
| Comments (3) | | Comments (3) |
| ... | | ... |
| ... | | ... |
| Powered by Mamtack | | |
+------------------------+ +------------------------+
Notification Branding (Team+)
On the Team plan and above, outbound communications no longer reference Mamtack:
- Emails — The header logo and "Mamtack" name are removed. The footer line "Sent by Mamtack" disappears. The sender name changes from "Mamtack" to your project name (e.g., emails arrive as "Acme Feedback" instead of "Mamtack").
- Slack messages — The "via Mamtack" footer is removed from thread notifications.
- Issue trackers (Jira, Linear, GitHub) — The "Created from Mamtack" description line is removed from created issues.
This makes Mamtack invisible to your end users and clients — feedback notifications appear as if they come directly from your team.
White-Label Branding (Enterprise)
On the Enterprise plan, you can fully replace Mamtack's identity with your own brand. Your team and clients interact with the widget as if it were your own first-party feedback tool — no mention of Mamtack anywhere.
Setup: Go to Dashboard > [your site] > General > Branding. Enter your brand name and logo URL, then click Save branding. Changes apply immediately on the next widget load.
| Setting | Description | Requirements |
|---|---|---|
| Brand name | Replaces "Mamtack" wherever it appears | Max 60 characters |
| Logo URL | Custom logo displayed alongside your brand name | PNG or SVG, recommended max 160 × 40 px, must be HTTPS |
Where your custom branding appears:
- Sidebar footer — "Powered by [Your Brand]" with your logo replaces the default Mamtack attribution at the bottom of the comments panel.
- Authentication modals — The sign-in and OTP verification modals display your brand name and logo instead of Mamtack's.
- Email notifications — Outbound emails (thread notifications, assignments, OTP codes) use your brand name as the sender and display your logo in the header.
DEFAULT (Free/Pro): ENTERPRISE WHITE-LABEL:
+------------------------+ +------------------------+
| Comments (3) | | Comments (3) |
| ... | | ... |
| ... | | ... |
| [M] Powered by Mamtack| | [logo] Powered by |
+------------------------+ | Acme Feedback |
+------------------------+
If only the brand name is set (no logo URL), the text-only brand name appears without an image. If both are set, the logo displays inline before the brand name.
Branding Removal by Tier
| Element | Pro | Team+ | Enterprise |
|---|---|---|---|
| Widget theme & position | Customizable | Customizable | Customizable |
| Widget "Powered by Mamtack" | Removed | Removed | Removed |
| Email header logo and name | Visible | Removed | Custom logo & name |
| Email footer "Sent by Mamtack" | Visible | Removed | Custom brand name |
| Slack footer "via Mamtack" | Visible | Removed | Removed |
| Jira/Linear/GitHub "Created from Mamtack" | Visible | Removed | Removed |
| Email sender name | "Mamtack" | Your project name | Custom brand name |
FAQ
Q: Can I add my own logo to the widget? A: Yes, on the Enterprise plan. Go to Dashboard > [your site] > General > Branding to set a custom logo URL and brand name. On lower tiers, branding removal hides Mamtack references but does not inject custom logos.
Q: Does branding removal affect the Dashboard? A: No. The Dashboard always shows Mamtack branding since it is your admin interface, not a user-facing surface.
Q: If I downgrade from Team to Pro, does branding reappear in notifications? A: Yes. Branding removal is evaluated in real time based on your active plan. Downgrading restores the default branding on future notifications (previously sent messages are not modified).
15. Team & Account Management — Collaborate with Your Team
Managing feedback is a team effort. Mamtack lets you invite additional admins to share the workload, control access with role-based permissions, and manage your subscription — all from the Dashboard.
How It Works
- Site owner — The person who created the site and holds the subscription. Full control over settings, billing, and team membership.
- Delegated admins — Invited team members who can triage, assign, resolve, and manage threads alongside the owner.
- Billing — Managed through the Dashboard with a direct link to your billing portal.
Roles and Permissions
| Capability | Site Owner | Delegated Admin |
|---|---|---|
| View and reply to threads | Yes | Yes |
| Resolve, reopen, assign threads | Yes | Yes |
| Delete threads and comments | Yes | Yes |
| Manage integrations | Yes | No |
| Flag threads for fix | Yes | Yes |
| Invite and remove admins | Yes | No |
| Change site settings | Yes | No |
| Rotate API key | Yes | No |
| Archive/delete site | Yes | No |
| Manage billing and plan | Yes | No |
Inviting Admins (Team+)
- Go to Dashboard > [your site] > Team tab.
- Enter one or more email addresses (comma-separated for multiple invites).
- Click Invite.
- Each invitee receives an email with an accept link.
Pending invites appear in the Team tab with a "Pending" badge. Once accepted, the admin appears as "Active" and gains immediate access.
+----------------------------------------+
| Team Members |
|----------------------------------------|
| you@company.com Owner [Active] |
| dev@company.com Admin [Active] |
| new@company.com Admin [Pending] |
| |
| [Invite Admin] |
+----------------------------------------+
Admin Seat Limits
| Plan | Admin Seats (including owner) |
|---|---|
| Free | 1 (owner only) |
| Pro | 1 (owner only) |
| Team | 5 |
| Enterprise | 50 |
Attempting to invite beyond your limit shows an error with a prompt to upgrade.
Revoking Access
- Cancel a pending invite — Click the X next to the pending email in the Team tab. A confirmation modal appears. The invite link is immediately invalidated.
- Remove an active admin — Click "Remove" next to their name. Confirm in the modal. Their access is revoked instantly — they can no longer view or act on threads in the Dashboard.
Both actions trigger a confirmation modal to prevent accidental removal.
Billing and Plan Management
- Go to Dashboard > My Plan.
- View your current plan, next renewal date, and usage (sites, threads).
- Click Manage Subscription to open the billing portal.
From the billing portal you can:
- Upgrade or downgrade your plan
- Update your payment method
- Download invoices
- Cancel your subscription
Plan changes take effect immediately. When upgrading, new features unlock instantly. When downgrading, see Section 16 for how thread limits are handled.
FAQ
Q: Can I transfer site ownership? A: Not through the Dashboard directly. Contact support at contact@mamtack.com to arrange an ownership transfer.
Q: Do delegated admins need their own Mamtack account? A: Yes. When they accept the invite, they create an account (or sign in to an existing one) linked to their email address.
Q: What happens to threads assigned to a removed admin? A: The threads remain assigned but show the former admin's name grayed out. Reassign them from the sidebar or let another admin pick them up.
16. Plan Tiers & Limits — Choose the Right Plan
Mamtack offers four plan tiers designed to grow with your team. Start free to evaluate, then upgrade as your feedback volume and collaboration needs increase.
Plan Comparison
| Feature | Free | Pro ($34/mo) | Team ($79/mo) | Enterprise |
|---|---|---|---|---|
| Sites | 1 | 5 | 20 | Unlimited |
| Threads per site | 15 | 200 | Unlimited | Unlimited |
| Commenter identity | Display name | OAuth + OTP | OAuth + OTP, can require sign-in | OAuth + OTP + SSO |
| Admin roles | Owner only | Owner | Owner + delegated admins (5 seats) | Owner + admins (50 seats) |
| AI tagging | Yes (shared queue, BYOK available) | Yes + custom taxonomy | Yes + custom taxonomy | Yes + custom taxonomy |
| AI suggestions | -- | Yes | Yes | Yes |
| Integrations | -- | Slack, Email, Webhooks, GitHub Issues | All Pro + Jira, Linear, MCP | All Team integrations |
| Flag for Fix | -- | -- | Yes | Yes |
| Export | -- | CSV / JSON | CSV / JSON + MCP | CSV / JSON + MCP |
| Widget branding | Visible | Removed | Removed | Removed |
| Notification branding | Visible | Visible | Removed | Removed |
| Support | Community | Priority | Dedicated + SLA |
Thread Limits
Your plan determines how many active (unresolved) threads each site can hold simultaneously. When you hit the limit:
- The pin button is disabled on the widget.
- A banner appears in the sidebar explaining the limit.
- Existing threads remain fully functional — you can reply, resolve, and delete as normal.
To free up slots, resolve or delete threads you no longer need. Resolved threads do not count against your active thread limit.
Upgrading
Upgrade at any time from Dashboard > My Plan, or visit the pricing page at mamtack.com. New features unlock immediately upon upgrade — no waiting period, no restart required.
Downgrading
When you move to a lower tier:
- Threads beyond the new plan's limit become read-only. You can view and export them, but cannot add new comments or reopen them.
- No data is deleted. If you upgrade again later, all threads return to full functionality.
- Sites beyond the new plan's site limit are placed in a read-only state. Choose which sites to keep active from the Dashboard.
- Integrations not available on the new plan are paused (not deleted). Upgrading reactivates them with existing configuration intact.
Enterprise
Enterprise pricing is custom and includes:
- Unlimited sites and threads
- SSO/SAML authentication for commenters
- Up to 50 admin seats
- MCP API access for programmatic export
- Dedicated support with SLA
Contact the team at contact@mamtack.com to discuss Enterprise needs.
Upcoming Features
- SSO/SAML (Enterprise) — Federated authentication for organizations with existing identity providers.
FAQ
Q: Do resolved threads count against my limit? A: No. Only open (unresolved) threads consume your quota. Resolve or delete threads to free up capacity.
Q: What happens to my webhooks if I downgrade from Pro to Free? A: Webhook endpoints are paused but not deleted. If you upgrade again, they reactivate with the same configuration.
Q: Can I pay annually for a discount? A: Annual billing is available for Pro and Team plans. Check the pricing page at mamtack.com for current annual rates.