This file provides guidance to WARP (warp.dev) when working with code in this repository.
pnpm run dev- Start development server with Turbopack (opens on http://localhost:3000)pnpm run build- Build for productionpnpm run start- Start production serverpnpm run lint- Run ESLint
pnpm install- Install dependencies (uses pnpm@10.11.0+)
- Node.js: >=22.x (specified in package.json engines)
- Package Manager: pnpm (lockfile: pnpm-lock.yaml)
- TypeScript: v5+ with strict mode enabled
This is a Next.js 15 personal portfolio site using the App Router architecture:
- Framework: Next.js 15 with React 19
- Language: TypeScript (strict mode)
- Styling: Tailwind CSS v4 with custom CSS variables
- Content: MDX for blog posts with gray-matter frontmatter
- Font: Space Mono (self-hosted in
/public/fonts/) - Analytics: Vercel Analytics
- Theme: Dark/light mode via next-themes
src/
βββ app/ # Next.js App Router
β βββ blog/ # Blog section
β βββ og/ # OpenGraph image generation
β βββ providers.tsx # Theme provider wrapper
βββ components/ # React components
βββ lib/
β βββ data/ # Static data (experience.ts)
β βββ posts/ # MDX blog posts
β βββ [utils] # Utilities (seo, fonts, css, etc.)
- Blog Posts: MDX files in
src/lib/posts/with frontmatter (title, date, description, tags) - Experience Data: Structured TypeScript data in
src/lib/data/experience.ts - Personal Info: Constants in
src/lib/constants.ts
- Tailwind CSS with custom CSS variables for theming
- Global styles in
src/app/globals.css - CSS-in-JS via
clsxandtailwind-mergeutilities - Responsive design with mobile-first approach
- SEO: Centralized metadata management via
src/lib/seo.tswith lodash.merge - Fonts: Self-hosted fonts loaded via Next.js font optimization
- Theme: System-preference detection with manual override capability
- Content: File-system based routing for blog posts with dynamic generation
- Uses Turbopack for faster development builds
- MDX support enabled in
next.config.tsfor.mdand.mdxfiles - ESLint configured with Next.js recommended rules
- Path aliases configured:
@/*β./src/* - OpenGraph images dynamically generated via
/ogroute