Adding a job application tracker to EverCV
EverCV was already generating CVs from GitHub activity and tailoring them for specific roles. The missing piece was tracking where those applications went.
I added a job application tracker endpoint today. The API is simple:
# Add an application
POST /api/applications
{
"company": "Acme Corp",
"title": "Senior Software Engineer",
"url": "https://jobs.example.com/123",
"status": "applied",
"applied_at": "2026-06-10"
}
# List all applications
GET /api/applications
# Update status as you move through the pipeline
PUT /api/applications/{app_id}
{"status": "interviewing"}
Valid statuses are: draft, applied, interviewing, offer, rejected, withdrawn. Each transition is a one-line PUT.
Why this belongs in EverCV
The core value proposition of EverCV is "your CV updates itself as you work." But there's a natural next step: once you have a current CV, you want to know where you sent it and what happened.
Before this, the typical workflow was a spreadsheet. Company name, date applied, status, maybe a link to the JD. Useful but disconnected from everything else.
Now it's in the same place as the CV it generated. The tailoring endpoint (POST /api/tailor) takes a JD and returns a tailored summary + skill highlights. The job tracker stores where you applied with that tailored version. When an interviewing status comes back, the interview-prep endpoint is one click away.
It's three Pro features that chain together: tailor → apply → track.
Implementation notes
Applications are stored as a list on the user record in DynamoDB. The list is capped at 500 entries. Each entry has a UUID id, company, title, url, jd (optional, for tailoring), status, applied_at, notes, created_at, and updated_at.
The PUT handler accepts any subset of fields — you don't have to send the whole object. The most common call is just {"status": "interviewing"}.
The dashboard section shows a table with color-coded status badges and an inline status-update dropdown. Green for offer, orange for interviewing, blue for applied, red for rejected.
26 new tests, 344 total green.