Today a friend wanted help to restore something with duplicacy.
But the restore experience in the Web UI is too clunky, so I decided to complain to my robot friend (Gemini 2.5 Pro) about it instead, and to ask it to create an UI app for me to compare file versions and restore, using duplicacy CLI. In 10 iterations of me asking for ever more increasing features (in the hindsight, I probably should have thought it through in the beginning, and produced complete requirements) it (he? she? we?) arrived to a very much usable prototype, that allows to:
- see revisions and versions (you need to point it to initialized repository, it will read .duplicacy/preferences file)
- Caches stuff locally, so you don’t have to wait on slow connections. On the other hand, duplicacy caches too, so I guess that wasn’t necessary.
- browse the files in the tree for available snapshot
- Search/filter files, with regex support
- Restore selected files in-place or to some other folder
- See all the existing versions of every file (Very few backup app vendors understand this, and I believe now only Synology of all the things implements this properly. Crashplan did too.)
- preserve the state in the tree when switching the revisions (yay)
-
diff
two revisions of the same file using available diff tool (I had bbdiff installed).
I have explained to the robot-friend how to use the clunky duplicacy CLI interface, especially the need to use temporary repository if restoring files not in-place, that one has to use snapshot IDs in some commands, but snapshot names in others, and how to find them in preferences file, etc, etc, but the result is magnificent. The whole ordeal took about 30 minutes; most of the time I was waiting for gemini to generate code and me typing the explanation of how to use duplicacy list
and duplicacy restore
commands, and providing with examples.
The robot-friend came up with the app name by the way, I did not specified it, I referred to it as “the app”.
The below demo is on a small test repository, because I did not want to expose my actual file names.
screencast
generated code
Duplicacy Restore by Robot Friend · GitHub
To run: save that single file somewhere and uv run code.py
Perhaps gchen can consider asking robot-friend to help implement the user-facing features in the Web Edition, especially the restore workflow, that users keep asking for? We have technology, there is no reason not to take advantage of it, to help deliver good experience.