Get in touch to advertise on Whispr!Want to feature your product?
Whispr logo
Whispr

Changelog

Track all the latest updates, features, and improvements to Whispr

eb89a2d
by whisprwords
cc8a60e
by whisprwords
ecf9085
by whisprwords
c368894
by whisprwords
0e6bd3e
by whisprwords
626c20d
by whisprwords

fix: add cache-busting for daily poems JSON file

- Add timestamp parameter to fetch URL to prevent caching - Add flexible data structure handling (array or object with poems array) - Add detailed console logging for debugging - Clear Next.js cache to ensure fresh build

5b6ed4c
by whisprwords

fix: correct daily poem JSON filename and structure issues

- Rename daiy-poems.json to daily-poems.json (fix typo) - Fix malformed JSON structure with proper formatting - Update component to use correct filename - Add better error handling and logging - Validate JSON contains 48 poems

b6fa005
by whisprwords

fix: downgrade @tanstack/react-table to resolve production build error

Downgraded @tanstack/react-table from 8.21.3 to 8.17.0 to fix export compatibility issues with Next.js build system that was causing 'All exports of the module are statically known' error in production.

6120895
by whisprwords
ea2c9b7
by whisprwords
1aed296
by whisprwords
5987078
by whisprwords
4b80564
by whisprwords
a369034
by whisprwords
5c4548c
by whisprwords
95a3e48
by whisprwords

fix: Removed analytics trending posts links - display as static metrics to eliminate 404 errors

- Removed click-to-open button from trending posts in analytics page - Posts now display as static information showing engagement metrics (views, likes, comments) - Eliminates 404 errors from attempting to fetch chain posts through incorrect API route - Trending posts section now shows performance data without navigation

5c60b91
by whisprwords

feat: Implement comprehensive Chronicles moderation flag system with appeal mechanism

This major update introduces a complete content moderation workflow for Chronicles posts and chain entries, including: MODERATION FLAG SYSTEM: - Implemented 4-state flag status system: pending, under_review, resolved, dismissed - Color-coded visual indicators for each status (Yellow/Blue/Orange/Green) - Created dedicated APIs for fetching and managing flag status - Integrated flag checks across all post views APPEAL MECHANISM: - Added appeal API endpoint (/api/chronicles/posts/[slug]/appeal) - Allows creators to appeal flagged posts (pending → under_review) - Toast notifications for successful/failed appeal submissions - Updated post status display to reflect appeal state PUBLIC-FACING CHANGES: - Display flag status badges on public post view - Show blue info banner when post is under review or resolved - Disable like, comment, share buttons for flagged posts - Hide comment input form when post is flagged - Informative messages explaining why interactions are disabled DASHBOARD & INTERNAL PAGES: - Added flag status badges to Chronicles dashboard posts - Flagged entry indicators on writing chains list - Flag status display on individual chain entry pages - Color-coded badges for quick status recognition INFRASTRUCTURE IMPROVEMENTS: - Fixed content display bug in Chronicles post editor (ref fallback with retry logic) - Fixed share button error handling (graceful failure for secondary features) - Fixed syntax error in engagement bar section - Added Suspense boundary to write page for Next.js 16+ compatibility API ENHANCEMENTS: - Updated all post fetch endpoints to include flag status - Enhanced chain APIs to track flagged entries - Optimized queries with Maps for efficient flag lookup - Improved error handling for share tracking TECHNICAL DETAILS: - useEffect retry mechanism for DOM element discovery - Parallel data fetching for improved performance - Proper null checks for anonymous shares - Environment-aware service role key usage This implementation provides a complete moderation workflow visible to creators while maintaining a clean user experience for readers. The system is designed to be extensible for future admin features. Commits: +27 files modified, several new API routes and components added

feab9ce
by whisprwords

fix: Fix back button in chronicles feed page

Fixed invalid Button component usage: - Removed invalid `link` prop from Button - Removed invalid `href` prop from Button - Wrapped Button with Link component for proper routing - Matches the pattern used elsewhere in the component - Maintains styling with variant="outline"

780acce
by whisprwords

feat: Add theme toggle to chronicles sidebar and create Whispr AI page

1. Enhanced chronicles-header.tsx sidebar: - Added Sun/Moon icons to imports - Added setTheme to useTheme hook - Added theme toggle button to desktop sidebar footer - Added theme toggle button to mobile sidebar - Theme persists across navigation 2. Created new /chronicles/whispr-ai page: - Fully responsive design (desktop + mobile optimized) - Theme responsive (light/dark mode with gradients) - Uses brand colors: white, black, red-600 - Shows Whispr AI is premium mobile-only feature - Token-based pricing information - Download cards for iOS (Coming Soon) and Android - Fetches latest build info from /api/builds/latest - APK and AAB download options with file sizes - Features showcase (3 key benefits) - Premium badge explaining token-based system - Step-by-step getting started guide - Call-to-action section linking to download page Design highlights: - Red-600 primary color with #911A1B accent - Gradient backgrounds responsive to theme - Smooth transitions and hover effects - Mobile-first responsive grid layouts - Professional shadow effects - Clear typography hierarchy

27a1398
by whisprwords

fix: Properly transform chain entries count in API response

Fixed chains list API to return entries_count correctly: Issue: - API was using .select('*, entries:chronicles_chain_entries(count)') - This returns count in nested structure: entries[0].count - Frontend expected entries_count as direct property Solution: - Transform API response to map entries[0].count to entries_count - Remove nested entries array from response - Frontend now receives properly formatted data Result: - Chains list now shows correct entry count - Each chain displays: "N entries • created DATE" - No frontend changes needed

5a09e26
by whisprwords

feat: Add RLS trigger fix for notification system

Created migration to fix 'row-level security policy violation' error: 1. Created migration file: scripts/028-fix-notification-triggers-rls.sql - Fixes handle_chain_created() trigger with SECURITY DEFINER - Fixes handle_chain_entry_post_created() trigger with SECURITY DEFINER - Adds SET search_path = public for safety 2. Created documentation: RLS_TRIGGER_FIX_GUIDE.md - Explains the RLS policy violation problem - Details why triggers were being blocked - Provides instructions for applying the fix - Explains SECURITY DEFINER and its implications Problem solved: - Chain creation was failing with RLS policy violation - Trigger inserts into chronicles_notifications were blocked - SECURITY DEFINER allows triggers to run with elevated permissions - This is standard practice for background/notification triggers Next step: Apply the migration via Supabase SQL Editor"

0cbda0f
by whisprwords

fix: Use /api/session endpoint for chain creation authentication

Changed chain creation page to properly validate authentication: 1. Replaced direct Supabase client initialization with /api/session endpoint - Calls /api/session on component mount to check if user is authenticated - Shows loading state while checking authentication - Redirects to login/signup if not authenticated (preserves mobile app API) 2. Updated authentication flow: - useEffect hook checks /api/session on mount - Sets notLoggedIn state if not authenticated - Shows auth-required UI with login/signup links if needed - Uses createSupabaseBrowser for token when creating chain 3. UI improvements: - Shows loading spinner while checking authentication - Displays auth-required message if not logged in - Provides links to login/signup pages - Only shows form if user is authenticated Benefits: - No longer breaks /api/session endpoint (mobile app still works) - Proper session validation on page load - Better user experience with clear auth status - Uses Supabase browser client for token retrieval"

3c9837e
by whisprwords

Want to contribute?

Whispr is open source and we welcome contributions from the community

View on GitHub