An intelligent web application that transforms your resume into tailored cover letters using AI, with seamless Google Docs and Drive integration for document management.
- πΈ OCR Resume Scanning - Upload resume as image or PDF and extract text automatically using Tesseract.js
- π€ AI-Powered Generation - Generate personalized cover letters using Google's Gemini AI
- π Google Docs Integration - Create and edit cover letters directly in Google Docs
- π Google Drive Organization - Automatic folder organization by company name
- π Search & Management - Search, list, and manage all your cover letters
- π₯ Easy Sharing - Share documents with recruiters directly from the app
βββββββββββββββββββββββββββββββββββββββ
β Resume to Cover Letter β
βββββββββββββββββββββββββββββββββββββββ€
β 1. Upload Resume (Image/PDF) β
β β β
β 2. OCR Extracts Text β
β β β
β 3. Enter Job Details β
β β β
β 4. AI Generates Cover Letter β
β β β
β 5. Save to Google Docs/Drive β
βββββββββββββββββββββββββββββββββββββββ
- Node.js - Server runtime
- Express.js - Web framework
- Google APIs - Docs & Drive integration
- Google Gemini AI - Cover letter generation
- JSON Web Token - Ready for authentication (future implementation)
- React.js - UI framework
- Tesseract.js - OCR functionality
- Axios - API communication
- Tailwind CSS - Styling
Before you begin, ensure you have:
- Node.js (v16 or higher)
- npm or yarn package manager
- Google Cloud Console account (You can request to add you a test user)
- Google Gemini API key
git clone https://github.com/yourusername/cover-letter-generator.git
cd cover-letter-generatorcd backend
npm installcd ../frontend
npm install- Go to Google Cloud Console
- Create a new project or select existing one
- Navigate to APIs & Services β Library
- Search and enable:
- Google Docs API
- Google Drive API
- Go to APIs & Services β Credentials
- Click Create Credentials β OAuth client ID
- Application type: Web application
- Add authorized redirect URIs:
http://localhost:5000/api/resume/auth/callback - Download and save the Client ID and Client Secret
- Visit Google AI Studio
- Click Get API Key
- Create new API key or use existing one
- Copy the API key
Create a .env file in the backend directory:
# Gemini AI API Key
GEMINI_API_KEY=your-gemini-api-key-here
# Server Port
PORT=5000
# Google OAuth Credentials
CLIENT_ID=your-client-id.apps.googleusercontent.com
CLIENT_SECRET=your-client-secret
REDIRECT_URIS=http://localhost:5000/api/resume/auth/callbackcd backend
node server.js
# Server will run on http://localhost:5000cd frontend
npm start
# Frontend will run on http://localhost:3000- Open the app at
http://localhost:3000 - Click "Authorize Google" button
- Sign in with your Google account
- Grant permissions for:
- Creating and managing Google Docs
- Organizing files in Google Drive
- You'll be redirected back with "Authorization successful!"
- A
token.jsonfile will be created in your backend folder (keep this secure!)
- Click "Upload Resume" button
- Select an image file (PNG, JPG) or PDF
- Wait for OCR to extract text
- Review and edit the extracted text if needed
- Job Title - Position you're applying for (e.g., "Frontend Developer")
- Company Name - Where you're applying (e.g., "Google")
- Job Description - Paste the job posting (optional but recommended)
- Click "Generate Cover Letter"
- AI will create a personalized cover letter
- Review and edit the content as needed
Choose how to save:
- Copy to Clipboard - Quick copy for pasting elsewhere
- Create Google Doc - Opens directly in Google Docs
- Save to Drive (Organized) - Saves with automatic folder organization
- Click "Show Saved Letters" to view all documents
- Use search to find specific cover letters
- Export to different formats (PDF, DOCX)
- Share directly with recruiters
- Delete unwanted documents
cover-letter-generator/
βββ backend/
β βββ controllers/
β β βββ aiController.js # Gemini AI integration
β β βββ googleDocsController.js # Google Docs operations
β β βββ googleDriveController.js # Google Drive operations
β βββ routes/
β β βββ resume.js # API routes
β βββ server.js # Express server
β βββ .env # Environment variables
β βββ token.json # Google OAuth token (auto-generated)
β βββ package.json
β
βββ frontend/
β βββ src/
β β βββ components/
β β β βββ CoverLetterGenerator.jsx # Main component
β β βββ App.js
β β βββ index.js
β βββ package.json
β
βββ README.md
Solution:
- Check that redirect URI in
.envmatches exactly in Google Console:http://localhost:5000/api/resume/auth/callback - No trailing slashes, exact match required
- Wait 5 minutes after updating in Google Console
Solution:
- Delete
token.jsonif it exists - Click "Authorize Google" again
- Complete the authorization flow
Solution:
- Ensure image is clear and high resolution
- Try PNG format instead of JPG
- Make sure text is horizontal and well-lit
- Check browser console for errors
Solution:
- Verify Google Drive API is enabled in Cloud Console
- Delete
token.jsonand re-authorize - Check that Drive scopes are included in authorization
Solution:
- Verify Gemini API key is correct in
.env - Check API quota limits
- Ensure all required fields are filled
The application is currently configured for local development. For production deployment, you'll need to:
- Set up MongoDB for user data persistence (replacing local token.json)
- Implement JWT authentication for multi-user support
- Update OAuth redirect URIs in Google Console
- Deploy backend to services like Render, Railway, or Heroku
- Deploy frontend to Vercel or Netlify
Note: Full deployment guide with authentication will be added in the next release.
- OAuth token stored locally in
token.json - Single-user setup (one Google account)
- Suitable for personal use or development
- Never commit
.envortoken.jsonto Git - Keep your API keys secure and private
- Regenerate tokens if accidentally exposed
- Use environment variables for all sensitive data
- Implement proper user authentication
- Store tokens in encrypted database
- Use HTTPS for all connections
- Add rate limiting and input validation
- JWT authentication for multi-user support
- MongoDB integration for data persistence
- LinkedIn profile import
- Multiple language support
- Resume builder feature
- Email integration for direct sending
- Batch processing for multiple applications
- AI-powered job matching
- Interview preparation tools
- Mobile app version
This project is licensed under the MIT License - see the LICENSE file for details.
- Google Gemini AI for intelligent content generation
- Google Docs & Drive APIs for document management
- Tesseract.js for OCR functionality
- React community for excellent documentation
For issues or questions:
- Open an issue on GitHub
This tool is for personal use and assistance in creating cover letters. Always review and customize the generated content to ensure it accurately represents your experience and matches your voice.