Skip to content

feat(desktop): SteamAPI Desktop v0.1.0 - #4

Merged
fatihemres merged 5 commits into
masterfrom
feature/steamapi-desktop-m1
Oct 16, 2026
Merged

fatihemres merged 5 commits into
masterfrom
feature/steamapi-desktop-m1

Conversation

@fatihemres

@fatihemres fatihemres commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Summary

This draft pull request introduces SteamAPI Desktop v0.1.0, an interactive desktop client built with .NET 10 and Avalonia UI 11.2 that exposes the existing SteamAPI service through a graphical user interface, packaged with a professional Windows installer.

Distribution Formats

  • PRIMARY Installer: SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe (Inno Setup 6)
    • Non-administrative per-user installation (%LOCALAPPDATA%\Programs\SteamAPI Desktop).
    • Persistent installer AppId GUID ({B42B8D30-80E5-46D9-8E92-E23B86BC7B62}) supporting clean in-place upgrades.
    • Automatic Start Menu shortcut and optional Desktop shortcut.
    • Full registration in Windows Installed Apps (Add or Remove Programs) with working uninstaller.
    • Safe lifecycle management: detects running application instances before upgrade/uninstall.
    • Strict preservation of user settings (%APPDATA%\SteamAPI.Desktop\settings.json).
  • OPTIONAL Portable Archive: SteamAPI-Desktop-v0.1.0-win-x64.zip for advanced users and portable/restricted environments.
  • Both distributions include matching SHA-256 sidecars (.sha256).

Actual Implemented Features

1. Game Explorer

  • Search: Query games by title keyword with language/culture selection targeting exactly the three supported SteamAPI v0.2.0 storefront cultures:
    • Turkey / Turkish (Culture ID: 1, Country Code: TR)
    • United States / English (Culture ID: 2, Country Code: US)
    • Spain / Spanish (Culture ID: 3, Country Code: ES)
  • Results Listing: Displays search results containing game name, Steam App ID, sale type badge (PAID, FREE TO PLAY, NOT AVAILABLE), and price display.
  • Contract Conformance: Conforms strictly to the backend API's verified six-field contract (name, storeLink, imageLink, price, saleType, appId). Does not display or fabricate unverified metadata such as developers, publishers, release dates, Metacritic scores, genre tags, discount percentages, or currency symbols.
  • Price Presentation: Formats numeric price values invariant to two decimals, or displays state text (Free to Play, Not Available) derived from saleType.
  • Launchers & Clipboard Actions: Direct launcher buttons to open the game in the Steam desktop client (steam://store/{appId}) or web browser (storeLink), with buttons to copy App ID and store URL to clipboard.

2. API Inspector

  • Request Diagnostics: Captures request URL, HTTP method, culture parameter, game query, HTTP status code, latency (ms), and timestamp for each API call.
  • Response Inspection: Scrollable, read-only viewer displaying the raw JSON payload returned by the backend.
  • Clipboard Utility: One-click buttons to copy the full JSON response or request URL.

3. Settings & Process Management

  • API Connectivity: Configurable API Base URL (defaults to http://localhost:5271) and HTTP request timeout with an interactive "Test Connection" diagnostic button.
  • Bundled Loopback Server: Controls the local companion ASP.NET Core SteamAPI backend process:
    • Live process status indicator (Stopped, Starting, Running, Failed).
    • Manual "Start Server" and "Stop Server" buttons.
    • Checkbox to automatically launch the companion backend on desktop application startup.
    • Error banner displaying actionable troubleshooting details on failure.
  • Offline Demo Mode: Toggle switch activating offline simulation. When active, queries are served from an embedded curated dataset without issuing network or API calls.
  • Persistence: User settings saved to %APPDATA%\SteamAPI.Desktop\settings.json with a "Reset Defaults" action. (Note: Theme switcher UI is not present in this release; the application uses the Steam-inspired dark palette).

4. Creator Attribution & About View

  • Creator Recognition: Prominently acknowledges creator Fatih Emre Sarman (@fatihemres) with clickable links to the GitHub repository and profile.
  • Supported Market Information: Clearly presents the three supported regional storefront markets (Turkey, United States, Spain) without fabricating unverified currency codes or symbols.
  • Persistent Footer: Subtle attribution in the main window status footer alongside the companion API connection indicator.
  • Technical Metadata: Displays assembly version, runtime environment, and open-source license information.

Architecture & Lifecycle Design

  • MVVM Architecture: Built with Avalonia UI 11.2 and CommunityToolkit.Mvvm, abstracting platform dependencies behind interfaces (IClipboardService, ILauncherService, IDemoDataService, ISettingsService, IApiProcessManager).
  • Win32 Job Object Ownership: On Windows, the companion backend process is registered in a Win32 Job Object configured with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE. Child processes are reliably terminated by the operating system if the host application exits or terminates unexpectedly.
  • Safe Port Conflict Handling: Port 127.0.0.1:5271 is checked via standard socket connection before starting the child process. If occupied by another application, startup halts immediately with a clear error message. No POST /steam or HTTP search requests are sent to unknown listeners, avoiding unexpected upstream network traffic or service disruption.
  • Graceful Shutdown: Window close detaches UI event listeners prior to stopping child processes, avoiding compositor shutdown deadlocks. Normal window close completes cleanly and releases all file locks.

Verification Evidence

GitHub Actions CI

  • Automated Workflow: Validates solution compilation, test suite execution in both Debug and Release configurations across ubuntu-latest and windows-latest, Windows packaging, and artifact upload.
  • CI Test Suite: 222/222 tests passing across both Ubuntu and Windows runners (157 backend + 65 desktop, 0 failures, 0 skipped).
  • Downloadable Package Artifact: steamapi-desktop-v0.1.0-win-x64 generated and retained by GitHub Actions (includes SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe installer, SteamAPI-Desktop-v0.1.0-win-x64.zip portable archive, and both .sha256 sidecars).

Local Windows Acceptance Evidence

  • Installer Lifecycle Audit:
    • Silent installation into isolated test directory: Succeeded (Exit code 0).
    • Main executable and companion api\SteamAPI.exe verified present.
    • Windows Installed Apps registry key (HKCU:\...\Uninstall\{B42B8D30-80E5-46D9-8E92-E23B86BC7B62}_is1) verified created with complete publisher and version metadata.
    • Same-version reinstallation: Verified no duplicate registry entries created.
    • Silent uninstallation: Succeeded (Exit code 0), removed application binaries and registry keys cleanly.
    • User settings %APPDATA%\SteamAPI.Desktop\settings.json preserved intact across install and uninstall.
  • Normal-Close Shutdown Audit: Extracted portable release verified to shut down with exit code 0 in ~140 ms, with zero lingering background processes and immediate folder deletion.
  • Backend v0.2.0 Baseline: git diff --stat 04ee2b1b2a1f1dae96d62ac5b5219955f346b197 -- Infrastructer/ SteamAPI/ SteamAPI.Tests/ confirms 0 files modified; existing backend API implementation remains untouched.

Known Limitations

  • Unsigned Windows Executable: Both the installer and portable executable are unsigned (open-source / zero mandatory recurring cost). Windows SmartScreen will display an "Unknown Publisher" warning on initial execution. Users click More info -> Run anyway.
  • Port 5271 Dependency: The bundled loopback backend requires port 5271. If another application uses this port, companion startup fails safely; users must free port 5271 or configure an alternate external API URL in Settings.
  • Platform Packaging Scope: Automated packaging produces self-contained distributions specifically for Windows x64.

Rollback Strategy

All desktop code, installer scripts, and tests reside strictly in desktop/ and solution references in SteamAPI.sln. Reverting the desktop commits cleanly restores the stable v0.2.0 baseline.

Product Owner Next Steps

This PR is in DRAFT state for Product Owner acceptance testing. It must not be merged until final UAT is approved.

fatihemres and others added 5 commits October 16, 2026 11:29
- Introduce Avalonia UI 11.2 desktop application for Steam game search, response inspection, and visual exploration
- Implement MVVM architecture with Game Explorer, API Inspector, Settings, and About tabs
- Add Demo Mode with offline curated data for non-API evaluation
- Support both embedded companion backend (port 5271) and external API URLs
- Implement safe port conflict handling with zero upstream network probing
- Implement Win32 Job Object lifecycle management and graceful shutdown
- Add persistent software creator attribution for Fatih Emre Sarman (@fatihemres)
- Add 65 automated desktop unit/integration tests (222/222 passing solution-wide)
- Add self-contained Windows release packaging script and CI packaging validation
- Add CI Windows artifact upload for downloadable release candidate ZIP and SHA-256
- Preserve v0.2.0 backend API implementation and contracts completely intact
…umentation

- Remove unverified currency code and symbol labels from AboutView storefront cards
- Strip currency references from SteamCulture descriptions to match 6-field backend contract
- Update README documentation to accurately describe the 3 supported storefront cultures
- Correct Avalonia UI framework version string to 11.2 in AboutViewModel and README
- Adjust test timeout in ApiProcessManagerTests to avoid runner scheduling jitter
… packaging

- Add Inno Setup 6 script (desktop/installer/SteamAPI.Desktop.iss) for per-user non-admin installation
- Configure persistent AppId GUID, Start Menu shortcut, optional desktop shortcut, and Add/Remove Programs uninstaller
- Ensure safe in-place upgrades and strict user settings preservation (%APPDATA%\SteamAPI.Desktop\settings.json)
- Extend desktop/package-release.ps1 to produce both primary installer EXE and optional portable ZIP with SHA-256 sidecars
- Update .github/workflows/ci.yml to validate and upload both installer EXE and portable ZIP release artifacts
- Update desktop/README.md with comprehensive installation, upgrade, uninstallation, and persistence instructions
@fatihemres
fatihemres marked this pull request as ready for review October 16, 2026 10:25
@fatihemres
fatihemres merged commit e319b5c into master Oct 16, 2026
3 checks passed
@fatihemres
fatihemres deleted the feature/steamapi-desktop-m1 branch October 16, 2026 10:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant