Portfolio V3.0
A modern, responsive portfolio website built with Next.js, TypeScript, and MDX. Features dark mode, global search, and markdown-based content management.
Technologies Used
Next.js 15TypeScriptTailwind CSSMDXFramer MotionFuse.jsnext-themes
Portfolio V3.0
The third iteration of my personal portfolio website, built with modern web technologies and a focus on performance, accessibility, and content management.
Features
🎨 Modern Design
- Clean, minimalist interface with careful attention to typography and spacing
- Responsive design that works beautifully on all devices
- Smooth animations and transitions using Framer Motion
🔍 Global Search
- Instant search across all content types (blog posts, thoughts, projects, talks)
- Keyboard shortcuts (⌘K / Ctrl+K) for quick access
- Fuzzy search powered by Fuse.js
- Search result highlighting and categorization
📝 Content Management
- Markdown-based content system using MDX
- Git-based workflow for content updates
- Type-safe frontmatter validation
- Support for multiple content types: blog, thoughts, projects, talks, and now pages
⚡ Performance
- Static site generation for optimal loading speeds
- Image optimization and lazy loading
- Minimal JavaScript bundle size
- Perfect Lighthouse scores
🌐 SEO & Accessibility
- Comprehensive meta tags and Open Graph support
- Semantic HTML structure
- Screen reader friendly
- Keyboard navigation support
Technical Implementation
Architecture
The site follows Next.js 15 App Router conventions with a clean separation of concerns:
/src/app/
- Page components and routing/src/components/
- Reusable UI components/src/lib/
- Utility functions and business logic/content/
- Markdown content files/public/
- Static assets
Content System
Each content type has its own directory structure and TypeScript interfaces:
interface ContentItem {
slug: string;
title: string;
description?: string;
date: string;
tags?: string[];
published: boolean;
content: string;
// Type-specific fields...
}
Search Implementation
The global search uses a combination of:
- Fuse.js for fuzzy string matching
- React hooks for state management
- Keyboard event handling for shortcuts
- Modal overlay with focus management
Theme System
Dark mode implementation using next-themes:
- System preference detection
- Persistent user choice
- CSS custom properties for theme colors
- Smooth transitions between themes
Development Process
Planning
- User experience research and wireframing
- Component design system creation
- Content strategy and information architecture
- Performance budget definition
Implementation
- TypeScript-first development approach
- Component-driven development
- Progressive enhancement mindset
- Accessibility-first design decisions
Testing
- Manual testing across devices and browsers
- Lighthouse performance audits
- Accessibility testing with screen readers
- Content validation and error handling
Lessons Learned
What Worked Well
- MDX for content: Perfect balance of simplicity and flexibility
- TypeScript everywhere: Caught numerous errors during development
- Tailwind CSS: Rapid prototyping and consistent design system
- Next.js App Router: Excellent developer experience and performance
Challenges Overcome
- Search UX: Balancing comprehensive results with simple interface
- Content organization: Creating flexible schemas for different content types
- Performance optimization: Achieving fast loading while maintaining rich features
- Accessibility: Ensuring keyboard navigation works seamlessly with complex interactions
Future Improvements
- RSS feed generation for blog and thoughts
- Newsletter signup integration
- Analytics implementation
- Automated content optimization