# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is "maple" - a music collection management system built in Rust that orchestrates downloading music from Soulseek using slsk-batchdl (sldl) and serving files through slskd. The project uses Docker containers to run two main services: a Soulseek downloader/organizer and a Soulseek daemon for sharing. ## Architecture The project consists of: - **Rust application** (`src/main.rs`): Currently minimal, likely intended for future music management logic - **slsk-batchdl integration**: Downloads music from Soulseek with organized file structure - **slskd daemon**: Provides web interface and sharing capabilities for Soulseek - **Docker orchestration**: Two containers managed via docker-compose ### Key Components - `maple` service: Runs the Rust app and sldl downloader - `slskd` service: Runs the Soulseek daemon with web interface on port 5030 - Shared data directory structure under `data/` for music files and metadata - Configuration templates in `etc/` that use environment variable substitution ## Common Commands ### Development and Building ```bash # Build containers just build # Start all services just up # Stop all services just down # Run interactive shell in maple container just run # Execute command in running maple container just exec # Download music using sldl just dl ``` ### Docker Operations ```bash # Manual container operations docker compose -f compose.yaml up --remove-orphans docker compose -f compose.yaml down -v --remove-orphans docker compose -f compose.yaml build ``` ### Rust Development ```bash # Build Rust code cargo build # Run locally (outside container) cargo run ``` ## Configuration - Environment variables are loaded from `.env` file - Required variables: `SLDL_USER`, `SLDL_PASS` for Soulseek authentication - sldl configuration template: `etc/sldl.tpl.conf` - slskd configuration template: `etc/slskd.tpl.yml` ## File Organization Music files are organized as: `{artist}/{album}/{track} {title}` with fallback to `_missing_tags/` for untagged files. The system prefers FLAC and MP3 formats with bitrate range 200-2500 kbps. ## Data Structure - `data/maple/`: Organized music collection by artist/album - `data/_metadata/`: Index files and metadata - `data/slskd/`: Soulseek daemon data (downloads, shared files) - `data/PIONEER/`: DJ software settings and playlists ## Current Development Status The Rust application is in early development (currently just prints "Hello, world!"). The infrastructure for downloading and organizing music is operational through the Docker services. - use an indentation of 4 spaces