Home I Built a Job Tracker Because Spreadsheets Were Killing Me
Post
Cancel

I Built a Job Tracker Because Spreadsheets Were Killing Me

The Problem With Spreadsheets

At some point during a job search, everyone builds The Spreadsheet.

Company name. Role. Date applied. Status. Link. Maybe a notes column if you’re feeling optimistic.

It works for two weeks. Then it becomes twenty tabs, conflicting color codes, and a column named “Status2” because you forgot what “Status” was tracking.

There are many options of course, but with the current advent of “vibe coding”, I’d prefer to use my tokens to build myself local-only apps where my data isn’t stolen and where I have utter and absolute control over my app.


What I Built

still-not-hired is a desktop application for tracking job applications. Electron frontend, Vue 3, SQLite on the backend. All data stays local — nothing is sent anywhere.

It does what a spreadsheet does, but actually well.


Features

Application Tracking

Log applications with company, title, location, salary range, and status. Everything in one place, queryable, sortable, not a color-coded disaster.

Status Timeline

Track the full pipeline: Applied → Phone Screen → Interview → Offer / Rejected.

You stop losing track of where things are. You also stop telling yourself you “probably” heard back from that company when you absolutely did not.

Resume Manager

Store multiple resume versions with keyword profiles attached. Useful when you’re applying to roles that require slightly different positioning.

Keyword Matching

Paste a job description. See how your resume’s keyword profile compares.

It flags gaps. It won’t catch every niche term — the known issue is that the dictionary is predefined, so obscure domain-specific skills may not register unless they’re in a skill section or follow recognizable patterns. But it does catch the obvious misses.

Analytics Dashboard

Sankey diagrams, pie charts, time series. Rejection funnel. Application velocity. Where you’re losing interviews.

With enough data, the analytics are actually useful. The TF-IDF keyword analysis needs roughly 10+ saved job descriptions before the results stabilize — with fewer jobs, the frequency analysis gets noisy. That’s a known limitation worth being honest about.

Contact Management

Link contacts to applications. Track who you’ve talked to, when, and in what context.

Local Storage

SQLite. On your machine. No accounts, no sync, no cloud.


Download

Releases are available for all three platforms:

PlatformDownload
macOS.dmg installer or .zip
Windows.exe installer or portable .exe
Linux.AppImage or .deb

Get the latest release from the Releases page.

A note on warnings:

  • macOS will flag the app on first launch because it is not code-signed. Right-click → Open to bypass it.
  • Windows Defender may also flag the installer for the same reason — unsigned binary. It’s safe; it just hasn’t paid Apple or Microsoft for a certificate.

Build From Source

If you’d rather not trust a binary from a stranger on the internet:

1
2
3
4
git clone https://github.com/XhovaniM8/still-not-hired.git
cd still-not-hired
npm install
npm run electron:dev

Node.js 18+ required.


Known Limitations

Being honest about what this doesn’t do:

  • No PDF import. Resumes must be pasted as plain text or LaTeX. PDF parsing is not implemented.
  • Keyword extraction is manual. After pasting resume content, you have to click “Extract keywords from content.” It doesn’t auto-extract on save.
  • Keyword matching has a predefined dictionary. Skills outside the built-in list won’t be detected unless they’re in an explicit skill section or follow CamelCase/alphanumeric patterns.
  • Analytics require volume. Below ~10 saved jobs, the TF-IDF results aren’t reliable.

Why “still-not-hired”

The name is self-explanatory.

I built this during a job search. It’s now v1.0.0 and public. The job search is still ongoing. The irony is intentional.


Contributing

The repo is open source under MIT. If you want to contribute, read CONTRIBUTING.md before opening a PR.

Useful issues include:

  • PDF import
  • Automatic keyword extraction
  • Better dictionary coverage for niche domains

Tech Stack

LayerTechnology
FrontendVue 3, Pinia, Vue Router, Tailwind CSS
DesktopElectron
Databasebetter-sqlite3 (SQLite)
ChartsChart.js, D3.js, D3-Sankey
BuildVite, electron-builder

It’s free. It’s local. It’s better than a spreadsheet.

Download it or build it yourself.

This post is licensed under CC BY 4.0 by the author.