A self-hosted CV builder. Create, manage, and export professional CVs from a clean web interface.
This repository uses a pull-based deployment strategy. The server checks for updates periodically.
-
Make script executable:
chmod +x ~/cv-forge/scripts/auto-deploy.sh -
Add Cron Job (
crontab -e):# Check for updates every 5 minutes */5 * * * * ~/cv-forge/scripts/auto-deploy.sh >> ~/deploy-cvforge.log 2>&1
- Structured CV editing — Fill in sections like LinkedIn (Personal info, Summary, Experience, Education, Skills, Languages, Certifications)
- Multiple CVs — Create and manage several CVs
- Job Application Tracking — Track applications (Applied, Interviewing, Offer, Rejected) with notes and salary
- Version control — Git-style snapshots with history and restore
- Export — PDF (clean one-column) and DOCX (editable in Google Docs/Word)
- JSON backup — Import/export your data
- Google SSO — Secure login with Google Authentication
- Dark mode — Light/dark theme with system preference detection
- Self-hosted — Your data stays on your machine
# Clone the repo
git clone https://github.com/cv-forge/cv-forge.git
cd cv-forge
# Build
make build
# Run
./cv-forgeOpen http://localhost:8080 in your browser.
The application requires Google SSO credentials for authentication.
-
Copy the example environment file:
cp .env.example .env
-
Edit
.envand set your credentials:GOOGLE_CLIENT_ID="your-client-id" GOOGLE_CLIENT_SECRET="your-client-secret" # Optional GOOGLE_REDIRECT_URL="http://localhost:8080/api/auth/google/callback" SESSION_SECRET="your-session-secret"
- Go 1.21+
- Node.js 18+
Usage: cv-forge [flags]
Flags:
-port int Port to listen on (default 8080)
-db string Path to SQLite database file (default ~/.cv-forge/data.db)
# Run in development mode (auto-reloads frontend)
make dev
# Clean build artifacts
make clean- Backend: Go, Chi router, SQLite (pure Go driver)
- Frontend: React, Vite, TypeScript
- Export: go-pdf/fpdf (PDF), Open XML (DOCX)
- Build: Vite, Make
MIT