First off, thank you for considering contributing to TipTune! It's people like you that make TipTune such a great platform for artists and music lovers.
There are many ways to contribute to TipTune:
- π Bug Reports - Help us identify and fix issues
- β¨ Feature Requests - Suggest new ideas and improvements
- π» Code Contributions - Submit pull requests for fixes or features
- π Documentation - Improve guides, tutorials, and API docs
- π¨ Design - Enhance UI/UX and create assets
- π§ͺ Testing - Write tests and help with quality assurance
- π Translations - Help make TipTune accessible worldwide
TipTune is part of the Stellar Drips Wave Program! This means you can earn rewards for contributing:
- Browse issues tagged with
drips-waveorstellar-wave - Apply to work on an issue through the Drips Wave platform
- Complete the work and submit a PR
- Earn rewards when maintainers mark the issue as resolved
Important Notes:
- Only apply through the Drips Wave platform to be eligible for rewards
- Issues must be tagged with the active Wave program name
- Read the full Drips Wave Terms
- Maintainers have final say on whether work resolves the issue
# Fork the repository on GitHub, then:
git clone https://github.com/YOUR_USERNAME/tiptune.git
cd tiptune
# Add upstream remote
git remote add upstream https://github.com/ORIGINAL_OWNER/tiptune.git# Install dependencies
npm install
# Copy environment template
cp .env.example .env
# Configure your .env with:
# - STELLAR_NETWORK=testnet (use testnet for development)
# - DATABASE_URL=your_postgres_connection
# - Other required variables
# Run database migrations
npm run migrate
# Start development server
npm run dev# Create a feature branch
git checkout -b feature/your-feature-name
# Or for bug fixes
git checkout -b fix/bug-descriptionBranch Naming Convention:
feature/- New featuresfix/- Bug fixesdocs/- Documentation updatesrefactor/- Code refactoringtest/- Adding testschore/- Maintenance tasks
- Check existing issues to avoid duplication
- For bugs, search closed issues - it might already be fixed
- For new features, open an issue to discuss before implementing
- Comment on an issue to express interest or ask questions
Look for issues tagged with:
good-first-issue- Great for newcomershelp-wanted- We need community helpdocumentation- Improve docsdrips-wave- Eligible for Wave rewards
If you're applying through Drips Wave:
- Apply via the Drips Wave platform (not just GitHub comments)
- Wait for maintainer approval before starting work
- Only one contributor per issue
- Respect the assignment - don't work on issues assigned to others
We use automated tools to maintain code quality:
# Format code
npm run format
# Run linter
npm run lint
# Type check
npm run type-checkStandards:
- Use TypeScript for type safety
- Follow existing code patterns
- Write meaningful variable names
- Keep functions small and focused
- Add comments for complex logic
Follow the Conventional Commits specification:
type(scope): subject
[optional body]
[optional footer]
Types:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding testschore:- Maintenance tasks
Examples:
feat(player): add volume control slider
fix(wallet): resolve connection timeout issue
docs(readme): update installation instructions
test(tips): add unit tests for tip calculationAll code contributions should include tests:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverageTest Guidelines:
- Write unit tests for new functions and components
- Add integration tests for API endpoints
- Test edge cases and error conditions
- Aim for >80% code coverage on new code
When working with Stellar:
- Use Testnet for development (never use mainnet keys in code)
- Test thoroughly - blockchain transactions are irreversible
- Handle errors - Network issues, insufficient balance, etc.
- Document - Explain Stellar-specific logic clearly
// Good: Proper error handling
try {
const transaction = await sendTip(artistId, amount);
return { success: true, txHash: transaction.hash };
} catch (error) {
if (error.code === 'INSUFFICIENT_BALANCE') {
return { success: false, error: 'Not enough XLM' };
}
throw error;
}Before submitting:
- β Code follows style guidelines
- β All tests pass
- β New tests added for new features
- β Documentation updated
- β No console.logs or debugging code
- β Commits are clean and well-formatted
# Update your fork
git fetch upstream
git rebase upstream/main
# Push your changes
git push origin feature/your-feature-namePR Title Format:
[Type] Brief description (#issue-number)
Examples:
[Feature] Add playlist creation functionality (#42)[Fix] Resolve wallet connection timeout (#89)[Docs] Update API documentation (#15)
## Description
Brief description of changes
## Related Issue
Closes #123
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
Describe how you tested your changes
## Screenshots (if applicable)
Add screenshots for UI changes
## Checklist
- [ ] My code follows the project style guidelines
- [ ] I have performed a self-review
- [ ] I have commented complex code
- [ ] I have updated the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests
- [ ] All new and existing tests pass- Maintainers will review your PR within 3-5 business days
- Address feedback by pushing new commits
- Don't force-push after review has started
- Be patient and respectful
- Once approved, maintainers will merge
# Update your local repository
git checkout main
git pull upstream main
# Delete your feature branch
git branch -d feature/your-feature-name
git push origin --delete feature/your-feature-name- Check existing issues
- Try the latest version
- Search Discord/community channels
**Describe the bug**
Clear description of what the bug is
**To Reproduce**
Steps to reproduce:
1. Go to '...'
2. Click on '...'
3. See error
**Expected behavior**
What you expected to happen
**Screenshots**
If applicable
**Environment:**
- OS: [e.g. macOS, Windows, Linux]
- Browser: [e.g. Chrome 120, Firefox 121]
- TipTune version: [e.g. 1.2.0]
- Wallet: [e.g. Freighter 5.0.0]
**Additional context**
Any other relevant information- Check if the feature already exists
- Review open feature requests
- Consider if it fits TipTune's scope
**Is your feature request related to a problem?**
Clear description of the problem
**Describe the solution you'd like**
What you want to happen
**Describe alternatives you've considered**
Other solutions you've thought about
**Additional context**
Mockups, examples, or references
**Would you like to implement this?**
Are you willing to contribute code?Documentation is just as important as code!
- API endpoints and usage
- Component props and behavior
- Setup and configuration
- Common issues and solutions
- Stellar integration patterns
- Use clear, simple language
- Include code examples
- Add screenshots for UI features
- Keep it up-to-date with code changes
- Use proper markdown formatting
- Follow existing design patterns
- Ensure responsive design (mobile-first)
- Maintain accessibility standards (WCAG 2.1 AA)
- Test on multiple devices and browsers
- Use SVG for icons when possible
- Optimize images (WebP format preferred)
- Follow color palette in design system
- Provide assets in multiple sizes
Help make TipTune accessible globally:
- Check
src/locales/for existing translations - Copy
en.jsonas template - Translate all strings
- Test in the app
- Submit PR with new locale file
Translation Guidelines:
- Maintain tone and context
- Keep string keys unchanged
- Test UI with longer translations
- Include RTL support if applicable
We are committed to providing a welcoming and inspiring community for all.
Positive behavior:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints
- Gracefully accepting constructive criticism
- Focusing on what's best for the community
- Showing empathy towards others
Unacceptable behavior:
- Harassment or discriminatory language
- Trolling, insulting, or derogatory comments
- Public or private harassment
- Publishing others' private information
- Other unprofessional conduct
Violations can be reported to maintainers. All complaints will be reviewed and investigated promptly and fairly.
Stuck? Need clarification?
- π¬ Join our Discord
- π§ Email: dev@tiptune.io
- π¦ Twitter: @TipTuneMusic
- π Documentation
For Drips Wave specific questions:
- Visit Drips Wave Support
- Read Wave Documentation
Contributors will be:
- Listed in our CONTRIBUTORS.md file
- Mentioned in release notes
- Featured in community spotlights
- Eligible for special contributor roles in Discord
Top Contributors get:
- Early access to new features
- Input on roadmap decisions
- Exclusive TipTune swag
- Recognition on our website
By contributing to TipTune, you agree that your contributions will be licensed under the MIT License.
- Quality over quantity - We prefer well-tested, documented PRs
- Communication is key - Ask questions, discuss approaches
- Be patient - Maintainers are often volunteers
- Have fun - We're building something awesome together!
Thank you for contributing to TipTune! Together, we're revolutionizing how artists get paid. π
Last updated: January 2026