Getting Started
Reporting Issues
Before creating a new issue:- Search existing issues to avoid duplicates
- Use the issue templates when available
- Provide detailed information:
- Steps to reproduce
- Expected vs actual behavior
- Screenshots or videos if applicable
- Device/platform information
- App version
Open issues on the GitHub Issues page
Pull Request Workflow
Create a feature branch
Use a descriptive branch name:Branch naming conventions:
feature/- New featuresfix/- Bug fixesdocs/- Documentation updatesrefactor/- Code refactoringtest/- Test additions or updates
Make your changes
- Follow the code style guidelines (enforced by ESLint)
- Write meaningful commit messages
- Add tests if applicable
- Update documentation as needed
Code Style Guidelines
ESLint Configuration
The project uses ESLint with the following plugins:- expo - Expo-specific rules
- prettier - Code formatting
- import - Import/export sorting
- react-compiler - React Compiler rules
Import Order
Imports are automatically sorted by the import/order rule:Imports are automatically sorted alphabetically and case-insensitively
Code Formatting
The project uses Prettier for consistent code formatting. Formatting is automatically applied:- On save (if your editor is configured)
- Before each commit (via lint-staged)
- When running
npm run lint:fix
Commit Conventions
Commit Message Format
We follow Conventional Commits specification:Commit Types
| Type | Description | Example |
|---|---|---|
feat | New feature or functionality | feat: add audio playback controls |
fix | Bug fix or correction | fix: resolve page navigation crash |
docs | Documentation changes | docs: update setup instructions |
style | Code style changes (formatting) | style: apply prettier formatting |
refactor | Code refactoring | refactor: simplify state management |
perf | Performance improvements | perf: optimize image loading |
test | Adding or updating tests | test: add unit tests for utils |
chore | Routine tasks, dependencies | chore: update dependencies |
revert | Reverting a previous commit | revert: undo feature X |
ci | CI configuration changes | ci: update GitHub Actions |
wip | Work in progress | wip: implement new feature |
Using Commitizen
The project includes Commitizen for interactive commit messages:Commit Rules
- Header max length: 200 characters
- Type: Must be lowercase (feat, fix, etc.)
- Scope: Optional, any case allowed
- Subject: Any case allowed
- Body: No line length limit for detailed descriptions
Git Hooks
The project uses Husky to enforce quality standards:pre-commit
Runs automatically before each commit:- Prettier - Formats code
- ESLint - Fixes linting issues
**/*.{js,jsx,ts,tsx}
commit-msg
Validates commit messages using commitlint to ensure they follow conventional commit format.Best Practices
Code Quality
- Write self-documenting code with clear variable and function names
- Add comments for complex logic
- Keep functions small and focused on a single responsibility
- Avoid deeply nested conditionals
- Use TypeScript types properly, avoid
any
State Management
The project uses Jotai for state management:- Create atoms for shared state
- Use
jotai-effectfor side effects - Keep atoms focused and composable
Performance
- Use
React.memofor expensive components - Optimize re-renders with proper dependency arrays
- Use
expo-imagefor efficient image handling - Test on low-end devices
Accessibility
- Add proper accessibility labels
- Test with screen readers
- Ensure sufficient color contrast
- Support text scaling
Questions and Support
If you have questions:- Check existing documentation
- Search closed issues and discussions
- Open a new issue with the “question” label
- Reach out through the GitHub repository