Short Description:
AlignCV is a modern, full-stack web application that streamlines resume analysis, job matching, and cover letter generation using AI. It helps users optimize their job application materials and improve their chances of landing interviews.
Purpose:
The project aims to automate and enhance the job application process by providing actionable feedback on resumes, generating tailored cover letters, and matching users to relevant job postings using advanced AI and NLP techniques.
Tech Stack:
- Frontend: Next.js, React, Tailwind CSS, Zustand, Radix UI, Supabase Auth Helpers
- Backend: Node.js, Express, TypeScript, Supabase, Google Generative AI, Tesseract.js, Multer, Puppeteer, Handlebars
- Database: Supabase (PostgreSQL)
- Other: ESLint, TypeScript, PostCSS, Autoprefixer
Current Status:
🚧 MVP / Work in Progress
The project is under active development. Core features are functional, but expect rapid changes and improvements.
- Node.js (v18+ recommended)
- npm (v9+ recommended)
- Supabase project (for database and authentication)
- (Optional) Google Generative AI API key
-
Clone the repository:
git clone https://github.com/dangol-anish/AlignCV.git cd AlignCV -
Install dependencies for both client and server:
cd client npm install cd ../server npm install
Start the backend:
cd server
npm run devStart the frontend:
cd client
npm run devVisit http://localhost:3000 in your browser.
Backend (server/.env):
PORT- Port for the backend server (default: 3000)SUPABASE_URL- Your Supabase project URLSUPABASE_ANON_KEY- Supabase anon/public API key- (Optional)
GOOGLE_API_KEY- For Google Generative AI features
Frontend (client/.env):
NEXT_PUBLIC_API_URL- URL of the backend server (e.g.,http://localhost:3000)
# server/.env.example
PORT=3000
SUPABASE_URL=https://your-supabase-url.supabase.co
SUPABASE_ANON_KEY=your-supabase-anon-key
GOOGLE_API_KEY=your-google-api-key# client/.env.example
NEXT_PUBLIC_API_URL=http://localhost:3000Setup Instructions:
- Copy the example files and fill in your values:
cp server/.env.example server/.env cp client/.env.example client/.env
- Edit the
.envfiles with your credentials.
AlignCV/
client/
app/ # Next.js app directory (pages, API routes, UI)
components/ # Reusable React components
constants/ # Static data and config
lib/ # Client-side utilities and API helpers
public/ # Static assets (images, icons)
types/ # TypeScript type definitions
server/
api/ # Express API routes, controllers, middlewares
config/ # Configuration files (Supabase, etc.)
database/ # Database connection logic
loaders/ # App/server initialization
prompts/ # AI prompt templates
services/ # Business logic, AI, PDF/Docx generation
templates/ # Resume/Cover letter HTML templates
utils/ # Utility functions
Key Files:
client/app/api/- Next.js API routes (proxy to backend)server/api/routes/- Express API endpointsserver/services/- AI, resume parsing, scoring, and generation logic
- Resume Analysis: Upload a resume to receive AI-powered feedback, ATS scoring, and actionable improvements.
- Job Matching: Get matched to jobs based on your resume and preferences.
- Cover Letter Generation: Instantly generate tailored cover letters for job applications.
- Resume Templates: Download resumes in various formats (PDF, DOCX, HTML).
- User Authentication: Secure login/signup with Supabase Auth and Google OAuth.
- Upload Resume:
Go to the dashboard, upload your resume, and view analysis results. - Generate Cover Letter:
Select a job and generate a personalized cover letter in one click. - Job Matching:
View job matches and see how your resume aligns with each posting.
Note: No automated test framework is currently set up.
Manual testing is performed via API endpoints and the web UI.
curl -X POST http://localhost:3000/api/analyze \
-H "Authorization: Bearer <token>" \
-F "file=@/path/to/resume.pdf"- To add automated tests, consider integrating Jest (for backend) and React Testing Library (for frontend).
- Place backend tests in
server/tests/and frontend tests inclient/__tests__/.
- Fork the repository on GitHub.
- Clone your fork:
git clone https://github.com/dangol-anish/AlignCV.git
- Create a branch for your feature or fix:
git checkout -b feature/your-feature-name
- Commit your changes with clear messages.
- Push to your fork and open a Pull Request.
- TypeScript for both frontend and backend
- ESLint for linting (
npm run lint) - Prettier (recommended for formatting)
- Next.js and React best practices
- Reference related issues in your PR.
- Describe your changes clearly.
- Ensure your code passes linting and builds.
- Use clear, descriptive messages (e.g.,
fix: correct resume parsing bug,feat: add job matching endpoint).
License: ISC
(No explicit LICENSE file found. Please add one for clarity.)
- Maintainer: Anish Dangol
- GitHub: dangol-anish
- Email: dangol.anish001@gmail.com
Q: The backend won't start. What should I check?
A: Ensure your .env file is set up with valid Supabase credentials and the required ports are free.
Q: Resume upload fails with "Unsupported file type."
A: Only PDF, DOC, DOCX, PNG, and JPEG files are supported.
Q: I get "Unauthorized" errors.
A: Make sure you are logged in and sending the correct Authorization header.
Q: How do I reset my Supabase credentials?
A: Visit your Supabase dashboard and generate new API keys.
http://localhost:3000/api/
POST /api/analyze
Analyze a resume (file upload or byresume_id).
Auth: Required forresume_id, optional for file upload.
POST /api/job-matching
Match jobs to your resume. Auth required.GET /api/job-matching
List job matches for the user. Auth required.GET /api/job-matching/:id
Get details for a specific job match. Auth required.
POST /api/cover-letter/generate
Generate a cover letter. Auth required.GET /api/cover-letter
List cover letters. Auth required.GET /api/cover-letter/:id
Get a specific cover letter. Auth required.GET /api/cover-letter/:id/pdf
Download cover letter as PDF. Auth required.GET /api/cover-letter/:id/docx
Download cover letter as DOCX. Auth required.
GET /api/resumes
List all resumes for the user. Auth required.GET /api/resumes/:id
Get a specific resume. Auth required.GET /api/resumes/analyses
List all resume analyses. Auth required.GET /api/resumes/analyses/:id
Get a specific resume analysis. Auth required.POST /api/resumes/reference
Reference a resume for a feature. Auth required.
POST /api/upload
Upload a resume file. Auth required.POST /api/upload/save-edit
Save resume edits. Auth required.POST /api/upload/generate
Generate resume HTML.POST /api/upload/generate-pdf
Generate resume PDF.POST /api/upload/generate-docx
Generate resume DOCX.POST /api/upload/extract-template-data
Extract data for templates.
POST /api/auth/signin
Sign in.POST /api/auth/signup
Sign up.GET /api/auth/google
Start Google OAuth.GET /api/auth/google/callback
Google OAuth callback.
- Add automated tests (Jest, React Testing Library)
- Add more resume and cover letter templates
- Improve job matching algorithm
- Add user profile and settings
- Deploy to production (Vercel, Render, etc.)
For more information, please open an issue or contact the maintainer.