Thank you for your interest in contributing to AgValoniaGPS! This document lists features that need implementation and provides guidance for contributors.
- Fork the repository
- Clone your fork locally
- Build the project following instructions in
CLAUDE.md - Pick a feature from the list below
- Create a feature branch and implement
- Submit a pull request
-
Shared code (~92%): Located in
Shared/folderAgValoniaGPS.Models/- Data modelsAgValoniaGPS.Services/- Business logicAgValoniaGPS.ViewModels/- MVVM ViewModels (ReactiveUI)AgValoniaGPS.Views/- Shared UI controls, panels, dialogs
-
Platform code (~8%): Located in
Platforms/AgValoniaGPS.Desktop/- Windows/macOS/LinuxAgValoniaGPS.iOS/- iOS/iPadOS
These features are good starting points for new contributors.
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 80) - Task: Create an About dialog showing app version, credits, and links
- Skills needed: XAML, basic ViewModel
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 79) - Task: Create help dialog or link to online documentation
- Skills needed: XAML, basic ViewModel
- Button location: Configuration Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ConfigurationPanel.axaml(Line 78) - Task: Create dialog to customize section/coverage display colors
- Skills needed: XAML, color picker, settings persistence
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 59) - Task: Create dialog to customize application color scheme/theme
- Skills needed: XAML, Avalonia theming, settings persistence
These features require more understanding of the codebase.
- Button location: Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ToolsPanel.axaml(Line 61) - Task: Create a log viewer to display application diagnostic logs
- Skills needed: XAML, logging infrastructure, virtualized lists
- Button location: Field Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FieldToolsPanel.axaml(Line 105) - Task: Allow user to place a flag/marker at specific GPS coordinates
- Skills needed: XAML, coordinate conversion, map integration
- Button location: Field Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FieldToolsPanel.axaml(Line 114) - Task: Display the GPS path/trail that has been recorded
- Skills needed: XAML, GPS data, DrawingContext rendering
- Button location: Field Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FieldToolsPanel.axaml(Line 121) - Task: Import track/guidance line data from external files (KML, shapefile, etc.)
- Skills needed: File parsing, coordinate systems, Track model
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 60) - Task: Create dialog to view and configure keyboard shortcuts
- Skills needed: XAML, key binding system, settings persistence
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 58) - Task: Show dialog displaying data directory locations with option to open in file manager
- Skills needed: XAML, platform file system APIs
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 57) - Task: Create comprehensive settings viewer/editor
- Skills needed: XAML, reflection or settings enumeration
- Button location: File Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 52) - Task: Implement settings reset with confirmation dialog
- Skills needed: Settings persistence, confirmation dialogs
These features require deep understanding of agricultural guidance or complex implementations.
- Button location: Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ToolsPanel.axaml(Line 69) - Task: Real-time chart showing steering angle commands vs actual response
- Skills needed: Charting library or custom rendering, real-time data, autosteer system
- Button location: Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ToolsPanel.axaml(Line 75) - Task: Real-time chart showing heading data over time
- Skills needed: Charting library or custom rendering, GPS data
- Button location: Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ToolsPanel.axaml(Line 83) - Task: Real-time chart showing cross-track error history
- Skills needed: Charting library or custom rendering, guidance system
- Button location: Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/ToolsPanel.axaml(Line 89) - Task: Interface for configuring GPS antenna roll/tilt correction
- Skills needed: IMU/GPS concepts, coordinate transforms
- Button location: Field Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FieldToolsPanel.axaml(Line 82) - Task: Display and manage tram line (tramline) patterns for controlled traffic farming
- Skills needed: Agricultural concepts, track system, rendering
- Button location: Field Tools Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FieldToolsPanel.axaml(Line 89) - Task: Create interface to build/edit tram line patterns
- Skills needed: Agricultural concepts, complex UI, track generation
- Button location: Job Menu Panel
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/JobMenuPanel.axaml(Line 137) - Task: Apply offset correction to shift all field tracks
- Skills needed: Coordinate transforms, track system
- Button location: AutoSteer Config dialog
- File:
Shared/AgValoniaGPS.ViewModels/AutoSteerConfigViewModel.cs(Line 945) - Task: Step-by-step wizard for configuring autosteer system
- Skills needed: Autosteer concepts, multi-step wizard UI, UDP communication
- Button location: Configuration dialog
- File:
Shared/AgValoniaGPS.ViewModels/ConfigurationViewModel.cs(Line 1488) - Task: Read current pin configuration from machine module via UDP
- Skills needed: UDP protocol, AgOpenGPS hardware protocol
- Button location: Configuration dialog
- File:
Shared/AgValoniaGPS.ViewModels/ConfigurationViewModel.cs(Line 1494) - Task: Send configuration to machine module via UDP
- Skills needed: UDP protocol, AgOpenGPS hardware protocol
These features may not be needed or have lower priority.
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 50) - Note: Requires localization infrastructure to be set up first
- File:
Shared/AgValoniaGPS.Views/Controls/Panels/FileMenuPanel.axaml(Line 51) - Note: May not be needed for this application
-
Find the button in the AXAML file listed above
-
Add a Command binding to the button:
<Button Content="My Feature" Command="{Binding MyFeatureCommand}" />
-
Create the command in
MainViewModel.csor appropriate ViewModel:public ReactiveCommand<Unit, Unit> MyFeatureCommand { get; } // In constructor: MyFeatureCommand = ReactiveCommand.Create(ExecuteMyFeature); private void ExecuteMyFeature() { // Implementation here }
-
For dialogs, follow the existing pattern:
- Add
IsMyDialogVisibleproperty to ViewModel - Create dialog panel in
Shared/AgValoniaGPS.Views/Controls/Dialogs/ - Add dialog to both
MainWindow.axamlandMainView.axaml
- Add
Open an issue on GitHub or reach out to the maintainers.