January 25, 2026
A portfolio website for me to showcase my projects and skills.
This portfolio website showcases my projects and technical skills. It's built with Next.js using static site generation for fast load times and SEO. The site features detailed project pages with markdown-driven content, a categorized skills section, and an updates feed. All project content is managed through markdown files, making it easy to add new projects or update existing ones without touching the codebase.
generateStaticParams(). Routes are generated from a JSON file, and markdown content is parsed server-side with gray-matter for frontmatter extraction.rehype-raw to render HTML elements in markdown, with custom React components for video tags that include proper styling and responsive behavior.The Challenge: Setting up dynamic routes for project pages while keeping static generation. Next.js needs to know all routes at build time, but I wanted to load content from markdown files. Also needed to support HTML in markdown (like video tags) without breaking the markdown parser.
The Solution:
Used generateStaticParams() to read the projects JSON and generate all routes at build time. Markdown files are parsed with gray-matter to separate frontmatter from content. For HTML support, added rehype-raw plugin to react-markdown and created custom component handlers for video tags with proper Tailwind styling. The frontmatter can override project data from the JSON, so markdown files control the display while the JSON manages the project list and routing.
<img> tags with Next.js Image component for automatic optimization and lazy loading.