Vibe coded DJ multi tool for traktor collection management, playlist scraping and soulseek bulk downloads. I have barely looked at the code and wouldn't trust it if I was you.
-
Traktor Collection — Manage your playlists and folders. Upload your
collection.nml. Traktor Collection is quite shit so this add a bunch of features i'd like to see -
Playlists — Create standalone tracklists via text parsing or Spotify/YouTube links. Scrape playlists from spotify plex, youtube and your discogs collection
-
Soulseek Integration — Bulk download tracks from Soulseek. Download tracks from the playlists created. It does some AI shit to improve the soulseek search results. How it works: The Soulseek client (
slskd) runs locally on my Mac Mini via a Docker container. I have set up a Cloudflare tunnel to securely expose the container's interface to the internet so this application can communicate with the Soulseek daemon. Downloaded tracks are saved directly to an attached external drive.Running the Soulseek Container: To start the container, navigate to the
soulseekdirectory and run it in detached mode:cd soulseek docker compose up -dBecause the
docker-compose.ymlusesrestart: unless-stopped, the container will automatically start up whenever the Mac Mini reboots (provided Docker Desktop is set to "Start on login").
Before running this project install the following:
- Node.js (v20.19+, v22.12+, or v24.0+) — Install via Homebrew:
brew install node - npm (comes with Node.js)
git clone <your-repo-url>
cd bad-vibesnpm installThis will also automatically generate the Prisma client via the postinstall script.
Copy the example environment file and fill in your credentials:
cp .env.example .envEdit .env and configure the following:
| Variable | Description |
|---|---|
AUTH_SECRET |
NextAuth secret (generate with npx auth secret) |
AUTH_DISCORD_ID / AUTH_DISCORD_SECRET |
Discord OAuth credentials |
AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRET |
Google OAuth credentials |
GOOGLE_API_KEY |
Google Gemini API key |
DISCOGS_CLIENT_ID / DISCOGS_CLIENT_SECRET |
Discogs API credentials |
SLSKD_URL / SLSKD_API_KEY |
Soulseek daemon URL and API key |
DATABASE_URL |
Database connection string (default: file:./db.sqlite) |
Push the Prisma schema to your database:
npx prisma db pushOr run migrations (if available):
npm run db:migratenpm run devThe app will be available at http://localhost:3000
| Script | Description |
|---|---|
npm run dev |
Start development server with Turbopack |
npm run build |
Build for production |
npm run start |
Start production server |
npm run preview |
Build and start production server |
npm run lint |
Run ESLint |
npm run lint:fix |
Run ESLint with auto-fix |
npm run format:check |
Check code formatting with Prettier |
npm run format:write |
Format code with Prettier |
npm run typecheck |
Run TypeScript type checking |
npm run check |
Run lint and typecheck |
npm run test |
Run tests with Vitest |
npm run db:generate |
Run Prisma migrations (dev) |
npm run db:migrate |
Deploy Prisma migrations |
npm run db:push |
Push Prisma schema to database |
npm run db:studio |
Open Prisma Studio |
- Framework: Next.js 15 with React 19
- Styling: Tailwind CSS 4
- Database: Prisma with SQLite/PostgreSQL
- API: tRPC
- Authentication: NextAuth.js
- State Management: TanStack Query
See LICENSE for details.