A modern, responsive resume website built with Next.js 15 and React 19 that dynamically parses a PDF resume to generate a professional web presentation.
- Dynamic PDF Parsing: Automatically reads and extracts structured data from LinkedIn-exported PDF resumes
- Server-Side Rendering: Fast initial page loads with Next.js App Router
- Modern Tech Stack: Built with Next.js 15, React 19, TypeScript, and Tailwind CSS 4.0
- Responsive Design: Mobile-first design that looks great on all devices
- Dark Mode Support: Built-in dark mode with system preference detection
- Type Safety: Full TypeScript coverage with strict mode enabled
- Performance Optimized: Turbopack for fast builds and development
- Code Quality: Comprehensive ESLint configuration with security and accessibility rules
- Next.js 15 - React framework with App Router
- React 19 - Latest React with concurrent features
- TypeScript 5 - Type safety and enhanced developer experience
- Tailwind CSS 4.0 - Utility-first CSS framework
- Lucide React - Beautiful, customizable icons
- CSS Grid & Flexbox - Modern layout techniques
- pdf-parse - Server-side PDF text extraction
- Node.js Runtime - Required for PDF processing capabilities
- ESLint 9 - Code linting with flat config
- Prettier - Code formatting
- Husky - Git hooks for quality assurance
- Vitest - Fast unit testing framework
- TypeScript Strict Mode - Enhanced type checking
- Node.js 18.17+
- npm, yarn, pnpm, or bun
- A PDF resume (preferably LinkedIn-exported format)
git clone <repository-url>
cd Resume
npm installPlace your PDF resume at public/Profile.pdf. The parser is optimized for LinkedIn-exported resumes but can handle other formats.
npm run devOpen http://localhost:3000 to see your resume website.
npm run build
npm startnpm run dev- Start development server with Turbopacknpm run build- Build optimized production bundlenpm start- Start production server
npm run lint- Run ESLint checks (0 warnings policy)npm run lint:fix- Auto-fix linting issuesnpm run type-check- Run TypeScript type checkingnpm run validate- Run all checks (type-check + lint + tests)
npm run test- Run tests in watch modenpm run test:run- Run tests once and exitnpm run test:ui- Open Vitest UInpm run test:coverage- Generate test coverage report
npm run clean- Clear Next.js and build cachesnpm run clean:full- Full cleanup including coverage reports
src/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout with metadata
β βββ page.tsx # Main page (async, calls PDF parser)
βββ components/ # React components
β βββ About.tsx # About section with summary
β βββ Experience.tsx # Work experience timeline
β βββ Header.tsx # Navigation and contact info
β βββ Footer.tsx # Social links and download
βββ utils/ # Utility functions
β βββ resume-from-pdf.ts # Core PDF parsing logic
βββ types/ # TypeScript definitions
β βββ resume.ts # Resume data structures
βββ __tests__/ # Test files
βββ page.test.tsx # Basic page rendering tests
public/
βββ Profile.pdf # Your resume PDF (place here)
next.config.ts- Next.js configuration with PDF parsing setupeslint.config.mjs- Comprehensive ESLint rules for modern developmenttsconfig.json- TypeScript configuration with strict modetailwind.config.ts- Tailwind CSS 4.0 configurationvitest.config.mts- Test configuration with PDF mocking
The application uses a sophisticated PDF parsing system:
- Uses
pdf-parselibrary for raw text extraction - Handles various PDF encoding formats
- Preserves document structure and spacing
- Identifies resume sections (Contact, Summary, Experience, etc.)
- Uses pattern matching for section headers
- Handles variations in formatting
- Date-anchored parsing for work experience
- Extracts company names, roles, dates, and locations
- Parses project details and technology stacks
- Handles complex nested information
- Unicode normalization for consistent text
- Link extraction and validation
- Technology stack categorization
- Contact information formatting
The project uses Tailwind CSS 4.0 for styling. Key customization points:
- Colors: Modify the color palette in
tailwind.config.ts - Typography: Font stacks and sizing defined in global styles
- Components: Each component has its own styling in the respective
.tsxfile
To adapt the parser for different resume formats:
- Modify patterns in
src/utils/resume-from-pdf.ts - Update type definitions in
src/types/resume.ts - Adjust component rendering logic as needed
The resume data structure supports:
- Contact information with social links
- Professional summary with highlights
- Work experience with detailed project sections
- Technology stacks and skills
- Education and certifications
- TypeScript Strict Mode: All code must pass strict type checking
- ESLint Rules: Comprehensive rules covering security, accessibility, and code quality
- Zero Warnings Policy: Build fails if any ESLint warnings exist
- Testing: Unit tests for critical functionality
- Git Hooks: Pre-commit hooks ensure code quality
- Make changes in development mode (
npm run dev) - Run validation suite (
npm run validate) - Fix any issues before committing
- Test production build (
npm run build)
The easiest deployment option:
# Install Vercel CLI
npm i -g vercel
# Deploy
vercelThe application can be deployed on any platform supporting Node.js:
- Netlify: Add build command
npm run build - Railway: Supports Next.js out of the box
- Digital Ocean: Use App Platform with Node.js preset
- Ensure Node.js runtime is available for PDF parsing
- Upload your
Profile.pdfto thepublicdirectory - Set appropriate memory limits for PDF processing
- Content Security Policy: Configured for safe PDF processing
- Input Validation: PDF content is sanitized and validated
- Dependency Security: Regular security updates and vulnerability scanning
- TypeScript Safety: Prevents common runtime errors
The project features a robust testing infrastructure with comprehensive test coverage across multiple test suites:
- Vitest: Fast, modern testing framework with native TypeScript support
- React Testing Library: Component testing with user-centric approach
- jsdom: Browser environment simulation for DOM testing
- UI Utilities: Comprehensive testing of helper functions (
cn(),getDomain(), etc.) - Component Testing: Full coverage of React components with accessibility checks
- PDF Parser: Mocked PDF processing for consistent, fast test execution
- Error Boundaries: Robust error handling and recovery testing
- Integration Tests: End-to-end component interaction testing
- Isolated Test Runs: Proper cleanup between tests prevents interference
- Flexible Matchers: Regex-based text matching for complex DOM structures
- Multiple Element Handling: Smart queries for duplicate content scenarios
- Accessibility Testing: ARIA attributes and semantic structure validation
- Error Simulation: Comprehensive error boundary and failure case testing
src/__tests__/
βββ component tests/ # React component behavior
βββ utility tests/ # Pure function testing
βββ integration tests/ # Multi-component scenarios
βββ setup.ts # Global test configuration
βββ helpers/ # Shared testing utilities
- High Test Pass Rate: Comprehensive test coverage across all major components
- Zero Warning Policy: All tests must pass without warnings
- Consistent Patterns: Standardized testing approaches across components
- CI/CD Ready: Automated testing in continuous integration pipelines
- Turbopack: Fast development builds and hot reloading
- Static Generation: Pre-rendered pages for optimal performance
- Image Optimization: Built-in Next.js image optimization
- Bundle Analysis: Monitor and optimize bundle size
- Caching Strategy: Efficient caching for PDF parsing results
- Fork the repository
- Create a feature branch
- Make your changes
- Run the validation suite (
npm run validate) - Submit a pull request
This project is open source and available under the MIT License.
- Next.js Documentation - Next.js features and API
- React 19 Documentation - Latest React features
- Tailwind CSS - Utility-first CSS framework
- TypeScript Handbook - TypeScript guide