A bold, animated portfolio website built with React + Vite. Features a vibrant dark theme, filterable projects grid, animated cursor glow, and a contact form that opens your mail client.
# 1. Install dependencies (only once)
npm install
# 2. Start the dev server (with hot reload)
npm run dev
# 3. Build for production
npm run build
# 4. Preview the production build locally
npm run previewThe dev server runs at http://localhost:5173.
.
├── index.html # HTML entry point
├── package.json
├── vite.config.js
├── public/
│ └── favicon.svg # Site favicon
└── src/
├── main.jsx # React entry
├── App.jsx # Root component
├── styles.css # All styles (one stylesheet)
├── data/
│ └── projects.js # ★ Edit this to update your projects
└── components/
├── Navbar.jsx
├── Hero.jsx
├── About.jsx
├── Projects.jsx
├── Skills.jsx
├── Contact.jsx
└── Footer.jsx
Open src/data/projects.js and replace the placeholder entries. Each project has:
title,tagline,descriptiontech— array of tech badgestags— used by the filter buttons (e.g. "Frontend", "Featured")accent— hex color for the card's gradient themeimage—nullfor the placeholder block, or'/projects/my-image.png'after dropping a screenshot intopublic/projects/links.live,links.github— leave blank to hide
- Hero text:
src/components/Hero.jsx - About + code block:
src/components/About.jsx - Social URLs:
src/components/Contact.jsx(search foryourusernameand replace with your actual handles) - Email recipient:
src/components/Contact.jsx— the form opensmailto:pouyaghp97@gmail.com. Change if needed.
src/components/Skills.jsx — edit the skillGroups array and the marquee list.
Top of src/styles.css — the :root block defines all accent colors (--accent, --accent-2, etc.) and the gradient combos.
The form currently uses mailto: (opens the user's mail app). For a proper "send and forget" experience, swap in one of these in Contact.jsx's handleSubmit:
- Formspree — POST to your form's URL
- EmailJS — client-side send with no backend
- Your own API — fetch to your Node/Express endpoint
Both options take 2 minutes:
- Vercel:
npm i -g vercel && vercelfrom this folder - Netlify: drag-and-drop the
dist/folder after runningnpm run build - GitHub Pages: push to GitHub and use the
gh-pagespackage or GitHub Actions
MIT — yours to use, change, and ship.