Changelog
Track all the latest updates, features, and improvements to Whispr
cc8a60eecf9085c368894626c20dfix: 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
5b6ed4cfix: 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
b6fa005fix: 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.
6120895ea2c9b71aed29659870784b80564a3690345c4548c95a3e48fix: 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
5c60b91feat: 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
feab9cefix: 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"
780accefeat: 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
27a1398fix: 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
5a09e26feat: 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"
0cbda0ffix: 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"
3c9837eWant to contribute?
Whispr is open source and we welcome contributions from the community
View on GitHub