# KeySelector KeySelector ist ein browserbasiertes DJ-Tool, das dir dabei hilft, harmonisch passende Tracks für dein nächstes Set zu finden. Es nutzt Audio-Fingerprinting (über das Mikrofon), um laufende Songs zu erkennen, analysiert deren BPM sowie die musikalische Tonart (ausgedrückt als Camelot-Code) und schlägt darauf basierend harmonisch kompatible Nachfolgetracks vor. ## 🌟 Features - **🎤 Live Audio Recognition**: Erkennt den aktuell laufenden Track in der Umgebung (via AcoustID / Mock). - **🎛️ Harmonic Mixing Suggestions**: Nutzt die "Mixed In Key"-Regeln, um perfekte Übergänge (Perfect, Quinte, Energy, Scale etc.) vorzuschlagen. - **🎡 Interaktives Camelot Wheel**: Visualisiert die aktuelle Tonart und hebt kompatible Tonarten direkt im Wheel hervor. - **🔍 Manueller Fallback**: Song nicht erkannt? Die manuelle Suche findet Tracks über Metadaten. - **🌓 Dark/Light Mode**: Nahtloser Wechsel zwischen verschiedenen Farbschemata. ## 🏗️ Architektur Das Projekt ist bewusst leichtgewichtig aufgebaut und auf Dauerbetrieb in der Cloud ausgelegt: - **Frontend (`public/`)**: Pures Vanilla JS, HTML und CSS. Kein Build-Schritt, schnelle Ladezeiten. - **Backend (`server/`)**: Node.js mit Express. Handhabt das Audio-Fingerprinting, ruft Metadaten ab (GetSongBPM, Last.fm) und liefert Cover via iTunes-API (umgeht Frontend-CORS). - **Shared (`shared/`)**: Geteilte Logik für Camelot-Geometrie und Harmonie-Regeln. - **Datenbank (`db/`)**: PostgreSQL (via Jannik-Cloud bereitgestellt) für einen massiven Seed aus AcousticBrainz-Daten. ## 🚀 Installation & Setup (Lokale Entwicklung) Voraussetzungen: [Node.js](https://nodejs.org/) 1. **Repository klonen** ```bash git clone https://git.orfel.de/Jannik/KeySelector.git cd KeySelector ``` 2. **Backend starten (Node.js)** ```bash cd server npm install # Umgebungsvariablen (wie API Keys) exportieren oder in eine .env Datei in server/ schreiben npm start ``` Die App ist danach unter `http://localhost:3000` erreichbar. ## ☁️ Deployment (Jannik-Cloud) KeySelector ist als nativer Service in die **Jannik-Cloud** integriert. Die Deployment-Files (wie z.B. das Caddy-Routing und das Produktions-`docker-compose.yml`) befinden sich im zentralen Cloud-Infrastruktur-Repository unter `services/keyselector`. Sobald Code auf den `main`-Branch dieses Repos gepusht wird, kann der Service in der Jannik-Cloud hochgezogen werden. Er zieht sich automatisch den neuesten Code, baut den Container und geht online unter `keyselector.orfel.de`. ## 📚 Dokumentation Weitere technische Details und Spezifikationen (sowie die initiale Konzept-Idee) findest du im `docs/` Ordner: - `docs/KeySelector_SPEC.md` - `docs/Camelot-Wheel-Chart.png`