Skip to content

Tracking applications

Tailoring a CV for a job you never record is how job searches get lost. Every job you save becomes a Job Listing with an Application attached.

  • Paste a URL or the description text into the web app.
  • Pull from an ATS board — Greenhouse, Lever and Ashby expose public job boards; track a board and browse its listings in the app.
  • Capture what you are reading with the browser extension on LinkedIn or Indeed.
  • Save a link from your phone for later. It waits in To complete until you add its description (see below).

On save, Sumisura does some best-effort work: it resolves a salary range where the posting or public sources allow, infers how one applies (ATS form, email, referral), and downloads the company logo. Any of these can come back unresolved without blocking the save, and you can retry later.

Section titled “To complete: links saved from another device”

A job spotted in the LinkedIn or Indeed app on your phone doesn’t come with its description, only a link. Sumisura keeps such a link as a Pending Capture in the To complete inbox rather than as a half-empty Job Listing:

  • a public Greenhouse, Lever or Ashby link skips the inbox entirely: Sumisura reads the posting from the board’s public API and saves the Job Listing straight away, the same way Browse ATS Boards does. If that lookup fails (board gone, posting closed), the link waits in To complete as usual;
  • it has no Application or status and doesn’t count in your statistics;
  • sharing the same posting twice keeps one entry, and sharing a posting you already track tells you so instead of saving it again;
  • capturing the posting with the browser extension, or saving a Job Listing for the same link by hand, completes it automatically;
  • Complete asks for the pasted description, the company and the job title, then saves an ordinary Job Listing. Company and title are prefilled when the share mentioned them, and otherwise suggested from the description you paste (only empty fields are filled). The same form appears on the share screen right after sharing, so a job can be finished on the phone (details);
  • Dismiss drops a link you’ve lost interest in.

Share entry points send the link to POST /api/pending-captures as { "url": …, "text": …, "title": … }. Only one of url or text needs to contain the link. The response says what happened (outcome: pending, already-pending, already-tracked, or job-listing for an ATS link saved straight away) along with a ready-made message.

Each Application carries:

  • a status through a defined pipeline: saved → tailoring → sent → interviewing → offer, plus rejected and withdrawn
  • timestamped notes you can edit and delete
  • an optional follow-up date, set from the Job Listing page
  • a contact, which can be suggested for you and corrected by hand
  • every Generation produced for the job, with the model used and its cost
  • a freshness check: is the posting still live?

The Applications view groups everything by status, and floats stale applications — nothing has moved for two weeks — to the top of their group.

Export CSV on the Applications page downloads every application, archived ones too (an archived column tells them apart), as a CSV for a spreadsheet: company, title, location, status, saved and last-status-change dates, salary range with currency and source, application method, URL and number of Generations. Notes and contacts are never included, so the file holds no third parties’ personal data. Cells that start with =, +, - or @ get a leading apostrophe so the spreadsheet does not run them as formulas.

A follow-up date replaces that two-week rule for the application it is set on: it is flagged “Follow-up overdue” once the day has passed, in any status that is not final, and shows “Follow-up dd/mm” until then. Clear the date to go back to the two-week rule.

Add to calendar on the Applications page downloads the follow-up dates as an .ics file: one all-day event per open application (not rejected, withdrawn, an offer or archived), titled “Follow-up: role @ company”, with the status and a link to the Job Listing. Import it into any calendar app; nothing is sent to an outside service. Each event keeps the same UID, so importing again updates it. In LAN mode the download goes through the normal sign-in.

The Offers view lists every Application in the Offer status side by side: company, role, location, RAL Range and its source, the date the offer arrived (from the status history), and the latest Notes, with a link to the record. Sort by highest RAL or by offer date. A RAL Range in conflict shows both declared figures as they are; neither is picked.

Salaries in different currencies are never converted or ordered together: each currency gets its own group, and the page says they are not comparable. Offers with no single RAL figure (a conflict between currencies, or no figure at all) sit in a separate group. Nothing here calls Claude.

Generated CVs lists every CV this installation has produced, newest first. It reads two places at once:

  • Generations recorded against an Application, which carry the company, the job title, the language and the groundedness verdict
  • directories in output/ that no record mentions — a Default Mode run, or one driven by the tailor-cv skill. These are marked Not tracked, and their date is read from the directory name’s timestamp.

A Generation whose files have since been deleted stays on the list without working links: output/ is derived, safe to clear out, and the record is the thing worth keeping.

Delete files clears one Generation’s output/<slug>/ directory — the PDFs and the assembled JSON beside them. It never touches the record: a Generation tracked against an Application keeps its entry, with the cost, language and groundedness verdict you may need months later, and its row simply reports the files as missing. An untracked Generation has no record to keep, so its row goes away with the files. The page asks once before deleting, and nothing is recoverable afterwards — the files are removed, not moved to a trash folder.

The Search box on the Job Listings page finds a word in a listing’s title, company or Job Description, ignoring upper and lower case. It combines with the status, company, location, date and RAL filters and with the archived view; a blank search filters nothing.

Archive a Job Listing to get it out of the default view without deleting anything. Archived listings still count in your statistics and can be brought back.

data/jobs/, data/applications/ and data/pending-captures/ are gitignored flat files: they are about your job search, not your career history. Use Export in the app to download a zip of all three — that is the backup path, since git is deliberately not carrying them. To put a zip back, see Restoring an export.