# 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_buffer` in 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`:** Tracks `current_track`, `playback_position`, `is_playing`, and the `local_queue`. - **`useVibeStore`:** Manages the `active_session_id` and the current "Center Track" context. ### **TanStack Query** - Used for all standard CRUD operations (Library, Artists, Albums). - Configured with aggressive `staleTime` for static data (Artists/Albums) and low `staleTime` for 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.