AI-Powered ATS Resume Analyzer - Get your resume ATS-ready in seconds
ProfilePulse is a modern web application that analyzes resumes for ATS (Applicant Tracking System) compatibility. It helps job seekers optimize their resumes by providing detailed scoring, actionable feedback, and keyword recommendations to improve their chances of passing automated screening systems.
- Instant ATS Score - Get a comprehensive 0-100 score based on how ATS systems perceive your resume
- 5-Dimensional Analysis - Keywords, formatting, sections, impact, and readability scoring
- Smart Keyword Detection - Identifies 170+ technical skills, soft skills, and action verbs
- Section Validation - Checks for essential resume sections (Contact, Experience, Education, Skills)
- Actionable Improvements - Prioritized recommendations categorized by impact level
- Privacy-First - All processing happens locally; your resume data is never stored
- Dark Mode Support - Full theme switching for comfortable viewing
- Upload - Drag and drop your PDF resume or click to select
- Analyze - The system extracts text and runs comprehensive ATS analysis
- Review - View your score breakdown, improvements, and keyword suggestions
- Overall ATS compatibility score with visual ring indicator
- Category-by-category score breakdown
- Critical, important, and suggested improvements
- Found keywords grouped by category (technical, soft skills, action verbs)
- Suggested keywords to add
- Section checklist showing present/missing resume sections
- Format statistics (contact info, word count, metrics detection)
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.5 | React framework with App Router |
| React | 19.1 | UI library |
| TypeScript | 5 | Type safety |
| Tailwind CSS | 4 | Utility-first styling |
| Radix UI | Latest | Accessible component primitives |
| Lucide React | 0.556 | Icon library |
| React Hook Form | 7.68 | Form state management |
| Technology | Version | Purpose |
|---|---|---|
| tRPC | 11 | End-to-end type-safe APIs |
| TanStack Query | 5.90 | Server state management |
| Zod | 4.1 | Schema validation |
| pdf-parse | 1.1.1 | PDF text extraction |
| SuperJSON | 2.2 | JSON serialization |
| Tool | Version | Purpose |
|---|---|---|
| Biome | 2.2 | Linting and formatting |
| Turbopack | Built-in | Fast bundling |
profile-pulse/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/trpc/[trpc]/route.ts # tRPC API endpoint
│ │ ├── page.tsx # Home page
│ │ ├── layout.tsx # Root layout
│ │ └── globals.css # Global styles
│ │
│ ├── components/
│ │ ├── layout/
│ │ │ └── header.tsx # Navigation header
│ │ ├── resume-analyzer/ # Core feature components
│ │ │ ├── file-upload.tsx # Drag-drop upload
│ │ │ ├── analysis-results.tsx # Results container
│ │ │ ├── score-ring.tsx # Circular score display
│ │ │ ├── category-scores.tsx # Score breakdown
│ │ │ ├── improvements-list.tsx # Recommendations
│ │ │ ├── keywords-display.tsx # Keyword analysis
│ │ │ ├── sections-checklist.tsx# Section validation
│ │ │ └── format-stats.tsx # Document statistics
│ │ └── ui/ # Shadcn/Radix primitives
│ │
│ ├── server/
│ │ ├── trpc.ts # tRPC configuration
│ │ ├── routers/
│ │ │ ├── _app.ts # Main router
│ │ │ └── resume.ts # Resume analysis procedures
│ │ └── services/
│ │ ├── pdf-parser.ts # PDF text extraction
│ │ └── ats-analyzer.ts # Core analysis engine
│ │
│ ├── providers/
│ │ ├── trpc-provider.tsx # tRPC + React Query setup
│ │ └── theme-provider.tsx # Theme management
│ │
│ ├── lib/
│ │ ├── trpc.ts # tRPC client
│ │ └── utils.ts # Utility functions
│ │
│ └── hooks/
│ └── use-mobile.ts # Mobile detection hook
│
├── public/ # Static assets
├── package.json
├── tsconfig.json
├── next.config.ts
├── biome.json # Linting configuration
└── tailwind.config.ts
- Node.js 18.17 or later
- npm, yarn, pnpm, or bun
- Clone the repository
git clone https://github.com/anirban12d/profile-pulse.git
cd profile-pulse- Install dependencies
npm install
# or
yarn install
# or
pnpm install
# or
bun install- Run the development server
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev- Open in browser
Navigate to http://localhost:3000
| Command | Description |
|---|---|
npm run dev |
Start development server with Turbopack |
npm run build |
Create production build |
npm start |
Start production server |
npm run lint |
Run Biome linting |
npm run format |
Format code with Biome |
The ATS analyzer evaluates resumes across five dimensions:
-
Keyword Matching (25%) - Scans for technical skills, soft skills, action verbs, education terms, and metrics indicators from a database of 170+ keywords
-
Section Analysis (20%) - Detects essential sections (Contact, Experience, Education, Skills) and recommended sections (Summary, Projects, Certifications)
-
Format Analysis (20%) - Validates contact information (email, phone, LinkedIn, GitHub), document structure, and quantifiable achievements
-
Impact Scoring (20%) - Measures action verb usage, quantifiable metrics, and soft skill integration
-
Readability (15%) - Evaluates sentence length, document length, bullet point usage, and overall structure
| Score Range | Rating | Color |
|---|---|---|
| 80-100 | Excellent | Green |
| 60-79 | Good | Amber |
| 40-59 | Fair | Orange |
| 0-39 | Needs Work | Red |
ProfilePulse uses tRPC for end-to-end type safety between frontend and backend:
// Server-side procedure
export const resumeRouter = router({
analyze: publicProcedure
.input(z.object({
fileBase64: z.string(),
fileName: z.string(),
}))
.mutation(async ({ input }) => {
// Type-safe input validation with Zod
// Returns fully typed analysis results
}),
});
// Client-side usage - fully typed!
const mutation = trpc.resume.analyze.useMutation();- Modular Components - Each analysis section is a separate, reusable component
- Accessible UI - Built on Radix UI primitives for full accessibility support
- Responsive Design - Mobile-first approach with Tailwind CSS
- Resume data is processed entirely in-memory
- No database storage of resume content
- Files are converted to Base64 for transmission, then immediately discarded after analysis
The easiest way to deploy ProfilePulse is using the Vercel Platform:
ProfilePulse can be deployed to any platform that supports Next.js:
- Docker - Use the official Next.js Docker example
- AWS - Deploy with AWS Amplify or EC2
- Railway - One-click deployment
- Netlify - With Next.js runtime
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
- Shadcn/ui for the beautiful component system
- Radix UI for accessible primitives
- Vercel for the amazing Next.js framework
Built with Next.js, React, TypeScript, and tRPC