- Removed voice parameter from TTS API calls to streamline the process.
- Consolidated voice handling to a single environment variable for cost efficiency.
- Updated related components and types to reflect the removal of voice selection.
- Implement a progress bar that simulates a download process.
- Includes start and reset functionality with visual feedback.
- Styles are defined in a separate CSS module for better organization.
feat(sidebar-demo): create a sidebar demo with animations
- Introduce a sidebar that can be toggled open and closed.
- Uses motion for smooth transitions and animations.
- Menu items are displayed with icons and labels.
feat(swipe-to-dismiss): implement swipe-to-dismiss notifications
- Create a notification system where users can swipe to dismiss.
- Notifications include icons and text, with animations on drag.
- Supports resetting notifications to the initial state.
feat(tab-switcher): add a tab switcher component
- Implement a tab switcher with smooth transitions between tabs.
- Each tab displays an icon and label, with an animated indicator.
- Uses motion for enhanced user experience.
feat(toast-demo): create a toast notification demo
- Implement toast notifications that appear on user action.
- Toasts include icons, titles, and can be dismissed.
- Styles are defined in a separate CSS module for clarity.
feat(tts): add edge TTS functionality for speech synthesis
- Implement speech synthesis using edge TTS with chunking support.
- Handles text splitting, audio generation, and subtitle parsing.
- Includes error handling and retry logic for robustness.
Introduce a new interface, IconProps, to standardize the properties
for SVG icon components. This interface includes optional size and
color properties, enhancing the flexibility and usability of icon
components across the application.
- Added dynamic image generation for Open Graph and Twitter cards.
- Removed unused image files and updated metadata generation to include image URLs.
- Enhanced the apple and icon components with dynamic settings.
- Introduced new icons including NoteIcon and OpenAIIcon for enhanced visual representation.
- Added icons for the Squash and Stretch principles: ArrowIcon, CrownIcon, FireIcon, and ToastIcon.
- Implemented anticipation icons: HighPriority, InProgress, Done, Todo, Check, Bolt, and Avatar.
- Created corresponding styles and components for the new icons to ensure consistent design and functionality.
- Introduced author data files for multiple authors including Anton Stallbörger, Jace Attard, Raphael Salaja, and Russell Dare.
- Implemented a schema for author validation using Zod to ensure data integrity.
- Added functions to read and validate author data from JSON files.
feat(content): implement page formatting utilities
- Created utilities for formatting page data, including author resolution and published date formatting.
- Added functions to format a full Page object and an array of Page objects for consistent display.
feat(tts): add text-to-speech functionality
- Developed ElevenLabs integration for synthesizing speech with timestamps.
- Implemented caching mechanisms for audio and timestamp data.
- Added error handling for article retrieval and ElevenLabs API responses.
feat(views): implement article view tracking
- Added functionality to track and increment view counts for articles using Vercel KV.
- Created utility functions for formatting view counts for display.
feat(hierarchy): add documentation on designing hierarchy
- Created a new document outlining principles of design hierarchy, including spacing, contrast, scale, and weight.
- Provided guidelines for designing flows and attention diagnostics.
- Implement checks for KV configuration in view retrieval and increment functions.
- Adjust view count responses based on KV availability.
- Update styles to improve layout and remove unused color files.
- Add ViewTracker component to increment view count on page load.
- Integrate view count retrieval in the Header and HomeLayout components.
- Update styles for consistent letter-spacing across components.
- Remove views field from markdown content and source configuration.
- Add API routes for getting and incrementing view counts using Vercel KV.
- Introduced a new API endpoint for text-to-speech functionality.
- Added caching for synthesized audio to improve performance.
- Implemented error handling for article retrieval and TTS processing.
- Enhanced the audio reader component to utilize the new API.
- Updated icon components and layout styles for better UI presentation.
BREAKING CHANGE: The text-to-speech endpoint has changed from `/api/text-to-speech` to `/api/tts`.
- Added support for customizable voice and model IDs in the TTS API.
- Improved alignment handling with new data structures for timestamps.
- Updated caching mechanism to include voice and model in content hash.
- Enhanced logging for better debugging and performance tracking.
- Add a new API route for text-to-speech functionality that synthesizes speech from article content.
- Cache audio and timestamp data to improve performance and reduce redundant API calls.
- Handle errors gracefully and provide meaningful responses for missing articles or API failures.
feat(audio-reader): create audio reader component for narration playback
- Develop a client-side audio reader component that fetches narration data and synchronizes word highlighting during playback.
- Implement play/pause functionality with visual feedback for loading and error states.
- Ensure accessibility and responsiveness in the audio playback interface.
feat(rehype): add rehype plugin for word spans in markdown
- Introduce a rehype plugin that wraps words in spans for better interaction with the audio reader.
- Normalize words and manage word IDs for synchronization with audio timestamps.
style(audio-reader): enhance styles for audio reader component
- Improve the visual design of the audio reader component, including button styles and progress indicators.
- Ensure consistent spacing and alignment for a better user experience.
fix(normalize-word): refine word normalization logic
- Update the normalization function to handle various non-word characters more effectively.