A modern, professional CV builder application built with Next.js, Material-UI, and @react-pdf/renderer. This application displays multiple CV variants and provides both print and PDF export functionality with ATS-friendly, searchable PDFs.
- Dual CV Profiles: Switch between different professional profiles (Frontend Engineer & Senior SDET/Full-Stack)
- Real PDF Export: Generate actual, searchable PDFs using @react-pdf/renderer (not image-based)
- Print Functionality: Clean print layout with optimized CSS for physical printing
- Professional Design: Modern UI with Material-UI components
- Static Site Generation: Optimized for GitHub Pages deployment
- TypeScript: Full type safety for better development experience
- Responsive Design: Works perfectly on all device sizes
- Framework: Next.js 15 with App Router
- Language: TypeScript
- UI Library: Material-UI (MUI)
- PDF Generation: @react-pdf/renderer
- Styling: MUI
- Deployment: GitHub Pages with GitHub Actions
src/
├── app/ # Next.js app directory
│ ├── layout.tsx # Root layout with print styles
│ └── page.tsx # Main application page
├── components/ # React components
│ ├── CVDisplay.tsx # Browser CV display (MUI)
│ ├── CVDocumentPDF.tsx # PDF template (@react-pdf/renderer)
│ └── CVHeader.tsx # Header with controls
├── data/ # CV data in JSON format
│ ├── cv-frontend.json # Frontend Engineer profile
│ └── cv-sdet.json # SDET/Full-Stack profile
└── types/ # TypeScript type definitions
└── cv.ts # CV data structure types
Unlike many solutions that convert HTML to images, this application uses @react-pdf/renderer to create actual, searchable PDFs. This requires maintaining two templates:
- Browser Template (
CVDisplay.tsx): Uses MUI components for web display - PDF Template (
CVDocumentPDF.tsx): Uses @react-pdf/renderer primitives for PDF generation
The application is configured for static export to work with GitHub Pages:
- Client-side only PDF generation to avoid SSR issues
- Optimized build configuration for static hosting
- Automatic deployment with GitHub Actions
- Node.js 18+
- npm, yarn, or pnpm
- Clone the repository:
git clone git@github.com:uixprt/nextjs-cv-builder.git
cd nextjs-cv-builder- Install dependencies:
npm install- Start the development server:
npm run dev- Open http://localhost:3000 in your browser
npm run buildThis creates an optimized static build in the out/ directory, ready for deployment.
CV data is stored in JSON format with the following structure:
interface CVData {
profile: string;
personalInfo: {
name: string;
location: string;
contact: {
phone: string;
email: string;
linkedin: string;
};
};
headline: string;
summary: string;
skills: {
[category: string]: string[];
};
experience: Experience[];
}- Create a new JSON file in
src/data/ - Follow the existing data structure
- Add the profile to the
profilesobject insrc/app/page.tsx - Update the profile selector in
CVHeader.tsx
- Browser styles: Edit MUI theme and component styles in the components
- PDF styles: Modify the StyleSheet in
CVDocumentPDF.tsx - Print styles: Update CSS in
src/app/layout.tsx
The project includes GitHub Actions workflow for automatic deployment to GitHub Pages:
- Push to the
mainbranch - GitHub Actions builds and deploys automatically
- Enable GitHub Pages in repository settings
- Set source to "GitHub Actions"
This application follows the engineering principle of "building the machine that builds the thing":
- Separation of Concerns: Display logic separated from data
- Maintainable Templates: Both web and PDF templates use the same data structure
- Type Safety: Full TypeScript coverage for reliable development
- Professional Output: ATS-friendly PDFs for job applications
This project is open source and available under the MIT License.
Contributions are welcome! Please feel free to submit a Pull Request.
Built with ❤️ by Asher Indursky
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.