Changelog
Track all updates, improvements, and fixes to CivicNotes
- Improved
Checkpoint: Implemented Qdrant cluster keep-alive functionality to prevent free tier suspension: - Created Qdrant client helper with health check function (server/qdrant.ts) - Added public tRPC endpoint system.qdrantHealth for health checks - Set up daily cron job (12:00 PM) to automatically ping Qdrant - Tested successfully - cluster shows active with 1 collection (document_chunks) - Updated todo.md with completed tasks
- Improved
Checkpoint: Removed "Open on AutoContent" button from explainer video player page (VideoPlayerPage.tsx). The button provided an external link to the AutoContent platform but was not needed in the user interface.
- Improved
Checkpoint: Fixed Introduction lesson content order - Learning Objectives now appear before main content paragraphs.
- Improved
true message
- Improved
true message
- Improved
true message
- Improved
true message
- Improved
true message
- Improved
Checkpoint: Removed breadcrumbs and added hamburger menu to SharedCourseViewer header for cleaner mobile interface
- Improved
Checkpoint: Removed breadcrumbs and added hamburger menu to SharedCourseViewer header for cleaner mobile interface
- Improved
Checkpoint: Fixed mobile responsive issues causing horizontal overflow on mobile devices:
- Improved
Checkpoint: Fixed SharedCourseViewer content order and responsive layout to match regular CourseViewer: - Added topic context header (title + description) on first lesson - Added topic video player before lesson content on first lesson - Fixed content order: Topic header → Video → Key takeaways → Main content → Learning objectives - Removed duplicate video section at bottom of non-introduction lessons - Fixed all JSX indentation issues in SharedCourseViewer.tsx - Updated todo.md to track mobile responsive fixes
- Improved
Checkpoint: Fixed SharedCourseViewer mobile layout - sidebar now hidden by default on mobile with Menu/X hamburger toggle, overlay with backdrop on mobile, desktop shows ChevronLeft/Right sidebar collapse buttons
- Improved
Checkpoint: Fixed shared course viewer: lessons were not loading because sharingRouter was using topic.id (numeric auto-increment) instead of topic.topicId (string identifier) when querying lessons and quizzes. Reverted main.tsx back to httpBatchLink and removed debug console.log statements.
- Improved
true message
- Improved
Add Course Sharing feature to PRD v4.4 and Technical Architecture v4.5
- Improved
Checkpoint: Fixed mobile responsive issues causing horizontal overflow on mobile devices:
- Improved
Checkpoint: Fixed SharedCourseViewer content order and responsive layout to match regular CourseViewer: - Added topic context header (title + description) on first lesson - Added topic video player before lesson content on first lesson - Fixed content order: Topic header → Video → Key takeaways → Main content → Learning objectives - Removed duplicate video section at bottom of non-introduction lessons - Fixed all JSX indentation issues in SharedCourseViewer.tsx - Updated todo.md to track mobile responsive fixes
- Improved
Checkpoint: Fixed SharedCourseViewer mobile layout - sidebar now hidden by default on mobile with Menu/X hamburger toggle, overlay with backdrop on mobile, desktop shows ChevronLeft/Right sidebar collapse buttons
- Improved
Checkpoint: Fixed shared course viewer: lessons were not loading because sharingRouter was using topic.id (numeric auto-increment) instead of topic.topicId (string identifier) when querying lessons and quizzes. Reverted main.tsx back to httpBatchLink and removed debug console.log statements.
- Improved
true message
- Improved
Merge remote changes, keeping local versions of auto-generated files
- Improved
true message
- Improved
Checkpoint: Fix unterminated string literal in shared/changelog.ts that was causing build errors. Changed escaped single quote to proper string.
- Improved
Checkpoint: Fix unterminated string literal in shared/changelog.ts that was causing build errors. Changed escaped single quote to proper string.
- Improved
Checkpoint: Course sharing feature: Complete implementation including shares table schema, dbShares.ts CRUD helpers, sharingRouter.ts with 5 tRPC endpoints (create, list, getForContent, delete, getPublicCourse), SharedCourseViewer page with sidebar navigation and all lesson types (text, introduction, summary, quiz, flashcard, audio/listen_learn, video, reflection, real-world examples), ShareCourseDialog component with link generation/copy/revoke/preview, Share button added to CourseLandingRedesign, /share/:shareId route registered in App.tsx, and 15 passing vitest tests.
- Improved
update PRD v4.3, Technical Architecture v4.4, Roadmap v1.1 with recent features
- Improved
Checkpoint: Course sharing feature: Complete implementation including shares table schema, dbShares.ts CRUD helpers, sharingRouter.ts with 5 tRPC endpoints (create, list, getForContent, delete, getPublicCourse), SharedCourseViewer page with sidebar navigation and all lesson types (text, introduction, summary, quiz, flashcard, audio/listen_learn, video, reflection, real-world examples), ShareCourseDialog component with link generation/copy/revoke/preview, Share button added to CourseLandingRedesign, /share/:shareId route registered in App.tsx, and 15 passing vitest tests.
- Improved
Checkpoint: Updated project documentation to reflect recent changes: PRD v4.3 (video cancel with confirmation dialog, Listen & Learn on-demand audio, time estimate corrections, lesson type mapping fix), Technical Architecture v4.4 (ListenLearnAudioPlayer component, video cancel architecture, course creation change), Roadmap v1.1 (Sprint 1 completed features).
- Improved
Checkpoint: Listen & Learn on-demand audio generation: removed auto-generation from course creation (3 places in courseRouterOptimized.ts), switched CourseViewer to use ListenLearnAudioPlayer (working on-demand component) instead of ListenLearnRedesign (mock data), enhanced generateListenLearnAudio endpoint with force param for regeneration and topic audio fallback for older courses, updated ListenLearnAudioPlayer regenerate button to pass force: true, added 13 passing tests.
- Improved
Checkpoint: Add confirmation dialog before cancelling video generation. Uses shadcn/ui AlertDialog with two-step flow. Added 3 new tests for dialog behavior (14 total passing). Increased Vite chunkSizeWarningLimit to 2000.
- Improved
Checkpoint: Add cancel/stop functionality for explainer video generation. Added video.cancelGeneration tRPC endpoint, cancel button UI, fixed TypeScript errors, and added 11 vitest tests.
- Improved
Checkpoint: Add cancel/stop functionality for explainer video generation
- Improved
Checkpoint: Update video generation snackbar message to show accurate time estimate: "Video generation started. This will take approximately 15 to 30 minutes." Changed from previous "1-3 minutes" in CourseExplainerVideoGenerator.tsx.
- Improved
Checkpoint: Remove Next/Finish button from Quiz page navigation. Users can now navigate using keyboard shortcuts (Enter, arrow keys) and the Previous button. Updated CourseQuizViewer.tsx.
- Improved
Checkpoint: Add 48px top margin to Lesson Notes Panel for better spacing. Visual edit applied to LessonNotesPanel.tsx.
- Improved
Checkpoint: Remove PDF download banner and What comes next section from Topic Summary. Updated SummaryLessonRedesign.tsx, courseGeneration.ts, and courseGenerationOptimized.ts.
- Improved
Update documentation to v4.2.2/v4.3.2
- Improved
Checkpoint: Fix Real World Examples [object Object] bug in course generation. Fixed 3 code paths in courseRouterOptimized.ts and courseRouter.ts. Rewrote RealWorldExamplesRedesign.tsx parser.
- Improved
Merge remote changes from GitHub
- Improved
Update documentation to v4.2.1/v4.3.1
- Improved
Update todo.md - Mark roadmap creation and documentation tasks as complete
- Improved
Add comprehensive Roadmap v1.0 with Q1-Q4 2026 planning
- Improved
Checkpoint: Fix Real World Examples outcome generation by updating JSON schema
- Improved
Checkpoint: Update Real World Examples title styling
- Improved
Checkpoint: Fix HTML tags appearing in Real World Examples content
- Improved
Checkpoint: Update Course Wizard prompts to generate plain text instead of HTML
- Improved
Checkpoint: Fix Real World Examples styling and content issues
- Improved
Checkpoint: Fix HTML tags showing in Real World Examples content
- Improved
true message
- Improved
true message
- Improved
true message
- Improved
Update PRD to v4.2 - Fix topic media generation documentation
- Improved
Update PRD to v4.1.1 - Correct video/image generation documentation
- Improved
Checkpoint: Fixed Real World Examples page display issues by improving content parsing logic to handle AI-generated content format. Component now properly extracts case studies from markdown with ## headings or "Example N" patterns, displays them in alternating card layout with images, descriptions, outcomes, and tags. Falls back to raw markdown rendering if parsing fails.
- Improved
Checkpoint: Fixed Real World Examples page display issues by improving content parsing logic to handle AI-generated content format. Component now properly extracts case studies from markdown with ## headings or "Example N" patterns, displays them in alternating card layout with images, descriptions, outcomes, and tags. Falls back to raw markdown rendering if parsing fails.
- Improved
Checkpoint: Documentation updates: Updated PRD to v4.1, Technical Architecture to v4.3, created comprehensive tech stack summary, and reorganized todo.md into structured sections (Backlog, Todo, In Progress, Bugs, Done)
- Improved
Update PRD to v4.1, add tech stack summary, update architecture to v4.3
- Improved
Checkpoint: Documentation updates: Updated PRD to v4.1, Technical Architecture to v4.3, created comprehensive tech stack summary, and reorganized todo.md into structured sections (Backlog, Todo, In Progress, Bugs, Done)
- Improved
Checkpoint: Checkpoint saved: Removed all mockup/placeholder data from Real World Examples and Summary lesson components - now displaying only generated content.
- Improved
Checkpoint: Checkpoint saved: Updated Course Wizard prompts to generate better structured Summary lesson content with clear headings and vocabulary terms.
- Improved
Remove CI workflow for GitHub push
- Improved
Checkpoint: Fixed Summary lesson to parse and use generated markdown content for key concepts and vocabulary terms instead of hardcoded mockup data. Design preserved completely.
- Improved
Checkpoint: Fixed Real World Examples to parse and use generated markdown content instead of hardcoded placeholders. Component now extracts case studies from Course Wizard content with organization names, titles, descriptions, and tags.
- Improved
Checkpoint: Implemented new alternating left/right layout for Real World Examples page with professional case study cards, organization branding, category tags, hover effects, and responsive design based on approved HTML mockup.
- Improved
Checkpoint: Removed duplicate lesson titles from CourseViewer that were appearing above all lesson components.
- Improved
Checkpoint: Updated homepage text to reflect broader learning use cases beyond just students:
- Improved
Checkpoint: Updated Course Wizard prompt to generate properly formatted Real World Examples content:
- Improved
Checkpoint: Fixed Real World Examples page styling and content source:
- Improved
Checkpoint: Removed Additional Resources section from lesson pages:
- Improved
Checkpoint: Fixed lesson page structure and styling:
- Improved
Checkpoint: Fixed UX/UI issues with paragraph styling and Key Takeaways:
- Improved
Checkpoint: Implemented celebratory milestone confetti effects for course completion milestones:
- Improved
Checkpoint: Implemented advanced UX enhancements with scroll-triggered animations, loading skeletons, and success micro-interactions:
- Improved
Checkpoint: Implemented Micro-animations & Hover States design concept across all lesson components:
- Improved
Checkpoint: Improved media placeholder experience: removed "Video not available" section from IntroductionLessonRedesign component, added professional educational placeholder image before "Enhance This Topic" section that displays when no media is generated, placeholder automatically replaced with generated video or image when user creates media. All previous refinements maintained: Enhance This Topic without Recommended badges or View Example links, proper bullet points in Learning Outcomes, Key Takeaways with sparkle icon, collapsible sidebar, optimized content widths.
- Improved
Checkpoint: Updated Enhance This Topic section: removed "Recommended" badges from both Explainer Video and AI Image cards for cleaner interface, removed "View Example" dialog buttons from both media types to simplify user flow, changed Explainer Video time estimate from "2-4 min" to "15-30 min" to reflect more accurate generation time. All previous refinements maintained: educational video placeholder image, proper bullet points in Learning Outcomes, Key Takeaways with sparkle icon, collapsible sidebar, optimized content widths.
- Improved
Checkpoint: Replaced plain blue background video placeholder with professional educational image showing person at computer with books and learning elements. Image uploaded to CDN and displays with semi-transparent blue overlay and play icon when video is not available. Creates more engaging visual experience while maintaining clear "video not available" messaging. All previous refinements maintained: proper bullet points in Learning Outcomes, Key Takeaways with sparkle icon, collapsible sidebar, optimized content widths.
- Improved
Checkpoint: Fixed Learning Outcomes section to display bullet points properly as a formatted list instead of concatenated text. HTML list items (ul/ol) are now parsed into separate bullet points array and rendered with blue bullet markers. Each bullet point appears on its own line with proper spacing. Maintained all previous visual refinements: Key Takeaways with sparkle icon, collapsible sidebar, optimized content widths, rounded corners, borderless design.
- Improved
Checkpoint: Adjusted course landing page section widths from 700px to 900px for better balance between readability and content display. Learning Outcomes and Curriculum sections now have more breathing room while maintaining focus. Lesson content remains at 650px for optimal reading experience. All visual refinements maintained: Key Takeaways with sparkle icon, collapsible sidebar, rounded corners, borderless design.
- Improved
Checkpoint: Reduced content widths for better readability: lesson content to 650px, course landing sections to 700px. Maintained Key Takeaways redesign with sparkle icon, collapsible sidebar, and all visual refinements.
- Improved
Checkpoint: Redesigned Key Takeaways section to match mockup design with sparkle icon and blue styling. Added light blue background (#EFF6FF) with rounded corners, sparkle icon next to blue title, numbered list format with bold headings, indented descriptions, and lightbulb illustration in top right corner. Removed border/shadow from topic context card. Implemented collapsible sidebar navigation. All visual refinements complete.
- Improved
Checkpoint: Removed border and shadow from topic context card by replacing Card component with plain div. Added collapsible sidebar navigation with toggle button (collapses to 64px width). Added 10px rounded corners to video player and Key Takeaways section. All visual refinements complete with clean, borderless design.
- Improved
Checkpoint: Added collapsible sidebar navigation with toggle button and visual refinements. Sidebar can now be collapsed to 64px width with chevron button, providing more screen space for lesson content. Added 10px rounded corners to video player and Key Takeaways section in IntroductionLessonRedesign. Removed borders from topic context card for cleaner appearance. All TypeScript checks passing.
- Improved
Checkpoint: Applied visual editor refinements to course viewer redesign. Fixed topic context card styling (light gray background #f9fafc, no border) and removed duplicate title and transcript section from IntroductionLessonRedesign component for cleaner lesson display. All TypeScript checks passing.
- Improved
Checkpoint: Redesigned course viewer page to match provided mockup with professional sidebar navigation, breadcrumbs, and improved lesson navigation. Implemented sidebar with progress tracking, expandable modules, locked lessons, breadcrumb navigation, mark as complete checkbox, and improved navigation buttons. Added 10 new translation keys. Created 22 unit tests (all passing).
- Improved
Checkpoint: Implemented smart "Resume" button on course landing page that takes users directly to first incomplete lesson. Added findFirstIncompleteLesson() function to analyze progress and locate next lesson. Button dynamically shows "Resume learning" (Återuppta lärande) when course is partially completed or "Start course" (Börja kurs) when not started. Smart navigation uses URL parameters (?topic=X&lesson=Y) to jump to exact lesson. Added Swedish translations. All 9 unit tests passing covering various progress states, button text logic, and URL generation.
- Improved
Checkpoint: Implemented comprehensive language validation system for course generation. Created detectLanguage() and validateCourseOutlineLanguage() functions using LLM to verify AI-generated content matches selected course language. Integrated validation into generateCourseOutline() with automatic rejection of mismatched content (>70% confidence). Added 15 unit tests covering all 13 supported languages, error handling, and integration scenarios. Prevents users from receiving course content in wrong language.
- Improved
Checkpoint: Fix instructor and CTA section Swedish translations on course landing page
- Improved
Checkpoint: Restore clickable lesson functionality and completion status indicators in course curriculum
- Improved
Checkpoint: Fix remaining Swedish translation errors on course landing page curriculum section
- Improved
Checkpoint: Complete Swedish localization for all lesson component templates
- Improved
Checkpoint: Complete Swedish localization for course player, lesson viewer, and quiz interfaces
- Improved
Checkpoint: Complete Swedish localization for course UI components
- Improved
Checkpoint: Checkpoint saved: Course Language Selection Feature
- Improved
Checkpoint: Checkpoint saved: CourseLandingRedesign Visual Edits - Removed Placeholder Elements
- Improved
Checkpoint: Checkpoint saved: Comprehensive ESLint Ignore Patterns
- Improved
Checkpoint: Complete ESLint Enforcement Workflow - Auto-fix, Pre-commit Hooks, and CI/CD
- Improved
Checkpoint: Checkpoint saved: Complete ESLint Enforcement Workflow - Auto-fix, Pre-commit Hooks, and CI/CD Integration
- Improved
Checkpoint: Checkpoint saved: ESLint Custom Rule for Sentence Case Enforcement
- Improved
Checkpoint: Added comprehensive STYLE_GUIDE.md (v1.0) documenting Swedish sentence case standard, acronym preservation, and title formatting guidelines. Created reusable database-title-standardization skill with sentence case utility, migration script, templates, and language standards reference.
- Improved
Checkpoint: Database title migration to sentence case: Created toSentenceCaseSmart utility function and migration script that converted 399 existing titles (38 courses, 84 topics, 277 lessons) to Swedish sentence case standard. Migration preserves acronyms like ADHD, AI, ML while converting all other words to lowercase except first letter. All existing content now follows sentence case formatting.
- Improved
Checkpoint: AI-generated title sentence case enforcement: Updated all AI course generation prompts to explicitly instruct the LLM to use sentence case (only first letter capitalized) for all titles. Modified courseGeneration.ts, courseGenerationOptimized.ts to include TITLE FORMATTING instructions in prompts. All new courses, topics, and lessons will now follow Swedish sentence case standard.
- Improved
Checkpoint: Comprehensive E2E & Integration Testing Complete
- Improved
Checkpoint: Automated Testing Complete - E2E & Integration Tests
- Improved
Checkpoint: QA Testing & Critical Fixes - tRPC routing fixed, all 16/16 tests passing, comprehensive QA reports created
- Improved
Checkpoint: Updated PRD.md to version 3.2 with comprehensive changelog for unified topic media generation system. Updated TECHNICAL_ARCHITECTURE_V4.md to version 4.2 with detailed section on Unified Topic Media Generation Architecture including database schema, component architecture, workflows, cost optimization, and backward compatibility.
- Improved
Checkpoint: Topic Media Generation Redesign: On-demand video/image generation from topic pages, replacing automatic video creation. New TopicMediaGenerator component with choice UI, regeneration limits, example previews, and recommended badges.
- Improved
Checkpoint: Updated roadmap.md with three new high-priority items:
- Improved
Checkpoint: Documentation Updates: TODO, PRD, and Technical Architecture
- Improved
Add project roadmap with next steps and completed features
- Improved
Checkpoint: Fixed video generation status persistence - video status now correctly displays after page reload. Added explainer video fields (explainerVideoJobId, explainerVideoStatus, explainerVideoUrl, explainerVideoThumbnail) to getCourseMetadata return, CourseData interface, and course data transformation in CourseLanding.tsx. Video generation progress now persists across page reloads.
- Improved
Checkpoint: Course Page Redesign + AutoContent Explainer Video Generation
- Improved
Checkpoint: Removed duplicate course description from hero section: - Hero section now shows only title, metadata (difficulty, duration, enrolled count), and CTAs - Full description content appears only in "What You Will Learn" section as structured learning outcome cards - Eliminates content duplication and improves page readability - Cleaner, more focused hero section that follows best practices for landing page design - All tests passing (4/4)
- Improved
Checkpoint: Updated course landing page to dynamically extract learning outcomes from course description HTML: - Parser extracts both H2 and H3 headings from description - Automatically maps appropriate icons based on section titles (transform, why, included, perfect, completing) - Displays all 5 sections from course description as learning outcome cards: 1. Transform Your Workplace with Neurodiversity Inclusion 2. Why Neurodiversity Matters for Your Organisation 3. What is included? 4. Why is this perfect for you? 5. After completing this, you will be able to... - Includes fallback to generic learning outcomes if no sections found - All tests passing (4/4)
- Improved
Checkpoint: Fixed HTML formatting issues in course redesign components: - Course description now properly renders HTML using dangerouslySetInnerHTML with prose classes - Added Streamdown import to ListenLearnRedesign and RealWorldExamplesRedesign for proper markdown rendering - Fixed missing icon imports (Briefcase, ExternalLink) in RealWorldExamplesRedesign - All lesson components now properly render formatted content instead of raw HTML tags - All tests passing (4/4)
- Improved
Checkpoint: Course Page Redesign - Complete Implementation
- Improved
Add course page redesign plan and video generation fixes
- Improved
Checkpoint: Fixed automatic video generation - videos now generate and appear automatically when courses complete. Also updated video description text.
- Improved
Checkpoint: Fixed automatic video generation for course topics - Complete end-to-end workflow now working:
- Improved
Checkpoint: Implemented real-time video generation progress tracking and video queue management system:
- Improved
Checkpoint: Fixed two critical bugs:
- Improved
Update version and changelog
- Improved
Checkpoint: Fix video generation pipeline: CourseViewer.tsx now populates selectedSourceIds from course data so the Generate Video button works correctly. Added logging to TopicExplainerVideo for easier debugging. All 17 tests passing.
- Improved
Checkpoint: Fixed automatic explainer video generation during course creation:
- Improved
Fix automatic video generation in CourseWizard
- Improved
Mark video generation investigation as complete
- Improved
Update todo.md with video generation investigation notes
- Improved
Checkpoint: Fixed 504 Gateway Timeout on course content generation by implementing asynchronous background processing:
- Improved
Fix 504 Gateway Timeout on course generation - implement async background processing
- Improved
Checkpoint: Implemented background video generation with progress tracking for course explainer videos. Users select topics in CourseWizard, videos generate asynchronously in background, CourseViewer shows real-time progress (e.g. "Video generating... 45%"), toast notifications when videos are ready, automatic video player display, and retry functionality for failed generations. Course remains fully usable during video generation.
- Improved
Checkpoint: Fixed tour guide conflict on MyGeneratedContent page:
- Improved
Checkpoint: Implemented automatic explainer video generation for courses according to Version 2.1 plan:
- Improved
Remove workflow files for GitHub push compatibility
- Improved
Checkpoint: Fixed missing translation keys (home.newFeatures) in en.json and sv.json. Removed Technical Details section from CourseVideoFeature. Header fix for MyGeneratedContent preserved.
- Improved
Checkpoint: Fixed missing translation keys: Added home.newFeatures section (title, learnMore, videoGeneration, sharing) to both en.json and sv.json locale files. The CourseVideoFeature hero badge now correctly shows "Explainer Videos" instead of the raw key "home.newFeatures.videoGeneration.title". The Home page New Features section also now uses proper locale keys instead of hardcoded fallback strings. TypeScript 0 errors.
- Improved
Checkpoint: Checkpoint saved: Fixed header elements (language switcher, username, logout button) not appearing on /notebook/:id/generated route. Root cause: that route renders MyGeneratedContent.tsx, not NotebookView.tsx. Added LanguageSwitcher import, useAuth hook, logoutMutation, and header UI elements (language switcher, user name display, logout button) to MyGeneratedContent header. TypeScript 0 errors, 52 tests passing (auth + explainer video).
- Improved
Checkpoint: Fixed NotebookView header visibility bug: - Removed hidden md:* classes from language switcher, user name, and logout button - All header elements now visible on NotebookView pages - TypeScript compiles with 0 errors
- Improved
Checkpoint: Navigation & Consistency Improvements: - Removed PWA install banner from all pages - Added feature page links to homepage (Course Video Feature and Sharing Features) - Made CourseVideoFeature and SharingFeatures bilingual (Swedish/English) using i18n - Created AppHeader component with logo, language switcher, user name, and logout - Added AppHeader to CourseVideoFeature and SharingFeatures pages - Enhanced NotebookView header with language switcher, user name, and logout button - All TypeScript compilation passes with 0 errors
- Improved
Checkpoint: Created comprehensive landing page at /course-video-feature describing the automatic explainer video generation feature for course topic introductions. Page includes hero section, 3-step user flow, UI mockup example, benefits grid, technical details, use cases, and CTAs. Fully responsive design with gradient styling.
- Improved
Checkpoint: Fix: Explainer videos not appearing in My Generated Content. Root cause was a race condition between background poller and getExplainerVideoStatus, plus createSource() not handling embeddingStatus/language fields. Fixes: pre-generated resultSourceId stored in progress, idempotent source creation with existence check, proper error logging, 30-minute timeout (up from 10). All 51 tests pass.
- Improved
Checkpoint: Dedicated Video Player Page: Created VideoPlayerPage component with HTML5 video player, script/transcript display with expand/collapse, download button, share link (copy to clipboard), video metadata (title, duration, language, creation date), source materials sidebar, and back navigation. Registered route at /notebook/:notebookId/video/:sourceId. Updated NotebookView and MyGeneratedContent to navigate to the new page instead of opening videos externally. 31 vitest tests passing, 0 TypeScript errors.
- Improved
Checkpoint: Add CivicEd-tutor project ID to explainer video generation: AutoContent API /content/Create calls now include projects: ["70962d39-5bc1-4183-b7e7-4eba1bffeb8b"] (CivicEd-tutor). Added AUTOCONTENT_PROJECT_ID constant, projects field to CreateExplainerVideoParams interface, and 2 new vitest tests. All 42 explainer video tests pass, 0 TypeScript errors.
- Improved
Checkpoint: Add CivicEd-tutor project ID to explainer video generation: AutoContent API /content/Create calls now include projects: ["70962d39-5bc1-4183-b7e7-4eba1bffeb8b"] (CivicEd-tutor). Added AUTOCONTENT_PROJECT_ID constant, projects field to CreateExplainerVideoParams interface, and 2 new vitest tests. All 42 explainer video tests pass, 0 TypeScript errors.
- Improved
Checkpoint: Fix progress stuck at 15% bug: root cause was generation started with old server code before autoContentRequestId was saved. Added server-side logging to getExplainerVideoStatus for debugging. Manually fixed the stuck generation. Code verified correct for future generations.
- Improved
Checkpoint: Fix progress stuck at 15%: AutoContent API returns status as percentage (0-100), not discrete codes. Updated mapStatusToProgress/mapStatusToProgressStatus to use percentage directly. Progress bar now shows real API percentage with descriptive milestones. Added "X% complete" text. All 39 tests pass.
- Improved
Checkpoint: Fix explainer video progress polling: getExplainerVideoStatus now polls AutoContent API directly for real-time status. Added autoContentRequestId column to generationProgress table. Smooth progress calculation (queued 15→30, processing 35→90) with descriptive milestone messages. 38 vitest tests pass.
- Improved
Checkpoint: Fix AutoContent API 400 Invalid Language error: added LANGUAGE_CODE_TO_AUTOCONTENT mapping (70+ languages) and mapLanguageCode() function in autoContentApi.ts to convert ISO 639-1 codes (e.g. "sv") to AutoContent API language names (e.g. "svenska"). 34 vitest tests passing including 16 new language mapping tests.
- Improved
Checkpoint: Explainer Video generation feature via AutoContent API: backend API wrapper (autoContentApi.ts), tRPC procedures (generate.explainerVideo, generate.getExplainerVideoStatus), ExplainerVideoGenerator and VideoPlayer frontend components, integration into ContentGenerator wizard, MyGeneratedContent page with filter support, NotebookView with video badges and click handlers. 18 vitest tests passing. DB schema updated with thumbnailUrl, autoContentRequestId, videoShareUrl columns.
- Improved
Checkpoint: Fix MIME type text overflow on source cards (mobile): Created formatFileType() utility in sourceIcons.tsx that converts long MIME types to user-friendly labels (e.g., "application/vnd.openxmlformats-officedocument.wordprocessingml.document" → "Word"). Updated 6 components: ChatSourceSelector, MobileSourcesSheet, SourceFilterSheet, NotebookDetail, NotebookView, MyGeneratedContent. Added max-w-[120px] truncate CSS safety net on Badge elements. 31 vitest tests all passing.
- Improved
Checkpoint: Fix indexing progress indicator getting stuck: 1) Added 10-minute timeout for stuck sources (pending/processing) - treats them as completed in progress calculation, 2) Added dismiss (X) button on the progress banner, 3) Polling stops automatically when no actively indexing sources remain, 4) Failed sources now count as completed in progress calculation
- Improved
Checkpoint: Fix audio transcription: send audio buffer directly to Whisper API instead of re-downloading from S3 URL. Root cause: S3 returned wrong content-type causing Whisper to receive unrecognizable audio (empty text, null language). Added audioBuffer/mimeType to TranscribeOptions, updated routers.ts to pass buffer directly.
- Improved
Checkpoint: Improved version indicator visibility: 1. Fixed version showing as "dev-build" - added fallback to read existing version.ts when git is unavailable, plus timestamp-based fallback 2. Added BUILD_DATE alongside BUILD_VERSION for build freshness verification 3. Made version more visible in Home footer with styled badge format (v{hash}) and build date 4. Added version footer to Notebooks dashboard page 5. Added version info at bottom of AppDrawer (sidebar menu) 6. Updated copyright year to use dynamic year instead of hardcoded 2024 7. Added 6 vitest tests for version generation (all passing)
- Improved
Checkpoint: Fix production upload failure (HTTP 429 rate limiting): 1. Increased upload rate limit from 20/hr to 100/hr per user 2. Changed rate limiting from IP-based to user session-based (app_session_id cookie) 3. Added client-side 429 error detection with user-friendly toast message 4. Added /api/performance/frontend POST endpoint to fix 404 spam in console 5. Added comprehensive vitest tests for rate limiting (6 new tests, all passing)
- Improved
Checkpoint: Removed the 7-step onboarding tutorial dialog completely. Deleted 11 files: TutorialOverlay.tsx, TutorialContext.tsx, TutorialTrigger.tsx, tutorialSteps.ts, useAutoStartTutorial.ts, VideoTutorialLibrary.tsx, VideoPlayerModal.tsx, videoTutorial.ts, videoTutorials.ts, Tutorials.tsx. Cleaned up imports from Home.tsx, Notebooks.tsx, App.tsx, main.tsx, AppDrawer.tsx. Kept LanguageOnboarding (language selection dialog) intact.
- Improved
Checkpoint: Fixed "Unable to transform response from server" tRPC error when uploading .docx files. Root cause: the upload mutation was synchronous - it did S3 upload + text extraction + RAG indexing in a single request, causing gateway timeouts for large files. Fix: Made RAG indexing fire-and-forget (async background processing). The upload now returns immediately after S3 upload + text extraction + DB save, and the client polls sources.list for indexing status updates. All 4 upload serialization tests pass.
- Improved
ci: add GitHub Actions workflows for security and DB guard testing
- Improved
temporarily remove workflows for push (GitHub App permission issue)
- New
CivicNotes v1 - NotebookLM clone with test cleanup infrastructure and CI guard
- Improved
Checkpoint: Three improvements: (1) Cleaned up custom_templates table - all 571 records were test data, plus 540 template_usage records. Fixed trackCustomTemplate to use correct insertId from drizzle results. (2) Cleaned up generation_progress table - removed 1227 orphaned/test records, kept 16 real records. (3) Created GitHub Actions workflow (.github/workflows/test-db-guard.yml) that runs pnpm test:safe on push/PR to main and develop branches, with proper secret injection and failure reporting.
- Improved
Checkpoint: Three improvements: (1) Fixed notebooks.delete test by adding deletedAt IS NULL filter to getNotebookByNotebookId - all 8 notebook tests now pass. (2) Cleaned up 380 test courses plus 351 topics, 406 lessons, 136 courseProgress records, and 8 test users from production DB - kept 8 real courses. (3) Added CI guard script (scripts/test-db-guard.mjs) that snapshots DB counts before/after tests and fails if any table grows - available as pnpm test:safe.
- Improved
Checkpoint: Added automatic test cleanup infrastructure to prevent test data from polluting the production database. Created testCleanup.ts with trackNotebook/trackCourse/trackCustomTemplate helpers, vitest.setup.ts with global afterEach cleanup, and updated all 59 test files that create notebooks or courses to use the tracking functions. Verified cleanup works correctly - DB counts remain stable before and after test runs.
- Improved
Checkpoint: Merged UploadProgressBanner and IndexingProgressBanner into a single unified SourceProgressIndicator component. The new component is centered in the content area (not floating at the top) and shows both upload progress (file name, count, status) and indexing progress (sources indexed count, percentage) in one clean card. Added Swedish and English translations for new status messages. Removed old floating banner imports from MyGeneratedContent page. All 25 unit tests pass.
- Improved
Checkpoint: Fixed the persistent "Unable to transform response from server" tRPC serialization error when uploading Word documents. Root cause: Workbox Service Worker was caching POST requests (mutations) with a 10-second timeout, causing stale/incorrect cached responses to be returned. Fix: Updated vite.config.ts Workbox configuration to only cache GET requests and increased timeout from 10s to 30s. Also removed debug logging from main.tsx.
- Improved
Checkpoint: Fixed tRPC serialization error when uploading Word documents by improving error handling and ensuring all return values are serializable primitives
- Improved
Checkpoint: Fixed IndexingProgressBanner not hiding when indexing complete. The banner was counting all sources (including generated content like briefing documents, audio overviews, etc.) instead of only uploaded/web sources that need indexing. Changed logic to filter indexableSources to only count uploaded and web sources, excluding generated content. Banner now correctly hides when all indexable sources are complete.
- Improved
Checkpoint: Added two new features for better indexing visibility: 1) Toast notification when all sources finish indexing, encouraging users to start chatting or generating content. Uses useRef to track state and only shows once per batch. 2) Floating progress banner showing indexed sources count (e.g., "3/5 källor indexerade") with percentage and progress bar. Both features update in real-time as sources complete indexing.
- Improved
Checkpoint: Implemented real-time status updates for sources during indexing. Sources with "pending" or "indexing" status are now automatically polled every 3 seconds, updating the UI in real-time as they progress through the indexing pipeline. Polling stops automatically when all sources are indexed. Visual feedback is provided through the existing SourceStatusBadge component which shows different colors and icons for each status (pending, processing, indexed, failed).
- Improved
Checkpoint: Implemented upload progress display on Generated Content page. Created global UploadProgressContext for sharing upload state across components, UploadProgressBanner component that shows file name, progress percentage, and status (uploading/processing/retrying) in a floating banner. Added Swedish and English translations for upload status messages. The banner auto-dismisses when upload completes.
- Improved
Checkpoint: Hidden URL input, Audio, Image, Excel/CSV, and Copied Text upload options from the Add Sources dialog. Kept only: PDF, Word (DOC/DOCX), PowerPoint, Website, and YouTube upload options. This simplifies the source upload UI and focuses on the most commonly used file types.
- Improved
Checkpoint: Improved YouTube transcript error handling with user-friendly Swedish error messages. When a YouTube video has transcripts disabled, users now see a clear explanation and suggestions to try another video or add content manually. Added comprehensive error handling for: disabled transcripts, unavailable videos, age-restricted content, and network errors. Includes 18 unit tests covering all error scenarios.
- Improved
Checkpoint: Fixed PowerPoint (PPTX) file upload that was stuck in "Pending" status. The issue was caused by incorrect JSZip library import - changed from `const JSZip = await import("jszip")` to `const JSZipModule = await import("jszip")` and then using `JSZipModule.default` to get the actual JSZip class. PPTX text extraction and RAG indexing now work correctly.
- Improved
Checkpoint: Fixed Word document (DOCX) upload serialization error and added email retry logic for magic link sending. Changes include: explicit type conversion for upload response values, detailed DOCX extraction logging, and 3-attempt retry with 30s timeout for email sending.
- Improved
Checkpoint: Added retry logic to magic link email sending: 3 attempts with 30s timeout and 2s delay between retries. This makes the email system more robust against temporary network issues. All 7 email tests pass.
- Improved
Checkpoint: Fix onboarding flow - Tutorial dialog no longer conflicts with language selection. New users now see language selection first, then tutorial starts automatically after completing language preference. Prevents dialog layering issues and ensures smooth onboarding experience.
- Improved
Checkpoint: Fix onboarding tutorial activation - Tutorial now starts automatically when users click "Get Started" button and navigate to notebooks page. Next button functionality verified working correctly.
- Improved
Checkpoint: Implemented Priority 1 (Critical UX Enhancements) and Priority 3 (Visual & Interaction Polish) improvements for notebook creation flow:
- Improved
Checkpoint: Fixed "Back to Notebook" button to always navigate to /notebooks overview page instead of individual notebook page
- Improved
Checkpoint: Fixed duplicate Browse Templates buttons on Step 3, clarified that progress bar exists and sources are saved correctly (navigation issue), and added comprehensive Playwright E2E tests for notebook creation flow
- Improved
Checkpoint: Added smooth transition animations to notebook creation flow: fade-in and slide-in effects when advancing between steps, plus animated step indicator badges for polished visual feedback
- Improved
Checkpoint: Improved notebook creation UX: automatically advance from Step 2 (Add Sources) to Step 3 (Generate Content) after user uploads first source, eliminating manual Next button click
- Improved
Checkpoint: Implemented automatic retry with exponential backoff (1s, 2s, 4s) for network errors and timeouts during file upload. Added network error detection and improved user feedback showing retry reason and attempt count.
- Improved
Checkpoint: Fixed tRPC serialization error on file upload by delaying sheet close (500ms) to prevent component unmount during mutation initialization
- Improved
Checkpoint: Improved upload UX: AddSourceSheet closes immediately when files are selected, upload continues in background, and sources appear in list immediately with real-time indexing status updates
- Improved
Checkpoint: Fixed upload flow regression: AddSourceSheet now closes immediately after upload from Sources tab without showing QuickTemplates dialog
- Improved
Checkpoint: File upload UX improvements: increased file size limits to 100MB for documents, added drag-and-drop upload on Sources tab with visual feedback and file validation
- Improved
Checkpoint: Fixed File Upload Error - tRPC Serialization Issue
- Improved
Checkpoint: Sources Tab Refactored - Only Uploaded Sources
- Improved
Checkpoint: Audio Tab Repositioned
- Improved
Checkpoint: Courses Tab Repositioned
- Improved
Checkpoint: Translation System Fixed - All Tabs Working
- Improved
Checkpoint: Translation Fixes & Action Buttons Added
- Improved
Checkpoint: UI Improvement - Sources Tab Repositioned
- Improved
Checkpoint: Indexing UX Improvements - Toast Notifications & Time Estimates
- Improved
Checkpoint: Fixed URL Import Flow - Sources Appear Immediately
- Improved
Checkpoint: URL Import UX & Retry Button Improvements
- Improved
Checkpoint: Fixed source indexing system and improved retry button visibility
- Improved
Checkpoint: Added one-click re-indexing from history entries. Each history item now has a rotating refresh button that triggers re-indexing for that specific source. Includes loading state with spinning icon and toast notifications for success/failure.
- Improved
Checkpoint: Added comprehensive indexing history log showing completed operations with timestamps, duration, chunk counts, and warnings. Updated database schema to track indexing metrics, modified all indexing endpoints to record history data, and created collapsible IndexingHistoryLog component with relative timestamps and warning indicators.
- Improved
Checkpoint: Added live status updates, batch retry, and indexing queue visualization for source indexing:
- Improved
Checkpoint: Added indexing progress indicator and retry mechanism for source indexing:
- Improved
Checkpoint: Implemented automatic source indexing and database cleanup
- Improved
Checkpoint: Fix chat to start with no sources pre-selected when user starts a new chat
- Improved
Checkpoint: Update button text from "Select" to "Select source" for better clarity
- Improved
Checkpoint: Replace hardcoded text with translation keys in Notebooks.tsx
- Improved
Checkpoint: Replace hardcoded text with translation keys in Sources view
- Improved
Checkpoint: Add missing Swedish translations for "New Briefing", "New Study Guide", and "New Audio" buttons
- Improved
Checkpoint: Add Swedish translations for remaining hardcoded text in MyGeneratedContent.tsx
- Improved
Checkpoint: Fix CivicNotes title displaying black text on mobile email clients
- Improved
Checkpoint: Fix magic link email template styling for better mobile readability
- Improved
Checkpoint: Add comprehensive translation infrastructure for complete Swedish language support
- Improved
Checkpoint: Add Swedish translations for hardcoded text in MyGeneratedContent.tsx
- Improved
Checkpoint: Update homepage hero text to emphasize personalized learning and organizational use
- Improved
Checkpoint: Add comprehensive Slack integration guide for Sentry error notifications
- Improved
Checkpoint: Enhanced Sentry monitoring with improved performance tracking and comprehensive setup guide
- Improved
Checkpoint: Remove dev-build version display from Notebooks page
- Improved
Checkpoint: Add demo video recording task and test user creation script
- Improved
Add demo video recording task and test user creation script
- Improved
Checkpoint: Updated demo video recording solution to use session token authentication instead of OAuth login:
- Improved
Checkpoint: Added dual video format support (YouTube + MP4) to homepage and created automated Playwright recording solution:
- Improved
Checkpoint: Added professional student photos to testimonials section for increased authenticity:
- Improved
Checkpoint: Added student testimonials carousel and YouTube video embed capability to complete home page social proof:
- Improved
Checkpoint: Implemented six home page enhancements to increase engagement and conversions:
- Improved
Checkpoint: Applied same copy refinements to Swedish translation for brand consistency:
- Improved
Checkpoint: Refined English copy across benefits and features sections for more concise, impactful messaging:
- Improved
Checkpoint: Updated English hero section with more playful, approachable messaging:
- Improved
Checkpoint: Updated student benefits section title from "För studerande och föräldrar" (For Students and Parents) to "För alla!" (For everyone!) to broaden the appeal and make it more inclusive.
- Improved
Checkpoint: Added student-focused benefits section to home page under hero CTA button:
- Improved
Checkpoint: Complete 100% Swedish translation coverage with time formatting, placeholders, and profile settings:
- Improved
Checkpoint: Complete additional UI translations for tutorials, navigation, and notifications:
- Improved
Checkpoint: Fix remaining untranslated empty states and error messages in Swedish translation:
- Improved
Checkpoint: Complete comprehensive Swedish translation implementation for CivicNotes:
- Improved
Checkpoint: Added 100+ translation keys for full Swedish coverage - Progress Dashboard stats, Create Notebook dialog, empty states, time indicators, and common UI elements. Translation infrastructure now complete with keys ready for component integration.
- Improved
Checkpoint: Comprehensive Swedish translation coverage - Added 80+ translation keys and updated 6 components (AppDrawer, MyGeneratedContent, ContentGenerator, AddSourceSheet, VoiceRecorder, ContentMenu) to use translation keys for menu navigation, content type tabs, action buttons, dialogs, and content actions
- Improved
Checkpoint: Fix incomplete Swedish translations in NotebookDetail page and related components
- Improved
Checkpoint: Checkpoint saved: Remove Sentry test section from Home page
- Improved
Checkpoint: Checkpoint saved: Complete Home page multi-language implementation with automatic language detection
- Improved
Checkpoint: Translate Home page (landing page) with English and Swedish language support: - Added useTranslation hook to Home page - Created translation keys for hero section, header buttons, and CTAs - Translated hero title, subtitle, and call-to-action button - Translated header navigation buttons (My Notebooks, Log Out, Get Started) - Language switching now works on landing page with localStorage persistence - Complete multi-language support across all major pages (Home, Notebooks, NotebookDetail, ChatHistory, VideoTutorialLibrary)
- Improved
Checkpoint: Complete multi-language support by translating ChatHistory and VideoTutorialLibrary pages: - Added useTranslation hook to ChatHistory page with comprehensive translations - Translated all UI strings in VideoTutorialLibrary page (search, results, empty states) - All major pages now support English and Swedish language switching - Language switcher functional with localStorage persistence - Translation infrastructure complete and ready for additional languages
- Improved
Checkpoint: Implement comprehensive multi-language support (English and Swedish) for CivicNotes UI: - Translated NotebookDetail page (toast messages, buttons, key UI elements) - Added comprehensive translation keys for Chat, Settings, VideoTutorialLibrary pages - Translation infrastructure ready for remaining pages - All translation files updated with Swedish and English translations - Language switcher functional and integrated
- Improved
Checkpoint: Implemented comprehensive multi-language support (i18n) for CivicNotes:
- Improved
Checkpoint: Syncing local changes with GitHub repository. This checkpoint will pull the latest changes from the remote repository and push any local modifications, ensuring both environments are synchronized.
- Improved
Checkpoint: Fixed notebook creation modal positioning issue where dialog appeared at the bottom of the screen on desktop. Removed complex positioning classes (fixed, inset-0, translate transforms) from DialogContent and simplified to use default centered positioning. Modal now appears properly centered on desktop while maintaining responsive behavior.
- Improved
Checkpoint: Fixed critical bug where clicking "Delete" in notebook menu redirected to notebook detail page instead of showing confirmation dialog. Root cause was event propagation from DropdownMenuItem to Card onClick handler. Added e.stopPropagation() to prevent event bubbling. Verified fix with comprehensive Playwright testing - both add and delete workflows now work correctly.
- Improved
Checkpoint: Added course generation tutorial to video library
- Improved
Checkpoint: Added comprehensive video tutorial library with 16 tutorials across 6 categories
- Improved
Checkpoint: Added interactive user onboarding tutorial system
- Improved
Checkpoint: Added comprehensive feature documentation with screenshots
- Improved
Checkpoint: Security Hardening: Comprehensive OWASP Top 10 protection implemented
- Improved
Checkpoint: Fixed preview loading failure by updating security headers to allow iframe embedding from Manus domains. Changed X-Frame-Options from DENY to ALLOWALL in development mode and updated CSP frame-ancestors directive to include Manus domains (*.manus.im, *.manus.computer, *.manusvm.computer).
- Improved
Checkpoint: Implement URL validation and normalization feature
- Improved
Checkpoint: Fixed Sentry errors CIVICNOTES-2 and CIVICNOTES-3:
- Improved
Checkpoint: Fix URL import functionality: - Added extractedText field to importUrl source creation to fix downstream processing - Improved URL validation with automatic www. prefix normalization - Added comprehensive error handling for invalid and unreachable URLs - Created test suite to verify URL import functionality - All tests passing (8/8)
- Improved
Checkpoint: Fix web search feature URL validation issue
- Improved
Checkpoint: Implemented search result caching and progressive results display features:
- Improved
Checkpoint: Completed "Find Sources on Web" feature implementation
- Improved
Checkpoint: Add "Find Sources on Web" feature structure
- Improved
Checkpoint: Fixed overlapping text issue in Add Sources dialog header on mobile view by removing redundant label and description text, consolidating instructions into the input placeholder
- Improved
Checkpoint: Fixed NewNotebookFlow dialog mobile UI issues: - Removed gap at top by making dialog fullscreen on mobile (h-[100vh], fixed positioning) - Fixed header step indicator overflow with horizontal scroll - Dialog now properly fills entire mobile viewport without gaps - Desktop behavior unchanged (centered modal with rounded corners)
- Improved
Checkpoint: Fixed mobile dialog modal to be fullscreen - NewNotebookFlow dialog now takes up full screen on mobile devices while maintaining centered card layout on desktop
- Improved
Checkpoint: Set Swedish as default language in notebook creation dialog for better UX. Changed the defaultLanguage parameter from "en" to "sv" in NewNotebookFlow component.
- Improved
Checkpoint: Implemented step-by-step new notebook flow with three stages: 1. Create notebook - Enter title and select language 2. Upload sources - Add files, URLs, or web content 3. Select template - Choose quick template to generate content
- Improved
Checkpoint: Fix magic link authentication error - "Unable to transform response from server"
- Improved
Checkpoint: Enhanced podcast script generation with language-specific instructions for more natural multilingual conversations. Updated LLM prompts to generate scripts in the selected language with culturally appropriate host names, expressions, and conversational patterns. Added comprehensive test coverage for multiple languages including English, Swedish, Spanish, French, and more.
- Improved
Checkpoint: Add language selector to audio overview generation for consistent multi-language support
- Improved
Checkpoint: Add language selector to study guides, flashcards, and briefing generation
- Improved
Checkpoint: Fixed language system and source upload bugs:
- Improved
Checkpoint: Implemented language-specific voice selection and language preference onboarding flow
- Improved
Checkpoint: Comprehensive language support implementation completed:
- Improved
Checkpoint: Extended language support to flashcards, added language badges to notebook cards, and implemented language-aware RAG chat responses
- Improved
Checkpoint: Implemented comprehensive language support features:
- Improved
Checkpoint: Implement language selection feature for notebooks with audio generation integration
- Improved
Checkpoint: Implement language selection feature (Swedish & English)
- Improved
Checkpoint: Remove custom session replay and error logging implementations
- Improved
Checkpoint: Fixed React hooks error by ensuring hooks are called unconditionally in SessionReplayProvider and useSessionReplay hook. The authentication check is now handled inside the useEffect instead of conditionally calling the hook.
- Improved
Checkpoint: Added comprehensive Session Replay functionality to CivicNotes:
- Improved
Checkpoint: Implemented comprehensive performance monitoring system with API response tracking, database query monitoring, HTTP request tracking, and transaction traces. Added admin dashboard with real-time metrics visualization, slow operation detection, and performance breakdown by operation type. All tests passing.
- Improved
Checkpoint: Fixed Sentry error tracking integration: - Removed development mode filter that was blocking error reports - Added VITE_SENTRY_DSN environment variable for frontend access - Exposed Sentry globally for testing and debugging - Updated error capture in test button to use Sentry.captureException() - Verified errors are now successfully sent to Sentry dashboard
- Improved
Checkpoint: Completed error dashboard feature with comprehensive error tracking and monitoring capabilities:
- Improved
Checkpoint: Integrated Sentry error tracking and monitoring for both frontend and backend
- Improved
Checkpoint: Testing & Quality Assurance + Security Implementation
- Improved
Checkpoint: Implemented comprehensive security measures for launch preparation:
- Improved
Checkpoint: Updated chat history page: added hamburger menu for navigation and removed back arrow button. Users can now access the full app menu from the chat history page, consistent with other pages like Trash.
- Improved
Remove workflow file to fix GitHub push permissions
- Improved
Checkpoint: Initial checkpoint for CivicNotes (NotebookLM Clone) with comprehensive features:
- Improved
Checkpoint: Updated GitHub integration with new personal access token. Project includes comprehensive documentation (PRD, Technical Architecture, Developer Guide) and updated todo.md tracking all features and enhancements.
- Improved
Checkpoint: UI improvements for Sources page: - Removed the "Select" button from the header to simplify the interface - Added a three-dots menu (⋮) to each source item with delete option - For generated sources, the menu includes both "Regenerate" and "Delete" options - For regular sources, the menu only shows the "Delete" option - Clicking delete from the menu opens the confirmation dialog
- Improved
Checkpoint: Reorganized Sources page header layout - moved action buttons (Select, Add Source) to a new row under the Sources title for better mobile responsiveness and clearer visual hierarchy
- Improved
Checkpoint: Complete NotebookLM clone with notebook management, source upload (PDF, documents, audio, video, URLs), RAG-based chat with citations, audio overview generation, content generation (flashcards, quizzes, study guides), voice recording with transcription, session management, trash/recycle bin with 30-day retention, and mobile-responsive design. All reported bugs fixed except flash of Filter Sources screen.
- Improved
Checkpoint: Fixed action button truncation in Sources section of MyGeneratedContent page. Added flex-wrap to button container to allow buttons to wrap on mobile instead of being cut off. All four buttons (Select All, Deselect, Cancel, Add Source) are now fully visible on mobile devices.
- Improved
Checkpoint: Fixed mobile UI overflow in NotebookDetail Sources selection mode. Action buttons (Tag, Export, Delete, Cancel) now use responsive grid layout that properly fits within mobile viewport instead of extending beyond screen boundaries.
- Improved
Checkpoint: Fixed mobile view UI issues for Sources section in NotebookDetail page: - Made action bar responsive with flex-col on mobile, flex-row on desktop - Separated "Select All" and "Show Generated" sections into distinct groups - Added proper spacing and wrapping for mobile layouts - Made bulk action buttons (Tag, Export, Delete) stack properly on mobile with icon-only display - Improved readability by adjusting text layout and removing ml-auto on mobile
- Improved
Checkpoint: Fixed Sources tab UI overlap issue where the header row with action buttons was overlapping with the bottom action bar. Adjusted padding and spacing in the main content area to ensure proper visual hierarchy and prevent overlapping elements.
- Improved
Checkpoint: Added hamburger menu button to trash page for consistent navigation across all pages
- Improved
Checkpoint: Fixed mobile UI layout issues on trash page: - Made header section responsive with flex-col on mobile - Made stats card full-width on mobile - Made tabs and action buttons wrap properly on mobile - Made restore/delete buttons stack vertically on mobile - Made notebook card headers responsive with proper spacing - Improved overall mobile experience with proper breakpoints
- Improved
Checkpoint: Added two new trash management features:
- Improved
Checkpoint: Add "Empty Trash" button feature to permanently delete all trashed items at once with confirmation dialog
- Improved
Checkpoint: Implemented three trash management features:
- Improved
Checkpoint: Added Trash navigation link to sidebar and implemented auto-cleanup scheduled job
- Improved
Checkpoint: Implemented deletion confirmation dialogs and soft delete system with 30-day trash/recycle bin
- Improved
Checkpoint: Implemented comprehensive cleanup logic for notebook and source deletions
- Improved
Checkpoint: Add unique pastel color assignment to notebooks
- Improved
Checkpoint: Removed branch feature from notebook chat interface and cleaned up related code: - Removed BranchSwitcher component and import from NotebookView.tsx - Removed branch button from chat message actions - Removed activeBranchId state and branch-related mutations - Removed branches router from server/routers.ts - Removed all branch-related database functions from db.ts - Removed branchId parameter from aiSources router and database functions - Deleted BranchSwitcher.tsx component file - Deleted branch-related test files (branches.test.ts, branches.create.test.ts, branchAndAiSource.test.ts) - Updated aiSources.test.ts to remove branchId test case - Branch database tables remain in schema to preserve existing data
- Improved
Checkpoint: Fixed 404 error when clicking "Open" on chat history items by adding missing /notebook/:notebookId/chat route to App.tsx
- Improved
Checkpoint: Added chat history page with navigation link in drawer menu. Users can now view all their chat sessions across all notebooks, with options to open or delete sessions. The page displays session titles, notebook names, creation/update timestamps, and provides quick access to resume conversations.
- Improved
Checkpoint: Removed "Clean Vector Store" functionality and cleaned up related code: - Removed cleanupVectorStore procedure from server/routers.ts - Removed Clean Vector Store button and mutation from NotebookDrawer component - Removed Clean Vector Store button, mutation, and confirmation dialog from NotebookView page - Removed unused imports (Trash2 icon) and props (onCleanVectorStoreClick) - Removed cleanupVectorConfirmOpen state variable
- Improved
Checkpoint: Fixed chat header issues: 1. Removed generate icon (Sparkles button) from chat header 2. Fixed PDF export to only include current chat session messages instead of all notebook messages - Updated exportPDF procedure to accept optional sessionId parameter - Modified frontend to pass activeSessionId when exporting - Export now uses getMessagesBySession when sessionId is provided
- Improved
Checkpoint: Fixed flash of "Filter Sources" screen appearing for 2 seconds when clicking Chat from notebook. Now initializes activeSessionId from URL params and shows loading spinner instead of empty state during session load.
- Improved
Checkpoint: Initial NotebookLM clone project scaffold with React 19, Tailwind 4, Express, tRPC, and Manus OAuth authentication configured and ready for feature development.
- Improved
Checkpoint: Made sources section collapsible and closed by default in chat interface. Users can now click to expand/collapse the sources list, reducing visual clutter while keeping citations accessible.
- Improved
Checkpoint: Removed source metadata section (1 source, Medium confidence, Show 3 chunks) from summary response UI for a cleaner interface. The RetrievalInfo component now returns null instead of displaying metadata badges.
- Improved
Checkpoint: Fixed UI layout issue where text content was appearing below the chat input area. Increased bottom padding from pb-48 (192px) to pb-[280px] on mobile and pb-[240px] on desktop to properly accommodate the fixed chat input container including source selection area, input field, and iOS safe area insets.
- Improved
Checkpoint: Fixed header buttons (Clean Vector Store, Export PDF, Generate, New Chat) not being visible on iOS mobile. Changed responsive classes from hidden on mobile to visible with icon-only display on small screens and full text on larger screens. Buttons now show icons on mobile (<1024px) and icons + text on desktop (>=1024px).
- Improved
Checkpoint: Fixed sticky header disappearing after sending first message in notebook chat. Removed overflow-hidden from parent container to allow sticky positioning to work properly. The header now remains visible at the top during chat interactions and scrolling.
- Improved
Checkpoint: Fixed missing sticky header in notebook chat page by adding overflow-hidden to parent container and backdrop-blur effect to header for better iOS Safari compatibility
- Improved
Checkpoint: Fixed sticky chat input layout - messages no longer scroll underneath the input area. Increased bottom padding from pb-32 to pb-48 on the messages container to provide adequate clearance for the fixed chat input at the bottom.
- Improved
Checkpoint: Fixed AI streaming functionality - responses now stream token-by-token instead of appearing all at once. Updated SSE event parsing logic in useStreamingChat hook to properly track event types across line boundaries.
- Improved
Checkpoint: Fixed critical chat interface bugs:
- Improved
Checkpoint: Fixed three critical notebook chat issues:
- Improved
Checkpoint: Fixed chat UI issues: 1. Made header sticky with z-50 to stay on top 2. Added proper formatting with Streamdown and 5px padding to AI responses 3. Streaming already implemented via useStreamingChat hook 4. Added optimistic UI update to show user messages immediately when sent
- Improved
Checkpoint: Removed SessionSelector and BranchSwitcher dropdowns from chat header: - Removed mobile/tablet SessionSelector dropdown (lines 1119-1136) - Removed desktop SessionSelector and BranchSwitcher dropdowns (lines 1137-1164) - Header remains sticky (already had sticky top-0 z-10 classes) - Cleaner, simpler header focused on notebook/session title - Updated todo.md to mark tasks as complete
- Improved
Checkpoint: Removed standalone chat feature and cleaned up related code: - Removed StandaloneChat.tsx and ChatHistory.tsx pages - Removed /chat and /chat-history routes from App.tsx - Removed standalone chat navigation items from AppDrawer (mobile and desktop) - Removed listStandalone and createStandalone procedures from chatSessions router - Removed getStandaloneChatSessions function from db.ts - Kept notebook-based chat functionality intact (core RAG feature) - Updated todo.md to mark task as complete
- Improved
Checkpoint: Added typing indicator to chat interfaces
- Improved
Checkpoint: Chat Interface Customization - Enhanced empty state messages and input placeholders
- Improved
Checkpoint: Removed suggested questions from initial chat interface - cleaned up empty state to only show "Start a conversation" message without question suggestions
- Improved
Checkpoint: Fixed suggested questions feature to use ALL uploaded sources instead of limiting to first 3 sources
- Improved
Checkpoint: Removed the DueFlashcardsBanner component from the notebook chat page as requested by the user. The flashcards section that appeared at the top of the chat interface has been removed, providing a cleaner chat experience.
- Improved
Checkpoint: Implemented standalone chat feature without notebook/source connections
- Improved
Checkpoint: Fixed chat source selection flow - users can now select sources from within the chat interface after creating a new chat. Added ChatSourceSelector component that displays when no sources are selected, allowing users to choose which notebook sources to use for their conversation.
- Improved
Checkpoint: Fixed bug where new chat sessions were incorrectly starting with attached sources from the ContinueChatDialog. When users click "Start New Chat", the session now starts completely clean without any sources attached.
- Improved
Checkpoint: Chat Feature Enhancements - January 2026
- Improved
Checkpoint: Extended progress persistence to briefings, study guides, flashcards, and quizzes for consistent user experience across all content types.
- Improved
Checkpoint: Implemented progress persistence for audio generation:
- Improved
Checkpoint: Enhanced NotebookLM clone with two key improvements:
- Improved
Checkpoint: Verified that generating indicators are already implemented and working correctly for flashcards, study guides, and briefings. Backend sets generationStatus to generating when content creation starts, and frontend displays badge with spinning loader icon. Tested with briefing generation showing progress card and generating status badge.
- Improved
Checkpoint: Implemented background generation pattern for flashcards, study guides, and briefings to provide consistent UX across all content types.
- Improved
Checkpoint: Implement background quiz generation with real-time progress updates
- Improved
Checkpoint: Implemented enhanced quiz customization dialog with difficulty level and question count selection
- Improved
Checkpoint: Fixed Continue button in course landing page to navigate to last accessed lesson by adding query invalidation. Fixed quiz generation by removing non-existent customization dialog and starting generation directly. Added debug logging to track generation flow. Audio overview generation still has network/API issues that need investigation.
- Improved
Checkpoint: CivicNotes (NotebookLM Clone) - Production-ready checkpoint with all core features implemented:
- Improved
Checkpoint: Redesigned course content bottom sheet to match reference image with circular radio buttons, book/play icons, and cleaner list layout without blue highlight boxes
- Improved
Checkpoint: Updated terminology from "Module" to "Topic" throughout the application and ensured text alignment is left-aligned in course content display.
- Improved
Checkpoint: Changed "Continue Learning (17% complete)" button text to simply "Continue" in the course detail page (CourseLanding.tsx)
- Improved
Checkpoint: Added three UI enhancements to course curriculum view:
- Improved
Checkpoint: Implemented "Continue Learning" functionality that navigates users to their last accessed lesson position in courses.
- Improved
Checkpoint: Removed the Share button from the CourseViewer page (notebook page). This includes: - Removed Share2 icon from lucide-react imports - Removed handleShare function that generated shareable links - Removed shareMutation from tRPC mutations - Removed the Share button from the UI header
- Improved
Checkpoint: Added numbered learning objectives (1., 2., 3., etc.) to lesson display in course introduction sections. Updated both courseGeneration.ts and courseGenerationOptimized.ts to format learning objectives with numbers.
- Improved
Checkpoint: Lesson View UI Improvements: - Removed Card/box wrappers from lesson text content for cleaner reading experience - Moved bookmark icon to the top header for better accessibility - Improved lesson text formatting with larger prose size (prose-base instead of prose-sm) - Added custom CSS for better typography: clear heading hierarchy, proper paragraph spacing (1.25em), improved line height (1.75) - Enhanced heading styles with better margins and font weights - All lesson types (introduction, text, numbered_lesson, examples, summary, repetition) now render without boxes
- Improved
Checkpoint: Fixed audio player layout issue where the Regenerate button was being cut off at the right edge on mobile devices. Made the voice selector and regenerate button row responsive with flex-wrap, reduced voice selector width on mobile (180px vs 200px on desktop), and added flex-shrink-0 to prevent button compression.
- Improved
Checkpoint: Verified ElevenLabs API integration for audio generation
- Improved
Checkpoint: Fixed ElevenLabs API character limit error by implementing intelligent text chunking:
- Improved
Checkpoint: Fixed Listen & Learn audio generation to follow the documented course generation flow:
- Improved
Checkpoint: Audio Enhancements: Voice Caching & Progress Indicators
- Improved
Checkpoint: Fixed "Listen and learn" audio player functionality in course lessons:
- Improved
Checkpoint: Production-ready NotebookLM clone with comprehensive features including: - Magic link authentication with multi-device session management - PWA with offline support and install prompts - Multi-format document processing (PDF, DOCX, XLSX, PPTX, TXT, MD, JSON) - URL and YouTube transcript import - Voice recording with Whisper transcription - RAG-powered chat with Voyage AI embeddings and Qdrant vector search - Content generation (briefings, study guides, flashcards, quizzes) - Audio overview generation with multiple formats - Comprehensive testing suite (92 test files, 13,611 lines) - Full JSDoc documentation with TypeDoc HTML generation - Mobile-optimized UI with bottom sheets and haptic feedback
- Improved
Checkpoint: Audio Enhancement Features Verification
- Improved
Checkpoint: Added ElevenLabs TTS audio generation to Listen & Learn lessons with inline audio player and caching
- Improved
Checkpoint: Updated course structure to follow correct naming pattern:
- Improved
Checkpoint: Initial implementation of NotebookLM clone with complete features: document upload (PDF/TXT/DOCX), RAG-powered Q&A, audio overview generation, source management, and modern UI
- Improved
Checkpoint: Enhanced course generation system to follow complete hierarchical structure:
- Improved
Checkpoint: Implemented strict 11-component course structure for every topic:
- Improved
Checkpoint: Comprehensive documentation update including: - Updated PRD with complete feature specifications - Technical architecture documentation - Developer guide with onboarding and examples - Updated roadmap with Q1-Q4 2025 plans - Comprehensive todo tracking with status
- Improved
Checkpoint: Production-ready NotebookLM Clone (CivicNotes) v3.0 - Full-featured AI-powered note-taking application with: magic link authentication, notebook management, multi-format source upload (PDF, DOCX, XLSX, PPTX, TXT, MD, JSON), URL/YouTube import, voice recording with Whisper transcription, RAG-powered chat with citations, content generation (briefing, study guide, flashcards, quiz), audio overview generation with multiple formats, PWA support, mobile-responsive design with bottom sheets, comprehensive test suite (92 test files), and full JSDoc documentation.
- Improved
Checkpoint: Voice preference features: notebook-specific preferences and favorite voices display
- Improved
Checkpoint: Voice preference features: notebook-specific preferences and favorite voices display in selection
- Improved
Checkpoint: Voice preference features: notebook-specific preferences and favorite voices display
- Improved
Checkpoint: Fixed critical mobile UI issues with voice selection step and audio template cards:
- Improved
Checkpoint: Fixed Voice Selection visibility in Audio Overview feature: - Voice selection step now appears between source selection and generation for all audio templates - Audio template cards now display duration badges (e.g., "10-15 min") and voice count badges (e.g., "2 voices") - Two-host formats (Deep Dive, Critique, Q&A) show Host 1 and Host 2 voice selectors - Single-narrator format (Brief) shows only Narrator voice selector - Backend updated to accept voice parameters in all audio generation procedures - All tests passing (voicePreferences.test.ts: 10 tests, audioOverview.test.ts: 11 tests)
- Improved
Checkpoint: Fixed audio generation UI visibility issues: - Added duration badges to audio template cards (10-15 min, 3-5 min, 7-10 min, 5-8 min) - Added speaker count badges (1 voice, 2 voices) with appropriate icons - Updated descriptions to clearly indicate audio format (e.g., "Two hosts explore key insights") - Applied fixes to both ContentGenerator and QuickTemplatesSheet components
- Improved
Checkpoint: Added three audio overview enhancements: 1. Voice selection - Users can choose different voices/hosts before generating audio overviews (already existed via VoiceSelector component) 2. Audio description - Each audio template card now displays what the audio is (e.g., "Two hosts discussing", "Single narrator") 3. Estimated duration - Each audio template card shows expected audio length (e.g., "10-15 min", "3-5 min")
- Improved
Checkpoint: Added audio quick templates to the Generate Content modal: - Added 4 audio overview types: Deep Dive, Brief, Critique & Analysis, Q&A/Debate - Updated ContentType to include audio-overview-deep, audio-overview-brief, audio-overview-critique, audio-overview-qa - Added Mic icon import from lucide-react - Added audio generation mutations (audioOverviewDeep, audioOverviewBrief, audioOverviewCritique, audioOverviewQA) - Added switch cases in startGeneration function to handle audio generation - Updated ContentDisplayModal type to support new audio types - All audio templates now appear in the quick templates grid with orange styling and microphone icons
- Improved
Checkpoint: Removed the "View" dropdown menu with eye icon from the CourseViewer lesson page header. This included: - Removed the DropdownMenu with Eye icon that contained source filter options (All Sources, Uploaded Only, Generated Only) - Cleaned up unused imports (Eye, Upload, Sparkles, DropdownMenuSeparator, DropdownMenuLabel) - Removed unused filterType state variable The header now only shows: Back button, Save for Offline button, and Share button.
- Improved
Checkpoint: Removed the "Back to Notebook" button and "Select" checkbox dropdown menu from the CourseViewer lesson page header as requested. The back arrow button that navigates to the course landing page is preserved.
- Improved
Checkpoint: Fixed navigation for "Return to my notebook" and "Back to Notebook" buttons: - Added "Back to Notebook" button on CourseLanding page header that navigates to /notebook/{notebookId}/generated - Added "Back to Notebook" button on CourseViewer page header - Updated CourseWizard "Return to my notebook" and "Return to Notebook" buttons to navigate to /notebook/{notebookId}/generated instead of /notebook/{notebookId} - All navigation buttons now correctly return users to the main notebook generated content view
- Improved
Checkpoint: Fix: Auto-return to notebook page after generating Briefing (especially on mobile view) - Added onClose callback to ContentGenerator in MyGeneratedContent.tsx to properly close the bottom sheet after clicking Continue
- Improved
Checkpoint: CivicNotes - NotebookLM Clone with complete features: notebook management, document upload/processing, AI-powered Q&A chat, summary generation, quiz generation, audio podcast generation with ElevenLabs TTS, and vector search using Qdrant. Includes landing page, dashboard layout, and all core functionality.
- Improved
Checkpoint: Fixed critical navigation bug in source selection flow
- Improved
Checkpoint: Fixed bottom sheet not closing after clicking Continue button in content generation flow. Added state reset and 100ms delay to ensure proper cleanup before closing the sheet.
- Improved
Checkpoint: Fixed navigation flow after content generation - removed automatic briefing document dialog opening so users are taken to My Generated Content page instead
- Improved
Checkpoint: Fixed bottom sheet navigation issue where clicking Continue after selecting sources would navigate to the wrong page. Added returnPath prop to QuickTemplatesSheet component to allow it to return to the originating page (MyGeneratedContent) instead of always going to NotebookView.
- Improved
Checkpoint: Fixed Briefing Document generation to automatically open modal after generation completes
- Improved
Checkpoint: Fixed bottom sheet not closing when clicking Continue button for quiz generation - now closes immediately and generation happens in background
- Improved
Checkpoint: Fixed bottom sheet to close immediately when clicking the generate/continue button. Added onClose callback prop to ContentGenerator component and wired it to close the sheet when generation starts.
- Improved
Checkpoint: Implemented comprehensive hotspot analytics features:
- Improved
Checkpoint: Hotspot System Enhancements - Mobile Support & Analytics
- Improved
Checkpoint: Added interactive hotspots with pulsing indicators on key UI elements
- Improved
Checkpoint: Fixed onboarding guide positioning and first-time-only display: - Fixed WelcomeTour modal positioning to be properly centered on screen - Simplified positioning classes for better mobile compatibility - First-time-only display logic already implemented using localStorage - Guide only shows on first visit to My Generated Content page
- Improved
Checkpoint: Fixed generating state bug
- Improved
Checkpoint: Fixed infinite generating loading state bug - improved type matching and polling intervals
- Improved
Checkpoint: Fixed deployment error by removing symbolic link at docs/versions/latest and replacing it with a real directory copy. This resolves the "failed to create zip archive" error that was preventing the project from being published.
- Improved
Checkpoint: Fixed content generation bugs: 1. Removed redirect to /notebook/:notebookId after clicking generate - users now stay on current page 2. Removed duplicate content creation - backend already saves generated content, removed redundant frontend save call
- Improved
Checkpoint: Fixed UI issues in Add Sources and Generate Content dialogs: - Removed duplicate close button in Add Sources dialog (Sheet component already has built-in close button) - Fixed truncated file names in Generate Content source selection by using line-clamp-2 with tooltip for full name display - Both dialogs now have cleaner, more professional appearance on mobile
- Improved
Checkpoint: Fixed UI issues in source selection dialog: - Improved checkbox visibility by changing border color from border-input to border-muted-foreground/30 for better contrast - Increased filename truncation limit from 50 to 80 characters to show more text - Applied fixes to both SourceSelectionSheet and CreateCourseSheet components - Maintained mobile responsiveness with proper tap targets and layout
- Improved
Checkpoint: Documentation Phase 8 Complete: - Generated TypeDoc HTML documentation (docs/api-html/) - Archived documentation version v3.0.0 (docs/versions/v3.0.0/) - Added comprehensive JSDoc to VoiceRecorder component - Added comprehensive JSDoc to ContentGenerator component - Added comprehensive JSDoc to FlashcardViewer component - Added comprehensive JSDoc to AudioOverviewGenerator component - All TypeScript compilation passes with 0 errors - Updated todo.md with completed documentation tasks
- Improved
Checkpoint: Extended documentation phase 7: Added comprehensive JSDoc documentation to AddSourceSheet, ChatInterfaceTour, and QuizViewer components. Set up versioned documentation system with archive script and directory structure.
- Improved
Checkpoint: Documentation System Enhancements: - Added /api-docs/html route to serve TypeDoc HTML documentation - Added JSDoc documentation to AIChatBox, AudioPlayer, and DashboardLayout components - Created GitHub Action workflow for documentation CI (auto-regenerate on push) - Updated typedoc.json to include new component entry points - All documentation features tested and working
- Improved
Checkpoint: Added comprehensive JSDoc documentation to client-side hooks and utilities for full-stack IDE support. Updated TypeDoc configuration to include client files and generated 321 HTML documentation pages covering both server and client APIs.
- Improved
Checkpoint: Added comprehensive JSDoc documentation to key server files for better IDE support:
- Improved
Checkpoint: Comprehensive documentation update v4.0: Added PRD.md, TECHNICAL_ARCHITECTURE.md, IMPLEMENTATION_GUIDE.md, API_REFERENCE.md, ROADMAP.md, and updated todo.md with complete feature tracking and version history.
- Improved
Checkpoint: Add offline mode for generated audio - cache audio overviews for offline listening
- Improved
Checkpoint: Implement offline voice preview playback for PWA:
- Improved
Checkpoint: Implemented automatic pre-caching for favorite voices: - Added preCacheVoicePreviews function for batch pre-caching with progress tracking - Created useFavoritePreCache hook for automatic background pre-caching - Auto-starts pre-caching 2 seconds after page load - Pre-caches newly favorited voices immediately - Added cache status indicator in Favorites tab showing progress - Added "Cache All" button for manual pre-caching - Enhanced voice cards with green dot indicator for cached previews - Added 25 unit tests for pre-caching functionality
- Improved
Checkpoint: Added voice preview caching feature to reduce API calls and improve playback speed when browsing the voice library. Implementation includes:
- Improved
Checkpoint: Added Voice Library Enhancement features: - Favorite voices: Users can mark voices as favorites with heart icon toggle - Favorites tab in Voice Library for quick access to saved voices - Select Voice integration: Click "Use This Voice" to pre-populate voice in audio generator - Voice selector dropdown shows favorite voices at top in a separate section - "Browse Library" button in voice selector for easy navigation to full library - Database schema for favorite_voices table with user/voice relationships - Backend tRPC procedures: getFavoriteVoices, isVoiceFavorited, toggleFavoriteVoice - Unit tests for all favorite voice functionality
- Improved
Checkpoint: Added Voice Library page where users can browse and preview all available ElevenLabs voices:
- Improved
Checkpoint: Added three new audio generation features:
- Improved
Checkpoint: Added two new features for audio generation:
- Improved
Checkpoint: Implemented comprehensive Audio Service that integrates all advanced features: multi-model fallback for script generation, checkpoint-based generation for long content, content caching for efficiency, and ElevenLabs TTS for high-quality audio output. All 85 tests passing across all four feature modules.
- Improved
Checkpoint: Implemented Content Caching system with database schema (content_cache table), content fingerprinting via SHA-256 hashing, cache lookup/storage with TTL, cache invalidation for source changes, and hit rate metrics. All 25 tests passing.
- Improved
Checkpoint: Implemented Checkpoint-Based Generation system with database schema (generation_checkpoints table), chunk-based processing for large documents, progress saving at configurable intervals, and resume functionality. All 23 tests passing.
- Improved
Checkpoint: Implemented Multi-model Fallback System with automatic retry logic, error classification, backup model chain (gemini-2.5-flash → gpt-4o-mini → claude-3-5-haiku), exponential backoff, and metrics tracking. All 12 tests passing.
- Improved
Checkpoint: Initial project setup with NotebookLM Clone - project initialized with server, database, and user authentication features. Ready for development of core NotebookLM functionality including document upload, AI-powered analysis, and audio overview generation.
- Improved
Checkpoint: Added two new course generation features:
- Improved
Checkpoint: NotebookLM Clone - CivicNotes: A comprehensive AI-powered learning platform with notebook management, source uploads, AI chat, audio podcasts, flashcards, quizzes, and course generation. Fixed TypeScript error by removing unused updateCourseQualityScore function.
- Improved
Checkpoint: Implemented three new course generation enhancements:
- Improved
Checkpoint: Course Generation Optimization Sprint - Implemented 5 major optimizations:
- Improved
Checkpoint: Fixed 4 UI issues: 1. Fixed HTML tags showing in course description on dashboard cards - added stripHtml function to properly render plain text 2. Made course/lesson notes section collapsed by default - changed isExpanded initial state to false 3. Fixed tabs spacing in achievements section - changed from grid cols-5 to flex wrap for better mobile responsiveness 4. Added hamburger menu for mobile navigation on Progress page - added AppDrawer and header with Menu button
- Improved
Checkpoint: NotebookLM Clone - Complete implementation with: Source management (PDF/text/URL upload with AI extraction), AI-powered notebook creation, Interactive Q&A chat with source citations, Audio overview generation with ElevenLabs TTS, RAG-based semantic search using Qdrant vector database, and responsive dark theme UI. All features functional and tested.
- Improved
Checkpoint: Fixed broken notebook detail page after "My Generated Content" removal: - Restored MyGeneratedContent.tsx page component from git history - Re-added getGeneratedContent and getAllGeneratedContent tRPC procedures to routers.ts - Updated App.tsx routing to include MyGeneratedContent page at /notebook/:notebookId/generated - Verified the notebook view now shows filter tabs (All, Analytics, Quiz, Flashcards, etc.), action buttons (Add source, Generate, Chat, Record), and Courses section
- Improved
Rollback to e239fe6
- Improved
Rollback to c8b87022
- Improved
Checkpoint: Fixed 404 error when clicking on a notebook. The issue was twofold: 1) Missing leading slash on the /notebook/:notebookId route in App.tsx, and 2) Missing route for /notebook/:notebookId/generated which multiple pages navigate to. Added the missing route that maps to NotebookDetail component.
- Improved
Checkpoint: Removed My Generated Content page and cleaned up all related code: - Deleted MyGeneratedContent.tsx page file - Removed routes from App.tsx (/generated and /notebook/:notebookId/generated) - Removed "My Content" menu item from AppDrawer (both mobile and desktop) - Removed unused Sparkles icon import from AppDrawer - Updated navigation in AudioOverviewGenerator, ContentGenerator, CourseWizard, and QuickTemplatesSheet to redirect to notebook view instead of removed page - Removed getGeneratedContent and getAllGeneratedContent router procedures - Deleted related test files (confirmDialog.test.ts, getAllGeneratedContent.test.ts) - Removed unused invalidation call in ContentGenerator
- Improved
Checkpoint: Chat Flow Enhancement: Skip source selection when clicking Chat button and new Add to Chat bottom sheet with Camera, Photos, Files buttons, Research/Web search toggles, and Add to project/Choose style options
- Improved
Checkpoint: Refactored content generation flow: 1. Removed Microlearning option from Add to Chat menu in NotebookView 2. Refactored ContentGenerator to show templates first (Briefing, Study Guide, Flashcards, Quiz, AI Course) 3. After selecting template, shows source selection with Upload New Sources button 4. For AI Course: navigates to course creation wizard with pre-selected sources 5. For other templates: starts generation process directly 6. Updated Generate button in MyGeneratedContent to use new ContentGenerator flow
- Improved
Checkpoint: Microlearning Optimization Sprint - Added:
- Improved
Checkpoint: Initial project checkpoint - NotebookLM Clone with server, database, and user authentication features initialized
- Improved
Checkpoint: Fixed UI bug where checkboxes were always visible on course cards. Now checkboxes only appear when user clicks "Select Courses" button to enter selection mode. Added selection mode toggle with Cancel button to exit selection mode.
- Improved
Checkpoint: Fixed bug where course descriptions showed raw HTML tags (like <h2>) instead of plain text on the Generated Content page. Added stripHtml utility function that uses DOMParser to extract text content from HTML, and applied it to course description displays in both the Courses filter view and the All filter view.
- Improved
Checkpoint: NotebookLM Clone (CivicNotes) with complete implementation: notebook management, source upload (PDF/text/URL), AI-powered chat with sources, audio overview generation, study guide creation, flashcards, quizzes, and responsive UI design.
- Improved
Checkpoint: Initial NotebookLM Clone implementation with: notebook management, source upload (PDF/text/URL), AI-powered chat with sources, audio overview generation, study guide creation, and dark theme UI design.
- Improved
Checkpoint: Fixed magic link email sending bug by switching from SMTP to SMTP2GO HTTP API. The sandbox environment blocks outbound SMTP connections, so the email service now uses the SMTP2GO REST API which works correctly. Added vitest tests for the new email implementation.
- Improved
Checkpoint: Initial project setup with core features: notebook management, source upload/processing with RAG, AI chat with citations, audio overview generation, and user authentication. Includes complete database schema, tRPC routers, and frontend UI components.
- Improved
Checkpoint: Added detailed progress percentage indicator for file processing and background upload queue system:
- Improved
Checkpoint: File Upload UX Improvements: - Added timeout/retry mechanism for large file processing (5-minute timeout, 3 retry attempts) - Added cancel button during processing phase to abort long-running uploads - Added file size warnings before upload for files over 10MB with detailed dialog - Added comprehensive test suite (30 tests) for all upload UX features
- Improved
Checkpoint: Fixed PDF upload getting stuck in "Uploading" state: 1. Added missing handlers for Excel and PowerPoint file types in handleFileUpload function 2. Improved upload progress UI to show "Processing" state with helpful message when server is extracting text and indexing 3. Added status field to uploadProgress state to differentiate between uploading and processing phases
- Improved
Checkpoint: Added two new features to the My Courses page:
- Improved
Checkpoint: Added two new features to the My Courses page:
- Improved
Checkpoint: Added course filtering by notebook and Create Course quick action button to My Courses page: - Added notebook filter dropdown that shows only notebooks with courses - Added "Create Course" button in page header - Created CreateCourseSheet component with two-step flow: 1. Select a notebook (with search and recent notebooks) 2. Select sources from the notebook - Courses now display which notebook they belong to - Empty state updated to use the new Create Course flow
- Improved
Checkpoint: Added hamburger menu to My Courses page with AppDrawer component for consistent navigation across the app. The header now includes a hamburger menu button, back arrow, app logo, and app title.
- Improved
Checkpoint: Fixed course-notebook relationship issue: - Updated getCoursesWithProgress() to only return courses belonging to valid notebooks - Updated getCoursesByUserId() to filter courses by valid notebooks - Updated myCourses.test.ts to create notebooks before courses (required for proper testing) - All tests passing
- Improved
Checkpoint: Fixed My Courses page showing incorrect course count (115 courses when user has none). The issue was caused by test data accumulating in the database from automated tests that used userId=1. Changes made: 1. Deleted test courses from the database 2. Updated test files to use high user IDs (99000+) to avoid conflicts with real users 3. Added afterEach cleanup to test files to prevent test data accumulation 4. Fixed test input schemas to match current API requirements
- Improved
Checkpoint: Removed the "In Progress" section from the notebooks page that was showing stuck generation tasks. Also removed the associated activeGenerations query that was polling every 3 seconds.
- Improved
Checkpoint: Initial project setup with web-db-user template configured. Ready for feature implementation including notebook management, source uploads, AI chat, and audio overview generation.
- Improved
Checkpoint: Restored lost features from commit b48101a: - Sources filter tab restored in My Generated Content page - Source selection handlers restored (toggleSourceSelection, handleSelectAllSources, handleDeselectAllSources, handleBulkDeleteSources, confirmBulkDeleteSources) - Batch delete sources mutation restored - Sources view with source list and management UI restored - "Show sources" button removed from action bar - Sources Batch Delete Confirmation Dialog added
- Improved
Checkpoint: Fixed course generation stuck at 83% issue: - Added 90-second timeout for LLM calls in course generation - Added stale generation detection (auto-mark as failed after 30 minutes) - Added "Retry Generation" option for failed courses - Added failed status badge on course cards - Added periodic stale course check (every 5 minutes) - Added unit tests for retry and stale detection
- Improved
true message
- Improved
Checkpoint: Updated home page hero section and features heading based on visual editor changes: - Changed main heading from "Understand Anything" to "Learn & Evolve" - Changed features section heading from "Powerful Features for Every User" to "Ready to use templates to use"
- Improved
Checkpoint: Removed left Sources column from Chat page to provide more space for conversation area. The sidebar is now completely hidden, and the chat interface spans the full width of the page.
- Improved
Checkpoint: Fixed breadcrumb navigation across all pages - clicking "My Notebooks" now correctly navigates to /notebooks instead of the landing page. Updated ChatHistory.tsx, MyCourses.tsx, and MyGeneratedContent.tsx.
- Improved
Checkpoint: Fixed breadcrumb navigation in Generated Content page to show correct path (My Notebooks → Notebook Name → Generated Content) and ensure all breadcrumb links navigate to the correct pages. The breadcrumb now dynamically shows the notebook name when viewing generated content from within a specific notebook, and shows a simplified path when viewing all generated content globally.
- Improved
Checkpoint: Added breadcrumb navigation to MyGeneratedContent, ChatHistory, and MyCourses pages for complete navigation consistency across the application. All pages now have consistent breadcrumb navigation that helps users understand their location and navigate back to parent pages.
- Improved
Checkpoint: Implemented comprehensive breadcrumb navigation and page naming standards:
- Improved
Checkpoint: Fixed source filtering bug where filters were not properly synchronized between UI and backend query. Removed redundant local filtering logic in SourceFilterSheet and ensured all filters (search, file type, status) work through backend query. Also un-hid the sidebar to make the filter functionality accessible to users.
- Improved
Checkpoint: Removed the "Show sources" button from the Generated Content page action bar as requested by user
- Improved
Checkpoint: Added source search and filtering functionality
- Improved
Checkpoint: Added Sources filter tab in notebook header with ability to view all uploaded sources, select/deselect individual sources, Select All, Deselect All, and bulk delete functionality with confirmation dialog.
- Improved
Checkpoint: Fixed bug where stale/orphaned "In Progress" generation tasks were showing on My Notebooks page:
- Improved
Checkpoint: Fixed course generation to include all 11 content types per topic: 1. Introduction (text lesson) 2. Lesson 1: Understanding [topic] fundamentals (text lesson) 3. Lesson 2: Why [topic] works better (text lesson) 4. Lesson 3: Implementing [topic] in practice (text lesson) 5. Real-world examples (examples lesson) 6. Reflection question (reflection lesson) 7. Flash cards (flashcard lesson) 8. Topic summary (summary lesson) 9. Quiz (quiz lesson) 10. Repetition of previous topic (repetition lesson - if applicable) 11. CivicEd listen and learn (audio lesson with ElevenLabs)
- Improved
Checkpoint: Fixed bug where course topics showed 0 lessons even though lessons were stored in database. The getWithProgress procedure now fetches and includes lessons for each topic.
- Improved
Checkpoint: Fixed raw HTML markup (<h2> tags) displaying in course card descriptions. Added regex-based HTML tag stripping in MyCourses.tsx and MyGeneratedContent.tsx to show clean text previews instead of raw HTML markup.
- Improved
Checkpoint: Fixed bug where "All" filter on Generated Content page showed "No generated content yet" even when courses existed. Updated the empty state condition to check for courses and voice notes in addition to filtered content.
- Improved
Checkpoint: Fixed course creation bug - topics insert was failing due to missing required values. Added missing procedures (generateContent, share, rename, getWithProgress) to courseRouter. Fixed TypeScript errors in CourseLanding, CourseViewer, MyCourses, MyGeneratedContent, and QuizReviewMode. All tests pass.
- Improved
Checkpoint: Fixed missing "Show sources" and "Select" menu options in notebook headers
- Improved
Checkpoint: Initial checkpoint for NotebookLM Clone project with basic setup complete
- Improved
Checkpoint: Added missing "View sources" and "Select" menus to notebook detail page header. View menu allows filtering sources by type (all/uploaded/generated). Select menu provides quick selection options (all/none/uploaded/generated). Both menus include responsive design and haptic feedback.
- Improved
Checkpoint: Fixed courses not displaying issue - Updated getCoursesByUserId to accept optional notebookId parameter and fixed frontend to pass notebookId when querying courses. Courses now display correctly in the Generated Content page.
- Improved
Checkpoint: Implemented three new quiz features:
- Improved
Checkpoint: Integrated quiz component into course viewer to match standalone quiz behavior
- Improved
Checkpoint: Integrated FlashcardViewer component into course viewer so flashcards within courses match standalone flashcard behavior
- Improved
Checkpoint: Replace back arrow with hamburger menu icon on course detail page (CourseLanding.tsx). The hamburger menu now opens the AppDrawer for navigation, providing consistent UX across the app.
- Improved
Checkpoint: Fixed bug where Lesson 2 and other text lessons displayed raw HTML code instead of rendered content. Changed CourseViewer.tsx to use dangerouslySetInnerHTML for HTML content instead of Streamdown component which was escaping HTML tags.
- Improved
Checkpoint: Fixed back button navigation in lesson view to return to Course Overview instead of Chat page
- Improved
Checkpoint: Fixed UX issue in course generation flow where selected tone option description text was not readable. Changed text color to white with 90% opacity when option is selected, ensuring readability against the blue background.
- Improved
Checkpoint: Made Lesson Notes section collapsible with expand/collapse functionality to save space. Users can now click the header to toggle visibility of the notes textarea and action buttons. Added chevron icons to indicate collapsed/expanded state.
- Improved
Checkpoint: Fixed floating action button overlaying browser navigation bar at bottom by adding safe-area-inset-bottom padding
- Improved
Checkpoint: Fixed lesson notes button positioning - moved Save Changes and Delete buttons from top right to bottom right of the notes card for better UX
- Improved
Checkpoint: Moved the marked (heart/favorite) button from the top header to the bottom of the Course Content section on the course landing page. The button now appears centered below all course topics with a larger size and "Mark as Favorite" label, providing better UX as users can mark favorites after reviewing course content.
- Improved
Checkpoint: Added back arrow button to course overview page (CourseLanding.tsx) for improved navigation. The back button is positioned in the top-left corner of the header and allows users to navigate back to the previous page.
- Improved
Checkpoint: Fixed magic link authentication in Manus dev preview environments:
- Improved
Checkpoint: Fix back arrow navigation 404 error and improve session persistence
- Improved
Checkpoint: Initial project setup with tRPC + React template, ready for NotebookLM clone features implementation
- Improved
Checkpoint: Implemented offline indicator badge feature that displays on course cards showing which courses are available offline with their cache size. Created OfflineIndicatorBadge component with green badge styling, updated isCourseCached database function to return cache size data, and integrated the badge into MyCourses page. The badge only appears for cached courses and displays formatted cache size (e.g., "Offline • 5.0 MB").
- Improved
Checkpoint: Added three new features to enhance the course learning experience:
- Improved
Checkpoint: Mobile Navigation Enhancements - Added floating action button for course content access on mobile, swipe gestures for lesson navigation, and progress indicator showing current lesson position in header
- Improved
Checkpoint: Fixed course detail page layout issues: - Repositioned Share button and back arrow to their own row above the title - Back arrow now properly navigates back to notebook - Removed Course Content sidebar from mobile view (hidden on mobile, visible on desktop only) - Improved header layout with separate rows for navigation/actions and title/progress
- Improved
Checkpoint: Initial NotebookLM clone implementation with: - Multi-source document upload (PDF, audio, video, text) - AI-powered chat interface with source citations - Audio overview generation with ElevenLabs - Vector search using Qdrant - Google Cloud Document AI integration - Complete UI with source management and chat features - All core features tested and functional
- Improved
Checkpoint: Fixed UI issues in course creation wizard: - Fixed description formatting to properly render HTML/Markdown content using Streamdown component instead of displaying raw HTML tags - Improved Set Tone screen layout with better spacing, responsive grid (1 column on mobile, 2 on desktop), larger touch targets, and improved text hierarchy
- Improved
Checkpoint: Added hamburger menu icon (☰) in the top left corner of all page headers. The menu triggers the AppDrawer navigation component for consistent navigation across the application.
- Improved
Checkpoint: Repositioned "Select All" and "+ New" buttons on notebooks page to align with subtitle text for better layout and accessibility
- Improved
Checkpoint: UI improvements to course landing page: - Moved share and favorite icons above course title on their own row for better visual hierarchy - Fixed tab UI styling with proper background colors and active state indicators for Course Info, Reviews, and More tabs
- Improved
Checkpoint: Fixed "In Progress" section incorrectly showing on notebook overview page
- Improved
Checkpoint: Fix 404 errors when clicking "Start Learning" or lesson links in CourseLanding page
- Improved
Checkpoint: Initial checkpoint for NotebookLM clone with complete implementation: - Document management system with upload, processing, and storage - RAG-powered chat interface with source citations - Audio overview generation with ElevenLabs integration - Vector search using Qdrant - Google Cloud integration for document processing - Clean, modern UI with dark theme - All core features tested and functional
- Improved
Checkpoint: Enhanced notebook generation progress tracking with visual milestones, persistence, and improved time estimates
- Improved
Checkpoint: Fixed course generation progress tracking bug where progress remained stuck at 0%.
- Improved
Checkpoint: Implemented three major course generation enhancements:
- Improved
Checkpoint: Improved course generation UX: - Keep users on generation page with real-time progress tracking (0-100%) - Show step-by-step completion indicators with checkmarks - Allow background generation when clicking "Return to my notebook" - Move "Generating" badge above course title in course cards - Add "View Course" and "Go to My Generated Content" buttons when generation completes - Poll course status every 2 seconds to update progress in real-time
- Improved
Checkpoint: Fixed course creation redirect issue where users were redirected to 404 page instead of staying on the generated content page. The bug was caused by incorrect route path (/notebooks/ vs /notebook/) in CourseWizard navigation.
- Improved
Checkpoint: Add progress bar visualization below "Generating" badge in audio generation cards
- Improved
Checkpoint: Added progress percentage indicators to course generation cards and toast notifications when generation completes
- Improved
Checkpoint: Fixed course generation UX bugs: - Redirect to My Generated Content page after course creation (instead of getting stuck on loading screen) - Added "Generating" badge to course cards during generation - Implemented auto-polling (5s interval) to automatically remove badge when generation completes - Added "Return to My Notebook" button to CourseViewer generating screen
- Improved
Checkpoint: Fixed 3 failing tests in auth.logout.test.ts and chat.test.ts: - Updated auth.logout.test.ts to expect sameSite: "lax" instead of "none" - Updated chat.test.ts to expect session_ prefix instead of cs_ - Updated chat.test.ts messages.send tests to expect {success, content} response structure
- Improved
Checkpoint: Code quality improvements: Added comprehensive JSDoc documentation to chunking and course generation modules, reduced ESLint warnings by 81%, verified zero TypeScript errors, documented pre-existing test failures for future fixes
- Improved
Checkpoint: Fixed all 24 TypeScript errors in the project:
- Improved
Checkpoint: Fixed TypeScript errors - reduced from 89 to 24 errors
- Improved
Checkpoint: Initial project setup with tRPC, React, and authentication scaffolding. Base template configured and ready for feature development.
- Improved
Checkpoint: Initial project setup for NotebookLM clone with basic structure and configuration
- Improved
Checkpoint: Implemented comprehensive course landing page with progress tracking, enrollment, and curriculum display
- Improved
Checkpoint: Fixed course deletion bug - Created missing course_quizzes table in database and improved error handling to show actual error messages instead of generic "Failed to delete course" message
- Improved
Checkpoint: Fixed two bugs: 1. Course deletion now properly removes all related data including reflection responses and certificates 2. Added missing Rename, Duplicate, and Share options to the 3-dot menu on My Generated Content overview page
- Improved
Checkpoint: Added ability to use full courses as source material for content generation and chat.
- Improved
Checkpoint: Enhanced course management with rename, duplicate, share, and bulk delete features
- Improved
Checkpoint: Added three-dot menu with delete option to course cards on My Generated Content page
- Improved
Checkpoint: Added gamification UI enhancements:
- Improved
Checkpoint: Implemented comprehensive spaced repetition system for flashcards and progress notifications with achievement badges:
- Improved
Checkpoint: Interactive Learning Features - December 27, 2024
- Improved
Checkpoint: Restructured course system to support topic-based lessons with multiple lesson types
- Improved
Checkpoint: Fixed "Course Not Found" error when clicking on courses
- Improved
Checkpoint: Fixed bug where generated courses were not displaying on the generated content page. Added courses.list query to MyGeneratedContent component and created dedicated courses view section. Courses now appear in both the "Courses" filter tab and the "All" filter view. Added test coverage for courses.list endpoint.
- Improved
Checkpoint: Initial project setup with tRPC + React + Tailwind stack. Project scaffolded with authentication, database integration, and basic routing structure ready for NotebookLM clone features.
- Improved
Checkpoint: Implemented multi-step course creation wizard with the following features:
- Improved
Checkpoint: Implemented three major progress enhancement features:
- Improved
Checkpoint: Added My Courses navigation link and implemented comprehensive course analytics dashboard
- Improved
Checkpoint: Add My Courses dashboard and course completion certificates
- Improved
Checkpoint: AI Course Generator Feature Complete
- Improved
Checkpoint: Complete JSDoc documentation for all server/_core modules
- Improved
Checkpoint: Removed playback speed options (0.5x, 0.75x, 1x, 1.25x, 1.5x, 2x) from the voice notes player for a cleaner, simplified audio playback experience.
- Improved
Checkpoint: Removed playback speed options (0.5x, 0.75x, 1x, 1.25x, 1.5x, 2x) from the AudioPlayer component for a cleaner, simpler interface.
- Improved
Checkpoint: Voice Notes Full-Page Redesign: Removed "Listen in Chat" button and transformed Voice Notes into a full-page Audio Overview experience matching the reference design. Added new VoiceNotePlayer page with audio player controls (0.5x-2x playback speed), volume control, download button, and script/transcript display below the player.
- Improved
Checkpoint: Updated Voice Note detail modal to match Audio Overview design for coherent UX: - Added waveform visualization with teal color scheme - Larger play button (80x80) matching Audio Overview style - Added "Listen in Chat" action button - Reorganized layout with metadata badges at top - Added collapsible transcription section with copy/download actions - Consistent styling with teal accent colors throughout
- Improved
Checkpoint: Fixed bug where chat input text persisted when creating a new chat session. The fix clears the message input and removes the localStorage draft when a new session is created via createSessionMutation.onSuccess.
- Improved
Checkpoint: Fixed mobile UI issues in notebook header: 1. Changed desktop buttons (Clean Vector Store, Export PDF, Generate, New Chat) to use lg/xl breakpoints instead of sm/md 2. Added mobile/tablet SessionSelector that shows below lg breakpoint (1024px) 3. Removed duplicate "New" button from SessionSelector desktop version 4. Updated SessionSelector mobile detection to use 1024px breakpoint for consistency
- Improved
Checkpoint: Fixed Audio Overview player controls overlapping on mobile - made controls responsive with flex-col on mobile, added horizontal scrolling for speed buttons, and hid volume slider on mobile while keeping mute toggle
- Improved
Checkpoint: Added chat session management features: 1. Automatic session naming based on selected sources - Sessions are now named using the source file names 2. Continue existing chat dialog - When selecting sources that match a previous session, users can choose to continue or start new 3. Display sources in session list - Both SessionSelector and ChatHistory now show which sources were used 4. Delete chat session with 3-dot menu - Added MoreVertical menu to ChatHistory with pin/delete options 5. Added chatSessionSources junction table to track source-session relationships 6. Added findMatchingSessions procedure to find sessions with similar sources 7. Created ContinueChatDialog component for the continue/new chat decision 8. All features tested with vitest (8 passing tests)
- Improved
Checkpoint: Fixed bug where creating a new chat session with the same source as an existing chat would open the existing chat instead of creating a new session. Added localStorage flag to signal when a new session should be created.
- Improved
Checkpoint: Added pin feature for chat sessions: users can now pin important conversations to keep them at the top of the list. Includes database schema updates (isPinned, pinnedAt columns), togglePin tRPC procedure, and UI updates with pin indicators and pin/unpin buttons in both desktop dropdown and mobile bottom sheet.
- Improved
Checkpoint: Chat Experience Enhancements: Added loading indicators for chat session creation, option to continue existing chats vs start new chat, and automatic chat naming based on selected sources for better organization.
- Improved
Checkpoint: Implemented chat button improvements: 1) When clicking Chat button on My Generated Content page, a new chat session is now created. 2) Source bottomsheet now has no sources selected by default when opened for chat (forChat prop added to SourceSelectionSheet component).
- Improved
Checkpoint: Removed the back arrow button from the Chat History page header as requested. The hamburger menu remains for navigation.
- Improved
Checkpoint: Updated application branding from notebooklm_clone to CivicNotes - changed APP_LOGO placeholder color and text to CN
- Improved
Checkpoint: Initial project scaffold - NotebookLM Clone with server, database, and user authentication features configured
- Improved
Checkpoint: Implemented two features: (1) Added "View source" links from retrieval info to source documents - clicking on a source in the retrieval metadata opens the document preview with text highlighting. (2) Added confirmation dialogs for destructive actions - replaced native confirm() calls with styled ConfirmDialog components for delete sources, batch delete, and cleanup vector store operations.
- Improved
Checkpoint: Initial project setup with web-db-user template. Project scaffolding complete with tRPC, Manus Auth, and database integration ready for NotebookLM clone development.
- Improved
Checkpoint: Added Rename and Delete options to the Voice Notes action menu bottom sheet:
- Improved
Checkpoint: Added advanced mobile UX enhancements to the BottomSheet component:
- Improved
Checkpoint: Enhanced BottomSheet component with three mobile UX improvements:
- Improved
Checkpoint: Fixed UI/UX issue where generated content text was overlapping with header elements (close button, title, metadata) in the content preview sheet. Added proper padding (pr-8 on header, pr-4 on title) and restructured the layout with a flex container to ensure proper spacing between header, content, and footer sections.
- Improved
Checkpoint: Fixed bottom sheet to properly close when clicking outside (on the overlay) and return user to previous location. Added stopPropagation and preventDefault to the overlay click handler to prevent the click from bubbling up to parent elements like cards.
- Improved
Checkpoint: NotebookLM Clone - Complete implementation with: Document upload and management (PDF/TXT/DOCX), AI-powered document analysis with RAG using Qdrant vector database, Audio overview generation with ElevenLabs TTS, Interactive chat with document context, Source citations and references, Dark theme UI with responsive design
- Improved
Checkpoint: Fixed bugs where Delete and Cancel buttons in bottom sheet menus were opening the preview instead of performing their intended actions. Added stopPropagation and preventDefault to all bottom sheet item clicks and Cancel buttons across ResponsiveMenu, AppDrawer, MobileActionMenu, and DashboardLayout components.
- Improved
Checkpoint: Fixed bottom sheet menu items not responding to taps on mobile. Updated ResponsiveMenu component to use onSelect instead of onClick for BottomSheetItem, added proper timing delay before executing actions, and added haptic feedback on menu open.
- Improved
Checkpoint: Added Cancel button at the bottom of all sheet components for easier dismissal on larger phones. Updated the following components: - ResponsiveMenu (bottom sheet) - AddToChat - SourceSelectionSheet - NotebookSelectionSheet - QuickTemplatesSheet - CustomTemplatesSheet - SessionSelector (mobile sheet) - BranchSwitcher (mobile sheet) - SourceFilterSheet - NotebookDrawer - AddSourceSheet - WebsiteSheet - YouTubeSheet - CopiedTextSheet
- Improved
Checkpoint: Converted dropdown menus to bottom sheets on mobile devices for better touch accessibility. Changes include: - Created ResponsiveMenu component that shows dropdown on desktop and bottom sheet on mobile - Created VoiceNoteMenu component for voice note actions (View Transcription, Export, Download Audio) - Created ContentMenu component for generated content actions (Rename, Save as Template, Export, Delete) - Updated Notebooks.tsx to use ResponsiveMenu for notebook card menus - Updated MyGeneratedContent.tsx to use VoiceNoteMenu and ContentMenu for all content items - Added tests for menu item structure and logic
- Improved
Checkpoint: Mobile UX Enhancements: - Added BottomSheet component for mobile-optimized action menus - Implemented haptic feedback for menu interactions (hapticMenuTap, hapticMenuOpen) - Created MobileActionMenu component that shows bottom sheet on mobile, dropdown on desktop - Updated AppDrawer to use bottom sheet on mobile for one-handed access - Updated DashboardLayout user menu to use bottom sheet on mobile - Created ContentCardMenu component for standardized content card actions - Added comprehensive tests for mobile UX configuration
- Improved
Checkpoint: Added "Upload Sources" button to the SourceSelectionSheet component. The button appears below the Select All/Use Sources buttons and allows users to quickly navigate to the add sources dialog from the source selection view. This makes it easier to add new sources when the user realizes they need more sources while selecting sources for content generation or chat.
- Improved
Checkpoint: Implemented two UX enhancements:
- Improved
Checkpoint: Added contextual quick action buttons for each content type filter on the Generated Content page. When filtering by Briefing, Study Guide, Audio, Quiz, or Flashcards, a "New [Type]" button now appears in the header (similar to the existing "New Recording" button for Voice Notes). Clicking these buttons opens the source selection sheet and then proceeds to the generation flow.
- Improved
Checkpoint: Updated all project documentation including comprehensive PRD (v3.0), clean todo.md with current status, and detailed technical architecture documentation. All documents reflect the current production-ready state with 73,732 lines of code, 92 test files, 26 database tables, and full feature coverage.
- Improved
Checkpoint: Added voice notes to global "Generated content" view - voice notes are now displayed grouped by notebook alongside other generated content (quizzes, flashcards, study guides, audio overviews). Each voice note shows with teal microphone icon, "Voice Note" badge, duration, timestamp, and transcription preview.
- Improved
Checkpoint: Voice Notes Enhancement: Added click-to-view transcription modal, audio playback functionality with full controls (play/pause, progress slider, skip forward/back, volume, playback speed), and voice notes display on the generated content page. Created VoiceNoteDetailModal component with professional UI including copy/download transcription buttons.
- Improved
Checkpoint: Added Voice Notes section to Generated Content page: - Created voice_notes database table to store recorded transcriptions - Added backend tRPC procedures for listing, getting, updating, and deleting voice notes - Added "Voice Notes" filter option in the Generated Content page - Built dedicated Voice Notes view showing all recorded transcriptions with: - Audio playback button - Transcription preview (2 lines) - Duration and timestamp display - Export transcription and download audio options - Notebook info in global view - Updated audio.transcribe to save voice notes to the new table - All voice notes tests passing
- Improved
Checkpoint: Added "Record & Transcribe" button to MyGeneratedContent page that opens a voice recorder modal. The feature uses the existing VoiceRecorder component which allows users to: - Record audio using MediaRecorder API - Preview recorded audio with playback controls - Add optional custom prompts for better transcription accuracy - Transcribe audio using Whisper API - Save transcription as a text source in the notebook
- Improved
Checkpoint: Fixed Generate bottom sheet behavior: 1) Sheet now closes immediately when Generate button is clicked, 2) Removed "Generating..." with estimated time loading state from the button - progress is now shown on the My Generated Content page instead
- Improved
Checkpoint: Made the source attachment preview card above chat input smaller and more compact - reduced icon size from 64px to 28px, reduced card padding and width, and made text smaller
- Improved
Checkpoint: Fixed source chip size in chat interface to be more compact and added file type badges to sources list for better file identification
- Improved
Checkpoint: Fixed compact attachment icon to display proper file type icons (FileText, Image, Music, Video, etc.) instead of letter-based placeholders in SourceChips component
- Improved
Checkpoint: UI Polish: Styled numbered lists in chat messages and made attachment icon more compact
- Improved
Checkpoint: Fixed padding on AI response messages - added px-1 padding to prevent text from touching the edges of the container on both saved messages and streaming messages.
- Improved
Checkpoint: Removed the box/card container styling from AI responses in the chat interface. AI messages now use full width without the rounded border and background, giving text more horizontal space especially on mobile devices.
- Improved
Checkpoint: Removed chat bubble styling from AI responses on mobile - AI messages now display without the white bordered bubble, while user messages retain the gray bubble styling
- Improved
Checkpoint: Implemented "Branch from here" functionality that allows users to create new conversation branches from any AI message. Features include:
- Improved
Checkpoint: Implemented three new features: (1) Branch Switching UI - BranchSwitcher component for navigating between conversation branches with dropdown menu, (2) AI Source Visual Indicators - AiSourceBadge component showing purple sparkle badge on AI-generated sources in all source lists (SourceSelectionSheet, MobileSourcesSheet, SourceFilterSheet), (3) Regenerate AI Answer - RegenerateAiAnswerDialog allowing users to regenerate responses from previous questions. Added getAiGeneratedSourceById to db.ts and getById procedure to aiSources router. All tests passing.
- Improved
Checkpoint: Added three new features: 1. Conversation Branching - Database tables and backend procedures for creating and managing conversation branches. UI button added (full branch switching is a future enhancement). 2. Copy to Clipboard - Already existed, verified working consistently. 3. Save AI Answer as Source - Users can now save AI responses as sources for future reference. Includes database table, backend procedures, and UI button on AI responses.
- Improved
Checkpoint: Implemented three new features for the NotebookLM clone:
- Improved
Checkpoint: RAG Bug Fix Complete: AI chat now properly uses content from uploaded sources. Key fixes include: 1) Added summarization query detection patterns for queries like "summarize", "overview", "what is this about", etc. 2) For summarization queries with selected sources, the system now fetches ALL chunks from those sources instead of relying on similarity search. 3) Lowered similarity threshold from 0.25 to 0.15 for short queries. 4) Implemented dynamic threshold based on query length (0.15 for 1-3 words, 0.25 for 4+ words). 5) Added null checks to prevent "Cannot read properties of undefined" errors. 6) Added unit tests for summarization detection and threshold logic.
- Improved
Checkpoint: Fixed RAG not working when sources are added to chat: - Added summarization query detection (Summarize, Summary, Overview, etc.) - For summarization queries with selected sources, fetch ALL chunks from those sources instead of semantic search - Lowered similarity threshold from 0.25 to 0.15 for short queries (1-3 words) - Dynamic threshold based on query length (0.15 for short, 0.25 for longer queries) - Added unit tests for summarization detection and threshold logic
- Improved
Checkpoint: UI Spacing and Mobile Responsiveness Improvements: - Updated base sheet.tsx component with consistent px-6 py-6 padding - Standardized padding across all sheet components (AddSourceSheet, AddToChat, AppDrawer, QuickTemplatesSheet, CopiedTextSheet, WebsiteSheet, YouTubeSheet, SessionSelector, NotebookSelectionSheet, SourceSelectionSheet, CustomTemplatesSheet, NotebookDrawer, SourceFilterSheet) - Fixed dialog component padding (ContentDisplayModal, CollectionsSidebar) - Improved mobile padding on all main pages (NotebookView, Notebooks, Home, MyGeneratedContent, ChatHistory, UserProfile) - Added vertical spacing to content areas for better visual balance
- Improved
Checkpoint: Fixed missing padding in ContentDisplayModal for briefing documents and all generated content types. Added horizontal padding (px-4) to DialogHeader and content wrapper to ensure proper spacing around text and prevent content from touching the edges of the modal.
- Improved
Checkpoint: Fixed Study Guide "Content file not available" bug
- Improved
Checkpoint: Fix flashcard generation "LLM returned empty response" error by aligning with Quiz implementation: changed strict mode to false, removed minItems/maxItems constraints, added array content handling, and added debug logging
- Improved
Checkpoint: Added visual scroll indicator gradient fade on right edge of action bars and applied scrollable treatment to MyGeneratedContent and NotebookDetail pages. Added scrollbar-hide CSS utility class.
- Improved
Checkpoint: Fixed mobile view bug where the action menu bar (Generate, Chat, Show sources, Select) was breaking the layout. Added horizontal scrolling with overflow-x-auto, flex-nowrap, and whitespace-nowrap/shrink-0 to all buttons to ensure they stay on a single scrollable row on mobile devices.
- Improved
Checkpoint: Fixed recurring 404 error when clicking magic link for email authentication. The issue was that the PWA service worker was intercepting /api/* routes and serving the cached index.html, causing the client-side React router to handle the request instead of letting it reach the Express server. Added navigateFallbackDenylist to exclude API routes from service worker navigation handling.
- Improved
Checkpoint: Implemented full TTS audio generation for all audio formats (Deep Dive, Critique & Analysis, Q&A/Debate). All formats now generate actual audio files using ElevenLabs TTS with multi-speaker dialogue support. Also cleaned up old script-only audio records from the database.
- Improved
Checkpoint: Fixed Audio Overview (Brief) generation to produce actual audio files instead of just scripts. Updated audioOverviewBrief procedure to generate TTS audio using ElevenLabs and upload to S3. Added comprehensive vitest tests for the fix.
- Improved
Checkpoint: Checkpoint of CivicNotes project with extensive features: magic link auth, notebook management, document upload (PDF/URL/audio), content generation (study guides, flashcards, quizzes), tagging system, PDF export, and chat interface. Preparing for comprehensive testing and review.
- Improved
Checkpoint: Implemented three major features:
- Improved
Checkpoint: Implemented comprehensive testing and quality assurance system for CivicNotes (NotebookLM clone):
- Improved
Checkpoint: UX Enhancements: Reindex functionality, embedding status badges, retrieval transparency, and feedback loop
- Improved
Checkpoint: Fixed substring error on generated notebook page
- Improved
Checkpoint: Fixed substring error on generated content page
- Improved
Checkpoint: Fixed substring error in content generation endpoints (flashcards, quiz, study guide, briefing) by adding proper type checking before calling substring() on extractedText. Also fixed similar issues in Citation component and SourceSelectionSheet component.
- Improved
Checkpoint: Fixed substring error that occurred when generating flashcards and other content. The error was caused by:
- Improved
Checkpoint: Fixed server crash when accessing generated content page
- Improved
Checkpoint: Fixed flashcard viewer to handle corrupted JSON data. Added robust parsing logic to clean up markdown code fences, replace semicolons with commas, and remove trailing commas. Flashcards now display correctly.
- Improved
Checkpoint: Implemented flashcards feature with 20 cards generation and card-flip UI
- Improved
Checkpoint: CivicNotes - NotebookLM clone with full feature implementation including notebook management, document upload (PDF, TXT, MD, DOCX, audio), URL scraping, chat interface with citations, content generation (briefing docs, study guides, flashcards, quizzes), PDF text extraction, full-text search, batch operations, source tagging with custom colors, and PDF export functionality.
- Improved
Checkpoint: Fixed magic link 404 error - magic links now correctly use preview URL when testing on preview server instead of redirecting to production domain
- Improved
Checkpoint: Fix 404 error when clicking magic links on mobile in production
- Improved
Checkpoint: Added filter icon button to the My Generated Content toolbar. The filter icon now appears between the Chat and Select buttons, matching the NotebookLM interface design. Currently shows a "coming soon" toast when clicked, ready for future filter functionality implementation.
- Improved
Checkpoint: Added source management filter feature with batch operations
- Improved
Checkpoint: Implemented three major quiz enhancements:
- Improved
Checkpoint: Quiz UX/UI improvements: Auto-submit on answer selection, AI-powered explanations, enhanced visual feedback with icons and colors, progress bar, improved navigation with Previous button, better hint interaction, and redesigned results screen. All tests passing.
- Improved
Checkpoint: Fixed quiz generation end-to-end:
- Improved
Checkpoint: Fixed Quiz, Study Guide, Flashcards, and Briefing generation to handle LLM responses that return content as an array of parts instead of a string. The LLM API can return content in two formats: (1) as a plain string, or (2) as an array of content objects with type and text fields. All generation endpoints now properly handle both formats by extracting text from array parts when needed.
- Improved
Checkpoint: Enhanced Quiz Feature Implementation
- Improved
Checkpoint: Changed Quiz template color from amber to indigo for better visual distinction from orange Audio Overview templates. Quiz now uses indigo-600/indigo-50/indigo-200 color scheme instead of amber-600/amber-50/amber-200.
- Improved
Checkpoint: Updated Quick Templates color scheme: Create reports/meeting notes (blue), Study Guide (purple), Flashcards (emerald), Quiz (amber) - each option now has a distinct, visually appealing color
- Improved
Checkpoint: Updated Quick Templates to use consistent color coding: all audio overview cards (Deep Dive, Brief, Critique, Q&A/Debate) now use orange theme (bg-orange-50, text-orange-600, border-orange-200), and all text-based content generation cards (Briefing, Study Guide, Flashcards, Quiz) now use blue theme (bg-blue-50, text-blue-600, border-blue-200). This creates clear visual grouping by content type.
- Improved
Checkpoint: Fixed padding in generation dialog to match reference design. Added horizontal padding (px-6 sm:px-8), top padding (pt-4), increased bottom padding (pb-8), and improved grid gap spacing (gap-4) for better visual hierarchy and breathing room.
- Improved
Checkpoint: Added Critique & Analysis and Q&A/Debate audio overview formats to Quick Templates. Implemented new AudioPlayer component with playback controls (play/pause, progress bar, speed controls, volume, download). Integrated AudioPlayer into audio detail page with script display and feedback section.
- Improved
Checkpoint: Added audio overview templates to Quick Templates sheet with Deep Dive and Brief options
- Improved
Checkpoint: Added Audio Overview generation feature with four quick templates matching NotebookLM design:
- Improved
Checkpoint: Checkpoint saved: Landing page improvements and template title update
- Improved
Checkpoint: Updated homepage description to emphasize CivicNotes as a personal tutor and research assistant with features like summaries, audio-pods, and quizzes
- Improved
Checkpoint: Fixed magic link authentication: Added /api/auth/verify-magic-link endpoint registration, implemented token verification flow, and integrated with session management. Ready for production deployment to civicnotes.se.
- Improved
Checkpoint: Fixed magic link 404 error by improving URL generation logic to properly detect Manus preview/development environments. The system now correctly uses the request URL for preview environments instead of always using the production URL from VITE_APP_URL.
- Improved
Checkpoint: Added PWA Settings section to User Profile page with manual install prompt trigger and reset banner functionality. Users can now manually trigger the PWA install prompt from their profile if they previously dismissed it, and reset the install banner to show it again.
- Improved
Checkpoint: Added smart PWA install prompt banner with platform detection (iOS Safari, Android Chrome, Desktop browsers), dismissible functionality with localStorage persistence, and integration into landing page
- Improved
Checkpoint: UI/UX Fix: Removed breadcrumb navigation from chat view to clean up mobile interface. The breadcrumb was showing redundant navigation and taking up valuable screen space. Navigation is now handled entirely through the hamburger menu.
- Improved
Checkpoint: Added breadcrumb trail navigation component that works on both mobile and web views. The breadcrumb shows the navigation path (Home > Notebooks > Current Notebook) with responsive design that truncates long titles on mobile devices.
- Improved
Checkpoint: Removed back arrow buttons from three screens as requested: 1. My Generated Content page (top-right corner) 2. Next/Generated content page (top-right corner) 3. General Chat page (top-left corner)
- Improved
Rollback to f8de6dd
- Improved
Rollback to c8b87022
- Improved
Checkpoint: Removed Select button and batch operations functionality from My Generated Content page. This simplifies the UI by removing the select mode, batch delete, and batch export features as requested by the user.
- Improved
Checkpoint: Fixed UI/UX issues: consolidated double back buttons in NotebookView header into one smart back button. Verified that close (X) and Skip buttons in modals are already functional. The "Remove" text mentioned by user was not found in code and may be a browser artifact or annotation.
- Improved
Checkpoint: Fixed scrolling issue in AddSourceSheet dialog - users can now scroll through all file type options when adding sources. Applied flexbox layout with overflow-y-auto to enable proper scrolling while keeping header fixed.
- Improved
Checkpoint: Added Excel/CSV, PowerPoint, and Word document upload buttons to the notebook creation dialog. Users can now upload these file types when creating new notebooks alongside existing PDF, Audio, Image, Website, YouTube, and Copied Text options.
- Improved
Checkpoint: Added support for Excel/CSV and PowerPoint file uploads with text extraction:
- Improved
Checkpoint: Added support for uploading DOC/DOCX files with text extraction using mammoth library. Users can now upload Word documents alongside PDFs, and the system will automatically extract text for RAG processing and AI chat.
- Improved
Checkpoint: Fixed mobile UX bug: After uploading sources during notebook creation, users now see the Quick Templates bottom sheet instead of being redirected to My Generated Content page. The flow is now: Create notebook → Upload source → Quick Templates sheet appears → User selects template → Redirects to My Generated Content after generation starts.
- Improved
Checkpoint: Fixed notebook creation flow to automatically show Quick Templates sheet after source upload
- Improved
Checkpoint: Added visual icons and tooltips to navigation buttons on My Generated Content page. Buttons now display FilePlus, Sparkles, and MessageCircle icons with helpful tooltips explaining each function. This improves UX by making buttons more visually distinctive and providing context on hover.
- Improved
Checkpoint: Reordered notebook navigation buttons to improve user flow:
- Improved
Checkpoint: Implemented comprehensive onboarding tour system with mobile responsiveness:
- Improved
Checkpoint: Implemented welcome tour feature for first-time users on My Generated Content page. The tour includes: - WelcomeTour component with step-by-step guidance - Three tour steps: welcome message, view results explanation, and getting started prompt - localStorage-based tracking to show tour only once per user - Clean Material Design UI with modal overlay - Navigation controls (Next, Back, Skip Tour, Get Started) - Smooth transitions between steps - Integration with My Generated Content page - Tested and verified working correctly
- Improved
Checkpoint: Fixed notebook creation redirect flow - now after uploading sources, users are automatically redirected to the My Generated Content page regardless of how they close the QuickTemplatesSheet (via generate, skip, X button, or clicking outside)
- Improved
Checkpoint: Implemented notebook selection functionality on My Notebooks page: - Added checkboxes to notebook cards that appear in selection mode - Clicking Select All enters selection mode and selects all notebooks - Deselect All button clears all selections - Individual notebooks can be selected/deselected by clicking the checkbox or the card itself in selection mode - Delete button allows batch deletion of selected notebooks with confirmation dialog - Selected notebooks are visually highlighted with blue ring and background tint - Selected count is displayed in the subtitle - Selection mode is automatically triggered when any notebook is selected
- Improved
Checkpoint: Simplified selection mode action bar on My Generated Content page - removed Export/Download button and selected count display, keeping only Cancel, Select All, Deselect All, and Delete icon for better mobile fit
- Improved
Checkpoint: Added click navigation to notebook name and emoji on global My Generated Content page - clicking the notebook title or emoji now redirects users inside that notebook. Added hover effect (blue color transition) for visual feedback.
- Improved
Checkpoint: Added three enhancements to CivicNotes: 1. Search/filter by notebook dropdown in global generated content page - allows filtering content by specific notebook 2. New Chat button in notebook view - visible in both desktop header and mobile sidebar for quick chat session creation 3. Bulk operations across notebooks in global view - select all respects current filters, export and delete work across notebooks
- Improved
Checkpoint: Removed New Chat button from drawer menu (confusing without notebook context) and implemented global My Generated Content page that shows content across all notebooks when accessed from drawer without notebook context. Added notebook name/link to each item in global view.
- Improved
Checkpoint: Fixed drawer menu to always display all menu items in both sections. Section 1 now always shows: My Notebooks, My Generated Content, Export PDF, and Debug RAG. Export PDF and Debug RAG are disabled when no notebook is selected. Section 2 shows Chat History which navigates to the chat history page.
- Improved
Checkpoint: Implemented unified drawer menu (AppDrawer) with proper mobile padding across all pages. Added hamburger menu to header on all pages. Created Chat History page showing all conversations grouped by notebook. Section 1 includes: My Notebooks, My Generated Content (when in notebook context), Export PDF (when in notebook context), Debug RAG (when in notebook context). Section 2 includes: Chat History.
- Improved
Checkpoint: Implemented infinite scroll pagination for chat messages:
- Improved
Checkpoint: Fixed scrolling issues on notebook page where scrolling back to top was getting stuck. Applied proper CSS scroll containment with overscroll-behavior, touch-action, and -webkit-overflow-scrolling properties via a new .scroll-container class.
- Improved
Checkpoint: Fixed scrolling issues on notebook page:
- Improved
Checkpoint: Current project state checkpoint with all implemented features:
- Improved
Checkpoint: Added Debug RAG link to notebook interface and implemented cross-encoder re-ranking for improved RAG retrieval precision:
- Improved
Checkpoint: Implemented two key RAG improvements:
- Improved
Checkpoint: Implemented hierarchical chunking for improved RAG quality:
- Improved
Checkpoint: Added comprehensive JSDoc documentation to all 15 server/_core files and created API documentation page at /api-docs. Documentation includes @fileoverview headers, @param, @returns, @throws, @example tags for all exported functions and types. The API docs page provides interactive documentation for all tRPC endpoints organized by category.
- Improved
Checkpoint: JSDoc Documentation Phase 2: Added comprehensive documentation to server files
- Improved
Checkpoint: Documentation Enhancements: TypeDoc HTML generation, Phase 2 JSDoc documentation, ESLint JSDoc rules
- Improved
Checkpoint: Added comprehensive JSDoc documentation to Phase 1 critical backend files:
- Improved
Checkpoint: Updated comprehensive documentation for CivicNotes including: (1) PRD v2.0 with all implemented features, user stories, database schema, and release roadmap; (2) Technical Architecture document with system overview, architecture diagrams, RAG pipeline details, and deployment architecture; (3) API Reference with complete tRPC endpoint documentation including inputs, outputs, and usage examples.
- Improved
Checkpoint: Fixed 404 errors when clicking Chat button and chat sessions in drawer menu - corrected route paths from /notebooks/ to /notebook/
- Improved
Checkpoint: Improved My Generated Content page UX with better Generate/Chat flows and hamburger menu navigation:
- Improved
Checkpoint: Applied smart truncation to source filenames in Select Sources dialog to prevent text cutoff. Long filenames like "Asker Due Diligence Report: AI-Powered CSRD Compliance Solution for Asker Healthcare Group" are now intelligently truncated to show key information, with full text available on hover tooltip.
- Improved
Checkpoint: Implemented three naming enhancements for generated content:
- Improved
Checkpoint: Implemented intelligent naming system for generated content that includes source material context. Generated documents (Briefing Docs, Study Guides, Flashcards, Quizzes) now show descriptive names based on their source materials instead of generic names with dates. Single source: shows source name (e.g., "✨ Briefing Doc - CivicAI Product Kata"). Multiple sources: shows combined names or count (e.g., "✨ Study Guide - AI Ethics & Privacy Policy +1" or "✨ Briefing Doc - 3 Sources"). All tests passing.
- Improved
Checkpoint: Fixed Add source button on My Generated Content page - now opens AddSourceSheet bottom sheet instead of causing 404 error by navigating to non-existent route
- Improved
Checkpoint: Added "Add source" button to My Generated Content page action menu and changed "Select" button color to blue text style to match Chat and Generate buttons
- Improved
Checkpoint: Fixed Select Sources dialog scrolling issue by: 1. Adding overflow-hidden to SheetContent container 2. Adding overflow-hidden to ScrollArea Viewport 3. Changing ScrollArea from flex-1 overflow-auto to flex-1 min-h-0 to fix flex layout constraints
- Improved
Checkpoint: Select Sources Dialog UI Improvements: - Reduced source card height by changing padding from p-4 to p-3 and gap from gap-4 to gap-3 - Removed min-height constraint for more compact display - Reduced spacing between cards from space-y-2.5 to space-y-2 - Replaced generic file type icons with official lucide-react icons - Added FileSpreadsheet, Presentation, FileCode, and FileJson icons - Enhanced file type detection with proper color coding for each category - Improved information density while maintaining readability - ScrollArea component handles overflow correctly without manual intervention
- Improved
Checkpoint: Fixed Select Sources dialog UI/UX issues: - Replaced small Radix checkboxes with larger custom checkboxes (28×28px) for better visibility - Added file size display next to file type (e.g., "text/plain • 2.9 KB") - Improved filename truncation from single-line to 2-line clamp with word breaking - Enhanced tap targets: increased button height to 44px (iOS recommended minimum) - Added visual feedback for selected items: blue background, blue border, subtle shadow - Improved mobile usability with better spacing and larger interactive elements - Enhanced hover and active states with scale animations
- Improved
Checkpoint: Fixed critical bug where content generation progress reached 100% but generated content never appeared in the list.
- Improved
Checkpoint: Fixed bug where all progress cards showed the same time estimate (2 min 30 sec). Added estimatedSeconds field to generating items in ContentGenerator.tsx with proper time lookup based on content type. Now each content type shows its correct estimate: Quiz (2min), Flashcards (1.5min), Briefing (2.5min), Study Guide (3min), Audio Deep Dive (5min), etc.
- Improved
Checkpoint: Fixed two critical bugs: 1. Reverted incorrect filter button behavior - filters now work as filters only (not opening ContentGenerator) 2. Fixed generated content not appearing in list after generation completes by adding invalidation for notebooks.getGeneratedContent query in ContentGenerator component
- Improved
Checkpoint: Fixed bug where clicking content type buttons (Flashcards, Quiz, Briefing Doc, Study Guide) on My Generated Content page was not opening the ContentGenerator. Now clicking these buttons opens the content generation interface instead of the Add Sources dialog, allowing users to select sources and generate content directly from the My Generated Content page.
- Improved
Checkpoint: Fixed progress card to fade out smoothly when generation reaches 100% completion. Cards now show "Almost done..." for 2 seconds at 100%, then fade out over 1 second before disappearing. Applied to all content types (Briefing, Study Guide, Flashcards, Quiz, Audio Overview).
- Improved
Checkpoint: Fixed QuickTemplatesSheet to close immediately when Generate is clicked and show progress card on My Generated Content page.
- Improved
Checkpoint: Fixed Quick Templates upload flow issues:
- Improved
Checkpoint: Added real-time progress polling and cancel button functionality to Quick Templates sheet:
- Improved
Checkpoint: Added upload/generation progress indicators to Quick Templates sheet
- Improved
Checkpoint: Enhanced generation progress cards with three major improvements:
- Improved
Checkpoint: Fixed bottom sheet to close immediately when Generate button is clicked or files are uploaded, instead of waiting for operations to complete. Sheet now closes instantly while uploads/generations continue in background.
- Improved
Checkpoint: Implemented immediate redirect to My Generated Content page when clicking Generate button. The navigation now happens instantly before waiting for the generation mutation to complete, providing a much faster user experience. The actual content generation continues in the background.
- Improved
Checkpoint: Fixed content generation flow to immediately show progress card on My Generated Content page without requiring manual refresh. Updated ContentGenerator to save progress state to localStorage before navigation, and MyGeneratedContent now polls localStorage every second to detect new generating items.
- Improved
Checkpoint: Enhanced generation flow with automatic redirect and completion notifications
- Improved
Checkpoint: Fixed mobile UI overflow issue by making action menu buttons horizontally scrollable on the My Generated Content page. Added overflow-x-auto, whitespace-nowrap, and flex-shrink-0 classes to enable smooth horizontal scrolling when buttons exceed viewport width on mobile devices.
- Improved
Checkpoint: Moved Select, Chat, and Generate buttons from header to below filter buttons on My Generated Content page for better UI organization
- Improved
Checkpoint: Fixed UI layout issues on My Generated Content page: - Moved action buttons (Cancel, Export, Delete, Regenerate) below filter buttons for better mobile layout - Fixed stuck "Generating..." card by implementing timestamp-based matching instead of ID matching (backend assigns new IDs when content is complete, so we now match by content type and creation time within 2 minutes)
- Improved
Checkpoint: Implemented three template enhancement features:
- Improved
Checkpoint: Implemented "Save as Template" button on content cards and integrated custom templates into the content generator.
- Improved
Checkpoint: Implemented three advanced content management features:
- Improved
Checkpoint: Implemented Quick Templates after upload and batch actions for generated content:
- Improved
Checkpoint: Added Chat and Generate buttons to My Generated Content page header with complete workflows:
- Improved
Checkpoint: Simplified notebook cards by removing Chat and Generate buttons. Clicking on a notebook card now directly navigates to the My Generated Content page (/notebook/:notebookId/generated) instead of requiring users to click separate action buttons.
- Improved
Checkpoint: Implement immediate redirect to My Generated Content page after clicking Generate, with enhanced progress cards matching reference design (IMG_4165.PNG). Features: large icons, "Generating..." heading, "Come back in a few minutes" subtitle, soft background colors (pink/purple/amber tints), and animated dots indicator.
- Improved
Checkpoint: Enhanced My Generated Content page with three major features:
- Improved
Checkpoint: Implemented "My Generated Content" page with grouped content display, interactive viewers for quizzes/flashcards/audio, and automatic redirect after content generation.
- Improved
Checkpoint: Removed "Select All" button from content generation template cards for cleaner UI.
- Improved
Checkpoint: Implemented three UX enhancements for content generation templates:
- Improved
Checkpoint: Added source selection feature to content generation templates. Each quick template (Briefing Doc, Study Guide, Flashcards, Quiz) now has a "Select sources" button that opens the source selection sheet. After selecting sources, the button changes to "Generate (X)" showing the count of selected sources. Each template maintains its own independent source selection state.
- Improved
Checkpoint: Redesigned source chips to exactly match reference image (IMG_4153.PNG): Large file icon (64x64) on left with solid color background and letter indicator, filename on top in bold black text, file type and size below in gray, circular dark close button (bg-gray-800) in top-right corner, clean white background with shadow-md, proper spacing and padding matching the reference design. Tested with all file types (Excel, PDF, Word, PowerPoint, images, audio, etc.).
- Improved
Checkpoint: Enhanced source chips with softer background design and slide-in animation: Updated chip background to soft white/gray with backdrop blur (bg-white/80 backdrop-blur-sm), increased border radius to rounded-2xl, made borders more subtle (border-gray-200/50), added shadow-sm for depth, increased icon size from 10x10 to 12x12 with rounded-xl corners, and implemented smooth slide-in animation (0.3s ease-out) with staggered delay (50ms per chip) for a more responsive feel when sources are selected.
- Improved
Checkpoint: Refined source chips UI: Updated file type icons to use accurate emojis (📄 for PDF, 📊 for Excel, 📝 for Word, 🖼️ for images, 🎵 for audio, 🔗 for URLs, etc.) and reduced X remove button size from 6x6 to 5x5 for a more subtle appearance. Icon backgrounds remain color-coded by file type.
- Improved
Checkpoint: Implemented source chips display feature matching Manus design. When users select sources via "Select sources" action in chat, the selected sources now appear as file chips above the chat input. Each chip shows file icon (color-coded by type), filename, file type, and file size, with an X button to remove individual sources. Chips support horizontal scrolling for multiple sources.
- Improved
Checkpoint: Translated all Swedish text to English in CopiedTextSheet, YouTubeSheet, and WebsiteSheet components. All UI text now displays in English for better accessibility.
- Improved
Checkpoint: Refined audio generation placement: Restored "Generate audio" button to Add to Chat bottom sheet (3-column layout with Generate content, Generate audio, Select sources) and removed Audio Overview section from Generate Content sheet. Audio generation is now accessible only through the Add to Chat quick actions menu, keeping the content generator focused on text-based outputs.
- Improved
Checkpoint: Removed "Generate audio" button from Add to Chat bottom sheet. The bottom sheet now displays only two main actions: "Generate content" and "Select sources" in a 2-column grid layout, providing a cleaner and more focused interface.
- Improved
Checkpoint: Enhanced CivicNotes branding: Updated email templates with blue gradient and CN logo, redesigned 404 page with helpful guidance, and improved all empty states with consistent blue styling and user-friendly messaging.
- Improved
Checkpoint: Enhanced CivicNotes branding: Updated email templates with blue gradient and CN logo, redesigned 404 page with helpful guidance, and improved all empty states with consistent blue styling and user-friendly messaging.
- Improved
Checkpoint: Replaced all instances of "NotebookLM" with "CivicNotes" in WebsiteSheet, YouTubeSheet, and CopiedTextSheet components to ensure consistent branding throughout the application.
- Improved
Checkpoint: Updated AddSourceSheet heading text from "Create audio overviews from web pages" to "Add sources to your notebook" and ensured text color is black for better readability and clarity.
- Improved
Checkpoint: Implemented three enhancement features:
- Improved
Checkpoint: Implemented individual bottom sheets for Website, YouTube, and Copied Text source types matching NotebookLM design. Each bottom sheet has its own icon, title, description, input field, and action button. Website and Copied Text sheets are fully functional, while YouTube sheet shows coming soon message.
- Improved
Checkpoint: Implemented web search functionality in Add Source bottom sheet: - Created backend webSearch module with Google Custom Search API integration - Added webSearch router with search and importSelected endpoints - Built WebSearchResults component with selection UI (checkboxes, select all, import button) - Integrated web search into AddSourceSheet with search results view - Added loading and error states - Created comprehensive tests for webSearch endpoints - All tests passing (6/6)
- Improved
Checkpoint: Implemented comprehensive Add Source bottom sheet matching NotebookLM design with URL input and 6 source type buttons (PDF, Audio, Image, Website, YouTube, Copied Text). All upload handlers are connected to backend except YouTube transcript extraction which is marked as coming soon.
- Improved
Checkpoint: Redesigned navigation to use Claude-style bottom sheet pattern. Removed bottom navigation tabs (Chat, Sources, Generate) and replaced with AddToChat bottom sheet that opens from + button in chat input. The sheet provides quick access to upload files (Camera/Photos/Files), view sources, and generate content. This creates a cleaner, more focused chat interface.
- Improved
Checkpoint: Fixed iOS keyboard issue where chat input disappeared completely when tapped. Removed problematic Visual Viewport API approach and implemented simpler positioning that lets iOS Safari handle keyboard scrolling naturally. Input now stays visible and usable above the keyboard on iPhone.
- Improved
Checkpoint: Fixed critical iOS keyboard positioning bug in chat input:
- Improved
Checkpoint: Added animated typing indicator with pulsing dots for better visual feedback during AI response generation.
- Improved
Checkpoint: Fixed three critical mobile chat UX bugs:
- Improved
Checkpoint: Added three mobile chat UX enhancements: (1) floating scroll-to-bottom button that appears when scrolled up, (2) relative timestamps on all messages (e.g., "2 min ago"), (3) animated loading skeleton while AI generates responses
- Improved
Checkpoint: Fixed mobile chat UX: keyboard now dismisses after sending message (textarea blur), and scroll-to-view now works correctly using scrollTo with smooth behavior and increased delay
- Improved
Checkpoint: Fixed mobile chat UX issues: added iOS safe area padding to prevent keyboard autocomplete bar from overlapping chat input, and implemented auto-scroll to latest message after sending
- Improved
Checkpoint: Implemented three mobile UX improvements for chat input:
- Improved
Checkpoint: Mobile UX improvements: Made chat input area and bottom navigation sticky at the bottom so messages scroll behind them. Increased textarea height from 40px to 60px for better usability. Removed bottom padding from input container for cleaner appearance.
- Improved
Checkpoint: fix: resolve mobile scrolling issue in chat sessions list
- Improved
Checkpoint: chore: remove version number from magic link emails
- Improved
Checkpoint: Fix: resolve magic link authentication cookie persistence on mobile Safari
- Improved
Checkpoint: fix: resolve magic link 404 error caused by auth race condition
- Fix
Fixed magic link 404 error caused by auth race condition
- Improved
Added delay to ensure cookie is processed before redirect
- Improved
Checkpoint: fix: add logging to magic link route registration
- Improved
Checkpoint: fix: magic link version display and 404 error
- New
automatic changelog generation on every commit
- Improved
Checkpoint: fix: update changelog to show e8a5dfeb as latest version
- Improved
Checkpoint: feat: add commitlint for automatic commit message validation
- Improved
Checkpoint: Automated Version Management System
- Improved
Checkpoint: Fixed version display issues on civicnotes.se
- Improved
Checkpoint: Updated changelog to include all recent versions
- Improved
Fixed version showing as dev-build in development mode
- Improved
Checkpoint: Implemented automated version management and changelog page
- Improved
Checkpoint: Fixed Version Number Mismatch Across Components
- Improved
Checkpoint: Fixed Critical Magic Link 404 Error
- Improved
Checkpoint: Version & Routing Fixes
- Improved
Checkpoint: Version Management System Implemented
- Improved
Checkpoint: Version Display Added
- Improved
Checkpoint: Chat Input UI Improvements
- Improved
Checkpoint: Fixed Chat tab navigation to return to sessions list when clicked
- Improved
Checkpoint: Implemented Chat tab navigation to return to sessions list when clicked while viewing an active session. Added onMouseDown handler to desktop Chat TabsTrigger and updated BottomNav onTabChange to clear activeSessionId when Chat tab is clicked on mobile.
- Improved
Checkpoint: Implemented 4 chat session UX improvements:
- Improved
Checkpoint: Fixed session opening logic so clicking sessions or FAB properly opens the chat interface:
- Improved
Checkpoint: Redesigned chat session management with native messaging app UX:
- Improved
Checkpoint: Dramatically simplified mobile header by moving all controls into the sidebar drawer:
- Improved
Checkpoint: Enhanced mobile UX with native-feeling interactions:
- Improved
Checkpoint: Improved mobile header UI for NotebookView page:
- Improved
Checkpoint: Fixed magic link authentication cookie persistence issues:
- Improved
Checkpoint: Implemented HTTP endpoint for reliable magic link authentication
- Improved
Checkpoint: Fixed cookie persistence for Manus deployment URLs
- Improved
Checkpoint: Fixed magic link authentication flow with proper session persistence
- Improved
Checkpoint: Connected chat sessions to messages with auto-creation of default session
- Improved
Checkpoint: Fixed magic link URL to use custom domain (civicnotes.se)
- Improved
Checkpoint: Fixed magic link authentication - users can now log in successfully
- Improved
true message
- Improved
Checkpoint: Multi-Chat Sessions Feature Complete
- Improved
Checkpoint: Fixed citation text overflow issue:
- Improved
Checkpoint: UI improvements and bug fixes:
- Improved
Checkpoint: Critical bug fixes and testing documentation:
- Improved
Checkpoint: Implemented three new features:
- Improved
Checkpoint: Fixed critical source selection bug where AI returned wrong content even when specific sources were selected.
- Improved
Checkpoint: Fixed Qdrant data integrity issue and improved PDF extraction logging
- Improved
Checkpoint: Fixed chat interface issues: removed white space below input, updated source chips to show file names instead of notebook names, fixed localStorage key mismatch. Added Qdrant vector store cleanup functionality with backend endpoint and UI button. Identified root cause of AI returning wrong content - orphaned chunks in Qdrant from deleted sources. Solution: delete and re-upload sources to rebuild vector store.
- Improved
Checkpoint: Chat UI Redesign and Bug Fixes: - Fixed white space below chat input on mobile (reduced padding) - Updated source chip to show actual source file names instead of notebook name - Fixed localStorage key mismatch preventing source selection persistence - Removed all debug logging - Redesigned chat input with Manus-style sticky positioning and integrated buttons
- Improved
Checkpoint: Redesigned mobile chat interface to match Manus chat design with sticky input and source chips.
- Improved
Checkpoint: Fixed critical bug where chat source selection allowed cross-notebook sources, causing incorrect AI responses.
- Improved
Checkpoint: Fixed UI issue where "Select Sources" block was displayed on desktop/laptop in Generate tab.
- Improved
Checkpoint: Added comprehensive error handling for magic link functionality to fix "Unexpected end of JSON input" errors.
- Improved
Checkpoint: Improved email service error handling to prevent server crashes and provide better error messages.
- Improved
Checkpoint: Fixed mobile UI layout issues in source selection dialog.
- Improved
Checkpoint: Fixed critical bug where chat returned wrong source content when specific sources were selected.
- Improved
Checkpoint: Optimized build configuration to improve deployment success: - Added manual chunk splitting for React, UI components, and tRPC vendors - Reduced main bundle size from 2,067KB to 1,862KB - Increased chunk size warning limit to 1000KB - Verified production build completes successfully with no TypeScript errors - All dependencies correctly specified and building without issues
- Improved
Checkpoint: Fixed two critical bugs: 1. Remember me for 30 days - Changed default checkbox state to checked (true) for better UX. Backend already correctly implements 30-day session persistence. 2. PWA icons - Regenerated all icon sizes (64x64, 192x192, 512x512, apple-touch-icon, maskable-icon) with transparent backgrounds instead of purple gradient, allowing icons to adapt to device themes.
- Improved
Checkpoint: Implemented usage analytics for shared audio links and social media preview metadata
- Improved
Checkpoint: Implemented batch download and share functionality for audio generation history
- Improved
Checkpoint: Added export functionality to download audio files from generation history
- Improved
Checkpoint: Implemented generation history feature for audio overviews
- Improved
Checkpoint: Added estimated time remaining display and cancel button for audio generation.
- Improved
Checkpoint: Added visual progress bar with percentage and implemented proper cleanup to prevent memory leaks.
- Improved
Checkpoint: Added progress bar showing chunk generation progress for multi-chunk audio generation.
- Improved
Checkpoint: Fixed ElevenLabs character limit error by implementing automatic script chunking and audio concatenation for long documents:
- Improved
Checkpoint: Implemented audio bookmarks/timestamps and "Ask about this moment" feature:
- Improved
Checkpoint: Implemented audio waveform visualization and "Listen in Chat" feature:
- Improved
Checkpoint: Implemented audio player modal for listening to generated audio overviews:
- Improved
Checkpoint: Fixed Audio Overview not appearing in Generate tab:
- Improved
Checkpoint: Implemented complete Audio Overview generation feature with ElevenLabs API:
- Improved
Checkpoint: Implemented hybrid generated content storage system - saves generated content (briefing, study guide, flashcards, quiz) as sources with full metadata, filter toggle, badges, and regeneration capability.
- Improved
Checkpoint: Implemented action bar with Chat, Generate, Tag, Export, Delete buttons when sources are selected in NotebookDetail. Responsive design shows icons+text on desktop, icons only on mobile to prevent truncation. Positioned above bottom navigation with proper z-index. Delete button fully functional with confirmation dialog, Tag and Export show placeholder toasts.
- Improved
Checkpoint: Fixed Generate flow navigation and tab switching. NotebookView now reads ?tab=generate URL parameter to switch tabs. Generate button on notebook cards now navigates to NotebookView instead of NotebookDetail. Complete Generate flow working: source selection + ContentGenerator with 4 quick templates (Briefing, Study Guide, Flashcards, Quiz).
- Improved
Checkpoint: Fixed Header Navigation Responsive Layout for Mobile
- Improved
Checkpoint: Fixed Progress Bar Responsive Layout for Mobile
- Improved
Checkpoint: Added Visual Upload Progress Bar in Add Sources Dialog (Option 1)
- Improved
Checkpoint: Fixed Upload Feedback and Auto-Refresh Issues
- Improved
Checkpoint: Checkpoint saved: Fixed Notebook Creation Redirect Bug
- Improved
Checkpoint: Checkpoint saved: Enhanced Notebook Creation Flow with Immediate Navigation
- Improved
Checkpoint: Fixed source icons to display correct file type icons (PDF, image, audio, text) using getSourceIcon helper, and added notebook emoji icon to Select Notebook dialog
- Improved
Checkpoint: Added source upload dialog after notebook creation with URL input, file type buttons (PDF, Audio, Image, Website, YouTube, Copied text), and functional upload/import integration
- Improved
Checkpoint: Implemented source type icons (PDF, image, audio, text), bulk source management with multi-select, bulk delete/tag/export actions, and file size display with storage
- Improved
Checkpoint: Fixed incorrect source count display on notebook cards by correcting SQL subquery to use proper table and column names
- Improved
Checkpoint: Removed checkbox from notebook cards on My Notebooks page for cleaner UI
- Improved
Checkpoint: Checkpoint saved: Voice Recording with Auto-Transcription
- Improved
Checkpoint: Checkpoint saved: Upload Progress Bars - Individual File Tracking
- Improved
Checkpoint: Checkpoint saved: Source Upload Functionality - Multi-File & URL Support
- Improved
Checkpoint: Checkpoint saved: Generation Templates with One-Click Content Creation
- Improved
Checkpoint: Checkpoint saved: Generate Button and Source Selection Fixes
- Improved
Checkpoint: Checkpoint saved: Session Management Implementation Complete
- Improved
Checkpoint: Fixed critical session persistence bug where users had to re-login after each deployment. Enabled cookie domain setting to use base domain (.manus.space) instead of exact hostname, allowing cookies to persist across subdomain changes during app updates. Sessions with "Remember me 30 days" now survive deployments.
- Improved
Checkpoint: Redesigned notebook workflow: My Notebooks page now has Chat and Generate action buttons on each card for quick access. Clicking notebook card opens new NotebookDetail view showing all sources with checkboxes for selection. Bottom action bar with Chat/Generate buttons navigates to chat with selected sources. Selected sources persist via localStorage and load automatically in chat context.
- Improved
Checkpoint: Fixed chat input and quick actions toolbar being hidden behind bottom navigation on mobile. Added pb-20 (80px) bottom padding to chat input container on mobile devices to ensure all controls (context chip, quick actions, textarea, send button) are visible above the bottom nav tabs. Desktop view remains unchanged with standard padding.
- Improved
Checkpoint: Added context selector UI to chat interface showing selected notebook/sources. Created ChatContextChip component displaying notebook title and source count with X button to clear selection. Created ChatQuickActions toolbar with folder icon to open notebook/source selector. Chip appears above chat input only when sources are selected, providing clear visual feedback of active context. Quick actions toolbar enables one-tap access to change chat context without navigating away.
- Improved
Checkpoint: Fixed critical bug where SourceSelectionSheet showed "No sources in this notebook" even when sources existed. Root cause: NotebookSelectionSheet was passing numeric database ID (notebook.id) instead of the string UUID (notebook.notebookId) when opening source selector. Backend sources.list query expects notebookId UUID to match database schema. Changed both recent and all notebooks sections to pass notebook.notebookId correctly.
- Improved
Checkpoint: Implemented three source selection enhancements: 1) Added source count badges to notebook cards using SQL subquery in getNotebooksByUserId, 2) Implemented localStorage persistence to save/load selected sources per notebook across sessions, 3) Connected selected sources to chat RAG context by adding sourceIds parameter to messages.send mutation and contextualSemanticSearch function - AI responses now filter retrieval to only selected sources when specified.
- Improved
Checkpoint: Implemented source selection feature for mobile Sources tab. Created SourceSelectionSheet component with Select All/Deselect All buttons and individual checkboxes for each source. Updated NotebookSelectionSheet to accept onNotebookSelected callback - when provided, it opens source selector instead of navigating to notebook. Users can now: 1) Tap Sources tab to open notebook list, 2) Tap a notebook to see its sources, 3) Select all or pick specific sources, 4) Confirm selection with "Use X Sources" button. Selected source IDs are passed back via callback for filtering chat context.
- Improved
Checkpoint: Implemented three notebook navigation UX improvements: 1) Loading spinner with "Opening notebook..." message during navigation, 2) Search/filter input in NotebookSelectionSheet modal to quickly find notebooks by name, 3) Recent notebooks section showing last 5 accessed notebooks at top of modal with "Recently Viewed" label. Backend already had updateNotebookLastViewed function that updates timestamp when notebooks are accessed via notebooks.get procedure.
- Improved
Checkpoint: Fixed critical bug where clicking notebooks caused JavaScript error. Root cause was missing sourceSearchQuery state variable in NotebookView component. Added useState declaration for sourceSearchQuery and setSourceSearchQuery. Tested navigation successfully - notebooks now load without errors.
- Improved
Checkpoint: Changed magic link rate limiting from 5 requests per hour to 5 requests per 15 minutes. Updated backend logic in countRecentMagicLinkRequests() to check last 15 minutes instead of last hour, and updated error message to reflect the new time window.
- Improved
Checkpoint: Fixed two mobile UX issues: (1) Enhanced bottom navigation with visible active state - selected tabs now show background color (bg-primary/5), bold font, and bottom indicator bar, (2) Changed Sources tab behavior to open NotebookSelectionSheet modal showing list of all notebooks for easy navigation between notebooks on mobile devices.
- Improved
Checkpoint: Fixed two critical bugs: (1) New Notebook button overflow on mobile by adding max-w-full to container and flex-shrink-0 to button, removing w-full class that forced full width, (2) Remember me 30 days now works correctly - fixed Resend magic link button to include rememberMe parameter so cookie expiration is respected on resent links.
- Improved
Checkpoint: Fixed two critical bugs: (1) New Notebook button overflow on mobile - made header responsive with flex-col layout and adaptive button text (shows "New" on mobile, "New Notebook" on desktop), (2) Remember me 30 days functionality - corrected inverted session duration logic so checking Remember me gives 30-day session while unchecked gives 1-day session (was backwards before). Both cookie maxAge and JWT expiration now properly aligned.
- Improved
Checkpoint: Implemented three major mobile UX enhancements: (1) Pull-to-refresh gesture on Notebooks list and NotebookView chat with loading spinner and smooth animations, (2) Bottom navigation bar for mobile with Chat/Sources/Generate tabs positioned at bottom for thumb-reach, replacing top tabs on screens < 768px, (3) Haptic feedback utility with vibration patterns for button taps, successful uploads, AI responses, and notebook creation. All features tested and working on mobile devices.
- Improved
Checkpoint: Fixed NotebookView mobile layout - sidebar now hidden by default on screens < 768px, chat panel takes full width when sidebar closed, hamburger menu visible for mobile users. Sidebar opens as overlay on mobile instead of pushing content. Tested and verified on iPhone viewport.
- Improved
Checkpoint: Implemented mobile-optimized chat input with auto-resize textarea (44px-200px), draft message persistence in localStorage, and sticky positioning above keyboard. Created full-screen MobileDocumentViewer with pinch-to-zoom (0.5x-5x), swipe navigation between sources, drag-to-pan when zoomed, floating citation bubbles, and zoom controls. All features tested and working on mobile devices.
- Improved
Checkpoint: Fixed mobile UI responsiveness in NotebookView - added hamburger menu toggle, responsive sidebar with overlay, mobile-optimized header buttons (icon-only on small screens), and smooth slide-in/out animations for sidebar on mobile devices
- Improved
Checkpoint: Implemented background sync queue manager with localStorage persistence, automatic reconnection sync, and retry logic. Added three PWA app shortcuts (Quick Upload, New Voice Note, Recent Notebooks) with action parameter handling. All PWA features tested and verified working: service worker active, manifest with shortcuts loaded, shortcut actions triggering correctly. Tests passing (7/7).
- Improved
Checkpoint: Complete PWA implementation with cross-platform support for iOS, Android, and desktop. Added service worker with caching, web manifest, PWA icons, install prompt, offline page, and mobile optimizations including iOS safe areas and touch-friendly UI.
- Improved
Checkpoint: Fixed Login Redirect URI Error - Users Can Now Sign In
- Improved
Checkpoint: Critical Bug Fix: Document Summary Not Matching Uploaded Content
- Improved
Checkpoint: Fixed logout redirect bug where users were sent to old Manus auth page. Logout now properly redirects to home page ("/") instead of non-existent "/login" route. Updated Home.tsx and Notebooks.tsx logout handlers. Users can now safely log out and stay within the application.
- Improved
Checkpoint: Added batch document upload with real-time progress tracking. Users can now upload multiple files simultaneously with individual progress bars, status indicators (uploading/processing/complete/error), and parallel processing. Includes visual feedback with emoji status indicators and auto-dismissing progress panel.
- Improved
Checkpoint: Complete production-grade RAG system with Voyage AI embeddings, Qdrant vector database, conversation history, multi-signal re-ranking, and intelligent caching. All 71 tests passing. Performance: 243ms search latency, 50% cost reduction via caching.
- Improved
Checkpoint: Phase 6: Result Caching Implementation
- Improved
Checkpoint: Phase 5 Complete: Advanced RAG Features
- Improved
Checkpoint: Phase 4 Complete: RAG-Powered Chat Integration
- Improved
Checkpoint: Phase 3 Complete: Qdrant Vector Database Integration
- Improved
Checkpoint: Phase 2 Complete: RAG Embedding Generation Pipeline
- Improved
Checkpoint: Phase 1 Complete: Enhanced Database Schema for RAG - Created document_chunks and conversation_context tables with vector embeddings, hierarchical relationships, and rich metadata. All 11 tests passing. Ready for Phase 2 (Embedding Generation).
- Improved
Checkpoint: Stable Pre-RAG Baseline with comprehensive documentation - Fixed sessionId field in messages table, created performance metrics and baseline report, all core tests passing (50/57)
- Improved
Checkpoint: Stable Pre-RAG Baseline - Magic link authentication, source selection, logout, remember me, rate limiting, all features working
- Fix
Fixed issue with quotes in commit messages
- Improved
Checkpoint: Fixed logout redirect to send users to /login page instead of Manus OAuth page. Updated logout handlers in both Home and Notebooks pages to redirect to /login after clearing the session cookie, ensuring users stay within the CivicNotes application flow.
- Improved
Checkpoint: Implemented rate limiting on magic link requests to prevent email spam and abuse. Users are now limited to 5 magic link requests per email address per hour. Added database query to count recent requests and improved error handling with user-friendly messages that display for 6 seconds when rate limit is exceeded. The system tracks requests by email and creation timestamp to enforce the hourly limit.
- Improved
Checkpoint: Added logout functionality and "Remember me" option. Users can now log out from the header on both Home and Notebooks pages. The login page includes a "Remember me for 30 days" checkbox that extends session duration from the default to 30 days for trusted devices. Backend updated to store rememberMe preference in magic link tokens and apply appropriate session duration (30 days vs 1 year) based on user choice.
- Improved
Checkpoint: Customized magic link email with friendly, conversational copy and comprehensive onboarding instructions. Email now includes step-by-step guidance on creating notebooks, uploading sources, asking questions, and using tools. Features professional HTML styling with highlighted sections and a welcoming tone that encourages users to get started immediately.
- Improved
Checkpoint: Enhanced user experience after magic link login with personalized welcome message, user email display, smooth fade-in animation, and improved visual design. Success confirmation now shows a larger icon, welcoming message, and clear redirect notification before automatically taking users to their notebooks.
- Improved
Checkpoint: Fixed authentication context to support email-based magic link sessions alongside OAuth. Users authenticated via magic link are now properly recognized and no longer redirected to Manus OAuth page. Added getUserByEmail and updateUserLastSignedInByEmail database helpers.
- Improved
Checkpoint: Fixed ONE_YEAR_MS undefined error in magic link verification by adding the missing import. Magic link authentication now works correctly.
- Improved
Checkpoint: Implemented complete magic link authentication system replacing Manus OAuth. Features include: email-based passwordless login, SMTP2Go email integration, secure token generation with 15-minute expiration, beautiful login and verification pages, and seamless authentication flow. Users can now sign in by receiving a magic link via email.
- Improved
Checkpoint: Implemented source selection for content generation with checkboxes, Select All/Deselect All buttons, visual highlighting, selected count badge, and validation to ensure at least one source is selected before generating content
- Improved
Checkpoint: Updated footer links to point to correct civicinnovation.se URLs: termsandconditions/ and privacypolicy/
- Improved
Checkpoint: Fixed OAuth callback URLs to force HTTPS, updated footer with Terms of Service and Privacy Policy links to civicinnovation.se, and fixed TypeScript errors in tag color handling
- Improved
Checkpoint: Added automated HTTPS verification test suite with backend tests, manual verification shell script, and comprehensive documentation
- Improved
Checkpoint: Improved PDF export formatting by fixing text wrapping issues and spacing. Adjusted splitTextToSize width parameters to prevent awkward character spacing, increased line height for better readability, and added proper spacing between messages and sources. PDFs now render cleanly with proper margins and consistent formatting throughout.
- Improved
Checkpoint: Fixed critical jsPDF import error that was causing "jsPDF is not a constructor" failure. Changed from default import to named import syntax. PDF export now works correctly - generates well-formatted PDFs with notebook title, sources list, and complete chat history. All tests passing and functionality verified.
- Improved
Checkpoint: Implemented PDF export functionality for notebook content including sources and chat history. Installed jsPDF library, created backend endpoint that generates well-formatted PDFs with notebook title, export date, sources list, and complete chat history with proper pagination. Added Export PDF button in notebook header with loading state and automatic download. PDFs are named based on notebook title with timestamp. All 46 tests passing including 4 comprehensive PDF export tests.
- Improved
Checkpoint: Implemented custom color assignment for tags to enhance visual organization. Created tagColors database table, added backend endpoints for setting/retrieving tag colors with hex validation, and built intuitive UI with color picker dialog showing 20 preset colors. Tag badges and filter buttons now display custom colors with proper contrast. Click any tag to open color picker, colors persist per notebook. All 42 tests passing including 4 comprehensive tag color tests.
- Improved
Checkpoint: Implemented complete source tagging system with custom labels and filtering. Added tags field to database schema, created backend endpoints for adding/removing tags, and built UI with tag badges on source cards, inline tag editing, and filter buttons in sidebar. Tags are stored as JSON arrays, support duplicate prevention, and enable quick filtering of sources by category. All 38 tests passing including 4 new comprehensive tagging tests.
- Improved
Checkpoint: Implemented batch URL import functionality allowing users to import multiple website URLs simultaneously. Added backend endpoint that processes up to 20 URLs in parallel with full error handling. Updated UI with textarea input supporting one URL per line, dynamic button showing URL count, and detailed results display showing success/failure status for each URL. All URLs are scraped with full-page content extraction, text cleaning, and automatic storage. All 34 tests passing including 3 new batch import tests.
- Improved
Checkpoint: Implemented complete PDF text extraction and full-text search functionality. Added pdf-parse library to extract text from uploaded PDFs and text files, storing extracted content in database. Created search endpoint that searches across all source text with context snippets. Enhanced AI chat to use extracted text for more accurate responses with source citations. Added search UI in notebook sidebar showing real-time search results with highlighted snippets. All 31 tests passing including 4 new PDF extraction and search tests.
- Improved
Checkpoint: Fixed citation display to show cleaner, more compact format. Citations now intelligently truncate long URLs by extracting just the filename or domain name, with a maximum length of 40 characters. Added tooltip on hover to show full filename. Citations are visually cleaner and no longer wrap awkwardly in the chat interface. All 27 tests passing.
- Improved
Checkpoint: Implemented multi-select functionality for notebooks with batch delete capability. Added checkboxes to each notebook card, "Select All" button, and batch delete with confirmation dialog. When notebooks are selected, the UI switches to selection mode showing selected count and batch actions (Clear Selection, Delete X). Selected notebooks are highlighted with a blue ring. Backend includes parallel batch delete procedure. All 27 tests passing including 2 new batch delete tests.
- Improved
Checkpoint: Implemented complete notebook rename and delete functionality. Added tRPC procedures for rename and delete operations, built UI with dropdown menus (three-dot icon) on notebook cards, and created rename/delete dialogs with confirmation. Users can now rename notebooks with a dialog input or delete them with a confirmation alert. All 25 tests passing including 3 new tests for notebook management.
- Improved
Updated footer text from Powered by Google
- Improved
Checkpoint: Enhanced URL scraping cleanup to remove ALL link formats: markdown links [text](url) now extract just the text, empty links []() are removed, and standalone URLs (https://, http://) are stripped out. Scraped content now contains only clean text without any URL references. All 22 tests passing.
- Improved
Checkpoint: Cleaned up URL scraping to remove all image URLs and navigation links from scraped webpage content. Added Turndown rules to remove img elements and markdown image syntax, ensuring only clean text content is saved. All 22 tests passing successfully.
- Improved
Checkpoint: Completely disabled Mozilla Readability library and switched to full-page body scraping to capture ALL visible webpage content. This ensures testimonials, feature sections, marketing copy, and all other content are preserved. Only removes scripts, styles, ads, and popups while keeping navigation, headers, footers, and all text content. Fixes issue where content was being cut off after first testimonial on pages like mariko.se.
- Improved
Checkpoint: Improved URL scraping to capture complete webpage content including testimonials, feature sections, and marketing copy. Lowered Readability threshold to 200 characters to trigger full-page fallback more often for marketing pages. Reduced element filtering to preserve nav, header, and footer content while still removing ads and scripts. Now captures all visible text from pages like mariko.se.
- Improved
Checkpoint: Updated HTML meta tags to reflect CivicNotes branding. Replaced NotebookLM references in og:description and twitter:description with CivicNotes-specific descriptions highlighting AI-powered research capabilities for students, teachers, researchers, and professionals.
- Improved
Checkpoint: Implemented robust 4-step encoding detection: 1) Check Content-Type header, 2) Use jschardet library for automatic detection from byte patterns, 3) Fallback to UTF-8, 4) Verify against HTML meta charset tags and re-decode if needed. This multi-layer approach handles websites with mismatched or missing encoding declarations, fixing Swedish character display issues.
- Improved
Checkpoint: Enhanced URL scraper with intelligent fallback - now captures complete webpage content including footer sections. If Readability filters too aggressively (content < 500 chars), automatically falls back to full page scraping while still removing navigation, headers, and ads. This ensures all important content like "Tre saker Mariko kan hjälpa dig med" is captured.
- Improved
Checkpoint: Fixed character encoding issues in URL import - Swedish and special characters now display correctly. Improved content extraction by properly detecting charset from HTTP headers, using TextDecoder for accurate decoding, and enhanced Turndown options to preserve more webpage content.
- Improved
Checkpoint: Enhanced URL import to preserve complete webpage structure. Now converts HTML to Markdown with headings, paragraphs, lists, and metadata (title, author, source URL, summary). Content is saved as structured Markdown instead of plain text for better AI analysis.
- Improved
Checkpoint: Fixed URL import feature with proper React hooks ordering and added automatic main content extraction using Mozilla Readability library. URLs now extract clean article content without navigation, ads, or boilerplate.
- Improved
Rollback to 1e93c98f
- Improved
Checkpoint: Added URL import functionality - users can now add web content as sources by clicking the link button (🔗) in the sources sidebar, entering a URL, and importing it. The system fetches the webpage, extracts text content, and saves it as a source with the page title. Test passes successfully.
- Improved
Checkpoint: Added intelligent citation tracking to AI chat responses with clickable source references that open document previews. Implemented export functionality for all generated content (study guides, flashcards, quizzes) with Markdown and TXT download options. Citations are automatically extracted from AI responses and displayed as interactive badges.
- Improved
Checkpoint: Added interactive content display modals with flashcard flip animations and quiz interface with answer checking. Implemented document preview panel for viewing PDFs and text files directly in the app. Added delete functionality for sources. All UI enhancements complete with Material Design styling.
- Improved
Checkpoint: Implemented Whisper API integration for voice transcription with custom prompts, and AI-powered content generation (study guides, flashcards, quizzes, briefing docs) using Manus LLM. Voice recordings are automatically transcribed and saved as text sources. All generation features tested and working.
- Improved
Checkpoint: Implemented Phase 4-6: File upload with S3 storage, voice recording interface with custom transcription prompts, and content generation UI for study tools (flashcards, quizzes, audio overviews, etc.). All 15 tests passing.
- Improved
Checkpoint: Implemented Phase 3-5: Complete notebook view with chat interface, AI-powered responses using Manus LLM, message history persistence, sources sidebar, and comprehensive tests. All tests passing.
- Improved
Checkpoint: Rebranded entire application from NotebookLM Clone to CivicNotes - updated all references in code, documentation, PRD, package.json, and UI components. Updated logo to CN initials with Material Blue background.
- Improved
Checkpoint: Implemented Phase 1-2: Database schema (notebooks, sources, messages), Material Design UI with Google blue palette, landing page, notebooks list page, and basic notebook CRUD operations with passing tests
- Improved
Initial project bootstrap
- New
Added version number display in notebooks dashboard (bottom left corner)
- New
Version number now included in magic link emails for easier tracking
- New
Created changelog page to track version history and updates
- Improved
Switched to git commit hash format for version tracking
- Improved
Removed + button from chat input for cleaner interface
- Improved
Changed chat input background to white with better contrast
- Improved
Updated text color to black for improved readability
- Fix
Fixed Chat tab navigation issue where clicking Chat tab wouldn't return to sessions list
- Fix
Added userClearedSessionRef flag to prevent automatic session selection
- Improved
Improved mobile navigation behavior for better UX
Want to suggest a feature or report a bug? Contact us