CV Tailor: Local-first CV Tailoring with Optional AI
Job applications rarely need the same CV twice. CV Tailor is my take on that problem: a desktop-first app where you import a profile, paste or fetch a posting, review how well you match, and generate a role-specific CV — with optional AI, and with all data staying on your machine.
My Role
Solo project end to end — product, UI, domain model, desktop shell, release pipeline, and the Rust-side native layer for AI tools, PDF export, and backups.
What it does
- Manage profiles — import from files or URLs, edit experience, skills, and projects
- Track applications — one workspace per job, with a guided three-step flow
- Analyze job postings — extract keywords, requirements, and a short role summary
- Match scoring — compare your profile against the posting (draft or AI-powered)
- Generate tailored CVs — language-specific versions per application (English / German)
- Export to PDF — from the desktop app
- Back up & restore — local snapshots, JSON export/import, optional S3/MinIO cloud backup
- Auto-update — production builds check GitHub Releases for new versions
Product walkthrough
Step 1 — paste or import a job posting, set title, company, and role type
Step 2 — AI reviews the posting while match insights load
Match score, keywords, strengths, and gaps against your profile
Step 3 — pick a layout, edit the tailored summary and skills, preview the CV
Technical Challenges
A few parts took real care to get right:
- Local AI without API keys in the app — CV Tailor shells out to CLIs you already have (Claude Code, Codex, Cursor Agent) instead of shipping cloud credentials. That means solid process orchestration, parsing, and graceful fallbacks when no tool is installed.
- Desktop + web from one codebase — Tauri 2 for the native shell (SQLite, PDF, file import, updater), with a Vite React UI that also runs in the browser against a local HTTP bridge or a headless Rust gateway.
- Domain data that stays yours — profiles, applications, and CV runs live in local SQLite via TanStack DB. Backup/restore and optional MinIO sync had to preserve history without leaking credentials into backup JSON.
Tech Stack
- Frontend: React, TypeScript, TanStack Router, TanStack DB, shadcn/ui
- Desktop: Tauri 2 (Rust) — SQLite persistence, PDF export, file dialogs, updater
- AI: Local CLIs + shared Rust runtime in
cv-tailor-native; optional headless gateway - i18n: English and German UI from day one
Architecture (short version)
apps/web → React UI + Tauri shell
crates/native → Shared AI, backup, and gateway APIs
packages/core → Domain types, schemas, scoring
packages/db → TanStack DB collections + SQLite
packages/ai → Prompt builders and CLI output parsers
packages/ui → Shared shadcn components
Devices keep local SQLite. The gateway can run AI tools (and optionally serve the built web UI) when you want a browser client against a machine on your network.
Shipping
macOS and Windows installers are published on GitHub Releases, with signed auto-updates for production desktop builds. Builds are unsigned for Gatekeeper/SmartScreen — documented install workarounds ship with the README.
Conclusion
CV Tailor is the tool I wanted for my own applications: fast iteration per role, private by default, and AI only when it actually helps. Open source under MIT.
Source and downloads: github.com/Doderich/cv-tailor.



