Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 12 additions & 20 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,16 @@ jobs:
include:
- rid: win-x64
os: windows-latest
tfm: net10.0-windows10.0.19041.0
artifact: gui-win-x64
- rid: maccatalyst-x64
- rid: osx-x64
os: macos-latest
tfm: net10.0-maccatalyst
artifact: gui-osx-x64
- rid: osx-arm64
os: macos-latest
artifact: gui-osx-arm64
- rid: linux-x64
os: ubuntu-latest
artifact: gui-linux-x64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand All @@ -87,21 +91,9 @@ jobs:
with:
dotnet-version: '10.x'

- name: Install required MAUI workloads
run: dotnet workload restore src/AtsScanner.Gui/AtsScanner.Gui.csproj

- name: Publish (Windows)
if: matrix.os == 'windows-latest'
run: >
dotnet publish src/AtsScanner.Gui -f ${{ matrix.tfm }} -c Release -r ${{ matrix.rid }}
--self-contained true
-p:WindowsAppSDKSelfContained=true
-o ./dist/${{ matrix.artifact }}

- name: Publish (MacCatalyst)
if: matrix.os == 'macos-latest'
- name: Publish
run: >
dotnet publish src/AtsScanner.Gui -f ${{ matrix.tfm }} -c Release -r ${{ matrix.rid }}
dotnet publish src/AtsScanner.Gui -c Release -r ${{ matrix.rid }}
--self-contained true
-o ./dist/${{ matrix.artifact }}

Expand All @@ -111,7 +103,7 @@ jobs:
if [ "${{ matrix.os }}" = "windows-latest" ]; then
test -f "dist/${{ matrix.artifact }}/AtsScanner.Gui.exe"
else
ls -d dist/${{ matrix.artifact }}/*.app >/dev/null 2>&1 || ls dist/${{ matrix.artifact }}/*.pkg >/dev/null 2>&1
test -f "dist/${{ matrix.artifact }}/AtsScanner.Gui"
fi

- name: Package (Windows)
Expand All @@ -122,8 +114,8 @@ jobs:
Compress-Archive -Path * -DestinationPath "../../ats-scanner-${{ matrix.artifact }}.zip" -Force
Pop-Location

- name: Package (macOS)
if: matrix.os == 'macos-latest'
- name: Package (Unix)
if: matrix.os != 'windows-latest'
shell: bash
run: |
cd dist/${{ matrix.artifact }}
Expand Down
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,12 @@ dotnet build

## Desktop GUI

Prefer a graphical interface? A .NET MAUI desktop app is available in `src/AtsScanner.Gui`, built on the same `AtsScanner.Core` engine as the CLI — all scanning still happens fully offline, on your machine.
Prefer a graphical interface? An Avalonia UI desktop app is available in `src/AtsScanner.Gui`, built on the same `AtsScanner.Core` engine as the CLI — all scanning still happens fully offline, on your machine.

Requires the MAUI workload: `dotnet workload install maui`.
The GUI targets Windows, macOS, and Linux with the standard .NET SDK.

```bash
dotnet run --project src/AtsScanner.Gui -f net10.0-windows10.0.19041.0 # Windows
dotnet run --project src/AtsScanner.Gui -f net10.0-maccatalyst # macOS
dotnet run --project src/AtsScanner.Gui
```

The app lets you pick a resume file, choose which ATS platforms to check against, and view the same scores, ratings, and issue breakdowns as the CLI in an expandable results list.
Expand Down
8 changes: 8 additions & 0 deletions src/AtsScanner.Gui/App.axaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AtsScanner.Gui.App"
RequestedThemeVariant="Default">
<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>
21 changes: 21 additions & 0 deletions src/AtsScanner.Gui/App.axaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;

namespace AtsScanner.Gui;

public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
desktop.MainWindow = new MainWindow();

base.OnFrameworkInitializationCompleted();
}
}
14 changes: 0 additions & 14 deletions src/AtsScanner.Gui/App.xaml

This file was deleted.

14 changes: 0 additions & 14 deletions src/AtsScanner.Gui/App.xaml.cs

This file was deleted.

14 changes: 0 additions & 14 deletions src/AtsScanner.Gui/AppShell.xaml

This file was deleted.

9 changes: 0 additions & 9 deletions src/AtsScanner.Gui/AppShell.xaml.cs

This file was deleted.

96 changes: 24 additions & 72 deletions src/AtsScanner.Gui/AtsScanner.Gui.csproj
Original file line number Diff line number Diff line change
@@ -1,76 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<!-- Desktop-only: this is a privacy-first, offline resume scanner GUI.
Mobile targets (Android/iOS) are intentionally excluded. -->
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">net10.0-windows10.0.19041.0</TargetFrameworks>
<TargetFrameworks Condition="!$([MSBuild]::IsOSPlatform('windows'))">net10.0-maccatalyst</TargetFrameworks>

<!-- Note for MacCatalyst:
The default runtime is maccatalyst-x64, except in Release config, in which case the default is maccatalyst-x64;maccatalyst-arm64.
When specifying both architectures, use the plural <RuntimeIdentifiers> instead of the singular <RuntimeIdentifier>.
The Mac App Store will NOT accept apps with ONLY maccatalyst-arm64 indicated;
either BOTH runtimes must be indicated or ONLY macatalyst-x64. -->
<!-- For example: <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> -->

<OutputType>Exe</OutputType>
<RootNamespace>AtsScanner.Gui</RootNamespace>
<UseMaui>true</UseMaui>
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<!-- Enable XAML source generation for faster build times and improved performance.
This generates C# code from XAML at compile time instead of runtime inflation.
To disable, remove this line.
For individual files, you can override by setting Inflator metadata:
<MauiXaml Update="MyPage.xaml" Inflator="Default" /> (reverts to defaults: Runtime for Debug, XamlC for Release)
<MauiXaml Update="MyPage.xaml" Inflator="Runtime" /> (force runtime inflation) -->
<MauiXamlInflator>SourceGen</MauiXamlInflator>

<!-- Display name -->
<ApplicationTitle>ATS Scanner</ApplicationTitle>

<!-- App Identifier -->
<ApplicationId>com.atsscanner.gui</ApplicationId>

<!-- Versions -->
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>

<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
<WindowsPackageType>None</WindowsPackageType>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
</PropertyGroup>

<ItemGroup>
<!-- App Icon -->
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />

<!-- Splash Screen -->
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />

<!-- Images -->
<MauiImage Include="Resources\Images\*" />

<!-- Custom Fonts -->
<MauiFont Include="Resources\Fonts\*" />

<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\AtsScanner.Core\AtsScanner.Core.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>AtsScanner.Gui</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationTitle>ATS Scanner</ApplicationTitle>
<ApplicationId>com.atsscanner.gui</ApplicationId>
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<AvaloniaUseCompiledBindingsByDefault>false</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Avalonia" Version="12.1.1" />
<PackageReference Include="Avalonia.Desktop" Version="12.1.1" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="12.1.1" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="12.1.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\AtsScanner.Core\AtsScanner.Core.csproj" />
</ItemGroup>

</Project>
112 changes: 0 additions & 112 deletions src/AtsScanner.Gui/MainPage.xaml

This file was deleted.

Loading