Production-grade React + TypeScript portfolio
Built with Vite, Tailwind CSS v4, Framer Motion &more.
- π About This Project
- β¨ Live Demo
- π οΈ Tech Stack
- π Features
- ποΈ Featured Projects
- πΈ Preview
- π Getting Started
- π§ EmailJS Setup
- π Resume
- π Deployment
- π Project Structure
- π¨ Color System
- β‘ Performance Checklist
- π Credibility Notes
- π€ Contributing
- π License
This repository is the front-end component of the full Portfolio Website project. It is part of a monorepo structure that contains shared tooling and configuration alongside the front-end application.
Portfolio-website/ # Monorepo root
βββ front-end/ # β
You are here β React + Vite SPA
β βββ src/ # Application source code
β βββ public/ # Static assets (images, resume)
β βββ index.html # HTML entry point
β βββ package.json # Front-end dependencies
β βββ vite.config.js # Vite configuration
βββ package.json # Root workspace config (shared deps)
βββ package-lock.json # Lockfile
βββ PORTFOLIO_REVIEW.md # Project review ¬es
The root package.json hosts shared workspace dependencies (e.g., Radix UI, Framer Motion, Lucide React), while the front-end/ directory is the deployable SPA built with Vite + React + TypeScript.
π View Live Portfolio β (Add your deployed URL here)
| Category | Technology |
|---|---|
| Framework | Vite + React 18 + TypeScript |
| Styling | Tailwind CSS v4 |
| Animation | Framer Motion |
| Icons | React Icons |
| Contact | EmailJS |
| SEO | react-helmet-async, JSON-LD schema (Person) |
| Deploy | Static SPA (Vercel / Netlify) |
- Full-screen Hero with a dynamic typing effect
- Light/Dark mode toggle with localStorage persistence
- Scroll progress bar & back-to-top button
- Reduced-motion support β respects prefers-reduced-motion
- Real stat counters β 3 projects, 50+ LeetCode, 12+ technologies
- Skills displayed as clean badges (no fabricated percentage bars)
- Projects section with category filter, tech badges &feature lists
- Experience timeline β real internship at SaiKet Systems + certifications
- Live GitHub API integration with graceful fallback on rate limits
- EmailJS contact form with success/error states and form validation
- Keyboard focus states throughout
- Semantic HTML structure
- Meta tags, Open Graph, Twitter Cards, JSON-LD Person schema
Three real-world applications built with modern technologies:
| Category | Full Stack |
| Description | Automated financial transaction matching using Levenshtein Distance, Jaro-Winkler, and N-Gram Similarity algorithms. Features fraud detection, JWT authentication, RBAC, and automated PDF/Excel report generation. |
| Tech Stack | React.js Node.js Express.js MongoDB JWT RBAC AI |
| Features | Fuzzy matching algorithms Β· Fraud detection engine Β· JWT Authentication Β· Role-Based Access Control Β· PDF & Excel Reports |
| Links | GitHub Β· Live Demo |
| Category | AI/ML |
| Description | Full-stack expense management platform with OCR receipt scanning, AI-powered duplicate detection, analytics dashboard, Docker Compose deployment, and email notifications. |
| Tech Stack | React.js Node.js MongoDB OCR Docker Cloudinary Tailwind CSS |
| Features | OCR receipt scanning Β· Expense analytics dashboard Β· AI duplicate detection Β· Email notifications Β· Docker Compose deployment |
| Links | GitHub |
| Category | Web App |
| Description | Real-time GitHub analytics application that retrieves repositories, followers, stars, and profile insights using the GitHub REST API with optimized API handling and a responsive UI. |
| Tech Stack | React.js GitHub API REST API JavaScript Tailwind CSS |
| Features | Real-time GitHub data Β· Profile analytics Β· Repository insights Β· Fast API fetching Β· Responsive UI |
| Links | GitHub Β· Live Demo |
Screenshots coming soon β replace this section with actual images.
Ensure you have the following installed:
- Node.js 18.x (recommended: 20.x LTS)
- npm 9.x (comes with Node.js) or yarn / pnpm
# Clone the repository
git clone https://github.com/your-username/portfolio-website.git
cd portfolio-website/front-end
# Install dependencies
npm install# Start the development server (default: http://localhost:5173)
npm run dev# Create an optimized production build
npm run build
# Preview the production build locally
npm run previewThe contact form uses EmailJS to send messages directly to your inbox without a backend server.
-
Create a free account at emailjs.com
-
Create an Email Service (Gmail, Outlook, Yahoo, etc.)
-
Create an Email Template with the following variables:
- {{name}} β sender's name
- {{email}} β sender's email address
- {{message}} β sender's message
-
Update the values in src/components/Contact.jsx:
// Replace these with your own EmailJS credentials const SERVICE_ID = "service_oy89oay"; // β Your Service ID const TEMPLATE_ID = "template_n3jkqyj"; // β Your Template ID const PUBLIC_KEY = "dq0aee7luMmW4hzxQ"; // β Your Public Key
β οΈ Security Note: The public key is safe to expose in client-side code β EmailJS is designed for this. Never expose your private/secret key.
- Place your resume PDF in the public/ folder
- Name it Jay_Avgune_Resume.pdf
- The "Download Resume" button in the Hero section will link to this file
| Step | Action |
|---|---|
| 1 | Push the repository to GitHub |
| 2 | Go to Vercel and import your GitHub repo |
| 3 | Configure the following settings: |
| β’ Framework Preset: Vite | |
| β’ Build Command: npm run build | |
| β’ Output Directory: dist | |
| 4 | Click Deploy β done! |
| Step | Action |
|---|---|
| 1 | Push the repository to GitHub |
| 2 | Go to Netlify and import your GitHub repo |
| 3 | Configure the following settings: |
| β’ Build Command: npm run build | |
| β’ Publish Directory: dist | |
| 4 | Click Deploy |
For SPA routing, create a _redirects file in public/ with: /* /index.html 200
front-end/
βββ public/ # Static assets
β βββ personal.png # Profile picture
β βββ Jay_Avgune_Resume.pdf # Resume (add yours here)
βββ src/
β βββ components/ # React components
β β βββ About.jsx # About section with stat counters
β β βββ BackToTop.jsx # Scroll-to-top button
β β βββ Contact.jsx # EmailJS contact form
β β βββ Experience.jsx # Experience timeline
β β βββ Footer.jsx # Site footer
β β βββ GitHubStats.jsx # Live GitHub stats
β β βββ Hero.jsx # Hero section with typing effect
β β βββ Navbar.jsx # Navigation bar
β β βββ Projects.jsx # Project showcase with filters
β β βββ ScrollProgress.jsx # Scroll progress indicator
β β βββ Skills.jsx # Skills badge grid
β β βββ ThemeToggle.jsx # Light/dark mode toggle
β βββ hooks/ # Custom React hooks
β β βββ useGitHubStats.js # GitHub API data fetching
β β βββ useReducedMotion.js # Motion preference detection
β β βββ useTheme.jsx # Theme state management
β βββ App.jsx # Root application component
β βββ main.jsx # Application entry point
β βββ style.css # Global styles / Tailwind imports
βββ index.html # HTML entry point
βββ package.json # Dependencies & scripts
βββ vite.config.js # Vite configuration
| Token | Hex | Usage |
|---|---|---|
| neon-cyan | #22d3ee | Primary accent, links, active states |
| neon-purple | #8b5cf6 | Secondary accent, gradient |
| neon-pink | #fb7185 | Tertiary accent, highlights |
| neon-blue | #38bdf8 | Button gradients, GitHub section |
| dark-bg | #050508 | Dark mode background |
| light-bg | #f8f9fc | Light mode background |
- Lazy loading images β loading="lazy" on all images
- Code splitting β automatic via Vite's built-in code splitting
- CSS minification β handled by Tailwind + Vite
- Font preconnect β link rel="preconnect" in head
- Reduced-motion β prefers-reduced-motion media query
- Semantic HTML β proper landmark elements & heading hierarchy
- Accessible focus states β visible focus outlines throughout
- β All project claims are real and link to actual GitHub repositories
- β Stat counters use real numbers (3 projects, 50+ LeetCode problems solved, 12+ technologies)
- β No fabricated testimonials, employment history, or percentage-based skill bars
- β GitHub stats are fetched live from the public API with graceful fallback on rate limits
- β The internship at SaiKet Systems (FebβMar 2026) is genuine
- β All certifications listed are verifiable
Contributions, issues, and feature requests are welcome!
- Fork the repository
- Create a feature branch (git checkout -b feature/amazing-feature)
- Commit your changes (git commit -m 'Add amazing feature')
- Push to the branch (git push origin feature/amazing-feature)
- Open a Pull Request
This project is open source and available under the MIT License.
Made with by Jay Avgune
