All projects

Episort

A Windows-first JavaFX desktop application. It scans a folder, parses names with deterministic rules, resolves titles against TMDB, then shows the exact source to destination plan. Nothing is written until that plan has been read and approved. Shipped as a portable build for Windows and Linux, with the Java runtime embedded.

Status
Maintained, in production
Role
Sole developer, from product design to packaging.
0:00 / 0:00
Presentation
Matching
Conflict

The initial problem

A download folder holds hundreds of files named by a dozen release groups. Several shows sit in one folder. Aired, DVD and absolute episode orders disagree. Renaming by hand costs a weekend. Automating it blindly destroys the library, and a wrong match does not fail loudly. It quietly moves the wrong file somewhere else.

The solution

A fully deterministic pipeline: scan, rule-based parsing, TMDB resolution, identity review, plan review, journaled apply. The same folder always produces the same plan. Two explicit gates, and neither can be skipped. Conflicts, duplicates and unsafe Windows paths block the run before it starts.

Key decisions

Deterministic rules, no model. The same folder must always produce the same plan, and every value on screen traces back to a real signal.

The unit of work is the detected group, not the file. Correcting twenty-five files costs one click.

An unavailable action stays visible and disabled, with the reason on screen. Hiding a button to prevent an action tells the user nothing.

Architecture

  1. Scan

    reads the folder

  2. Parse

    rules, no model

  3. Match

    TMDB, through Janus

  4. Identity review

    one line per detected group

    You approve

  5. Plan review

    every source and destination

    You approve

  6. Apply

    inside the workspace, journalled

    The only stage that writes

The same folder always produces the same plan. Five stages only read. The sixth writes, and a run interrupted halfway can be resumed from its journal.

Six separate stages, each one inspectable. The interface never touches a file: it approves a plan. Only the apply stage writes, inside the configured workspace, with a journal that lets an interrupted run be recovered. TMDB is reached through Janus, so no TMDB secret exists anywhere in this project.

Episort calls TMDB through Janus, so it ships with no upstream key and the people using it need no account. Being the first consumer of my own gateway found problems in it that none of my tests had.

What is left

The project is maintained, in production.

Publish real screenshots of the review screens

Broaden the release-naming test corpus

Document the parsing rules for contributors

Technologies

Java 25 · JavaFX 25 · Gradle · JUnit 5 · TMDB API · Janus gateway · Go 1.26 · GitHub Actions

Could we work together?

I am looking for a 14-month full-stack apprenticeship starting in September 2026.