A 100% free, open-source cover letter generator powered by local AI
Cover Letter Maker is a Next.js web application that generates personalized cover letters using AI. It runs entirely on your local machine with your own LLM - no API keys, no subscriptions, no data sent to external servers.
Simply provide job details and your resume, and the app will create a tailored, professional cover letter ready to copy and use.
- 🏠 100% Local & Private: Works with any OpenAI-compatible local LLM (Ollama, LM Studio, vLLM, etc.)
- 🔒 Privacy First: Your data never leaves your machine
- 📄 Smart Resume Parsing: Automatically extracts your profile information from PDF resumes
- 🤖 AI-Powered: Generates personalized, human-sounding cover letters
- 🌍 Multi-language Support: Supports 10 languages including English, German, French, Spanish, Chinese, and more
- 📋 Copy to Clipboard: Instantly copy your cover letter with one click
- ✏️ Fully Editable: Review and edit everything before copying
- ⚙️ Easy Configuration: Simple settings modal for LLM configuration with environment variable defaults
- 💾 Resume Caching: Upload your resume once, use it for multiple applications
- 🎨 Modern UI: Clean, responsive design built with Tailwind CSS
- Node.js 18+ and pnpm
- A local LLM server (see LLM Setup below)
- Clone the repository
git clone https://github.com/stanleyume/coverlettermaker.git
cd coverlettermaker- Install dependencies
pnpm install- Configure environment variables (optional)
cp env.example .envEdit .env to set default LLM settings:
LLM_BASE_URL=http://localhost:11434/v1
LLM_MODEL=llama3.2
LLM_API_KEY=ollama- Run the development server
pnpm dev- Open your browser
Navigate to http://localhost:3000
You need a local LLM server running with an OpenAI-compatible API. Choose one:
# Install Ollama from https://ollama.ai
# Pull a model
ollama pull llama3.2
# Ollama automatically runs on http://localhost:11434- Download LM Studio
- Download a model from the UI
- Start the local server (default:
http://localhost:1234)
pip install vllm
vllm serve <model-name> --api-key token-abc123
# Default endpoint: http://localhost:8000- LocalAI:
http://localhost:8080/v1 - text-generation-webui: With OpenAI extension enabled
- Any other OpenAI-compatible endpoint
- Enter the Job Title you're applying for
- Paste the Job Description
- Upload your Resume (PDF format) - it will be cached for future use
- Select your preferred Language for the cover letter
- Click Continue
The app automatically extracts your profile information from your resume.
- Review and edit the User Profile text
- Confirm or change the Language
- Click Continue to generate
The AI generates a personalized cover letter with:
- Your contact information at the top (name, location, email)
- Current date
- Company information
- Professional greeting and body
What you get:
- ✅ Personalized and specific to the company and position
- ✅ Natural, human-sounding language
- ✅ No clichés or generic AI phrases
- ✅ No placeholders - ready to use immediately
- ✅ Proper formatting with correct spacing
Actions:
- Edit the cover letter if needed
- Click Copy to Clipboard to copy the text
- Click Create New Letter to start another application
Click the settings icon (⚙️) in the top-right corner to configure:
- Base URL: Your LLM server endpoint (e.g.,
http://localhost:11434/v1) - Model Name: The model to use (e.g.,
llama3.2,mistral,qwen2.5) - API Key: Optional, use any value for Ollama
Settings are saved in your browser's localStorage.
Set defaults in .env file (optional):
# LLM Configuration
LLM_BASE_URL=http://localhost:11434/v1
LLM_MODEL=llama3.2
LLM_API_KEY=ollamaIf you leave the UI settings empty, the app will use these environment defaults.
- 🇬🇧 English
- 🇩🇪 German
- 🇫🇷 French
- 🇪🇸 Spanish
- 🇮🇹 Italian
- 🇵🇹 Portuguese
- 🇨🇳 Chinese
- 🇯🇵 Japanese
- 🇸🇦 Arabic
- 🇮🇳 Hindi
- Framework: Next.js 16 with React 19
- Styling: Tailwind CSS 4
- AI: Local LLM via OpenAI-compatible API
- PDF Parsing: pdf-parse
- Runtime: Node.js
# Build the application
pnpm build
# Start production server
pnpm startThe app will be available at http://localhost:3000
- Ensure your local LLM server is running
- Verify the base URL is correct in settings
- Check that the model name matches an available model
- For Ollama: Run
ollama listto see available models
- Ensure your resume is a valid PDF file
- Use PDFs with selectable text (not scanned images)
- Try re-uploading the resume
- Try a different model (recommended: llama3.2, mistral, qwen2.5)
- Ensure your resume has detailed information
- Provide a comprehensive job description
- Edit the extracted profile information before generating
- Check browser localStorage permissions
- Try clearing browser cache and re-entering settings
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the Sustainable Use License - see the LICENSE file for details.
- Built with Next.js
- Styled with Tailwind CSS
- Powered by local LLMs via OpenAI-compatible APIs
Looking for more features? Check out Cover Letter Maker Pro for the advanced version.
Made with ❤️ by Stanley Ume
⭐ Star this repo if you find it helpful!