A modern, responsive personal resume and portfolio site built with Next.js 15, TypeScript, Tailwind CSS v4, and shadcn/ui components. Designed for deployment to GitHub Pages at https://richfergus.github.io/.
- Static Site Generation: Fully static export compatible with GitHub Pages
- Modern Stack: Next.js 15 with App Router, TypeScript, and Tailwind CSS v4
- Component-Based UI: shadcn/ui components for a clean, professional design
- Responsive Design: Mobile-friendly layout that works on all devices
- Placeholder Content: Ready-to-customize structure with placeholder text and images
- API Integration Ready: Commented-out code for GitHub and Stack Overflow API integration
- SEO Optimized: Proper meta tags, Open Graph, and Twitter Card support
- Accessibility: ARIA labels and semantic HTML throughout
├── app/
│ ├── layout.tsx # Root layout with SEO metadata
│ ├── page.tsx # Main resume page
│ └── globals.css # Global styles with Tailwind directives
├── components/
│ ├── BioCard.tsx # Biography section with profile and links
│ ├── SkillsCard.tsx # Technical skills grid
│ ├── ProjectsCard.tsx # Featured projects showcase
│ ├── StatsCard.tsx # Developer statistics (GitHub/SO)
│ ├── Footer.tsx # Footer with resume download
│ └── ui/ # shadcn/ui components
├── lib/
│ ├── github.ts # GitHub API integration (commented)
│ ├── stackoverflow.ts # Stack Overflow API integration (commented)
│ └── utils.ts # Utility functions
├── public/
│ ├── placeholder-profile.svg # Placeholder profile image
│ └── resume.pdf # Placeholder resume PDF
├── .env.local.example # Environment variables template
└── next.config.ts # Next.js configuration for static export
- Node.js 20+ installed
- npm or yarn package manager
- Git for version control
- Clone the repository:
git clone https://github.com/richfergus/richfergus.github.io.git
cd richfergus.github.io- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 to view the site
-
Bio Section - Edit
components/BioCard.tsx:- Replace placeholder name, tagline, and bio text
- Update social links (GitHub, LinkedIn, Email, Website)
- Replace placeholder profile image in
public/
-
Skills - Edit
components/SkillsCard.tsx:- Update the
placeholderSkillsarray with your actual skills
- Update the
-
Projects - Edit
components/ProjectsCard.tsx:- Update the
placeholderProjectsarray with your portfolio projects - Add project titles, descriptions, demo URLs, and GitHub links
- Update the
-
Resume PDF - Replace
public/resume.pdfwith your actual resume -
Profile Image - Replace
public/placeholder-profile.svgwith your photo
The site uses Tailwind CSS v4 with shadcn/ui's "new-york" style. To customize:
- Edit
app/globals.cssfor global styles and CSS variables - Modify component classes in individual component files
- Update the theme in
components.jsonif needed
To display real GitHub and Stack Overflow stats:
-
GitHub API:
- Create a personal access token at GitHub Settings
- Copy
.env.local.exampleto.env.local - Add your token:
GITHUB_TOKEN=your_token_here - Uncomment the code in
lib/github.ts - Update
components/StatsCard.tsxto use the API functions
-
Stack Overflow API:
- Find your user ID from your SO profile URL
- Add to
.env.local:STACKOVERFLOW_USER_ID=your_id_here - Uncomment the code in
lib/stackoverflow.ts - Update
components/StatsCard.tsxto use the API functions
- Build the static site:
npm run build- Deploy to GitHub Pages:
npm run deployThis will push the built site to the gh-pages branch.
A GitHub Actions workflow is included in .github/workflows/deploy.yml. It will automatically deploy on push to main.
- Ensure your repository is named
richfergus.github.io - Push your code to the
mainbranch - GitHub Actions will automatically build and deploy
- Go to your repository settings on GitHub
- Navigate to Pages section
- Set source to Deploy from a branch
- Select branch:
gh-pagesand folder:/ (root) - Save and wait for deployment
Your site will be available at https://richfergus.github.io/
npm run dev- Start development server with Turbopacknpm run build- Build static site for productionnpm run start- Start production server (for testing)npm run lint- Run ESLint for code lintingnpm run export- Alias for build (creates static export)npm run deploy- Build and deploy to GitHub Pages
- Framework: Next.js 15.5.5 with App Router
- Language: TypeScript 5
- Styling: Tailwind CSS v4 with CSS variables
- UI Components: shadcn/ui (Radix UI primitives + Tailwind)
- Icons: Lucide React
- Fonts: Geist Sans and Geist Mono
- Deployment: GitHub Pages with gh-pages package
To add more shadcn/ui components:
npx shadcn@latest add [component-name]Example:
npx shadcn@latest add avatar
npx shadcn@latest add badge
npx shadcn@latest add separatorBrowse available components at shadcn/ui.
- Ensure
output: 'export'is set innext.config.ts - Check that
images.unoptimized: trueis enabled for static export - Verify all API calls are commented out or handled for build time
- Make sure the repository is named
richfergus.github.io - Verify GitHub Pages is enabled in repository settings
- Check that the
gh-pagesbranch exists and contains the built site - Wait a few minutes after deployment for changes to appear
- Ensure
.nojekyllfile is created (handled by deploy script) - Verify the
basePathinnext.config.tsif using a custom domain
This project is open source and available for personal use.
Rich Ferguson - GitHub
Project Link: https://github.com/richfergus/richfergus.github.io