The Motivation: Job Searching is Hard Enough Link to heading

Job hunting in today’s tech landscape can quickly feel like a full-time job in itself. Between tailoring resumes, tracking recruiter outreach, preparing for multi-round interviews, and monitoring follow-up deadlines, keeping everything organized is crucial.

When I started organizing my own job search, I looked around at the available tools. While there are plenty of platforms out there, almost all of them come with two major drawbacks:

  1. Privacy & Lock-in: They store sensitive personal data—target salaries, offer details, contact information, notes on companies—on remote third-party servers.
  2. Cost: Most require recurring monthly subscriptions for basic features.

Job searching is stressful enough without having to pay a monthly fee or hand over your career pipeline to another cloud service. I wanted a solution that was 100% local-first, free, and private, keeping full ownership of my notes and data right inside Obsidian.

Since nothing quite met all my requirements out of the box, I decided to build one: the Job Application Tracker plugin for Obsidian.


Packing It All Into v1.0 Link to heading

Rather than starting with a barebones MVP, I wanted the initial release to be a comprehensive command center for anyone managing a career search. I aimed to pack in all the features I personally wanted, while keeping the user experience clean and intuitive:

  • 📊 Multi-View Pipeline Dashboard:
    • Kanban Board: Drag-and-drop cards across customizable pipeline stages (WishlistAppliedScreeningInterviewingOfferAccepted / Rejected / Ghosted), automatically updating YAML frontmatter and logging timestamped activity.
    • Table & List Views: Sortable columns, salary ranges, workplace models (Remote/Hybrid/On-site), and quick action menus.
  • 📈 Native Sankey Diagram & Conversion Metrics:
    • Visualizing conversion rates is essential for understanding what’s working. I built a pure native SVG Sankey diagram directly into the analytics view with zero external JavaScript charting dependencies—meaning fast load times and no external permission prompts.
    • KPI cards tracking response rates, interview conversion, offer rates, and platform performance.
  • 📎 Preserving Original Job Postings (PDF / Markdown):
    • Job descriptions often disappear or get updated mid-process. The plugin lets you attach and embed PDF or Markdown job postings directly into collapsible callouts inside your notes, so you always have the original requirements at hand without cluttering the screen.
  • 📝 100% Native Markdown Storage:
    • Every application is stored as a clean, human-readable Markdown note in your vault with YAML frontmatter. Zero proprietary database lock-in, fully compatible with Obsidian Search, Dataview, and graph view.
  • 👥 Interview Pipelines & Contacts:
    • Track recruiters, coordinators, and interview rounds with linked prep and debrief note templates.

Building It with AI: Google Antigravity & The Learning Curve Link to heading

Developing for Obsidian was a new endeavor for me. While I have extensive software engineering experience, every plugin ecosystem has its own quirks—lifecycle hooks, workspace leaves, custom views, frontmatter event handling, and DOM rendering.

To accelerate the build, I paired with Google Antigravity. I’ve been heavily using AI in my work for some time now, and I wanted to see how far I could push it on a personal project outside of work.

Using AI as a pair programmer allowed me to quickly prototype UI components, explore Obsidian’s internal API patterns, and iterate rapidly on complex features like the native SVG Sankey generator and drag-and-drop Kanban state sync. It turned what could have been weeks of scouring API documentation into a focused, highly productive development sprint.


The New Obsidian Community Publishing Experience Link to heading

Once the plugin was feature-complete, it was time to share it with the community.

Obsidian recently revamped its plugin submission process. In the past, publishing required submitting a pull request to the central obsidian-releases repository. Now, the entire workflow is handled directly through the Obsidian Community directory. You simply sign in with your Obsidian account, link your GitHub profile to verify repository ownership, and submit your plugin through their developer portal.

One of the best aspects of this new system is the built-in automated review pipeline. As soon as you submit your initial release, the directory automatically inspects your repository, manifest.json, and release assets—providing instant feedback on compliance, developer policies, and best practices.

Getting everything 100% compliant took a bit of back-and-forth. Resolving each recommendation and warning meant pushing updates, tagging a new GitHub release, and re-running the automated checks. While it required some iteration, the automated feedback was invaluable for catching subtle issues and ensuring the plugin was rock-solid before landing in users’ vaults.

Once the checks cleared and the plugin was published, seeing it go live in the directory and become installable within Obsidian was deeply rewarding.


Wrapping Up & How to Get It Link to heading

If you’re currently on the job hunt or preparing for one, you can install the plugin directly within Obsidian:

  1. Open Obsidian SettingsCommunity plugins.
  2. Search for Job Application Tracker and click Install, then Enable.

You can also check out the source code, open issues, or contribute on GitHub:

Building this was a fun way to explore the Obsidian developer ecosystem and experiment with modern AI-driven workflows. Most importantly, I hope it brings a bit of clarity, structure, and calm to anyone navigating the job search process.