A modern, interactive resume website built with Next.js, featuring an innovative halftone image effect with mouse interaction. Deployed on GitHub Pages.
git clone https://github.com/KeyMoad/keymoad.github.io.git
cd keymoad.github.io
pnpm install
public directory:
public/photo.jpg or public/photo.pngapp/page.tsx if using a different filenameRun the development server:
pnpm dev
Open http://localhost:3000 in your browser to see the result.
Build the static site:
pnpm build
The output will be in the out directory, ready for static hosting.
Preview the production build locally:
pnpm build
pnpm start
├── app/
│ ├── globals.css # Global styles and theme colors
│ ├── layout.tsx # Root layout component
│ └── page.tsx # Main resume page
├── components/
│ ├── image-canvas.tsx # Interactive halftone image canvas
│ └── ui/ # Reusable UI components
├── lib/
│ ├── noise.ts # Noise functions for canvas effects
│ └── utils.ts # Utility functions
├── public/
│ └── photo.jpg # Profile photo
├── .github/
│ └── workflows/
│ └── deploy.yml # GitHub Actions deployment workflow
└── next.config.mjs # Next.js configuration
The color scheme is defined in app/globals.css:
#020202 (Dark black)#3E6259 (Teal green)#CECFC7 (Light beige)To change colors, update the CSS variables in app/globals.css.
Adjust the halftone effect parameters in app/page.tsx:
const HALFTONE_SIZE = 0.005
const CONTRAST = 1
const ACCENT_COLOR = "#CECFC7"
const MOUSE_RADIUS = 100
const REPULSION_STRENGTH = 1.5
const RETURN_SPEED = 0.6
const ACCENT_PROBABILITY = 0.2
const SIZE_VARIATION = 0.1
Edit your resume information directly in app/page.tsx. The page includes sections for:
The site is automatically deployed to GitHub Pages when you push to the main branch. The deployment is handled by GitHub Actions workflow (.github/workflows/deploy.yml).
To deploy manually:
main branchhttps://keymoad.github.ioTo deploy to other static hosting providers:
pnpm build
out directory contents to your hosting providerThe project uses static export configuration in next.config.mjs:
output: "export" - Enables static site generationtrailingSlash: true - Adds trailing slashes to URLsimages.unoptimized: true - Disables image optimization for static exportThis project is free to use as a template. You are welcome to:
However, you must:
In essence, use the template structure and code, but make it your own with your personal information and content. This ensures the template remains open for others while protecting personal information.
TL;DR: Free to use as a template. Change the photo and all content. Keep it your own!
Mohamadreza Najarbashi (KeyMoad)