Skip to content

Repository files navigation

ProfilePulse

AI-Powered ATS Resume Analyzer - Get your resume ATS-ready in seconds

Next.js React TypeScript tRPC Tailwind CSS


Overview

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.

Key Features

  • 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

Demo

Upload & Analysis Flow

  1. Upload - Drag and drop your PDF resume or click to select
  2. Analyze - The system extracts text and runs comprehensive ATS analysis
  3. Review - View your score breakdown, improvements, and keyword suggestions

Analysis Results Include

  • 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)

Tech Stack

Frontend

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

Backend

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

Development Tools

Tool Version Purpose
Biome 2.2 Linting and formatting
Turbopack Built-in Fast bundling

Project Structure

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

Getting Started

Prerequisites

  • Node.js 18.17 or later
  • npm, yarn, pnpm, or bun

Installation

  1. Clone the repository
git clone https://github.com/anirban12d/profile-pulse.git
cd profile-pulse
  1. Install dependencies
npm install
# or
yarn install
# or
pnpm install
# or
bun install
  1. Run the development server
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
  1. Open in browser

Navigate to http://localhost:3000

Available Scripts

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

How It Works

Analysis Engine

The ATS analyzer evaluates resumes across five dimensions:

  1. Keyword Matching (25%) - Scans for technical skills, soft skills, action verbs, education terms, and metrics indicators from a database of 170+ keywords

  2. Section Analysis (20%) - Detects essential sections (Contact, Experience, Education, Skills) and recommended sections (Summary, Projects, Certifications)

  3. Format Analysis (20%) - Validates contact information (email, phone, LinkedIn, GitHub), document structure, and quantifiable achievements

  4. Impact Scoring (20%) - Measures action verb usage, quantifiable metrics, and soft skill integration

  5. Readability (15%) - Evaluates sentence length, document length, bullet point usage, and overall structure

Score Interpretation

Score Range Rating Color
80-100 Excellent Green
60-79 Good Amber
40-59 Fair Orange
0-39 Needs Work Red

Architecture Highlights

Type-Safe API Layer

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();

Component Architecture

  • 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

Privacy by Design

  • 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

Deployment

Deploy on Vercel

The easiest way to deploy ProfilePulse is using the Vercel Platform:

Deploy with Vercel

Other Platforms

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

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is open source and available under the MIT License.


Acknowledgments

  • 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

About

Analyze your resume for ATS compatibility

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages