Releases: cruisencode/obsidian-job-application-tracker
Releases · cruisencode/obsidian-job-application-tracker
Release list
1.1.0
🚀 What's New in Version 1.1.0
📋 Data Integrity & Real-Time Note Synchronization
- Interview Debrief Sync: Logging interview outcomes now updates the
## 📅 Interviews & Stagessection in the Markdown note body from(Scheduled)to(Completed)or(Cancelled)in real time. - Note Overview & Title Sync: Editing application details (company, role, salary, location, workplace model, source) keeps the
# Company - Roletitle and## 📋 Overviewnote body section in sync with frontmatter. - Backlink-Safe File Renaming: Modifying an application's company or role automatically renames the note file on disk via Obsidian's
fileManager.renameFile, preserving all Obsidian backlinks. - Debrief Note Bleed Fix: Switching interview rounds in
LogInterviewOutcomeModalcleanly resets outcome notes and status, preventing feedback from bleeding across rounds. - Sanitization Fallback: Added safe filename fallback (
"Untitled Application") and escaped double quotes in frontmatter templates to prevent YAML parsing errors.
🎯 Workflow & UX Enhancements
- Non-Destructive Modal Navigation: Canceling or closing child modals (
Edit Details,+ Add Contact,+ Schedule Interview,Log Outcome) safely returns to the active tab inManageApplicationModalinstead of ejecting users to the dashboard. - Native Localized Date Pickers: Replaced plain-text date inputs with native HTML5
<input type="date">, rendering localized calendar pickers and clean, locale-neutral descriptions. - Workspace Tab Integration: Newly created applications and generated interview prep notes now open in dedicated workspace tabs (
getLeaf("tab")) rather than staying hidden behind the tracker. - Kanban Drop Deduplication: Dropping a card within its current column short-circuits immediately, preventing redundant status transitions and duplicate activity history entries.
- Smart Table Sorting: Table sorting by
Statusnow respects natural pipeline lifecycle order (Wishlist→Applied→Screening→Interviewing→Offer→Accepted), and sorting bySalarycompares parsed numeric values ($20ksorts before$150k).
♿ Visual Polish & Accessibility (WCAG 2.1 AA)
- Keyboard Menu Anchoring: Fixed context menus jumping to
(0, 0)when activated via keyboard (Enter/Space), correctly anchoring them below the focused button. - Accepted Indicator & Custom Status Fallback: Added missing green
.status-acceptedactivity dot and provided default styling for user-defined custom status badges. - Responsive Sankey Diagram in Sidebars: Added
min-width: 720pxto ensure the Sankey diagram remains crisp and triggers smooth horizontal scrolling when docked into narrow sidebars. - Light Theme Contrast: Optimized yellow ("Offer") and green ("Accepted") badges to meet WCAG AA contrast standards (>= 4.5:1) in light themes.
⚙️ Obsidian Compliance & Settings
- Configurable Pipeline Stages: Added a settings tab control allowing users to view, customize, reorder, and reset pipeline statuses with live dropdown updates.
- Workspace Leaf Preservation: Removed leaf detachment on
onunload(), ensuring custom leaf placement and docking arrangements are preserved when reloading or disabling the plugin. - Modern Settings API: Replaced deprecated
this.display()invocations with in-place dropdown updates.
What's Changed
- Release v1.1.0: Data integrity, UX enhancements, and accessibility polish by @cruisencode in #5
Full Changelog: 1.0.6...1.1.0
1.0.6
What's Changed
- Feature/sankey diagram layout opt by @cruisencode in #4
Full Changelog: 1.0.5...1.0.6
1.0.5
Release 1.0.5
This release addresses all findings from Round 2 of the plugin code review, including a critical indentation fix in updateApplicationDetails along with minor improvements across accessibility, UI states, settings handling, and theming.
🔴 Critical Fixes
- Indentation in
updateApplicationDetails: Corrected indentation on lines 472–481 inApplicationService.tsfrom 6 tabs to 5 tabs, ensuring the block matches its lexical scope.
🟡 Minor Improvements & Bug Fixes
- Tabbed Note Opening (m-1): Updated
openNote()to always open files in a tab (getLeaf("tab")), preventing active editor panes from being unexpectedly overwritten. - Mode Switcher Double-Trigger (m-2): Removed redundant
onkeydownlistener on native<button>elements that triggered duplicate renders on Enter/Space activation. - Search & Filter Empty State (m-3): Added empty state with a "Clear Filters" button when a search query or status filter returns no results while applications exist in the vault.
- File Input Cancel Reset (m-4): Properly reset attachment state if the file picker modal is opened and cancelled.
- Deep Settings Merge (m-5): Replaced shallow
Object.assigninloadSettings()with explicit, safe deep merging and defensive array copying forstatusesanddefaultSourceOptions. - Adaptive Theme Variables (m-6, m-7): Replaced hardcoded
rgba(0, 0, 0, ...)shadows with standard Obsidian CSS variables (--shadow-s,--shadow-l) and hardcoded badge colors withcolor-mix()theme variables. - Sankey SVG Accessibility (m-8): Added
role="img"andaria-labelattributes to the native Sankey SVG element. - Modal Tabs ARIA Semantics (m-9): Added
role="tablist"container semantics androle="tab",aria-selected, andtabindexto modal tab navigation buttons. - Funnel Progress Bar Styling (m-10): Added
.job-tracker-progress-fill.status-acceptedCSS class so "Accepted" applications render their fill color in the pipeline funnel.
Full Changelog: 1.0.4...1.0.5
1.0.4
Release 1.0.4
This release resolves the critical and major issues identified during the plugin code review, improving reliability, data integrity, and settings maintenance.
🔴 Critical Fixes
- Null-Safety for Application Commands (C-1): Standardized active application resolution across all application-specific commands (
edit-job-application,update-job-application-status,add-contact-to-application,add-interview-to-application,log-interview-outcome,manage-job-application,delete-job-application) using a unifiedwithActiveOrSelectedApplicationhelper. Eliminates command crashes when no tracked file is open, prevents modal flickering, and gives a helpful notice when no applications exist in the vault.
🟠 Major Fixes & Enhancements
- Required Field Validation in Edit Modal (M-1): Added validation checks preventing applications from being saved with empty
companyorrolefields, and automatically focuses the invalid field. - Dynamic Settings Rendering (M-2): Preserved
getSettingDefinitions()for Obsidian's settings API while refactoringdisplay()to dynamically consume the definitions array. Eliminated ~150 lines of duplicate code and resolved all TypeScript linter warnings. - Vault Event Listener Edge Cases (M-3): Handled edge cases in
deleteandrenamevault event listeners where metadata cache was cleared prior to deletion or where notes/folders were moved out of the tracker directory. - Resilient Markdown Body Sync with Fallbacks (M-4, M-5): Replaced brittle exact-match heading checks with flexible regular expressions (supporting custom heading levels, emojis, and formatting variations). Added fallback appending so notes with missing headings never silently drop updates or fall out of sync with frontmatter.
Full Changelog: 1.0.3...1.0.4
1.0.3
- Mobile Viewport Fix: Fixed an issue where the main dashboard extended beyond safe screen bounds on iOS and mobile devices.
- Focus & Navigation Improvements: Creating applications or scheduling interviews no longer steals focus or replaces the active tracker view when it is open in the main workspace.
- Funding Link: Added project
fundingUrlto the plugin manifest.
1.0.2
Initial release of the Job Application Tracker plugin for Obsidian.