Apostolos Tsiopanos

Email LinkedIn GitHub Larissa, Gr
SortWeave

SortWeave

Coming Soon

Intelligent Rule-Based File Organization

A powerful cross-platform desktop application that automates file management through customizable, rule-based workflows. Built with modern C# and Avalonia UI for seamless performance across Windows, macOS, and Linux.

Windows macOS Linux

My Contributions

Core Architecture

  • Designed and implemented MVVM architecture using CommunityToolkit.Mvvm
  • Built theme persistence system with JSON based read/write stytem
  • Implemented dependency injection for testability and modularity

File Operations System

  • Developed asynchronous file processing with real-time progress reporting
  • Created flexible file grouping system supporting multi-level folder structures (e.g., type/date)
  • Implemented robust error handling and validation for edge-cases

Auto-Update System

  • Integrated Velopack for seamless cross-platform updates
  • Built update UI panel for manual/automatic options
  • Implemented delta patching to minimize download sizes

UI Components & Validation

  • Created TextBox filtering system restricting invalid characters/symbols
  • Developed dynamic filter tag system with visual state indicators (active/inactive)
  • Fixed cross-platform UI inconsistencies and input handling issues

Critical Bug Fixes

  • Resolved file deletion and crash issues with edge-case file paths
  • Fixed file grouping errors and ensured data integrity
  • Refactored legacy code for compatibility and maintainability

Testing & Quality

  • Wrote xUnit tests for critical file operation components
  • Implemented validation to prevent data loss scenarios
  • Conducted extensive cross-platform testing (Windows, macOS, Linux)

Technical Challenges & Solutions

Cross-Platform Text Input Inconsistencies

Problem

TextBox filtering worked on Windows but failed on macOS and Linux, blocking all input in certain scenarios due to platform-specific event handling differences.

Solution

Researched Avalonia's input event pipeline and implemented platform-agnostic character validation using TextInput events. Added extensive testing across all three platforms.

Result

TextBox filtering now works reliably across Windows, macOS, and Linux with identical behavior.

File Path Edge Cases Causing Crashes

Problem

Application crashed when encountering unusual file paths (special characters, long paths, spaces) and in very specific senarios deleted files.

Solution

Implemented comprehensive path validation and sanitization. Added exception handling for edge cases, proper path normalization using Path.GetFullPath(), and extensive testing with problematic filenames.

Result

Eliminated crashes and data loss. Application now safely handles file path variations without errors.

Processing Large File Sets Without UI Freeze

Problem

Moving or grouping thousands of files synchronously would freeze the UI, making the application appear unresponsive to the user.

Solution

Implemented asynchronous processing using async/await patterns and IProgress<T> for real-time progress updates to the UI thread.

Result

UI remains fully responsive during large batch operations with accurate progress reporting and user control.

Dynamic UI State Management for Filter Tags

Problem

Needed intuitive visual feedback system for filename filters showing active/error states, with ability to add/remove filters dynamically without performance issues.

Solution

Built reactive button-tag system using ObservableCollections bound to UI. Implemented state machine tracking filter validity with visual indicators (colors, icons). Used Avalonia's data binding for automatic UI updates when filter state changes.

Result

Users get immediate visual feedback on filter status. Smooth performance even with dozens of active filters.

Architecture & Design Decisions

Clean architecture with separated concerns for maintainability and testability.

Presentation Layer

Avalonia MVVM views with reactive bindings, custom controls for rule configuration, theme system supporting light/dark modes

Application Layer

ViewModels, services, dependency injection container, command handling, state management

Domain Layer

Rule engine, file operation logic, business rules, validation, domain models

Infrastructure Layer

File system access, licensing service, update service, logging, data persistence

Technical Stack

Core Technologies

C# 14 .NET 9 Avalonia UI 11

Architecture & Patterns

MVVM Architecture Dependency Injection Reactive Programming

Features & Tools

xUnit Testing Velopack (Auto-Updates) Licensing System Cross-Platform

Results & Key Learnings

What I Accomplished

  • Built fully functional cross-platform desktop application from scratch
  • Implemented complex file grouping system with flexible multi-level organization
  • Created reusable UI components: theme persistence, text validation, filter tags etc..
  • Eliminated critical bugs preventing data loss and application crashes
  • Integrated modern tooling: Velopack updates, xUnit testing, MVVM architecture
  • Achieved stable cross-platform compatibility through extensive testing and fixes
  • Developed clean MVVM architecture with dependency injection for future extensibility

Technical Skills Gained

  • Deep dive into Avalonia UI framework and cross-platform development challenges
  • Learned async/await patterns for responsive UI with data proccessing
  • Cross-platform debugging and resolution of platform-specific issues
  • Practical MVVM architecture with ObservableCollections, reactive data binding and state management
  • Experience implementing update mechanisms (Velopack), settings persistence, and user feedback systems
  • Collaborative development workflows: git & github usage, code reviews, refactoring code, maintaining compatibility