First off, thank you for considering contributing to NodeNav! It's people like you that make NodeNav such a great tool for the automotive community.
Bug reports help make NodeNav better for everyone. When filing a bug report, please include:
- Clear title: Describe the issue briefly
- Steps to reproduce: List exact steps to reproduce the issue
- Expected behavior: What should happen
- Actual behavior: What actually happens
- Environment:
- OS and version (Windows 10/11, Linux distro, etc.)
- Node.js version (
node --version) - Hardware (Raspberry Pi model, Bluetooth adapter, etc.)
- Screenshots: If applicable
- Logs: Console output or error messages
Feature suggestions are welcome! Please include:
- Use case: Describe the problem you're trying to solve
- Proposed solution: How you envision the feature working
- Alternatives: Any alternative solutions you've considered
- Additional context: Screenshots, mockups, or examples
Documentation improvements are always appreciated:
- Fix typos or clarify existing docs
- Add examples or use cases
- Translate documentation (future feature)
- Create tutorials or guides
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/NodeNav.git cd NodeNav - Create a branch for your feature:
git checkout -b feature/amazing-feature
- Install dependencies:
npm install
- Make your changes
# Terminal 1: Start backend server
cd src
node server.js
# Terminal 2: Start frontend dev server
npm run devJavaScript/React:
- Use functional components with hooks
- Follow existing code style (indent with 2 spaces)
- Add comments for complex logic
- Keep components focused and single-purpose
- Use meaningful variable and function names
Styling:
- Use the centralized styles from
src/styles.js - Maintain the minimalist black theme
- Keep the UI touch-friendly (large hit targets)
- Test on different screen sizes
Backend:
- Follow RESTful API conventions
- Add error handling for all async operations
- Log important operations with
console.log - Keep platform-specific code isolated
Platform-Specific Code:
// ✅ Good: Platform detection
if (process.platform === 'win32') {
// Windows-specific code
} else if (process.platform === 'linux') {
// Linux-specific code
}
// ❌ Bad: Hard-coded platform assumptions
const command = 'bluetoothctl'; // Won't work on WindowsFollow conventional commit format:
type(scope): subject
body (optional)
footer (optional)
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(media): add album artwork support
Implements album artwork display in the media player
using AVRCP metadata extensions.
Closes #123
fix(bluetooth): handle disconnection gracefully
Previously the app would crash if the device disconnected
during playback. Now it cleanly stops monitoring and shows
a reconnection prompt.
Fixes #456
Manual Testing:
- Test on your target platform (Windows/Linux)
- Test with real Bluetooth devices if possible
- Check console for errors or warnings
- Verify UI responsiveness
- Test edge cases (disconnection, no audio, etc.)
Cross-Platform Testing:
- If you only have one platform, mention this in your PR
- Other contributors can help test on different platforms
- Update documentation if needed
- Update CHANGELOG.md with your changes
- Push to your fork:
git push origin feature/amazing-feature
- Open a Pull Request on GitHub
- Fill out the PR template (if available)
- Respond to feedback from reviewers
PR Title Format:
feat: Add album artwork support
fix: Handle Bluetooth disconnection gracefully
docs: Update Windows setup instructions
PR Description Should Include:
- What problem does this solve?
- How did you solve it?
- What testing did you do?
- Screenshots (if UI changes)
- Breaking changes (if any)
Frontend (React)
├── Components: Reusable UI elements
├── Pages: Main application views
└── Services: API client
Backend (Node.js/Express)
├── API Endpoints: RESTful routes
├── Services: Business logic
└── Platform-Specific: OS integrations
Media Player (src/pages/MediaPlayer.jsx)
- Bluetooth audio streaming
- Playback controls
- Metadata display
Bluetooth Management (src/pages/BluetoothSettings.jsx)
- Device discovery
- Pairing/connection
- Device list management
GPIO Control (src/pages/GPIOControl.jsx)
- Pin configuration
- Real-time control
- Command history
Backend Services (src/services/)
- Bluetooth audio (platform-specific)
- Bluetooth device management
- GPIO operations
- API server
- Create component in
src/pages/YourPage.jsx - Add route in
src/App.jsx - Add navigation item if needed
- Follow existing page structure
- Use centralized styles
- Add method to appropriate service:
- Device management:
bluetooth-service.js - Audio streaming:
bluetooth-audio-service.js(Linux) orbluetooth-audio-windows.js(Windows)
- Device management:
- Add API endpoint in
server.js - Add API client method in
api.js - Update UI components to use new feature
- Add method to
gpio-service.js - Add API endpoint in
server.js - Add API client method in
api.js - Update UI in
GPIOControl.jsx
Currently, NodeNav relies on manual testing. When contributing:
- Test your changes thoroughly
- Test on multiple platforms if possible
- Test with real hardware (Bluetooth devices, GPIO pins)
- Document your testing in the PR
Future: We plan to add automated testing with Jest/Vitest.
When documenting:
- Be clear and concise
- Include examples
- Specify requirements (OS, hardware, dependencies)
- Add troubleshooting for common issues
- Keep it updated as code changes
(For maintainers)
- Update version in
package.json - Update
CHANGELOG.md - Create a git tag:
git tag v1.x.x - Push tag:
git push origin v1.x.x - Create GitHub release with notes
- Open a GitHub Discussion
- Check existing issues and pull requests
- Read the documentation in the
docs/folder
We are committed to providing a welcoming and inspiring community for all.
Positive behavior:
- Being respectful of differing opinions
- Accepting constructive criticism gracefully
- Focusing on what's best for the community
- Showing empathy towards others
Unacceptable behavior:
- Harassment, trolling, or insulting comments
- Personal or political attacks
- Publishing others' private information
- Other conduct considered inappropriate
Report violations to the project maintainers. All complaints will be reviewed and investigated promptly and fairly.
Contributors will be:
- Listed in the Contributors section
- Mentioned in release notes for significant contributions
- Given credit in relevant documentation
By contributing to NodeNav, you agree that your contributions will be licensed under the ISC License.
Thank you for contributing to NodeNav! Your efforts help make automotive technology more accessible to everyone. 🚗💨