Thank you for your interest in contributing to Tunecamp! This guide outlines the process for proposing changes, setting up your development environment, and submitting pull requests.
By participating in this project, you agree to abide by standard open-source norms: be respectful, constructive, and collaborative.
Before writing code, please check the existing issues to see if your concern has already been addressed. If not, open a new issue with:
- A clear, descriptive title.
- Steps to reproduce (for bugs).
- Expected vs. actual behavior.
- Relevant logs or screenshots.
- Fork the repository.
- Create a feature branch (
git checkout -b feature/your-feature). - Make your changes (see Development Setup).
- Test your changes (see Testing).
- Commit with clear, descriptive messages (
git commit -m 'Add support for X'). - Push to your fork (
git push origin feature/your-feature). - Open a Pull Request against the
mainbranch.
Tunecamp is a monorepo consisting of a Node.js/TypeScript backend and a Vite/React frontend.
- Node.js: v18+
- npm: v9+
- FFmpeg: Required for audio processing (waveform generation, transcoding).
# Clone the repository
git clone https://github.com/scobru/tunecamp.git
cd tunecamp
# Install root & backend dependencies
npm install
# Install frontend dependencies
cd webapp
npm install
cd ..You need to run both the backend and frontend in parallel for the best development experience.
# Watch and recompile TypeScript + CSS
npm run dev# Start Vite dev server with Hot Module Replacement (HMR)
cd webapp
npm run devThe frontend will proxy API requests to the backend (default port 1970).
src/server/: Backend logic (ActivityPub, Federated Discovery, Subsonic API, Database).webapp/: Frontend React application.docs/: Supplemental architecture and API documentation.contracts/: Web3 smart contracts (Solidity).
Always verify your changes before submitting a PR.
# Run backend test suite
npm testEnsure no TypeScript errors:
npm run build
cd webapp
npm run build- Keep PRs focused on a single issue or feature.
- Ensure all tests pass.
- Update documentation if you introduce new features or change existing behavior.
- Follow the existing code style (TypeScript, Prettier/ESLint).