Skip to content
Back to projects

Case study

Filemindr

A declarative Python CLI for reviewable local file automation.

Filemindr turns recurring file organization into profile-based YAML rules, with safeguards that make planned and executed mutations visible.

Dry-run, explain, and validation before file mutation
Explicit rename, skip, overwrite, and trash conflict policies
Recorded run history with deliberately limited move-only undo

Problem

Local file automation can cause data loss when matching, destination paths, or conflicts are implicit. A useful tool must explain what it will do and state where recovery stops.

Outcome

The project demonstrates safety-oriented CLI design through preview, validation, explicit conflict handling, and recorded execution. It does not promise transactional behavior, complete reversibility, or risk-free filesystem operations.

What I built

  • Profile-based YAML pipelines with priority matching, ignore patterns, move/copy actions, and destination templates.
  • Dry-run, explain, validate, JSON reports, watch mode, and per-run history for operational feedback.
  • Conflict policies at global or rule level, plus undo for recorded move operations.

Technical decisions

  • Choose the highest-priority matching rule so execution is deterministic for a given configuration and filesystem state.
  • Expose destination rendering and conflict decisions through explain and dry-run before applying changes.
  • Keep undo boundaries explicit: v1 restores recorded moves, but does not restore copy, trash, or overwrite events.

Interactive illustration · not the Python runtime

Preview the organization flow

This browser interaction illustrates a simple rules result. It does not execute Filemindr or mutate files; the CLI, repository tests, and PyPI package are the technical source of truth.

incoming folder
YAML rules
filelocation
invoice-2025-08.pdf./Downloads
events-export.csv./Downloads
screenshot-home.png./Downloads
debug-run.log./Downloads

rules matched

extensions: [pdf] → move_to: finance/invoices
extensions: [csv] → move_to: data/exports
regex: screenshot → move_to: images/screenshots
extensions: [log] → move_to: logs
Filemindr | Jeferson Peter