Personal portfolio and blog built with Next.js, MDX, and Tailwind CSS, and deployed as a static site with GitHub Pages.
- Personal portfolio pages (
about,projects,resume,contact) - Blog support with MDX and Contentlayer
- Project showcase powered by GitHub API
- Syntax-highlighted markdown content
- Theme support (light/dark/system)
- Static export for GitHub Pages hosting
- Next.js 16 (App Router)
- React + TypeScript
- Tailwind CSS
- Contentlayer + MDX
- SWR + Axios
- Lucide icons
app/ Routes and pages
components/ Reusable UI and page components
data/ Static content/configuration
lib/ API/data helpers and utilities
providers/ Context providers (theme, etc.)
public/ Static assets
types/ TypeScript types
npm installnpm run devOpen http://localhost:3000.
npm run buildCreate a .env.local file for optional authenticated GitHub requests:
GITHUB_TOKEN=your_github_personal_access_tokenWhy this helps:
- Improves GitHub API rate limits
- Makes project/readme fetching more reliable
- Blog content is MDX-driven and processed with Contentlayer.
- GitHub project data is fetched from the GitHub REST API.
- Project README content is fetched via
/repos/{owner}/{repo}/readmeendpoint for better compatibility.
This repository is configured for static export:
next.config.mjsusesoutput: "export"- Output directory is
build/
Deploy the generated static files to GitHub Pages from your chosen branch/workflow.
npm run dev- Start local development servernpm run build- Create production build/exportnpm run start- Start Next.js server mode (not typically used for static pages)npm run lint- Run lint checks
Licensed under the MIT License.