A modern, responsive portfolio website built from scratch with React, TypeScript, and Tailwind CSS. Features smooth animations, accessibility-first design, SEO optimization, blog functionality, and AI projects showcase.
- Responsive Design: Works seamlessly on all devices
- Light/Dark Mode Toggle: Professional theme switching with lightbulb icon and localStorage persistence
- Smooth Navigation: React Router with smooth scroll navigation
- Section-based Layout: Home page with Summary, Skills, Experience, and Certifications
- Timeline Experience: Professional timeline with detailed work history
- Grid-based Certifications: Visual display of professional certifications
- Markdown Blog Posts: Full blog functionality with markdown support
- Anchor Link Navigation: Automatic heading ID generation with quick navigation sections for long-form content
- Podcast Integration: Native HTML5 audio player for AI-generated NotebookLM podcasts
- Syntax Highlighting: Code blocks with highlight.js
- Dynamic Content Loading: Lazy-loaded blog posts with improved error handling
- SEO Optimized Posts: Individual meta tags and structured data per post
- Comments System: GitHub Discussions-powered comments via Giscus integration
- Tag Cloud: Interactive tag filtering system with visual weighting and selection management
- Post Filtering: Dynamic filtering by multiple tags with clear visual feedback
- AI Crawlable: Static HTML generation for all blog posts and index pages
- Blog Guidelines: Comprehensive guidelines for consistent content creation
- Robust Loading: Promise.allSettled-based loading prevents partial failures
- Equipment Gallery: Comprehensive display of professional gear and equipment
- Category Organization: Equipment organized by type with visual category indicators
- Rich Details: Detailed specifications, features, pros/cons for each item
- Interactive Images: Modal image viewer for detailed equipment photos
- Affiliate Integration: Amazon affiliate links with clear disclosure
- Stock Status: Real-time stock availability indicators
- Rating System: Visual star rating system for equipment reviews
- Project Gallery: Dedicated AI projects section
- Live Demos: Embedded interactive demos (Hugging Face Spaces integration)
- Technical Details: In-depth project descriptions with GitHub links
- Dynamic Content: Lazy-loaded project pages
- Code Splitting: Intelligent chunk splitting for optimal loading
- Lazy Loading: Components and pages loaded on demand
- SEO Optimized: Comprehensive meta tags, Open Graph, Twitter Cards
- Structured Data: Schema.org markup for better search results
- Performance Optimized: Terser minification, tree shaking, asset optimization
- AI Crawlability: Static HTML generation for AI systems (ChatGPT, Claude, etc.)
- Enhanced robots.txt: Explicit permissions for AI crawlers
- Security Headers: X-Frame-Options, CSP, and other security measures
- Production Ready: Optimized Vercel deployment configuration
- Asset Caching: Intelligent cache control for static assets
- Accessibility Compliant: WCAG guidelines followed
- TypeScript: Full type safety throughout the application
- React Context API: Theme management with localStorage persistence
- Feature Flags: Configurable features (e.g., chatbot)
- Modular Architecture: Clean separation of concerns
- Error Handling: Comprehensive error boundaries and fallbacks
- React 19.2 - Latest React with concurrent features
- TypeScript - Full type safety
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework with class-based dark mode
- React Router DOM - Client-side routing
- React Helmet Async - SEO meta tag management
- React Markdown - Markdown rendering
- Highlight.js - Syntax highlighting for code blocks
- Remark GFM - GitHub Flavored Markdown support
- Rehype plugins - HTML processing and syntax highlighting
- Framer Motion - Smooth animations and transitions
- Lucide React - Beautiful, consistent icons
- ESLint - Code linting with TypeScript support
- PostCSS - CSS processing with Autoprefixer
- Terser - JavaScript minification
- pnpm - Fast, disk space efficient package manager
- Vercel - Production deployment platform
- Code Splitting - Automatic and manual chunk optimization
- Compression - Gzip and Brotli compression for assets
- Modern Build Target - ES2022+ for optimized bundles
-
Clone the repository
git clone <repository-url> cd portfolio
-
Install dependencies (using pnpm)
pnpm install
-
Run the development server
pnpm dev
-
Build for production (includes static blog generation)
pnpm build
-
Preview the production build
pnpm preview
-
Lint the code
pnpm lint
-
Type check the code
pnpm typecheck
-
Run full build validation
pnpm test:build
src/
βββ components/ # Reusable UI components
βββ pages/ # Route-specific page components
βββ content/ # Markdown blog posts
βββ data/ # Static data (projects, blog metadata, gear)
βββ types/ # TypeScript type definitions
βββ utils/ # Utility functions
βββ config/ # Feature flags and configuration
βββ contexts/ # React Context providers (ThemeContext)
βββ actions/ # Server actions and utilities
ai-guidelines/ # Content creation guidelines
βββ blog-guidelines.md # Comprehensive blog writing guidelines
βββ ... # Other development guidelines
scripts/ # Build and automation scripts
βββ generate-static-blog.js # Static HTML generation for AI crawlers
βββ ... # Other build scripts
public/ # Static assets
βββ podcasts/ # Audio files for blog post podcasts
βββ robots.txt # AI crawler permissions and SEO directives
βββ sitemap.xml # Search engine sitemap
βββ ... # Other static files
The project is configured for seamless deployment on Vercel with:
- Automatic deployments from main branch
- Security headers for production safety
- Optimized caching for static assets
- SPA routing configuration
Configure features in src/config/features.ts:
ENABLE_CHATBOT: Toggle chatbot functionality
The portfolio uses Giscus for comments, powered by GitHub Discussions:
- Repository: Comments are stored in GitHub Discussions
- Mapping: Comments are mapped to specific pages using unique terms
- Theme: Light theme by default
- Position: Comment box positioned at the top
- Language: English (configurable)
To configure Giscus for your own repository:
- Install the Giscus GitHub app on your repository
- Update the configuration in
src/components/Giscus.tsxwith your:- Repository name
- Repository ID
- Category ID
- Mapping preferences
- Blog Posts: Add markdown files to
src/content/following the guidelines inai-guidelines/blog-guidelines.md- Anchor Navigation: Automatically generated for H2-H6 headings with quick navigation sections
- Podcast Support: Add
podcast: "/path/to/audio.mp3"in frontmatter for integrated audio player
- AI Projects: Update
src/data/aiProjects.ts - Gear Reviews: Update
src/data/gear.ts - Skills/Experience: Modify respective component files in
src/components/
To add a podcast to any blog post:
- Place your audio file (MP3, WAV, or OGG) in
public/podcasts/ - Add the
podcastfield to your blog post's frontmatter:--- title: "Your Blog Post Title" date: "2025-07-25" podcast: "/podcasts/your-audio-file.mp3" ---
- The audio player will automatically appear at the top of the blog post with:
- Native HTML5 controls
- Dark mode compatibility
- NotebookLM AI-generation labeling
- Fallback download link
The portfolio includes comprehensive AI crawlability features:
- Static HTML Generation: All blog posts and pages are pre-rendered as static HTML during build
- AI Crawler Support: Explicit permissions for ChatGPT, Claude, and other AI systems in robots.txt
- Structured Data: Complete JSON-LD schema markup for better AI understanding
- SEO Optimization: Enhanced meta tags, Open Graph, and canonical URLs
- Automated Build Process: Static generation integrated into the build pipeline
- Blog Guidelines: Comprehensive guidelines ensure consistent, crawlable content
The static HTML files are generated in /dist/static/blog/ and include:
- Blog index page with all posts
- Individual post pages with full metadata
- Proper SEO tags and structured data
- AI-friendly content previews
- Modern browsers (Chrome, Firefox, Safari, Edge)
- Mobile browsers (iOS Safari, Chrome Mobile)
- Progressive enhancement for older browsers