Releases: QuackbackIO/quackback
Releases · QuackbackIO/quackback
Release list
v0.7.0
Widget Auth
- Anonymous-to-identified merge — votes, comments, and posts transfer when user re-identifies via SDK
- Identify precedence — portal session takes priority over SDK anonymous calls
- OTT safety — skip session transfer for anonymous users to prevent portal logout
- Shared merge utility extracted from portal auth for reuse by widget identify
- 50 new auth tests
Widget UI
- Consistent font sizing across post and changelog detail views (15px title, 13px body, 11px meta)
- Post detail header mirrors listing layout (vote column left, status/title/meta right)
- Clickable titles linking to portal with hover icon (shared WidgetPortalTitle component)
- Unified comment form with inline email/name for anonymous users (single Post action)
- User avatar popover with engagement stats
- Infinite scroll for feedback and changelog tabs
- Comprehensive widget test coverage (52 tests)
v0.6.9
- Redesign widget home with portal-style expandable create card
- Merge search and create into single expandable input
- Integrate email capture directly into feedback form
- Unify similar posts design and animations across widget and portal
- Fix widget card overflow issues (horizontal, input, email/name row)
- Simplify widget internals: extract post row, remove prop drilling and dead code
v0.6.8
v0.6.7
v0.6.6
New Features
- Markdown rendering for changelogs and posts - Content created via the rich text editor, MCP, or API now stores markdown alongside TipTap JSON. The server auto-derives contentJson from markdown when only plain text is provided, ensuring consistent rendering everywhere
- Redesigned public changelog - The changelog page now displays a full-article feed with a date sidebar, rendered rich content, and linked feature cards, similar to a blog layout
Bug Fixes
- Fix list item spacing in rendered content - Ordered and unordered lists no longer have excessive whitespace between items. Fixed by unwrapping single-paragraph list items in the HTML renderer
- Remove unsigned cookie from widget identify endpoint - Cleaned up the widget identify endpoint to use only the signed cookie for authentication
- Strip markdown in admin changelog previews - Admin changelog list no longer shows raw markdown syntax in content previews
Improvements
- Refactor service layer into focused modules - Large service files (posts, comments, changelog, settings, users, segments, roadmaps) split into smaller, focused modules for better maintainability
v0.6.5
New Features
- Cascade delete linked integration issues - When deleting a post that has linked issues in external platforms, the delete dialog now shows each linked issue with a checkbox to archive/close it. Supports Linear, GitHub, Jira, GitLab, ClickUp, Asana, Shortcut, Azure DevOps, Trello, Notion, and Monday. Integration icons and human-friendly issue identifiers (e.g. QUA-24, #142) are shown in the dialog
- Per-integration on-delete behavior config - Each integration's settings page now has an "On post delete" option to control whether linked issues are archived/closed by default
Bug Fixes
- Fix dark theme flicker on admin pages - Admin pages no longer flash white on load in dark mode. Theme is now read from a server-side cookie instead of client-side detection
- Remove static vote count from integration syncs - Vote count was included in synced issue descriptions but never updated after creation, showing a misleading frozen value. Removed from all integration message builders (Linear, GitHub, Jira, GitLab, ClickUp, Asana, Shortcut, Azure DevOps, Zapier)
v0.6.4
Performance
- MCP search response trimming - Search results now return 200-char excerpts instead of full content, extract just the summary string instead of the full summaryJson object, and use compact JSON encoding for list responses - reducing payload from ~170KB to ~40KB per 100-post page
- Database column selection for post lists - listInboxPosts now excludes unused heavy columns (embedding at ~12KB/row, searchVector, widgetMetadata, and pipeline metadata), reducing DB transfer from ~1.4MB to ~200KB per 100-post query
- Exclude internal fields from all post queries - getPostWithDetails and listPostsForExport now use explicit column selection, preventing ~12KB of embedding data per row from being transferred on detail, admin, and export paths
Bug Fixes
- Portal post edit view matches read-only view - Empty paragraphs in the TipTap editor now collapse to match the static prose rendering, fixing the excessive vertical spacing visible in edit mode. Edit title input also matches the normal h1 sizing
- Fix MCP OAuth posts showing 'Unknown' author - OAuth JWT was missing name and email claims, causing all MCP-created posts to show "Unknown" as the author. Users need to re-authenticate for the fix to take effect
v0.6.3
Performance
- Dragonfly caching for hot paths - Tenant settings, integration event mappings, and active webhooks are now cached in Dragonfly with 5-minute TTL and write-through invalidation, eliminating redundant DB queries on every page load and event dispatch
- Slack channel cache migrated to shared helpers - Unified caching pattern across all cached resources
Improvements
- Robust cache failure logging - Cache helpers log warnings on failure instead of silently swallowing errors, improving production debuggability
- S3 deletion failure logging - Previously silent catch blocks in logo/favicon/header logo operations now log warnings with the affected S3 key
- Better embedding error context - OpenAI embedding failures now include pipeline step and post ID for easier triage
- Reduced log noise - Removed ~25 noisy read-path console.log entries from domain services (settings, statuses, posts, comments, roadmaps, subscriptions, notifications, webhooks) that fired on every request
v0.6.2
Improvements
- Private comments - Notes are now consolidated as private comments with MCP
isPrivatesupport - Event system completeness - Added missing event types and improved private comment UX
- Slack channel listing - Improved Slack channel listing and incoming feedback UX
Bug Fixes
- Fix widget vote/reaction highlights after SSO identify - Vote and reaction highlights now persist correctly after SSO identify in the widget
- Fix vote and reaction highlights after page reload - Highlights no longer reset when the page is reloaded
- Fix Canny importer issues - Fixed soft-delete filtering and publishedAt preservation
Chores
- Upgrade to Vite 8 and @vitejs/plugin-react 6
- Update all dependencies to latest compatible versions
- Type safety improvements
- CI: run build before typecheck to generate route tree
v0.6.1
New Features
- API extensions and Canny adapter - New API-to-API import pipeline with a Canny adapter for migrating feedback, votes, comments, and users from Canny to Quackback.
Bug Fixes
- Fix OAuth token exchange 500 for MCP clients - The token endpoint consumed the request body to inspect the
resourceparameter but only reconstructed it whenresourcewas missing. MCP clients like Claude Code that includeresourcein the token exchange hit a 500 because Better Auth received an empty body. The request is now always reconstructed after reading. - Fix consent page redirect - Added
data.urlfallback for OAuth consent redirect URL resolution, fixing cases where the redirect field name varied.
Database
- OAuth schema migration - Added
require_pkcecolumn tooauth_clientandauth_timecolumn tooauth_refresh_tokenfor Better Auth compatibility.