$ show marph91/jimmy
Jimmy is a command-line and terminal UI tool for converting notes from 50+ note-taking applications (Evernote, Obsidian, Joplin, Notion, Bear, etc.) into a unified Markdown format. It uses an intermediate representation (Notebook/Note/Resource/Tag objects) decoupled from input parsing and output writing, allowing clean extensibility. The architecture is a plugin-style converter framework with a rich set of format-specific parsers, markdown preprocessing libraries, and a resource deduplication system. The tool is distributed as standalone binaries bundling Pandoc and other dependencies. While the core abstractions are well-crafted, the vast majority of the codebase consists of tightly coupled format converters that are specific to each app's export schema, limiting general reuse. The project has extensive integration tests via a test data submodule, but many converters lack unit tests. Its requirement for Python 3.14 (a very recent version) and reliance on external binaries (Pandoc, one2html) introduce drift risks.
The LLM identified 3 files worth highlighting for reuse:
Defines the core data model (Notebook, Note, Resource, Tag, NoteLink) used as the intermediate representation between input converters and output writers. This abstraction decouples format parsing from output generation, enabling new formats to be added without modifying the writer. The classes are self-contained with minimal dependencies (only Python dataclasses and typing), making them directly reusable in any project that needs a structured note model. The pattern demonstrates clean separation of concerns and is the backbone of Jimmy's extensibility.
Provides cross-platform utility functions and classes: Config dataclass, safe_path() for sanitizing filenames, get_unique_path() for avoiding collisions, catch_all_exceptions decorator for graceful error handling in batch conversion, archive extraction helpers (zip, tar, gzip), datetime conversion, and a Stats accumulator. These are isolated, well-tested, and independent of the note conversion domain, making them candidates for extraction into a general-purpose utility library. The catch_all_exceptions decorator pattern is particularly reusable for any batch processing pipeline.
Implements FilesystemWriter and PathDeterminer to write converted notes to disk in a structured output directory. It handles resource deduplication via MD5 hashing, filename collision resolution, note internal linking resolution (post-processing), and frontmatter generation. The writer is fully decoupled from input formats (operates only on the intermediate representation), so it can be reused with any system that produces a similar note tree. Its link resolution pass after initial writing is a noteworthy design pattern for handling cross-note references in batch conversions.