2.2 KiB
2.2 KiB
Frontend Specification
Core Technology Stack
- Framework: React (Vite-based)
- Routing: TanStack Router (Type-safe routing)
- Data Fetching: TanStack Query (Managing server state & caching)
- State Management: Zustand (Managing local client-side playback and vibe state)
- Styling: CSS Variables (Enabling easy theme switching)
1. Key UI Patterns
The "Look-ahead Buffer" (Seamless Playback)
To prevent playback gaps, the frontend implements a Prefetching Queue.
- Mechanism: The client maintains a
playback_bufferin Zustand containing the next 20 tracks. - Implementation: When the user reaches track
N, TanStack Query triggers a fetch for the next chunk (N+20) in the background. - User Experience: Tapping "next" is near-instantaneous as the track is already in memory.
The "Vibe" Interface
The core feature is the Active Vibe Page.
- Visuals: Shows the current "Rolling Window" as a progress bar/timeline.
- Real-time Updates: Displays "Incoming Recommendations" (Probation tracks) as they are discovered.
- Controls: Quick-access "Keep" / "Dislike" buttons that trigger the lifecycle state machine.
The "Quarantine" Page
A management view for the PENDING_REMOVAL state.
- Features: List of hidden tracks, "time remaining" timers, and "Restore" / "Delete" actions.
2. State Management Strategy
Zustand Stores
usePlaybackStore: Trackscurrent_track,playback_position,is_playing, and thelocal_queue.useVibeStore: Manages theactive_session_idand the current "Center Track" context.
TanStack Query
- Used for all standard CRUD operations (Library, Artists, Albums).
- Configured with aggressive
staleTimefor static data (Artists/Albums) and lowstaleTimefor dynamic data (History/Stats).
3. Navigation Structure
- Home: Continue Listening, Recently Added, Recently Played.
- Library: Artists, Albums, Tracks, Genres (hierarchical).
- Vibe: The infinite player/discovery interface.
- Discover: Manual exploration of similar artists/tracks.
- Search: Global fuzzy search.
- Settings: Theme, playback modes, and automation rules.