-
Notifications
You must be signed in to change notification settings - Fork 2
Contributing
Welcome! We're excited that you want to contribute to D.A.V.I.D AI!
- Code of Conduct
- How Can I Contribute?
- Getting Started
- Development Workflow
- Coding Standards
- Submitting Changes
- Review Process
We are committed to providing a welcoming and inspiring community for all. We pledge to:
- ✅ Be respectful and inclusive
- ✅ Welcome newcomers warmly
- ✅ Accept constructive criticism
- ✅ Focus on what's best for the community
- ✅ Show empathy towards others
- ❌ Harassment or discriminatory language
- ❌ Trolling or insulting comments
- ❌ Personal or political attacks
- ❌ Publishing others' private information
- ❌ Unprofessional conduct
Enforcement: Violations may result in temporary or permanent ban.
Found a bug? Help us fix it!
- Check existing issues
- If not found, create new bug report
- Include:
- Device model & Android version
- RAM size
- Steps to reproduce
- Expected vs actual behavior
- LogCat output (if possible)
- Screenshots
Have an idea? We'd love to hear it!
- Check existing feature requests
- Create feature request
- Describe:
- The feature
- Why it's useful
- How it should work
- Examples/mockups
Speak another language? Help us reach more users!
Current Languages (15): English, Hindi, Tamil, Telugu, Bengali, Marathi, Gujarati, Kannada, Malayalam, Punjabi, Odia, Urdu, Sanskrit, Kashmiri, Assamese
Add New Language:
- Create
app/src/main/res/values-{lang}/strings.xml - Translate all strings from
values/strings.xml - Test on device
- Submit pull request
Good at explaining? Help others understand!
Areas to improve:
- README clarity
- Wiki pages
- Code comments
- API documentation
- Tutorial videos
Developer? Jump right in!
Good First Issues:
- Look for
good first issuelabel - Simple bug fixes
- UI improvements
- Adding tests
- Java JDK 17+
- Android Studio Hedgehog+
- Git
- GitHub account
# 1. Fork the repository on GitHub
# Click "Fork" button at top right
# 2. Clone YOUR fork
git clone https://github.com/YOUR_USERNAME/david-ai.git
cd david-ai
# 3. Add upstream remote
git remote add upstream https://github.com/david0154/david-ai.git
# 4. Verify remotes
git remote -v
# Should show:
# origin https://github.com/YOUR_USERNAME/david-ai.git (fetch)
# origin https://github.com/YOUR_USERNAME/david-ai.git (push)
# upstream https://github.com/david0154/david-ai.git (fetch)
# upstream https://github.com/david0154/david-ai.git (push)- Open project in Android Studio
- Wait for Gradle sync (5-10 minutes)
- Build the app:
./gradlew assembleDebug
- Run tests:
./gradlew test
# Update main branch
git checkout main
git pull upstream main
# Create feature branch
git checkout -b feature/my-awesome-feature
# Or for bug fix
git checkout -b fix/bug-descriptionBranch Naming:
-
feature/- New features -
fix/- Bug fixes -
docs/- Documentation -
refactor/- Code refactoring -
test/- Adding tests
- Write code following coding standards
- Add tests for new features
- Update documentation if needed
-
Test thoroughly:
./gradlew test ./gradlew connectedAndroidTest
Commit Message Format:
<type>: <subject>
<body>
<footer>
Types:
-
feat- New feature -
fix- Bug fix -
docs- Documentation -
style- Formatting -
refactor- Code restructuring -
test- Adding tests -
chore- Maintenance
Example:
git add .
git commit -m "feat: Add dark mode support
Implemented dark mode theme switching in settings.
Added day/night theme detection.
Updated all UI components.
Closes #123"# Push to your fork
git push origin feature/my-awesome-featureFollow official Kotlin Style Guide
Key Points:
// 1. Class names: PascalCase
class VoiceController
// 2. Function names: camelCase
fun processVoiceCommand()
// 3. Constants: UPPER_SNAKE_CASE
const val MAX_RETRY_COUNT = 3
// 4. Properties: camelCase
val userName: String
// 5. Use explicit types for public API
fun getUserName(): String { ... }
// 6. Prefer val over var
val immutableValue = "constant"
// 7. Use named arguments for clarity
fun createUser(
name: String,
age: Int,
email: String
)
// 8. Single expression functions
fun double(x: Int): Int = x * 2
// 9. Use when instead of if-else chains
when (value) {
0 -> "zero"
1 -> "one"
else -> "many"
}
// 10. Null safety
val length: Int = text?.length ?: 0Package Structure:
com.nexuzy.david/
├── ai/ # AI models & processing
│ ├── voice/
│ ├── chat/
│ ├── vision/
│ └── gesture/
├── ui/ # UI components
│ ├── screens/
│ ├── components/
│ └── theme/
├── data/ # Data layer
│ ├── repository/
│ ├── local/
│ └── model/
├── domain/ # Business logic
│ ├── usecase/
│ └── model/
├── service/ # Background services
├── util/ # Utilities
└── MainActivity.kt
Document public APIs:
/**
* Processes voice command and executes corresponding action.
*
* @param audioData Raw audio data from microphone
* @param language Target language for recognition (default: English)
* @return CommandResult containing transcription and execution status
* @throws ModelNotLoadedException if Whisper model is not initialized
*/
fun processVoiceCommand(
audioData: ByteArray,
language: String = "en"
): CommandResultWrite tests for:
- All public functions
- Edge cases
- Error conditions
Example:
@Test
fun testVoiceCommandProcessing() {
// Given
val controller = VoiceController(context)
val audioData = loadTestAudio("test_command.wav")
// When
val result = controller.processVoiceCommand(audioData)
// Then
assertTrue(result.isSuccess)
assertEquals("open settings", result.transcription)
}-
Push to your fork:
git push origin feature/my-awesome-feature
-
Go to GitHub and click "Compare & pull request"
-
Fill PR template:
- Clear title
- Description of changes
- Related issues (e.g., "Closes #123")
- Screenshots (for UI changes)
- Testing done
-
Ensure CI passes:
- All tests pass
- No lint errors
- Build succeeds
Before submitting:
- Code follows style guidelines
- Self-review completed
- Comments added for complex code
- Documentation updated
- Tests added/updated
- All tests pass locally
- No new warnings
- Commit messages are clear
-
Automated Checks (< 5 minutes)
- Builds successfully
- Tests pass
- Lint checks pass
-
Code Review (1-3 days)
- Maintainers review code
- May request changes
- Discussion on approach
-
Revisions (if needed)
- Make requested changes
- Push to same branch
- PR updates automatically
-
Approval & Merge
- At least one approval required
- Squash and merge to main
- Branch deleted
Good practices:
✅ Respond to all comments
✅ Ask questions if unclear
✅ Be open to suggestions
✅ Make requested changes
✅ Mark resolved conversations
Make changes:
# Make changes based on feedback
git add .
git commit -m "fix: Address PR feedback"
git push origin feature/my-awesome-featureKeep your fork updated:
# Fetch upstream changes
git fetch upstream
# Switch to main
git checkout main
# Merge upstream changes
git merge upstream/main
# Push to your fork
git push origin mainKeep feature branch up-to-date:
# Update main first
git checkout main
git pull upstream main
# Switch to feature branch
git checkout feature/my-awesome-feature
# Rebase on main
git rebase main
# Force push (if already pushed)
git push origin feature/my-awesome-feature --force-with-lease# Clean build
./gradlew clean
# Build with stacktrace
./gradlew assembleDebug --stacktrace
# Run with info logging
./gradlew assembleDebug --infoAll contributors are:
- ✅ Listed in README
- ✅ Shown in contributor graph
- ✅ Credited in release notes
- ✅ Thanked in announcements
Outstanding contributors may receive:
- 🏆 Contributor badge
- 📢 Feature in blog post
- 🎁 Swag (future)
- 🤝 Invitation to core team
- 💬 GitHub Discussions
- 📧 Email: david@nexuzy.in
- 🐛 Issue Tracker
Stuck? We're here to help!
- Check FAQ
- Search existing issues
- Ask in Discussions
- Email us: david@nexuzy.in
Every contribution makes D.A.V.I.D AI better!
Whether you:
- 🐛 Report a bug
- 💡 Suggest a feature
- 💻 Write code
- 📝 Improve docs
- 🌍 Translate
- ⭐ Star the repo
- 📢 Spread the word
You're awesome! Thank you for contributing! 🙏
© 2026 Nexuzy Tech Ltd.
Questions? david@nexuzy.in
D.A.V.I.D AI - Digital Assistant with Voice & Intelligent Decisions
Developed by Nexuzy Tech Ltd.
🌐 GitHub • 📧 Support • 🐛 Report Bug • ✨ Request Feature • 💬 Discussions
We do not collect any data.
All processing happens locally on your device.
Supporting 15 languages including all major Indian languages.
© 2026 Nexuzy Tech Ltd. All rights reserved.
Privacy-First AI • Your Device, Your Data • No Data Collection