# muzick A high-performance, distributed music orchestration and recommendation platform. ## Overview **muzick** is designed to manage a local music library while providing an "infinite vibe" listening experience. It bridges the gap between a local filesystem and advanced discovery engines through a tiered recommendation architecture. ## Tech Stack ### **Frontend** - **Framework:** React - **Routing:** TanStack Router - **Data Fetching:** TanStack Query (with Look-ahead Buffering) - **State Management:** Zustand (for Session/Vibe state) - **Styling:** CSS Variables (Customizable Themes) ### **Backend** - **Runtime:** Node.js / TypeScript - **Framework:** Fastify - **Task Queue:** BullMQ (via Redis) - **Search:** Typesense ### **Infrastructure & Data** - **Database:** PostgreSQL (Source of truth for metadata, relationships, and session state) - **Cache/Queue:** Redis - **Audio Analysis:** Essentia (via Worker processes) - **External Metadata:** MusicBrainz, Discogs, LRCLib, Cover Art Archive ## Core Concepts - **The Rolling Vibe:** A continuous, evolving stream of music that uses a "Rolling Window" of tracks. It interleaves owned library tracks with high-probability "probation" tracks (external discoveries). - **The Dislike Lifecycle:** A multi-stage state machine that protects users from accidental deletions while ensuring the library stays clean. - **Tiered Similarity:** Instant metadata-based matches, followed by deep audio-feature similarity. ## Getting Started ### Prerequisites - Docker & Docker Compose ### Running Locally Vibe uses the same per-user identity convention as the rest of the API: `x-user-id` when supplied, otherwise the local default user. Each user's Vibe session and listening history are isolated from other users. ```bash docker-compose up -d ```