A personal portfolio and blog website built with Next.js, designed to showcase research, projects, and thoughts. It features a static markdown-based blog system and dynamic GitHub project integration.
- Framework: Next.js 14+ (App Router)
- Language: TypeScript
- Styling: Tailwind CSS, shadcn/ui, Lucide React
- Animation: Framer Motion
- Search: Fuse.js (Client-side fuzzy search)
- Deployment: GitHub Pages (Static Export)
- Markdown Rendering: Supports GFM, LaTeX (KaTeX), and Syntax Highlighting.
- Custom Components: Enhanced styling for callouts (
aside), images, and lists. - File Management: Robust slug handling with Unicode normalization (NFC) and caching for O(1) lookups.
- GitHub Integration: Fetches repositories via GitHub API.
- Filtering: Displays top projects with descriptions and links.
- Global Search:
Cmd+Kcommand palette interface. - Lazy Loading: Search logic (
fuse.js) is loaded on-demand to optimize initial bundle size. - Unified Navigation: Mouse and keyboard support for seamless navigation.
- Responsive Design: Mobile-friendly layout with a collapsible navigation menu.
- Theme: System-aware Dark/Light mode toggle.
- Performance: Optimized font loading (
next/font) and asset handling.
app/: App Router pages and layouts.components/: Reusable UI components and sections.lib/: Utility functions (GitHub API, Post processing).posts/: Markdown content files.public/: Static assets and generated search index.scripts/: Build-time scripts (e.g., search index generation).