Repository navigation
Dossier 1.12.0
Your own resume sections, sections in the order you want, resumes that stay as you sent them, certifications and volunteering, cards in the order you want on the board, skills in your order, a base resume that fits one page, a level in Find jobs, a score before you apply, a Usage screen with the tokens each kind of AI work used, and SQLite as an alternative to PostgreSQL. Fixes for PDFs that other viewers and job portals read wrongly, for OpenAI's newest models, for the Gmail check giving up when Google asks it to slow down, for mail linked to the wrong application, for impossible dates in the calendar's address, for the arrows in drop-down menus, and for text that took a long time to read.
What's new
- A desktop app for Windows and Linux: download it from this release, under Assets. On this computer runs Dossier inside the app, with your data in one file on your computer: no server, no Docker and no password. On my server opens the Dossier you host, in a window of its own. It doesn't update itself: when a new version is out, the sidebar says so, and you install it over the old one. The app isn't signed yet, so Windows asks before it runs it the first time. Gmail and Calendar don't work On this computer yet, and there's no version for macOS yet. See Desktop app in the wiki.
- Your own sections: Profile → + Add a section makes a section of your own, such as Awards, Courses, Talks or Interests. Give it a name and pick how it looks: Entries like a role, with a title, dates and bullets; Lines like a publication, free text with a link; or Inline like skills, all on one line. You fill it in on its own page there, and delete it there too, with Undo. You can switch its format later and your profile keeps everything; drafts that have the section get its text again in the new format, which replaces any edits you made to it there. These sections go on resumes word for word: the AI reads them, without their links, but never rewrites them, and a tailored resume gives them Edit and Leave out only. When a resume has to be shortened to fit its pages, they go first. Headings print as you wrote them, so they aren't translated. Replacing your profile from a resume keeps these sections, since a resume can't bring them back.
- Sections in your order: on the Profile page, drag any section to where you want it, or use the arrows. Skills can come first, for example. That's the order your resumes start with, and each heading on a resume now has its own row: Summary, Languages and Volunteering have their own pages. Base resume → Sections shows the same order next to the preview, and its Remove takes a section off your resumes and keeps what's in it, and the AI doesn't read it for new applications. With a sidebar theme, Skills and Languages stay in the sidebar, and so do Inline sections. Your resumes look the same until you move something; the Profile page's list follows them, so Skills starts further down than it used to.
- Sections per resume: an application's Sections menu, next to the theme, reorders and removes sections for that one resume, and can rename a heading on it, say "Experience" to "Relevant experience". It also lists what your profile has that this resume hasn't, to Add. Drafts follow the base resume's order until you give them their own, but a section you make later never appears on an existing resume by itself.
- A resume you've sent stays as you sent it: until now, a sent resume still changed with your profile: deleting a role took it off, and renaming one renamed it. Now, the first time an application moves past Draft (Declined doesn't count), it keeps its own copy of your profile, theme, paper size and date format, so the resume and cover letter stay as they were, on the page and in the PDF. A role you delete from your profile stays in that copy until you delete the application. You can still edit it, reorder it, change its theme or add a section yourself. Moving it back to Draft keeps it that way; undoing the send with Undo doesn't. Your photo is the exception: a new one shows on sent resumes too. When you do want your profile's changes on a sent resume, such as a corrected job title, Update from profile in its Sections menu brings in titles, dates, contact details and new items in the sections it has. The text on the resume stays, nothing leaves it, and Undo puts it back. Drafts have the button too, for new items.
- Certifications (#42): a certificate was entered under Education, where it got lost among degrees. Profile → Certifications is a section of its own, after Education: each one has its name, who issued it, when you got it, when it runs out (or not), a credential ID and a link to verify it, and Show on resumes. Resumes list them after Education with the issuer and date, "Valid until …", the credential ID and the link, clickable in the PDF. They go on every resume as you wrote them: the AI never renames, rewrites or leaves one out, and a tailored resume gives them Edit and Leave out only. The AI reads their names, issuers and dates, never the link or credential ID. Importing a resume reads certificates into Certifications now, and Education is for degrees and courses. Certificates you already entered under Education stay there until you move them. Thanks to @Shredder5262 for asking for it.
- Volunteering (#44): volunteering could only go in Experience, where it read as a paid job. Profile → Volunteering has a page of its own, and Move to Volunteering takes a role there from Experience. Resumes show it under its own Volunteering heading, after Experience, and tailoring words it for each posting like your roles. It doesn't count towards your years of experience, which scoring and the match use, or towards Profile strength. When a resume has to be shortened to fit its pages, volunteering goes first. Open source already has its place under Projects. Thanks to @caveman210 for asking for it.
- Cards in your order (#60): each column on the board was sorted by last update, so editing an application moved it to the top. Now you can drag a card up or down within its column, or use Move up and Move down in its ⋯ menu, and it stays there when you edit it. Reordering doesn't change a card's Updated date. A column you've never reordered stays newest first. A new application, or a card moved in from another column, goes on top; Undo on a move puts the card back in its place. While you're searching or have archived cards hidden, the cards you can't see keep their places. The table sorts as before. Thanks to @jithinzac for asking for it and to @akshatshahh, who built it.
- Skills in your order (#62): skills came on resumes in the order you added them, so one you thought of later came last. In Profile → Skills, drag a skill within its list, or use Move left and Move right in its menu, and resumes follow. Once you've set your own order, tailored resumes keep it too, leaving out what doesn't help, instead of putting the most relevant first; Most relevant first goes back to that. Thanks to @beeglebug for asking for it.
- Fit to one page (#69): a profile that ran a few lines over a page gave a two-page base resume, and only a theme's density or deleting things from your profile could help. Fit to one page on the Base resume screen tightens the page margins and the gaps first, then the line height, then the type, never below 9.25 points, until the resume fits, and the PDF does the same. When it still runs over at its tightest, the screen says so. Off, nothing changes. Thanks to @Guts1005 for asking for it.
- A level in Find jobs (#59): a search found every level, and only reading each posting told you it wanted eight years. Find jobs and the job agent's search have a Level: internship, entry level, mid level, senior, or lead or director. JSearch and the Bundesagentur are told as far as they can filter, and whatever the source, Dossier reads each posting's title and the years it asks for and leaves out the ones clearly for another level; a posting that doesn't say stays. Searches from before have no level, as before. Thanks to @jain-arihant-2002 for asking for it.
- Score a posting before applying (#66): New application showed how you match the requirements, but not the score Find jobs and the job agent give. Score it, under the match, scores the pasted posting the same way, with the scorer from Settings → Scoring: the band, why it fits and what gives pause, so you can decide before anything is written. The score isn't kept. Thanks to @suleman1412 for asking for it.
- ARM processors (#77): the image was built for Intel and AMD processors only, so on an ARM server it didn't start ("exec format error"), and Apple Silicon Macs ran it under emulation. It's now built for
arm64too, and Docker picks the right one by itself. Thanks to @jreed1701 for reporting it. - Usage: a new Usage screen in the sidebar shows every kind of AI work Dossier does and the tokens it used: requests, input, output and total, for the last 30 or 90 days or all time, the biggest first. The counts are the ones your AI server reports with each answer, the numbers providers bill by, including retries and answers that ended in an error. A server that sends no count shows Not reported; Dossier doesn't estimate, and shows no prices. Scoring with Jev and connection checks have their own rows. Only the counts are kept, with the task, provider, model and time, never what was asked or answered; Delete everything clears them, and exports leave them out.
- SQLite instead of PostgreSQL (#17): Dossier can keep its data in a single file, so it runs as one container without a database server. Set
DATABASE_URL=file:/data/dossier.dband run the image on its own with a volume on/data, as the README shows; without that volume the data would go with the next upgrade, and the container says so when it starts. Everything works the same, and Settings → About says which database it is. PostgreSQL stays the choice for a shared server, and nothing changes for it; to move between the two, export in Settings → Your data and import on the other. To back up the file, stop the container and copy it. Thanks to @armond-avanes for asking for it and to @niludev, who built it.
Fixes
- "The AI provider ran into a problem" with OpenAI's gpt-6-luna (#51): Test connection, and any task whose thinking left no room for the answer, failed with that message. OpenAI's newest models refuse an answer that doesn't fit instead of sending it cut off, and Dossier only made room after a cut-off answer. It now asks once more with 12,000 tokens more, and gives that model the room from then on; if it still doesn't fit, it says the answer was cut off. Thanks to @anamgajith for reporting it.
- Impossible dates in the calendar's address (#49): a date like
?date=2026-02-30rolled over into March. It now falls back to today. Thanks to @pqminh27, who sent the fix. - Arrows in drop-down menus (#46): the arrow sat much closer to the edge than the text. Every drop-down menu now has its own arrow, inset as far as its text. Thanks to @prabhakarrai17, who sent the fix.
- The Gmail check stopping at "Google refused that" (#68): Gmail refuses a few requests out of a long run with a 403 for its per-user rate limit, and Dossier took every 403 for a missing permission and gave up the whole check, with its progress. It now tells the two apart: when Google asks it to slow down, or has a problem of its own, it asks again after a pause, up to three times, and a message it still can't read is left for the next check while the rest are read, which Settings → Google and Check now say. A 403 for a missing permission still stops the check. Thanks to @alyhussaini for reporting it.
- Mail linked to the wrong application (#65): a mail from a company's address, or with its name, was linked to your application at that company whatever it was about, so a rejection for another role you'd applied to outside Dossier landed on your application there, with Move to Rejected on offer. When the AI reads a mail that was linked by the company's domain or name only, it now also says whether the mail is clearly about something else, another position or no application at all. Such a mail is unlinked, with the rest of its thread, and waits under Needs a look without a suggested status. Mail in a thread Dossier wrote in stays linked. Thanks to @themechbro for reporting it.
- PDFs read wrongly by other viewers and job portals (#64, #67): text copied from a PDF came out backwards, and a local PDF viewer or a portal's parser showed or read it in the wrong case ("ThE tExT lOoKs LiKe ThIs"), while browsers showed it fine. The theme fonts were variable fonts, which Chromium's PDF printer can't embed: it drew every glyph as a Type 3 outline instead, and other viewers made what they could of it. Every font now ships as static faces at the weights documents use, and PDFs embed them as ordinary TrueType text, which every viewer and parser reads as it is; they're also about four times smaller. The documents look the same. Thanks to @AubreyHM and @Shredder5262 for reporting it.
- Wrong passwords keeping you out: anyone who could reach the sign-in page could keep everyone out, including you with the right password, by sending wrong ones from several addresses, and wrong passwords sent all at once were each checked, past the limit. Now a browser you've signed in with before, even if you signed out since, isn't held up by wrong passwords from elsewhere: only browsers that never signed in wait, and the message says how to get in. Restarting Dossier ends that wait too. Every attempt counts before its password is checked, so attempts sent at once stop at the limit like the rest.
- Gmail drafts taken for sent mail: a reply you'd left in Gmail's Drafts showed up in the application's conversation as if you'd sent it, with another copy each time Gmail saved it. Drafts are now left out, like spam and promotions. Thanks to @armamini, who sent the fix.
- Mail linked by part of a word: replies were linked to a company whose name appeared anywhere in the sender or subject, so a company called "Vita" got "Interview invitation" and "Rapp" got "Your application". A company's name now has to be there as whole words, or written as one word, as in NorthwindLogistics or northwindlogistics.com. Thanks to @armamini, who sent the fix.
- Backups after a night off: a nightly backup the server or computer was off for now runs soon after Dossier starts, once the last one is over a day old. The inbox check also runs a minute after a start, instead of a whole interval later.
- Slow text: a specially written posting could hold up the inbox check for over ten seconds, and checking a model's answer against the posting for over fifteen. Both now take milliseconds. An address with two @ signs is no longer taken for an email address.
For contributors
CONTRIBUTING.md now asks for a new feature to start as an issue: a pull request that adds one needs an issue where it was discussed and its path agreed. Bug fixes still come straight as pull requests, one change each, on top of main.
Upgrading
Take a backup, then deploy ghcr.io/aientech/dossier:v1.12.0 (see Upgrading in the wiki). On its first start, Dossier adds the tables for certifications, your own sections and usage, makes room for each card's place on the board, and marks every role in Experience as a paid one. It also keeps a copy for each application you've already sent, with your profile as it is at that moment, so changes you make from then on don't reach them; changes you made before the upgrade already have. Nothing else changes in your data or configuration. Usage counts from the upgrade on. On an Apple Silicon Mac, delete the compose.override.yml that set platform: linux/amd64, if you made one, so Docker runs the image without emulation.
Exports now include certifications, which roles are volunteering, your own sections, what sent applications were sent with, and the order of your board, so a 1.12.0 export can't be imported into an older version. Exports from older versions import as before, without certifications or sections of your own, with every role paid and every board column newest first, and their sent applications keep a copy of the profile you imported.