Skip to content

feat: every application keeps its status history, and the list shows the last 6 months by default - #76

Merged
coderback merged 6 commits into
mainfrom
feat/status-history
Nov 3, 2026
Merged

coderback merged 6 commits into
mainfrom
feat/status-history

Conversation

@coderback

Copy link
Copy Markdown
Owner

Why

Applications only kept their current status, so there was no record of how one got there, and the Sankey chart (#3 in this stack) needs that path. The applied date was also unreliable: saving a note on an Applied card reset it to today.

What changed

  • Status history: a new status_history table logs each status change with its date and source (you, autopilot or email). Applications from before the log get what can be rebuilt from their applied date and emails, marked earlier.
  • Email dates: an email dates a change by when it arrived, not when it was read. Undoing an email's change takes it back out of the log.
  • Applied date: it's now the day the application was first applied. Saving a note or moving a card back to Applied keeps it. Applying again after moving a card back to Saved takes the new date.
  • Applications page: a range of 6 months (default), 1 year, 2 years or All, with a count of older applications not shown. The panel's timeline shows the history.

Testing

  • Backend: 1169 passed, 8 skipped, 46 browser tests deselected, run with the whole stack applied. An earlier run on the same code had 57 errors that didn't come back on re-run; they weren't captured, so the cause is unknown.
  • Frontend: type check, lint, build and all 20 browser tests pass. "the review shows where each answer" failed in two earlier full runs but passes alone, so it looks timing-related.

Merge order

First of three: this PR, then the Gmail backfill, then the Sankey chart.

…the last 6 months by default

Each status change is logged with when it happened and who made it (you, autopilot or an email); applications from
before the log get what can be rebuilt from their applied date and emails. The panel's timeline shows it. An undone
email takes its change back out of the log. Emails date a change by when they arrived, not when they were read.

The applied date is now the day it was first applied. Saving a note on an Applied card used to reset it to today.

The Applications page gains a range: 6 months (the default), 1 year, 2 years, All.
…ake a job alert for one

The Inbox can read 6 months, 1 year or 2 years back. It shows the count first, runs in the background with progress and
a stop button, and carries on where it stopped. An application is added only when an email shows it was made, marked
as from email, with its path rebuilt from its emails: being received or turned down is enough, while an interview, test
or offer also needs an applicant tracking system or a company already shown. Old emails fill in an application's history
without moving it back, and ask nothing of the user.

Job alerts and recommendations are now recognised by sender and subject, in the regular sync too, and never reach the
model: "Junior Application Software Engineer at X: up to £45K/year" matched only on its title. Real confirmations from the
same senders ("your application was sent to X") still count.
…wn interview invitation counts

The model took Indeed for the employer, or filled blanks with "Unknown". A job board's confirmation naming only the role
now goes under "Employer not named (via Indeed)", and an email naming no role adds the application as "Role not stated"
unless another of its emails names it. An interview from the employer's own address shows they applied, as a recruitment
agency's first approach doesn't.
The Applications page gains a third view, How they went: from Applied through Responded and Interview to Offer, Rejected,
No reply (nothing for 4 weeks), Still waiting or Closed by you, over 3 months to 2 years. It takes each application's path
from its status history, and it shows how many heard back. Hovering or focusing a flow gives its count, and the figures
are also there as a table. It says what it can't know: applications with no confirmation email, and steps by phone.
feat: a Sankey chart of how applications went
feat: read older job emails to fill in past applications, and never take a job alert for one
@coderback
coderback merged commit 4f53c70 into main Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant