---
title: "Deploy dossier"
description: "Self-hosted AI job search: CVs, cover letters, applications"
category: "AI/ML"
url: https://railway.com/deploy/dossier-1
---

# Deploy dossier

Self-hosted AI job search: CVs, cover letters, applications

**[Deploy dossier on Railway](https://railway.com/template/dossier-1)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/dossier-1/manifest.json

- **Creator:** Sethumadhavan K's Projects
- **Category:** AI/ML

## Template content

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### dossier

- **Image:** ghcr.io/aientech/dossier:v1.14.0
- **Start command:** `sh -c 'case "$DOSSIER_PASSWORD" in argon2id:*) ;; *) hash=$(printf "%s\n" "${DOSSIER_LOGIN_PASSWORD:-$DOSSIER_PASSWORD}" | hash-password) && export DOSSIER_PASSWORD="$hash" ;; esac && exec ./start.sh'`
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host Dossier on Railway

[Dossier](https://dossier.aien.me/) is a self-hosted job search workspace: one career profile, AI-tailored resumes and cover letters written only from facts in your profile, and every application tracked from draft to offer. Your data stays in your own PostgreSQL database, with the AI model you choose.

## About Hosting Dossier

This template deploys the official Dossier image with a private Postgres 18 service and a volume at `/data` for nightly backups and generated PDFs. A start command hashes the plain `DOSSIER_LOGIN_PASSWORD` into the argon2id `DOSSIER_PASSWORD` Dossier expects (or keeps a precomputed `argon2id:` hash if you set one). Generate a public domain on the Dossier service so HTTPS sign-in and optional Google/MCP redirects resolve correctly. Give the app enough memory for Chromium PDF rendering (about 1 GB).

## Common Use Cases

- Keep one private career profile and export tailored resumes and cover letters as PDFs
- Paste a job posting, see profile gaps (without invented experience), and track applications on a board
- Search postings and score them with your AI provider; optional daily job agent for review-only drafts

## Dependencies for Dossier Hosting

- Postgres 18 — profile, applications, and drafts
- Persistent volume — `/data` for nightly backups and download zips
- Public HTTPS domain — required for sign-in and `DOSSIER_PUBLIC_URL`
- Login password — auto-generated `DOSSIER_LOGIN_PASSWORD`; save it after deploy
- AI provider (optional at deploy) — set in Settings or via `DOSSIER_AI_*` for tailored drafts

### Deployment Dependencies

- [Dossier](https://dossier.aien.me/) — product site
- [AienTech/dossier](https://github.com/AienTech/dossier) — source (AGPL-3.0)
- Image — `ghcr.io/aientech/dossier:v1.14.0`
- [Environment variables](https://github.com/AienTech/dossier/wiki/Environment-variables)
- [Choosing an AI provider](https://github.com/AienTech/dossier/wiki/Choosing-an-AI-provider)
- [Installation wiki](https://github.com/AienTech/dossier/wiki)

### Implementation Details

| Service | Role |
| --- | --- |
| dossier | Web UI and API; health at `/api/health`; volume `/data` |
| postgres | Private Postgres 18 (`dossier` / `dossier`) |

**First login**

1. After deploy, open the **dossier** service Variables tab and copy `DOSSIER_LOGIN_PASSWORD`.
2. Generate a Railway domain on **dossier** if one is not already attached.
3. Open the public URL and sign in with that password (single-user; no accounts).
4. In **Settings → AI provider**, pick a hosted model (or OpenAI-compatible URL) and add a key — or set `DOSSIER_AI_PROVIDER` / `DOSSIER_AI_KEY` / `DOSSIER_AI_MODEL` as variables and redeploy.
5. Import or build your profile, then paste a posting to create an application.

**Password:** leave `DOSSIER_PASSWORD` empty so the start command hashes `DOSSIER_LOGIN_PASSWORD` on each boot. To use a precomputed hash instead, set `DOSSIER_PASSWORD` to the `argon2id:…` line from `docker run --rm -it ghcr.io/aientech/dossier hash-password`. Changing either signs existing sessions out.

**Sizing:** PDF printing uses bundled Chromium; plan for roughly 1 GB RAM on the app service. Nightly backups run at 03:00 in `TZ` and are kept for `DOSSIER_BACKUP_RETENTION_DAYS` (default 14).

**Volume writes:** `RAILWAY_RUN_UID=0` so the process can write to the mounted `/data` volume (the upstream image runs as `node`, which cannot create `/data/backups` on a root-owned mount). `PORT=3000` keeps the public domain aligned with the container listen port.

**Optional:** Google Gmail/Calendar via `DOSSIER_GOOGLE_CLIENT_ID` / `DOSSIER_GOOGLE_CLIENT_SECRET` or Settings → Google. Job sources (JSearch, Adzuna, FreeHire) via Settings or the `DOSSIER_JOBS_*` / key variables. Telemetry defaults to `off`.

## Why Deploy Dossier on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Dossier on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [Weaviate](https://railway.com/deploy/weaviate-1) — Vector database with hybrid search and an API key-protected API
- [Möbius Personal AI OS](https://railway.com/deploy/mobius-v01-personal-ai-os) — Self-hosted AI agent that builds and runs apps for you, with memory.

Open this page in a browser: https://railway.com/deploy/dossier-1
