← All projects

Supporting / Engineering case study

TheAnythingSorter

A native Windows app for sorting thousands of photos and videos by keyboard.

C# / .NET 7 / WPF / IAsyncEnumerable

Native Windows workflow
1–9Move & advanceCtrl + ZUndo safely
Screen recording to follow

A 20–30 second desktop recording will show the queue draining, one undo and the destination folders. The workflow above is a schematic, not a browser version.

01 / The problem

The problem

Sorting a large media collection by dragging files between folders is slow. Automating file moves also raises a harder question: what can the application safely promise about irreplaceable files?

02 / What I built

What I built

Import files or folders, preview the next item and press a number to move it to a destination. Focus mode keeps the workflow essentially keyboard-only. The queue persists across restarts; Ctrl+Z reverses a move using a collision-safe destination name.

03 / Architecture

Architecture

  1. Files / folders → iterative directory traversal
  2. IAsyncEnumerable → streaming queue
  3. Native media preview → number-key destination
  4. Move → auto-rename / skip / overwrite
  5. Persistent session → resume after restart
  6. Ctrl+Z → undo with auto-rename

04 / Key decisions

Key decisions

01

Choose the platform for the workload

WPF was selected after comparing Electron, Tauri and Python/Qt. Windows filesystem APIs, media support, async primitives and straightforward packaging suited the job, with zero external NuGet dependencies.

02

Discover incrementally

IAsyncEnumerable lets files appear before the full tree finishes scanning. Traversal is iterative; an individual permission or file failure does not abort the entire batch.

03

Undo must not destroy another file

Normal moves offer auto-rename, skip or overwrite. Undo always uses auto-rename, even when overwrite is selected for ordinary moves.

05 / What went wrong

What went wrong

Check the implementation behind a safety promise

Problem
The README originally claimed files were never permanently deleted.
Why it happened
Overwrite could irreversibly replace an existing destination file, while undo only remembered the moved file.
How it was detected
A safety review compared the documented guarantee with actual duplicate-handling and undo behaviour.
Response
The UX and documentation were corrected to explain the destructive consequence of overwrite. Safe undo does not recover the file that overwrite replaced.
Lesson
A safety guarantee is only useful when every relevant operation actually satisfies it.

06 / Evidence

Evidence

  • Native .NET WPF implementation with zero external NuGet dependencies.
  • Streaming discovery, isolated file failures and a persistent sorting queue.
  • Explicit collision modes and auto-rename on undo.

07 / Current status & limitations

Current status & limitations

Local tool · Windows desktop

Local Windows application. No automated test suite currently. .NET 7 needs upgrading, and a large code-behind file remains instead of MVVM. A real screen recording is still needed for the portfolio.

Evidence basis: project implementation review and research notes supplied for this portfolio, September 2026. Project tests described here are distinct from the portfolio’s own checks.

Next case studyArcLedger