Modern, responsive portfolio website built with React, TypeScript, and Tailwind CSS. Features filterable project showcase, dark/light mode, and comprehensive analytics tracking.
π Live Site: mihiradelkar.github.io
- β Single-page application with smooth scrolling navigation
- β Dark/Light mode toggle with persistent preferences
- β Fully responsive design (mobile, tablet, desktop)
- β TypeScript for type safety and better developer experience
- β Professional ESLint + Prettier configuration
- β Optimized performance with Vite + SWC
- β Accessible UI with ARIA labels and semantic HTML
- β Filterable Projects Grid - 8 category filters (AI/ML, Cloud, Mobile/IoT, etc.)
- β Expandable Cards - Click to view full project details
- β 12 Projects - Featured projects and complete portfolio
- β Smart Layout - 3-column grid with responsive breakpoints
- β Google Analytics 4 integration
- β
Custom event tracking for:
- Section views (Home, About, Experience, Projects, Skills, Contact)
- Project interactions (expand, filter, view)
- External link clicks (GitHub, LinkedIn, Email)
- Traffic sources and UTM parameters
- β GitHub Actions automated deployment
- β Automatic linting and type checking on push
- β Zero-downtime deployments to GitHub Pages
- β Build optimization and artifact caching
- Framework: React 18
- Language: TypeScript
- Build Tool: Vite with SWC compiler
- Styling: Tailwind CSS 3
- Icons: Lucide React
- Analytics: Google Analytics 4 (react-ga4)
- Code Quality: ESLint + Prettier
- Deployment: GitHub Actions + GitHub Pages
# Clone the repository
git clone https://github.com/mihiradelkar/mihiradelkar.github.io.git
cd mihiradelkar.github.io
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewCreate a .env file in the root directory:
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXXFor GitHub Actions deployment, add GA_MEASUREMENT_ID as a repository secret:
- Go to Settings β Secrets and variables β Actions
- Add
GA_MEASUREMENT_IDwith your Google Analytics ID
- Create a GA4 property at analytics.google.com
- Get your Measurement ID (format:
G-XXXXXXXXXX) - Add to
.envfile or GitHub Secrets - Analytics will automatically track:
- Page views and session duration
- User demographics and device types
- Traffic sources (LinkedIn, GitHub, direct)
- Project engagement and filter usage
- External link clicks
# Run ESLint
npm run lint
# Fix ESLint issues automatically
npm run lint:fix
# Format code with Prettier
npm run format
# Check formatting without changes
npm run format:check
# TypeScript type checking
npm run type-checkportfolio/
βββ .github/
β βββ workflows/
β βββ deploy.yml # CI/CD pipeline configuration
βββ src/
β βββ components/ # Reusable React components
β β βββ ProjectsSection.tsx
β βββ data/ # Portfolio content data
β β βββ content.ts # Experience, projects, skills, personal info
β βββ types/ # TypeScript type definitions
β β βββ index.ts
β βββ utils/ # Utility functions
β β βββ analytics.ts # Google Analytics tracking
β βββ App.tsx # Main application component
β βββ main.tsx # Application entry point
β βββ index.css # Global styles with Tailwind
βββ public/ # Static assets
βββ .eslintrc.cjs # ESLint configuration
βββ .prettierrc # Prettier configuration
βββ tsconfig.json # TypeScript configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ vite.config.ts # Vite configuration
βββ package.json # Dependencies and scripts
Edit src/data/content.ts:
export const personalInfo = {
name: 'Your Name',
title: 'Your Title',
email: '[email protected]',
location: 'Your Location',
github: 'https://github.com/yourusername',
linkedin: 'https://linkedin.com/in/yourusername',
}export const projects: Project[] = [
{
title: 'Your Project',
description: 'Project description...',
tech: ['React', 'Node.js', 'AWS'],
highlights: ['Built X', 'Achieved Y', 'Improved Z'],
github: 'https://github.com/...',
live: 'https://...',
category: ['Frontend', 'Cloud'],
featured: true,
},
// ... more projects
];Tailwind CSS classes can be customized in:
- Component files for specific styling
tailwind.config.jsfor theme colors and extensionssrc/index.cssfor global styles
Every push to main branch automatically:
- Runs linting and type checks
- Builds the production bundle
- Deploys to GitHub Pages
Setup:
- Enable GitHub Pages in repository settings
- Set source to "GitHub Actions"
- Add
GA_MEASUREMENT_IDto repository secrets - Push to main branch
npm run build
npm run deploy
# The built files are in the dist/ folder
# Deploy dist/ to your hosting platform- Add a
CNAMEfile topublic/folder with your domain - Configure DNS settings with your domain provider
- Enable HTTPS in GitHub Pages settings
When sharing your portfolio, use UTM parameters to track sources:
https://mihiradelkar.github.io/?utm_source=linkedin&utm_medium=profile&utm_campaign=job_search
https://mihiradelkar.github.io/?utm_source=resume&utm_medium=pdf&utm_campaign=apple_application
- Section Views: Automatically tracks which sections users visit
- Project Filters: Tracks which project categories are viewed most
- Project Expansions: Tracks which projects users want to learn more about
- External Links: Tracks clicks to GitHub, LinkedIn, and email
- Device & Location: Automatic tracking of user demographics
- IP anonymization enabled in Google Analytics
- No personal data collected beyond standard web analytics
- GDPR compliant configuration
MIT License - feel free to use this template for your own portfolio!
- Email: [email protected]
- LinkedIn: linkedin.com/in/mihir-adelkar
- GitHub: github.com/mihiradelkar
- Portfolio: mihiradelkar.github.io
Built with β€οΈ by Mihir Adelkar | Last Updated: December 2024