Personal portfolio site built with React, Vite, and Tailwind CSS v4.
Live at: josephmaina.dev
- Hero — intro, availability status, resume link, and social links
- About — background, focus areas, and graduation timeline
- Projects — vertical card layout with screenshots, live demo links, stack chips, outcome and role details
- Services — accordion listing of what I offer
- Process — 4-step workflow from discovery to launch
- Skills — animated marquee of tools and technologies
- Contact — email form via EmailJS and direct social links
- React 19
- Vite 8
- Tailwind CSS v4
- Framer Motion (3D tilt, scroll animations)
- Lenis (smooth scroll)
- EmailJS (contact form)
src/
components/ # one file per section
data/
siteConfig.js # all personal info, copy, and config
projects.js # project entries
techStack.js # skills marquee data
assets/ # hero image
public/
projects/ # project screenshots
resume.pdf
All personal content lives in two files:
src/data/siteConfig.js— name, title, bio, services, process steps, social linkssrc/data/projects.js— project entries (title, description, stack, image, links)
To add a project, drop a screenshot in public/projects/ and add an entry to projects.js.
npm install
npm run devnpm run build # production build to /distConnect the repo to Vercel or Netlify. Set the build command to npm run build and publish directory to dist. No environment variables required unless you swap out the EmailJS keys in ContactFooter.jsx.