A sleek, modern resume website built with Next.js 16, React 19.2, TypeScript, and Tailwind CSS 4 beta. Perfect for creating a professional online presence with comprehensive resume data, speaking engagements, publications, and portfolio showcasing.
- π± Fully Responsive: Optimized for desktop, tablet, and mobile devices
- β‘ Lightning Fast: Built with Next.js 16 and Turbopack for optimal performance
- π¨ Modern Design: Clean, professional design optimized for readability and ATS compatibility
- π Data-Driven: Centralized content management with TypeScript interfaces
- π SEO Optimized: Comprehensive meta tags, Open Graph, Twitter Cards, and JSON-LD structured data
- π Easy Deployment: Automated GitHub Pages deployment with GitHub Actions
- βΏ Accessible: Built with accessibility best practices
- π PDF Download: Direct resume PDF download capability
- Framework: Next.js 16 with App Router
- Frontend: React 19.2, TypeScript
- Styling: Tailwind CSS 4 beta, shadcn/ui components
- Build Tool: Turbopack (Next.js 16 fast refresh)
- Deployment: GitHub Pages with GitHub Actions
- Code Quality: ESLint, Prettier, Husky + lint-staged
git clone https://github.com/schwannden/resume.git
cd resumeOR click the "Use this template" button on GitHub to create your own copy.
npm installEdit resume.config.ts in the root directory with your information:
export const siteConfig = {
name: "Your Name",
title: "Your Professional Title",
tagline: "Your tagline",
location: "Your Location",
description: "Your professional bio...",
url: "https://yourdomain.com", // Your deployment URL
social: {
email: "you@example.com",
linkedin: "https://linkedin.com/in/yourprofile",
github: "https://github.com/yourusername",
blog: "https://yourblog.com",
},
seo: {
keywords: ["Your", "Keywords", "Here"],
// ... see resume.config.ts for all options
},
// ... see resume.config.ts for complete configuration options
}Why this file first? This single file controls all site metadata, SEO, analytics, and deployment settings.
Edit src/data/resume.ts with your professional information:
export const resumeData: ResumeData = {
name: "Your Name", // Should match config
email: "you@example.com", // Should match config
linkedin: "https://linkedin.com/in/yourprofile", // Should match config
title: "Your Professional Title",
summary: "Your professional summary...",
experience: [
// Your work experience
],
skills: [
// Your technical skills
],
// ... rest of your resume data
}For analytics and other services, create .env.local:
cp .env.example .env.localEdit .env.local:
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # Your Google Analytics IDnpm run devVisit http://localhost:3000 to see your resume website.
npm run buildBefore deploying your resume site, make sure you've updated:
-
resume.config.ts- Your name, title, location, tagline -
resume.config.ts- URLs: site URL (your deployment URL) -
resume.config.ts- Social media links (LinkedIn, GitHub, email, blog) -
resume.config.ts- SEO keywords for your field -
src/data/resume.ts- All resume content (experience, skills, education, etc.) -
public/preview.png- Your social sharing image (1200x630px recommended) -
public/resume.pdf- Your PDF resume (optional but recommended)
-
resume.config.ts- Description and short description for SEO -
resume.config.ts- Structured data (current organization, expertise areas) -
.env.local- Google Analytics ID (if you want analytics) -
public/favicon.png- Your favicon (optional)
-
resume.config.ts- Enable/disable features (dark mode, PDF download, etc.) -
tailwind.config.ts- Brand colors and typography -
src/components/- Customize component styles
Primary Configuration File - This is the FIRST file you should customize.
Contains:
- Personal Information: Name, title, location, tagline
- Site Branding: Description, short description for SEO
- URLs: Website, social media links (LinkedIn, GitHub, blog, etc.)
- SEO Settings: Keywords, Open Graph images, Twitter cards
- Analytics: Google Analytics configuration
- Features: Enable/disable dark mode, PDF download, speaking page, etc.
- Deployment: Base path and asset prefix for GitHub Pages
- Structured Data: Current organization, expertise areas, featured works
All metadata, structured data, and social links are generated from this single file.
Content File - Update this with your professional information after configuring the site.
Contains:
- Basic Info: Name, email, LinkedIn (should match config)
- Experience: Work history with detailed responsibilities
- Skills: Technical skills organized by categories with badge variants
- Projects: Featured projects with technologies and links
- Publications: Papers, articles, blog posts, certifications
- Speaking: Talks, workshops, conferences with materials
- Education: Academic background and activities
- Volunteer: Community involvement and contributions
- Open Source: GitHub and community contributions
For sensitive data that shouldn't be in Git:
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # Google Analytics (optional)See .env.example for all available variables.
The project uses Tailwind CSS 4 beta with custom design tokens:
- Colors: Modify theme colors in
tailwind.config.ts - Typography: Update font families and sizes
- CSS Variables: Edit
src/app/globals.cssfor theme colors - Components: Customize UI components in
src/components/ui/
- Add new interface to
src/data/resume.ts - Create data array for the new section
- Build a new component in
src/components/sections/ - Import and render in
src/app/page.tsx
Perfect for: Personal resume sites
- Fork this repository to your GitHub account
- Update
resume.config.tsandsrc/data/resume.tswith your information - Enable GitHub Pages in Settings β Pages
- Select "GitHub Actions" as the source
- Push to main branch - automatic deployment!
Your site will be at: https://yourusername.github.io/resume
For subdirectory deployment (e.g., username.github.io/resume):
- Uncomment
basePathandassetPrefixinresume.config.ts - Or set environment variables:
NEXT_PUBLIC_BASE_PATH=/resume
Custom domain:
- Add
CNAMEfile to/public/with your domain - Update
resume.config.tsurl to your custom domain - Configure DNS A/CNAME records with your provider
- Enable custom domain in GitHub Pages settings
Perfect for: Fast deployment with preview links
- Push your repo to GitHub
- Import to Vercel (vercel.com/new)
- Add environment variables if needed (
NEXT_PUBLIC_GA_ID) - Deploy!
Perfect for: Easy custom domain setup
- Push your repo to GitHub
- Import to Netlify (netlify.com)
- Build command:
npm run build - Publish directory:
out - Deploy!
npm run build
# Upload contents of 'out/' directory to your hostWorks with: AWS S3, Azure Static Sites, Cloudflare Pages, DigitalOcean, etc.
Make sure all required fields in resume.config.ts are filled:
name,title,url,social.email
Check browser console for the specific missing field.
- Verify
.env.localhasNEXT_PUBLIC_GA_IDset - Check you're in production mode (
npm run build && npm start) - Or set
enableInDev: trueinresume.config.tsfor testing - Check browser console for errors
- Enable GitHub Pages in repository settings β Pages
- Set source to "GitHub Actions"
- Check that Actions workflow completed successfully
- If using custom path (e.g.,
/resume), updateresume.config.ts:deployment: { basePath: "/resume", assetPrefix: "/resume/", }
- Verify
CNAMEfile in/public/directory - Update
resume.config.tsurl to your custom domain - Check DNS settings are correct (A or CNAME records)
- Wait for DNS propagation (up to 48 hours)
- Test with
dig yourdomain.comornslookup yourdomain.com
Check resume.config.ts:
features: {
darkMode: true, // Must be true
}Review the console output - it will show which fields need attention. Update resume.config.ts accordingly.
- Run
npm run type-checkto see all errors - Ensure all fields in
resume.config.tsmatch the expected types - Check
src/data/resume.tsinterfaces are correctly typed
If port 3000 is taken:
npm run dev -- -p 3001 # Use port 3001 instead/- Main resume page with all sections/speaking- Detailed speaking engagements and portfolio/resume.pdf- Direct PDF download
# Start development server with Turbopack
npm run dev
# Build for production (static export)
npm run build
# Start production server (for local testing)
npm start
# Run ESLint
npm run lint
# Format code with Prettier
npm run format
# Type checking
npm run type-check
# Setup git hooks
npm run preparesrc/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout with SEO
β βββ page.tsx # Main resume page
β βββ speaking/ # Speaking portfolio
βββ components/
β βββ sections/ # Resume section components
β βββ ui/ # Reusable UI components
βββ data/
β βββ resume.ts # Your resume data
βββ lib/
βββ utils.ts # Utility functions
// In src/data/resume.ts
{
category: "Databases",
skills: ["PostgreSQL", "MongoDB", "Redis"],
variant: "info",
}// In src/data/resume.ts
{
title: "Senior Software Engineer",
company: "Amazing Company",
duration: "Jan 2024 - Present",
responsibilities: [
"Led development of scalable web applications",
"Mentored junior developers",
],
}Contributions are welcome! Please read our Contributing Guide for detailed information on:
- Setting up the development environment
- Understanding the project architecture
- Following coding standards and conventions
- Submitting pull requests
- Reporting issues and feature requests
For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Built with Next.js
- UI components inspired by shadcn/ui
- Styling with Tailwind CSS
- Icons from Lucide React
If you have questions or need help customizing this template:
- Check the CLAUDE.md file for development guidance
- Review the llms.txt for project overview
- Open an issue in this repository
- Contact the maintainer
β If this template helped you create an awesome resume website, please give it a star!