Dossier: Self-Hosted Job Search With a Resume for Every Role
By Indie Kings | October 29, 2026
Updated October 29, 2026: AienTech/dossier reached version 1.9.2 on October 27, 2026, after passing 2,700 stars with two contributors. It is a self-hosted job search application that keeps one career profile in PostgreSQL, tailors a resume and cover letter for each posting, and tracks every application from draft to offer, with a stated rule that drafts only use facts already in your profile.
Image: a blank job application form, via Wikimedia Commons.
One profile, many documents
Job hunting produces a strange kind of duplicate work. The same experience gets rewritten for every employer, the same cover letter gets adjusted by hand, and the record of what was sent to whom lives in a spreadsheet that is out of date the moment it is saved. Dossier's answer is to make the profile the single source and treat each resume as a rendering of it. Basics, skills, languages, experience, projects, education, publications and references are entered once, ordered the way you want, and reused everywhere.
The documents are the visible output. There are twelve resume themes plus a theme builder, previewed live and printed to PDF on the server by Chromium. Each application gets a tailored resume and a cover letter written in a tone you choose, and every part of the letter can be edited, including the sender block, date, recipient, greeting and sign-off, in the language the letter is written in. That last detail is the difference between a template and a tool: most generators treat the cover letter as a blob, and hiring managers notice when the salutation is in the wrong language.
What surrounds the writing is a pipeline. Postings can be searched near your city through JSearch, which covers LinkedIn and Indeed among others, or Adzuna, saved, dismissed, scored against the profile, and turned into an application with one click. A startup section pulls YC companies' job posts and Hacker News' monthly who is hiring thread, filters them by location or remote eligibility, and ranks them. There is a board and a table of every application, a funnel chart for 30 days, 90 days or all time, a weekly chart, upcoming interviews and a calendar.
Never invents experience
The README's strongest claim is also the easiest to test: drafts only use facts from your profile, and what a posting asks for that you do not have is shown as a gap rather than invented. Anyone who has used a general purpose chatbot for cover letters knows the failure mode. It fills in a plausible year of experience, a skill you mentioned once in passing, or a metric that sounds right. That is not a stylistic problem. It is a misrepresentation that can end an application, and in some fields it is a firing offense.
Constraining a model to a profile is a retrieval and prompting problem rather than a model problem, and the design choices around it are visible in the interface. The match view shows how the profile lines up with the posting's requirements, which makes the gap explicit before a word is generated. The refine step is a chat, but it operates on a document with tracked versions, so an AI rewrite can be undone or rolled back to any earlier state. Private notes stay private. The system is built to be audited, which is the correct posture for a tool that writes claims about your career.
The job agent is optional and deliberately weak on purpose. Once a day it runs one search, skips what you have seen, scores new postings against the profile and keeps the best on an Agent screen with its reasons. It can prepare tailored drafts, but they wait for review, and it never sends or applies. That restraint is the right call: an agent that applies on your behalf is a liability, and an agent that queues work for you to approve is a convenience. The same principle shows up in the Gmail integration, where replies are read and answers are drafted but nothing is sent without confirmation.
Docker, models and the privacy trade
The install path assumes Docker and about 2 GB of free memory. Fetch the production compose file, generate a Postgres password and a secret, hash your password with the included command, then start the stack. The first run downloads roughly 1.7 gigabytes and initializes the database, and the app is reachable only from localhost until you put it behind a proxy. On Apple Silicon there is an extra override because the image is built for x86, which is a small friction that the README handles explicitly rather than leaving users to discover.
Model choice is the privacy decision. Dossier can talk to a local model through Ollama or LM Studio, in which case the profile and documents stay on your hardware, or to any OpenAI compatible API, Anthropic or Mistral, in which case the text it writes leaves the machine and the provider's terms apply. The README links a dedicated privacy page that spells out what goes where. For a document containing your employment history, salary context and contact details, that distinction is the whole ballgame, and it is good that the project treats it as a first class setting rather than a footnote.
The optional connectors extend the footprint. The Claude connector lets Claude search jobs, score them, read the profile and save drafts, and it never sends or deletes anything. Gmail and Calendar integration can send an application from your own address with the PDFs attached, surface employer replies next to the application, draft answers from the profile, propose interview times and keep both directions of the calendar in sync. Each one requires your own OAuth client, which keeps the data path under your control but adds setup work that the wiki documents step by step.
The limitations are stated rather than hidden. It is desktop only, not designed for phones. It is single user, one password and one profile, with no accounts. The interface is English, though documents can be written in 21 built in languages. And only one instance may run per database, because the nightly backups, the AI job queue and the PDF browser live inside the application process. Those constraints describe a tool for one person on a small server, which is exactly the audience the README names.
Project card
| Item | Detail |
|---|---|
| Repository | AienTech/dossier on GitHub |
| What it is | Self-hosted job search, resume tailoring and application tracker |
| Latest release | v1.9.2, October 27, 2026 |
| Stack | Next.js 16, PostgreSQL 18, Chromium for PDF rendering |
| License | AGPL-3.0 |
| Deployment | Docker Compose, about 1.7 GB image, 2 vCPU and 2 GB recommended |
| Models | Local through Ollama or LM Studio, or hosted OpenAI compatible, Anthropic, Mistral |
| Job sources | JSearch, Adzuna, YC startup posts, Hacker News who is hiring |
| Documents | Twelve resume themes, tailored cover letters, 21 document languages |
| Scale | 2,700 stars, 2 contributors, AGPL-3.0, desktop only, single user |
FAQ
What is Dossier?
A self-hosted web application that stores one career profile, generates a tailored resume and cover letter for each job, and tracks applications through a board.
Does it send applications for me?
No. It can prepare an email and attach the PDFs, but nothing is sent without your confirmation, and the optional job agent never applies.
Can it invent experience I do not have?
The project states that drafts only use facts from your profile and that missing requirements are shown as gaps. As with any model output, check before sending.
Can I keep everything local?
Yes, if you connect a local model through Ollama or LM Studio. Hosted providers receive the text they write from, and the privacy page documents the details.
Does it work on a phone?
No. It is built for a laptop or desktop browser, and the README lists this as a known limitation.
How much does it cost to run?
The software is free under AGPL-3.0. You pay for the server and, if you use a hosted model, for the API calls.
Bottom Line
Dossier is the rare AI job tool that treats restraint as a feature. The profile is the source of truth, the gaps are shown instead of filled, the agent queues work rather than acting, and the connectors draft without sending. The engineering is more serious than the two contributor count suggests: measured PDF renders in a quarter second, sub-100 millisecond interactions and a documented memory ceiling are the kind of numbers that come from profiling rather than hoping. The trade is setup effort and a desktop only, single user design. For anyone applying to many roles who wants their history to stay on their own server, it is the most complete option available.
Sources
- GitHub AienTech/dossier README, feature list, install steps, limitations and performance measurements, accessed October 29, 2026
- GitHub API metadata and latest release for AienTech/dossier, stars, contributors, v1.9.2, accessed October 29, 2026
- dossier.aien.me and the project wiki pages on privacy, providers and connectors, accessed October 29, 2026
Related: Filee: A Drag and Drop Converter for 266 Formats With No Uploads | SteamOS 3.9: Valve Ships Plasma 6.7 and Linux 7.2 to Everyone