An AI-powered career copilot that turns a résumé and job description into practical, actionable feedback.
ResumeIQ helps candidates evaluate role fit, identify skill gaps, improve résumé bullets, practise interviews, and discover job opportunities—all from one full-stack web application.
Live demo: ResumeIQ on AWS Elastic Beanstalk
Demo access note: The current student/demo deployment uses an HTTP Elastic Beanstalk URL. If the demo does not open, check that your browser has not automatically changed
http://tohttps://in the address bar. HTTPS is a planned production upgrade; it requires additional infrastructure beyond this free-tier single-instance setup.
Applying for a role often means manually comparing a résumé with a long job description, guessing which skills matter most, and preparing for interviews without personalised feedback. ResumeIQ brings those steps together in one workflow.
- AI résumé analysis — match score, skill-gap analysis, rewritten bullets, and tailored interview questions.
- PDF résumé upload — extracts text from uploaded PDFs without keeping files on disk.
- AI mock interview — streamed coaching and feedback for interview responses.
- Job matching — searches current job listings through JSearch and ranks them against the user's résumé.
- Application tailoring — generates a focused pitch, improved bullets, keywords, and a cover-letter draft for a selected role.
- Authentication and privacy — OTP-based signup/login, JWT-backed sessions, per-user history, and server-side access guards.
- Profile and saved jobs — profile details, location-aware job search, avatar support, and bookmarks.
- Resilient AI integration — clear provider errors, retries for transient failures, timeouts, response recovery, and SQLite caching.
| Area | Technologies |
|---|---|
| Application | Node.js, Express, JavaScript (ES modules) |
| Frontend | HTML, CSS, vanilla JavaScript |
| AI | Google Gemini API |
| Job data | JSearch API via RapidAPI |
| Data | SQLite via Node's built-in node:sqlite |
| Authentication | bcrypt, JWT, HTTP-only cookies, email OTP |
| Deployment | Docker, AWS Elastic Beanstalk, Nginx |
flowchart LR
B["Browser"] --> E["Express application"]
E --> S[("SQLite")]
E --> G["Google Gemini API"]
E --> J["JSearch / RapidAPI"]
EB["AWS Elastic Beanstalk"] --> E
See architecture notes for the request flow and deployment context.
| Skill-gap feedback | AI mock interview |
|---|---|
| Skill gaps and bullet improvements | Mock interview questions |
| Job matches | Résumé tailoring |
|---|---|
| AI-ranked job matches | Tailored résumé recommendations |
Screenshots are cropped to exclude browser chrome, URLs, and account navigation. Continue to avoid committing real résumés, email addresses, OTPs, API keys, or other private application data.
- Node.js 22.5 or later
- A Google Gemini API key
- Optional: RapidAPI JSearch credentials for live job matching
- Optional: SMTP credentials for sending OTP emails (otherwise codes are printed in the server terminal during development)
git clone https://github.com/YOUR-USERNAME/resumeiq.git
cd resumeiq
npm install
cp .env.example .envUpdate .env with a strong JWT_SECRET and your GEMINI_API_KEY, then start the app:
npm start
Open http://localhost:8080.
To validate the Gemini configuration and list the models available to your key:
npm run check-ai
All supported configuration is documented in .env.example. Never commit a real .env file.
| Variable | Required | Purpose |
|---|---|---|
JWT_SECRET |
Yes | Signs user sessions; use a long random value. |
GEMINI_API_KEY |
Yes | Enables résumé analysis, interview feedback, and AI job-fit scoring. |
GEMINI_MODEL |
Yes | Gemini model to use; check availability with npm run check-ai. |
RAPIDAPI_KEY |
Optional | Enables live job matching through JSearch. |
SMTP_HOST, SMTP_USER, SMTP_PASS |
Optional | Sends OTP emails in non-development use. |
DB_PATH |
Optional | SQLite file location. |
This repository includes a Dockerfile, .ebextensions/, and Nginx timeout configuration for Elastic Beanstalk. Configure all secrets as Elastic Beanstalk environment properties instead of placing a .env file in the deployment bundle.
For the current SQLite-based demo deployment, set:
DB_PATH=/var/app/data/resumeiq.db
The provided setup preserves data across ordinary redeployments. For a production system, use a managed database such as PostgreSQL and enable HTTPS before handling real user data.
resumeiq/
├── public/ # Client pages, styles, and browser JavaScript
├── src/
│ ├── middleware/ # Authentication, uploads, validation, rate limits
│ ├── providers/ # Gemini, PDF, mail, and job-search integrations
│ └── routes/ # API endpoints
├── scripts/ # Gemini connectivity diagnostic
├── docs/ # Architecture and engineering notes
├── .ebextensions/ # Elastic Beanstalk data-directory setup
├── .platform/ # Nginx timeout configuration
├── .env.example # Safe configuration template
└── Dockerfile
.env, local databases, logs, dependencies, and editor files are excluded through.gitignore.- Real API keys, passwords, OTPs, and personal résumés should never be committed.
- Secrets should be set through environment variables in deployment platforms.
- The application uses HTTP-only session cookies; configure HTTPS and secure-cookie settings before a public production launch.
The project’s implementation decisions and resolved integration issues are recorded in engineering notes.
- Move persistence from SQLite to managed PostgreSQL.
- Add HTTPS with a custom domain, ACM, and CloudFront or a load balancer.
- Add automated tests and CI checks.
- Add an exportable analysis report and improved accessibility coverage.
- Krishna Sharma — Team Lead; project architecture, full-stack development, AI integration, AWS deployment, and repository preparation.
- Sarthak Singh Bisht — Testing, research, documentation, and creation of the project presentation, PRD, project note, project report, and concept note.
Released under the MIT License.