Thank you for your interest in contributing to QTick! This document provides guidelines and instructions for contributing to our QR code-based attendance tracking application.
- Code of Conduct
- Getting Started
- Development Setup
- Contributing Workflow
- Coding Standards
- Submission Guidelines
- Types of Contributions
- Testing
- Documentation
- Support
By participating in this project, you agree to abide by our Code of Conduct. Please read it before contributing.
Before contributing, ensure you have:
- Flutter SDK: Version 3.27.0 or higher
- Dart SDK: Version 3.7.2 or higher
- Android Studio or VS Code with Flutter plugins
- Git for version control
- Android device or emulator for testing
-
Fork the repository and clone
To fork press the below button:
git clone https://github.com/YOUR_USERNAME/qtick.git cd qtick -
Set up the development environment
# Get Flutter dependencies flutter pub get # Verify your Flutter installation flutter doctor # Run the app in debug mode flutter run
-
Set up your IDE
- Install Flutter and Dart plugins
- Configure code formatting (dartfmt)
- Enable lint rules as defined in
analysis_options.yaml
-
Create a new branch
git checkout -b feature/your-feature-name # or git checkout -b fix/issue-description -
Make your changes
- Follow our coding standards
- Update documentation as needed
-
Test your changes
# Check for linting issues flutter analyze # Format code flutter format .
-
Commit your changes
git add . git commit -m "feat: add new QR scanning feature"
-
Push and create a Pull Request
git push origin feature/your-feature-name
- Follow official Dart style guide: Use
dartfmtfor formatting - Naming conventions:
camelCasefor variables, methods, and parametersPascalCasefor classes, enums, and typedefssnake_casefor file names
- File organization:
- Group imports: Flutter, third-party, then local
- Use relative imports for local files
- Keep files under 300 lines when possible
- Documentation: Document all public APIs
- Error handling: Always handle potential errors gracefully
- Performance: Consider performance implications, especially for UI
- Accessibility: Ensure UI elements are accessible
- Null safety: Leverage Dart's null safety features
// models/example_model.dart
import 'package:flutter/foundation.dart';
/// Represents an attendance record in the QTick system.
///
/// This model contains all necessary information for tracking
/// a single attendance event.
class AttendanceRecord {
/// Creates an [AttendanceRecord] with the given parameters.
const AttendanceRecord({
required this.id,
required this.timestamp,
required this.type,
this.notes,
});
/// Unique identifier for this attendance record.
final String id;
/// When the attendance was recorded.
final DateTime timestamp;
/// Type of attendance (arrival/departure).
final AttendanceType type;
/// Optional notes for this record.
final String? notes;
@override
String toString() => 'AttendanceRecord(id: $id, type: $type)';
}- Clear title: Use conventional commit format
- Description: Explain what, why, and how
- Testing: Include test results and manual testing notes
- Documentation: Update relevant documentation
- Screenshots: For UI changes, include before/after screenshots
- Breaking changes: Clearly document any breaking changes
Use conventional commit messages:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
Examples:
feat: add arrival time customization in settings
fix: resolve camera permission crash on Android 14
docs: update installation instructions in README
When reporting bugs:
- Use the bug report template
- Include steps to reproduce
- Provide device/OS information
- Include screenshots if applicable
- Check if the issue already exists
For new features:
- Use the feature request template
- Explain the use case and benefit
- Consider backward compatibility
- Discuss implementation approach
We welcome contributions for:
- Bug fixes: Resolve existing issues
- New features: Enhance app functionality
- Performance improvements: Optimize existing code
- UI/UX enhancements: Improve user experience
- Documentation: Improve guides and comments
- Tests: Increase test coverage
- Breaking changes without prior discussion
- Large refactors without approval
- Online features - this app is offline-only
- Platform-specific code without cross-platform consideration
- Dependencies that significantly increase app size
- Manual testing: Test on real devices
- Performance testing: For camera and database operations
- Document all public classes and methods
- Include usage examples for complex APIs
- Explain non-obvious implementation decisions
- Keep comments up-to-date with code changes
Update the README when:
- Adding new features
- Changing installation steps
- Modifying system requirements
- Adding new dependencies
- Issues: Use GitHub issues for bugs and feature requests
- Discussions: Use GitHub discussions for questions
- Documentation: Check existing documentation first
- Bug reports: We aim to respond within 48 hours
- Feature requests: Response within 1 week
- Pull requests: Review within 1 week
Contributors will be recognized in:
- CONTRIBUTORS.md: List of all contributors
- Release notes: Major contributions highlighted
- GitHub: Contributor badge and statistics
Thank you for contributing to QTick! Your efforts help make attendance tracking better for everyone. 🚀
