Thanks for your interest in contributing to Pointframe.
The product is now branded as Pointframe, and the main solution, project files, namespaces, and top-level source folders use Pointframe.
Prerequisites: Windows 10/11, .NET 10 SDK, Visual Studio 2022 or VS Code.
git clone https://github.com/dimitar-radenkov/Pointframe.git
cd Pointframe
dotnet build Pointframe/Pointframe.csproj
dotnet test Pointframe.Tests/Pointframe.Tests.csprojRun the formatter — CI will reject unformatted code:
dotnet format Pointframe/Pointframe.csproj- MVVM: Use
[ObservableProperty]and[RelayCommand]from CommunityToolkit.Mvvm. Never raisePropertyChangedmanually. - DI: Every service must have an interface (
IMyService). Register new services inApp.xaml.cs → ConfigureServices(). - Models: Shape data belongs in
Models/ShapeParameters.csas an immutablesealed record, never a mutable class. - Braces: Always use
{}blocks forif/else/for/foreach— even single-line bodies. - Nullable: All reference-type fields and parameters must be non-nullable unless genuinely optional (use
?). - No XML doc comments (
/// <summary>).
- Add a value to the
AnnotationToolenum inAnnotationTool.cs. - Add a matching
sealed recordinModels/ShapeParameters.cs. - Handle the new case in
AnnotationViewModel.TryGetShapeParameters(). - Render it in
AnnotationCanvasRenderer(UpdateDragFeedback+CommitShape). - Add unit tests in
Pointframe.Tests/ViewModels/AnnotationViewModelTests.cs.
- Keep PRs focused — one feature or fix per PR.
- Add or update tests for any behaviour change.
- Reference related issues with
Fixes #123. - The CI pipeline runs build, tests, format check, and CodeQL on every PR — make sure it passes locally first.
New to the codebase? Look for issues labelled good first issue.