A modern, responsive portfolio website built with Next.js 15, TypeScript, and Tailwind CSS. This project showcases Nathan Martin's work as a Tech Consultant, featuring a blog system, project gallery, and dark/light theme support.
- Modern Tech Stack: Next.js 15 with App Router, TypeScript, and Tailwind CSS
- Content Management: MDX-based blog posts and project showcases
- Theme System: Dark/light mode with system preference detection
- Search Functionality: Client-side search for blog posts
- Responsive Design: Mobile-first approach with flexible layouts
- Static Generation: Optimized performance with SSG
- Syntax Highlighting: Code blocks with Sugar High
- Social Integration: Footer with social media links
- Next.js 15.0.3 (App Router)
- React 18.3.1 with TypeScript
- Tailwind CSS 3.4.1 for styling
- MDX for content management (
next-mdx-remote) - Gray Matter for frontmatter parsing
- Radix UI components for accessibility
- Class Variance Authority for component variants
- Lucide React for icons
- Next Themes for theme management
- Sugar High for syntax highlighting
- Inter for sans-serif (body text)
- Playfair Display for serif (headings)
- Geist fonts available (commented out)
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout with providers
β βββ page.tsx # Homepage
β βββ posts/ # Blog posts
β βββ projects/ # Project showcases
βββ components/ # React components
β βββ ui/ # Reusable UI components
β βββ intro.tsx # Personal introduction
β βββ header.tsx # Navigation header
β βββ footer.tsx # Footer with social links
β βββ ... # Other components
βββ content/ # MDX content
β βββ posts/ # Blog posts
β βββ projects/ # Project showcases
βββ lib/ # Utility functions
β βββ posts.ts # Post management
β βββ projects.ts # Project management
β βββ utils.ts # Helper functions
βββ public/ # Static assets
βββ images/ # Images and assets
- CSS Custom Properties for light/dark themes
- Semantic color tokens (background, foreground, muted, etc.)
- Consistent theming across all components
- Custom
.titleclass with underlined styling - Responsive grid layouts for projects
- Hover effects and smooth transitions
- Accessible form controls with proper ARIA labels
- MDX format with frontmatter metadata
- Automatic slug generation from filenames
- Search functionality by title
- Date formatting and sorting
- Project showcases with images and descriptions
- Grid layout with hover effects
- Individual project pages with full content
- Node.js 18+
- npm (recommended), yarn, pnpm, or bun
-
Clone the repository:
git clone <repository-url> cd portfolio-project
-
Install dependencies:
npm install
-
Run the development server:
npm run dev
-
Open your browser and navigate to http://localhost:3000.
- Create a new
.mdxfile incontent/posts/ - Add frontmatter with metadata:
---
title: "Your Post Title"
summary: "Brief description"
image: "/path/to/image.jpg"
author: "Nathan Martin"
publishedAt: "2024-01-01"
---- Write your content in MDX format
- Create a new
.mdxfile incontent/projects/ - Add frontmatter with metadata:
---
title: "Project Name"
summary: "Project description"
image: "/images/projects/project.jpg"
author: "Nathan Martin"
publishedAt: "2024-01-01"
---- Write your project details in MDX format
- "My First Post" - About learning frontend frameworks
- "Introduction to MDX" - Technical content about MDX
- "Ecommerce Store" - Next.js + Stripe ecommerce project
- "Next MDX Portfolio" - This portfolio project itself
- Push your code to GitHub
- Connect your repository to Vercel
- Deploy with one click
The project is configured for static site generation and can be deployed to:
- Netlify
- GitHub Pages
- AWS S3 + CloudFront
- Any static hosting service
npm run dev- Start the development server.npm run build- Build the application for production.npm run start- Start the production server.npm run lint- Run ESLint to check for code quality.npm run test- Run Playwright end-to-end tests.npm run test:ui- Run Playwright tests with the UI inspector.
- Hot reloading with Next.js
- TypeScript for type safety
- ESLint for code quality
- Tailwind CSS for rapid styling
- Contact page implementation
- Newsletter signup functionality
- Social media link updates
- Additional content (posts/projects)
- SEO optimization
- Performance improvements
This is a personal portfolio project, but suggestions and improvements are welcome!
This project is for personal use. Please respect the intellectual property.
Built with β€οΈ by Nathan Martin