Resume AI is a local-first resume workspace that helps you:
- track job applications in a Kanban board
- generate and edit resumes for specific roles
- save multiple resume versions to an application card
- export the latest version as PDF or DOCX
The stack runs entirely in Docker Compose and supports three AI provider modes: local Ollama, Ollama Cloud, or any OpenAI-compatible endpoint.
- Docker and Docker Compose
- An AI provider (see AI Provider Setup below)
Copy .env.example to .env and fill in your provider details:
cp .env.example .envChoose one profile in .env:
| Profile | When to use |
|---|---|
ollama_cloud |
Dev-friendly — no local model download, uses Ollama Cloud API |
ollama |
Full privacy — runs models locally via ollama serve |
openai |
Any OpenAI-compatible endpoint |
docker compose up -d --build| Service | URL |
|---|---|
| Frontend | http://localhost:8080 |
| Node backend | http://localhost:5001 |
| Kanban API | http://localhost:8000 |
| MLflow UI | http://localhost:5002 |
Check the Kanban API health:
curl -s http://localhost:8000/health- Open the frontend at
http://localhost:8080. - Create or select an application card in the Kanban board.
- Open the Details → Resume tab.
- Paste the job description and optional profile notes.
- Generate a draft, edit it, save it to the card, then export it.
- Kanban board for job application tracking (CRUD, move cards, inline edit)
- AI-assisted board summaries, application tags, and next-step suggestions
- Resume generation with ATS hidden-content warnings
- Resume version history linked to application cards
- PDF and DOCX export through Pandoc
No local model download or GPU/RAM budget needed.
- Create an API key at
https://ollama.com/settings/keys. - In your
.env:
AI_PROVIDER=ollama_cloud
OLLAMA_API_KEY=your-key-here
MODEL_NAME=gemma3:4bModel tags are listed at https://ollama.com/library.
- Install Ollama and start it:
ollama serve
ollama pull gemma3:1b- In your
.env:
AI_PROVIDER=ollama
MODEL_NAME=gemma3:1bVerify Ollama is reachable from the host:
curl -s http://localhost:11434/api/tagsAI_PROVIDER=openai
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=your-key-here
MODEL_NAME=gpt-4o-miniBasic Kanban endpoints:
curl -s http://localhost:8000/kanban/boards
curl -s http://localhost:8000/kanban/boards/1/columns
curl -s http://localhost:8000/kanban/boards/1/applicationsCreate a resume linked to an application card:
curl -s -X POST http://localhost:8000/resumes \
-H 'Content-Type: application/json' \
-d '{
"application_id": 1,
"job_description": "...",
"input_profile": "...",
"markdown": "# My Resume..."
}'List saved resumes for a card:
curl -s http://localhost:8000/resumes/applications/1Export the latest saved resume:
curl -L -o resume.pdf "http://localhost:8000/resumes/applications/1/export?format=pdf"
curl -L -o resume.docx "http://localhost:8000/resumes/applications/1/export?format=docx"All variables are set in .env at the project root. Docker Compose reads it automatically.
| Variable | Default | Description |
|---|---|---|
AI_PROVIDER |
ollama |
ollama | ollama_cloud | openai |
MODEL_NAME |
gemma3:1b |
Model tag for the selected provider |
OLLAMA_BASE_URL |
http://host.docker.internal:11434 |
Local Ollama URL (provider: ollama) |
OLLAMA_API_KEY |
— | Ollama Cloud API key (provider: ollama_cloud) |
OLLAMA_CLOUD_BASE_URL |
https://ollama.com/v1 |
Ollama Cloud base URL |
OPENAI_BASE_URL |
— | OpenAI-compatible base URL (provider: openai) |
OPENAI_API_KEY |
— | API key for OpenAI-compatible provider |
DATABASE_URL |
postgres://appuser:apppass@postgres:5432/app_db | PostgreSQL connection string |
CORS_ORIGIN |
http://localhost:8080 |
Allowed frontend origin |
| Variable | Default | Description |
|---|---|---|
PORT |
5001 |
Server port |
LLM_URL |
http://host.docker.internal:11434/api/generate |
LLM endpoint |
MODEL_NAME |
gemma3:1b |
Model name |
OPENAI_API_KEY |
— | API key for OpenAI-compatible provider |
AI prompts live in kanban_api/app/prompts/ as Markdown files. Edit them directly to adjust tone, format, or instructions without touching Python code.
| File | Used by |
|---|---|
summarize_board.md |
POST /ai/summarize-board |
generate_resume.md |
POST /ai/generate-resume |
tag_application.md |
POST /ai/tag-application |
next_steps.md |
POST /ai/next-steps |
Generated resumes and related files are saved in the local ./output directory, which is mounted into the backend container. Pandoc is installed in the kanban_api container for PDF and DOCX export.