SkillSync
An AI-powered resume analysis and optimization platform that helps job seekers tailor their resumes to specific job descriptions using OpenAI GPT-4o, with PDF processing, categorized improvement suggestions, and persistent analysis history.
Demo
Overview
SkillSync is a full-stack web application that uses OpenAI's GPT-4o to analyze resumes against job descriptions and provide actionable, categorized suggestions for improvement.
Users upload their resume as a PDF and paste a target job description. The platform extracts the resume text with pdf.js-extract, sends it alongside the job description to GPT-4o, and returns structured feedback across multiple categories: keyword gaps, bullet point updates, section additions, section removals, and wording improvements.
All analyses are persisted in a Supabase PostgreSQL database with Row Level Security, so users can revisit past results. Authentication is handled via Supabase Auth with httpOnly cookie sessions managed by the Express backend.
Note: If you're interested in testing out the live site, please send me a message — the Supabase database and Render hosting services spin down after extended periods of inactivity and may need a moment to wake up.
The Problem
- Job seekers often submit generic resumes that don't align with specific job description requirements, leading to lower ATS scores and fewer callbacks
- Manually comparing a resume to a job description is tedious and it's easy to miss critical keyword gaps or outdated phrasing
- Existing resume tools provide surface-level feedback without actionable, categorized suggestions tied to the actual target role
The Solution
- Integrated OpenAI GPT-4o with a structured prompt that returns categorized suggestions (keyword gaps, bullet updates, section changes, wording improvements) as parseable JSON
- Built a PDF processing pipeline using pdf.js-extract on the backend to reliably convert uploaded resumes into plain text for AI analysis
- Implemented persistent analysis history with Supabase PostgreSQL and Row Level Security so each user can only access their own data
- Created a polished React frontend with TailwindCSS that presents suggestions in an organized, easy-to-act-on format with expandable detail sections
Technical Implementation
GPT-4o Integration & Structured Prompting
The Express backend sends the extracted resume text and job description to OpenAI's GPT-4o API with a carefully engineered prompt that enforces JSON output. The response is parsed into five suggestion categories: keyword_gaps, bullet_updates, section_additions, section_removals, and wording_improvements — each with specific, actionable items.
PDF Processing Pipeline
Resume PDFs are uploaded via Multer, then processed server-side using pdf.js-extract to convert the document into structured text. This approach handles multi-page resumes and various PDF formats reliably without requiring client-side processing.
Supabase Auth with httpOnly Cookies
Authentication uses Supabase Auth on the backend with httpOnly cookie sessions rather than storing tokens in localStorage. The Express server manages sign-up, login, logout, and session refresh endpoints, providing a more secure auth flow.
Row Level Security (RLS)
The Supabase PostgreSQL database uses Row Level Security policies so that each user can only read and write their own analysis records. This is enforced at the database level, not just the application layer.
React Frontend with Vite
The client is a React 18 app bundled with Vite for fast HMR and builds. React Router v6 handles client-side routing between the upload page, results view, and analysis history. TailwindCSS provides the styling system.
Next Project
The Bike Bazaararrow_forward