A fully static, GitHub-powered resume website builder. This project allows you to create, edit, and manage your resume content through a web interface, storing data in JSON files and leveraging GitHub Actions for updates and deployment.
- Static Site Generation: Built with Next.js for a fast, secure, and easily deployable static website.
- Data-Driven: Resume content (About, Experience, Education, Projects, Certifications, Organizations) is managed via JSON files in
src/data
. - In-Browser Editor: A dedicated
/editor
route provides a user-friendly interface to modify resume content. Drafts are saved locally usinglocalStorage
. - Live Preview: The main
/
route displays the formatted resume based on the current data. - ATS-Friendly PDF Export: Includes a script (
scripts/generate-ats-resume.ts
) to generate a simplified Markdown and PDF version suitable for Applicant Tracking Systems (ATS), outputting to thepublic/
directory. - GitHub Workflow: Edits made in the editor can be downloaded as a
.zip
archive. Submitting this archive via a GitHub Pull Request triggers GitHub Actions to update the content, rebuild the site, and regenerate the PDF.
- Framework: Next.js (v15+) with React (v19+)
- Language: TypeScript
- Styling: Tailwind CSS (v4) & shadcn/ui
- State Management: React Context API (
ResumeContext.tsx
) - UI Enhancements:
- React Joyride for the welcome tour.
- Data Storage: JSON files & Browser
localStorage
- PDF Generation: markdown-it & Puppeteer
- Testing: Jest & React Testing Library
- Clone the repository:
git clone <your-repository-url> cd resume
- Install dependencies:
npm install
- Run the development server:
Open http://localhost:3000 to view the main resume page. Open http://localhost:3000/editor to access the editor.
npm run dev
npm run dev
: Starts the Next.js development server with Turbopack for faster refresh times and improved development experience. Access the site at http://localhost:3000.npm run build
: Builds the application for production, generating optimized static files ready for deployment.npm run start
: Starts the production server using the built files. Requires runningnpm run build
first.npm run lint
: Lints the codebase using ESLint to identify and fix code style issues and potential errors in JavaScript, JSX, TypeScript, and TSX files.npm run typecheck
: Checks TypeScript types across the project without emitting compiled files, ensuring type safety.npm run test
: Runs Jest tests to verify code functionality and prevent regressions.npm run test:watch
: Runs Jest tests in watch mode, automatically re-running tests when files change.npm run test:coverage
: Runs Jest tests and generates a coverage report to identify untested code.npm run pdf
: Generates an ATS-friendly PDF resume using the scripts inscripts/generate-ats-md.ts
andscripts/generate-ats-pdf.ts
. The output is saved topublic/asts/cv-ats.pdf
.npm run og
: Generates an OpenGraph image for social media sharing using the script inscripts/generate-og-image.ts
. The output is saved topublic/og/resume-og.png
.
.github/workflows/
: GitHub Actions workflows for CI/CDapply-updates.yml
: Processes ZIP files in the updates directorybuild-static.yml
: Builds and deploys the static site to GitHub Pagesgenerate-ats-cv.yml
: Generates ATS-friendly resume versionsgenerate-og-image.yml
: Creates OpenGraph image for social sharingyearly-update.yml
: Automatically triggers rebuild on January 1st
public/
: Static assets and generated filesscripts/
: Utility scripts for PDF generationsrc/
: Source codeapp/
: Next.js app router componentscomponents/
: Reusable UI componentscontexts/
: React context providersdata/
: JSON data files for resume contenthooks/
: Custom React hookslib/
: Utility functionsservices/
: Business logic and data storage servicestypes/
: TypeScript type definitions
updates/
: Directory for ZIP files containing resume updates
- Navigate to the
/editor
page on your deployed site or local development server. - Make desired changes to the resume sections using the inline editing forms. Upload new images if needed.
- Click the "Download Changes" button to get a
.zip
archive containing the updated JSON data and any new images. - Commit and push this
.zip
file to the/updates
directory in your GitHub repository (typically via a Pull Request). - GitHub Actions will automatically:
- Detect the new
.zip
file - Extract its contents
- Update the corresponding JSON files and images
- Delete the processed
.zip
- Rebuild the Next.js site
- Generate ATS-friendly versions (Markdown and PDF)
- Deploy to GitHub Pages
- Detect the new
This project uses several GitHub Actions workflows to automate the resume update and deployment process:
- Trigger: Push to master, pull requests, or manual dispatch
- Purpose: Processes ZIP files uploaded to the
/updates
directory - Actions:
- Extracts JSON data and images from ZIP files
- Updates the corresponding files in the repository
- Validates JSON files for correctness
- Removes processed ZIP files
- Commits and pushes changes
- Trigger: After Apply Resume Updates workflow completes, or manual dispatch
- Purpose: Builds and deploys the static Next.js site to GitHub Pages
- Actions:
- Runs linting, type checking, and tests
- Triggers ATS CV generation
- Configures base path for GitHub Pages deployment
- Builds the static site with Next.js
- Deploys to GitHub Pages
- Trigger: Called by other workflows or manual dispatch
- Purpose: Creates ATS-friendly versions of the resume
- Actions:
- Checks for changes in JSON data files
- Generates Markdown version of the resume
- Creates PDF version
- Commits and pushes the generated files
- Trigger: Called by other workflows or manual dispatch
- Purpose: Creates OpenGraph image for social media sharing
- Actions:
- Checks for changes in JSON data files
- Generates a PNG image using Puppeteer
- Commits and pushes the generated image
- Trigger: Scheduled to run at 00:05 on January 1st, or manual dispatch
- Purpose: Ensures the resume is rebuilt at the start of each year to update relative dates
- Actions:
- Triggers the Build Static workflow