Merged
Conversation
- Introduced a checkbox in the ConnectionForm to allow users to keep the server running when the app closes. - Added a setupWindowCloseHandler function to manage server shutdown based on user preference. - Updated App component to integrate the new window close handling logic. - Created a reusable Checkbox component for better UI consistency. - Modified serverStore to include state management for the new setting.
- Renamed backend development script from `dev:backend` to `dev:server` for clarity. - Added new macOS icon assets and configuration files for the application. - Enhanced App component to improve server management during production and development modes. - Updated ConnectionForm to reset state after successful submission and conditionally render the update button. - Implemented database initialization on application startup in the backend.
- Changed icon source reference in build script from AppIcon.icon to voicebox.icon. - Updated tauri.conf.json to specify new resource paths for generated icon and plist files. - Added voicebox.icns and updated partial.plist to include voicebox as the application icon. - Introduced new icon.json and Voicebox.png files for the voicebox icon assets.
- Integrated transcription feature using the useTranscription hook. - Added a button to trigger audio transcription, displaying status during the process. - Updated form handling to reset on dialog close and improved user feedback with toast notifications. - Enhanced form description to clarify supported audio formats and transcription capabilities.
- Introduced functionality to record audio directly from the microphone, allowing users to switch between uploading files and recording. - Implemented state management for recording status and duration, with user feedback through toast notifications. - Updated Info.plist to include microphone usage description for better user transparency. - Enhanced the UI with tabs for selecting between upload and record modes, improving user experience.
…e lists - Added a new AudioPlayer component for audio playback functionality, utilizing WaveSurfer for waveform visualization. - Integrated audio playback controls into the HistoryTable and SampleList components, allowing users to play audio directly from their history and samples. - Updated player state management to handle audio URL, ID, title, and playback state. - Introduced a custom Slider component for volume control and seek functionality. - Enhanced UI to ensure the AudioPlayer is always visible except in settings, improving user experience.
- Created a new landing page using Next.js 16, featuring a modern design with Tailwind CSS. - Implemented essential components including Header, Footer, and DownloadSection for user navigation and download options. - Configured Tailwind CSS and PostCSS for styling, and set up TypeScript for type safety. - Added a README with setup instructions, project structure, and deployment guidelines. - Integrated GitHub links for easy access to the repository and releases. - Established a consistent UI with reusable components and responsive design.
- Updated global styles in globals.css for better dark mode support and background effects. - Enhanced DownloadSection and FeatureCard components with hover effects and improved layout. - Refined Header component with better backdrop blur and tracking for text. - Improved button styles for consistency and added shadow effects for better visibility. - Adjusted Card and Section components for better spacing and visual hierarchy.
- Changed the default active tab in the App component from 'profiles' to 'main'. - Improved the layout of the main content area to better accommodate different views, including profiles, generation forms, and history. - Updated Sidebar component to reflect the new tab structure with a 'main' tab. - Enhanced the GenerationForm to utilize the selected profile from the UI store, improving user feedback when no profile is selected. - Added a new CircleButton component for better icon button interactions. - Adjusted styles in various components for improved responsiveness and visual consistency.
- Added global styles to hide scrollbars across all browsers for a cleaner interface. - Refactored HistoryTable component to highlight currently playing audio with conditional styling. - Implemented a confirmation dialog for deleting voice profiles in ProfileCard, enhancing user feedback and preventing accidental deletions. - Updated ProfileList to rename the section from 'Voice Profiles' to 'Voicebox' for better branding and clarity.
- Added a new UpdateNotification component to inform users about available updates and facilitate installation. - Integrated useAutoUpdater hook for managing update checks and installations. - Updated package.json with new build and generate scripts for release preparation and key generation. - Enhanced tauri configuration to support autoupdater with signing keys and endpoints. - Created scripts for preparing signed releases and updating icons, ensuring a streamlined workflow for asset management. - Added detailed documentation for autoupdater setup and icon update workflow.
- Reintroduced the cn utility for class name management in HistoryTable. - Adjusted the maximum height of the table container for better layout. - Reformatted the table structure for clearer readability and consistency. - Enhanced the styling of table cells and buttons for improved user interaction.
- Replaced the main Voicebox icon with a new microphone-themed design. - Removed outdated appearance variants from the icon assets. - Updated the icon management script to generate a landing page logo and streamline icon compilation. - Adjusted icon.json to reflect the new icon structure and positioning.
- Added new Tauri plugins: @tauri-apps/plugin-process and @tauri-apps/plugin-updater to improve application capabilities. - Introduced UpdateStatus component to display update information in the UI. - Enhanced GenerationForm to include an optional instruct field for additional input. - Refactored various components for improved styling and responsiveness, including Sidebar, AudioPlayer, and ProfileCard. - Updated API models and schemas to accommodate new instruct parameter in generation requests and responses. - Improved documentation for autoupdater setup and usage.
…tics - Changed accent color variables in index.css for better visual consistency. - Added a new voicebox logo to the Sidebar component for branding enhancement. - Refactored AudioPlayer to utilize CSS variables for wave and progress colors, improving theme adaptability. - Adjusted HistoryTable column widths for better layout and readability. - Enhanced ProfileCard layout with improved button positioning and styling. - Updated button styles to use accent colors for better visual coherence. - Improved CircleButton styling for consistent appearance across the application.
…functionality - Introduced a DropdownMenu for action buttons in HistoryTable, enhancing user interaction. - Adjusted column widths in HistoryTable for better layout and readability. - Updated ProfileList to replace icons and improve layout consistency. - Added new DropdownMenu component for reusable dropdown functionality across the application. - Enhanced Slider component with slight position adjustment for better visual alignment.
…components - Added framer-motion version 12.29.0 to enhance animation capabilities. - Updated HistoryTable component headers for improved clarity and consistency. - Enhanced ProfileCard component styling for better visual integration.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
| <CheckCircle2 className="h-4 w-4 text-green-500" /> | ||
| You're up to date | ||
| </div> | ||
| )} |
There was a problem hiding this comment.
Update status shows "up to date" before checking
Medium Severity
The condition on line 92 evaluates to true on initial render before any update check has been performed. Since useAutoUpdater(false) doesn't auto-check on mount, and the initial state has checking: false, available: false, and no error, the component displays "You're up to date" immediately—even though no check has actually occurred. This misleads users into thinking their app is current when no verification has happened.
jamiepine
added a commit
that referenced
this pull request
Mar 12, 2026
Add the ability to download a CUDA-enabled backend binary (~2.4 GB) and swap it in via a backend-only restart, solving the #1 user pain point (19 open 'GPU not detected' issues caused by GitHub's 2 GB asset limit). Backend: - cuda_download.py: download from R2 (primary) or GitHub split-parts (fallback), SHA-256 verification, atomic writes, progress via SSE - 4 new endpoints: GET/POST/DELETE /backend/cuda-*, GET cuda-progress - server.py: --version flag, auto-detect variant from binary name - build_binary.py: --cuda flag for CUDA PyInstaller builds - split_binary.py: split large binaries into <2GB GitHub Release assets - CI workflow for building CUDA binary Tauri: - restart_server command (stop -> wait -> start) - start_server prefers CUDA binary from {data_dir}/backends/ if present - Version mismatch check: runs --version before launching CUDA binary Frontend: - GpuAcceleration component: download, progress, restart, switch, delete - API client + types for CUDA status and management - Platform lifecycle: restartServer() on Tauri/Web - Aggressive 1s health polling during restart for fast reconnection
8 tasks
jamiepine
added a commit
that referenced
this pull request
Mar 12, 2026
Add the ability to download a CUDA-enabled backend binary (~2.4 GB) and swap it in via a backend-only restart, solving the #1 user pain point (19 open 'GPU not detected' issues caused by GitHub's 2 GB asset limit). Backend: - cuda_download.py: download from R2 (primary) or GitHub split-parts (fallback), SHA-256 verification, atomic writes, progress via SSE - 4 new endpoints: GET/POST/DELETE /backend/cuda-*, GET cuda-progress - server.py: --version flag, auto-detect variant from binary name - build_binary.py: --cuda flag for CUDA PyInstaller builds - split_binary.py: split large binaries into <2GB GitHub Release assets - CI workflow for building CUDA binary Tauri: - restart_server command (stop -> wait -> start) - start_server prefers CUDA binary from {data_dir}/backends/ if present - Version mismatch check: runs --version before launching CUDA binary Frontend: - GpuAcceleration component: download, progress, restart, switch, delete - API client + types for CUDA status and management - Platform lifecycle: restartServer() on Tauri/Web - Aggressive 1s health polling during restart for fast reconnection
jamiepine
added a commit
that referenced
this pull request
Mar 13, 2026
Add the ability to download a CUDA-enabled backend binary (~2.4 GB) and swap it in via a backend-only restart, solving the #1 user pain point (19 open 'GPU not detected' issues caused by GitHub's 2 GB asset limit). Backend: - cuda_download.py: download from R2 (primary) or GitHub split-parts (fallback), SHA-256 verification, atomic writes, progress via SSE - 4 new endpoints: GET/POST/DELETE /backend/cuda-*, GET cuda-progress - server.py: --version flag, auto-detect variant from binary name - build_binary.py: --cuda flag for CUDA PyInstaller builds - split_binary.py: split large binaries into <2GB GitHub Release assets - CI workflow for building CUDA binary Tauri: - restart_server command (stop -> wait -> start) - start_server prefers CUDA binary from {data_dir}/backends/ if present - Version mismatch check: runs --version before launching CUDA binary Frontend: - GpuAcceleration component: download, progress, restart, switch, delete - API client + types for CUDA status and management - Platform lifecycle: restartServer() on Tauri/Web - Aggressive 1s health polling during restart for fast reconnection
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Major UX and platform upgrades across the app and release pipeline.
AudioPlayerwith waveform (WaveSurfer), playback controls, looping, seeking, and integration with history/samplesinstructtext; API models updated accordinglyProfileFormsupports upload/record tabs, duration validation, and auto-transcription; optional sample creation on profile create; improvedProfileCardwith selection and delete dialogUpdateStatusand "Keep server running on close" option; auto-start server only in production and window close handler wiringuseAutoUpdaterhook and CI changes: Tauri signing keys andincludeUpdaterJson; in-appUpdateNotificationcheckbox,dropdown-menu,slider,circle-button) and update button style/colors; tweak package deps (Tauri plugins, Radix, framer-motion)dev:server),.gitignoreadd*.promptWritten by Cursor Bugbot for commit a0302c0. Configure here.