Code of Conduct
By participating in this project, you agree to abide by our Code of Conduct.Our Pledge
We are committed to providing a welcoming and inspiring community for all. We pledge to:- Be respectful and inclusive
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Accept constructive criticism gracefully
- Focus on what’s best for the community
- Show empathy towards other community members
Unacceptable Behavior
- The use of sexualized language or imagery
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
Getting Started
Prerequisites
Before you begin contributing, ensure you have:- Android Studio Hedgehog or later
- JDK 17 or later
- Android SDK 26 or later
- Git
- Basic knowledge of Kotlin and Android development
- Understanding of Jetpack Compose (preferred)
- Familiarity with MVVM architecture pattern
Fork and Clone
Development Setup
Environment Setup
Firebase Setup (Optional)
If you want to test Firebase features:Create a Firebase project
Create a new project in the Firebase Console
Add Android apps
Add Android apps with package names:
com.musika.app(release)com.musika.app.debug(debug)
Build the Project
Handling Sensitive Information
When contributing to Musika, it’s crucial to handle sensitive information properly.Files That Should Never Be Committed
Best Practices
- API Keys: Never hardcode API keys in the source code
- Credentials: Never include usernames, passwords, or tokens in commits
- Personal Information: Remove any personal information before committing
- Before Committing: Always review your changes to ensure no sensitive information is included
- If Accidentally Committed: If you accidentally commit sensitive information, contact a project maintainer immediately
Types of Contributions
We welcome various types of contributions:- Bug Fixes: Fix existing issues and improve stability
- New Features: Add new functionality and capabilities
- Documentation: Improve documentation and guides
- UI/UX Improvements: Enhance user interface and experience
- Performance: Optimize app performance and memory usage
- Testing: Add or improve tests and test coverage
- Translations: Add new language support and improve existing translations
- Code Quality: Refactor code, improve architecture, and fix code smells
- Security: Identify and fix security vulnerabilities
Before You Start
- Check existing issues to see if your idea is already being discussed
- Create an issue for significant changes to discuss the approach
- Fork the repository and create a feature branch
- Follow the coding standards outlined below
Pull Request Process
Create a Branch
Make Your Changes
- Write clean, readable code
- Follow the existing code style
- Add comments for complex logic
- Update documentation if needed
- Add tests for new features
Test Your Changes
Commit Your Changes
Use clear, descriptive commit messages following Conventional Commits:Commit Message Prefixes
feat:for new featuresfix:for bug fixesdocs:for documentation changesstyle:for formatting changesrefactor:for code refactoringtest:for adding testschore:for maintenance tasks
Push and Create PR
- Clear title and description
- Reference to related issues
- Screenshots for UI changes
- Testing instructions
Issue Guidelines
Bug Reports
When reporting bugs, please include:- Clear title describing the issue
- Steps to reproduce the bug
- Expected behavior vs actual behavior
- Screenshots or videos if applicable
- Device information (Android version, device model)
- App version and build type
- Logs if available
- Environment details (build variant, configuration)
Feature Requests
When requesting features, please include:- Clear title describing the feature
- Detailed description of the feature
- Use case and why it would be useful
- Mockups or examples if applicable
- Alternative solutions you’ve considered
- Impact assessment (user experience, performance, etc.)
Coding Standards
Kotlin Style
- Follow Kotlin Coding Conventions
- Use meaningful variable and function names
- Prefer
valovervarwhen possible - Use data classes for simple data holders
- Use sealed classes for state management
Android Best Practices
- Follow Android Code Style Guidelines
- Use Jetpack Compose for UI
- Implement MVVM architecture
- Use Repository pattern for data access
- Handle lifecycle properly
Code Organization
Naming Conventions
- Classes: PascalCase (
MusicPlayer) - Functions: camelCase (
playMusic()) - Variables: camelCase (
currentSong) - Constants: UPPER_SNAKE_CASE (
MAX_VOLUME) - Packages: lowercase (
com.musika.app.ui)
Testing
Unit Tests
- Write unit tests for business logic
- Test repository implementations
- Test use cases and utilities
- Aim for high code coverage
UI Tests
- Write UI tests for critical user flows
- Test different screen sizes and orientations
- Test accessibility features
Running Tests
Documentation
Code Documentation
- Document public APIs with KDoc
- Add inline comments for complex logic
- Keep README files updated
- Document configuration changes
Release Process
Version Numbering
We follow Semantic Versioning:- MAJOR: Incompatible API changes
- MINOR: New functionality (backward compatible)
- PATCH: Bug fixes (backward compatible)
Release Checklist
- All tests pass
- Documentation is updated
- Changelog is updated
- Version numbers are bumped
- Release notes are prepared
Community Guidelines
Communication Channels
- GitHub Discussions: For general questions and discussions
- GitHub Issues: For bug reports and feature requests
- Pull Requests: For code contributions and reviews
Getting Help
If you have questions about contributing:- Check the GitHub Discussions
- Create a new discussion
- Contact maintainers directly through GitHub
Recognition
Contributors will be recognized in:- README.md contributors section
- Release notes
- GitHub contributors page
- App credits (if applicable)
Questions?
If you have questions about contributing:- Check the GitHub Discussions
- Create a new discussion
- Contact maintainers directly