A modern, SEO-optimized portfolio website built with Next.js 15, TypeScript, TailwindCSS, and MDX. Features a clean design, dark mode support, smooth animations, and a blog/travel stories section.
- Modern Stack: Next.js 15 App Router, TypeScript, TailwindCSS
- Blog System: MDX-powered blog with syntax highlighting
- Travel Stories: Dedicated section for travel experiences
- SEO Optimized: Meta tags, OpenGraph, and semantic HTML
- Dark Mode: Beautiful dark theme with smooth transitions
- Animations: Framer Motion for smooth, professional animations
- Responsive: Mobile-first design that works on all devices
- Performance: Optimized images, code splitting, and lazy loading
- Type Safe: Full TypeScript coverage
- Design System: Reusable UI components with shadcn/ui
- Node.js 18+ and npm/yarn/pnpm
- Git
- Clone the repository (if not already done)
git clone <your-repo-url>
cd portfolio- Install dependencies
npm install
# or
yarn install
# or
pnpm install- Run the development server
npm run dev
# or
yarn dev
# or
pnpm dev- Open your browser
Navigate to http://localhost:3000
portfolio/
βββ app/ # Next.js app directory
β βββ layout.tsx # Root layout with header/footer
β βββ page.tsx # Home page
β βββ globals.css # Global styles
β βββ about/ # About page
β βββ projects/ # Projects page
β βββ blog/ # Blog listing and posts
β β βββ [slug]/ # Dynamic blog post pages
β βββ travel/ # Travel stories listing and posts
β βββ [slug]/ # Dynamic travel story pages
βββ components/ # React components
β βββ ui/ # shadcn UI components
β β βββ button.tsx
β β βββ card.tsx
β βββ Header.tsx # Navigation header
β βββ Footer.tsx # Site footer
β βββ ProjectCard.tsx # Project display card
β βββ BlogCard.tsx # Blog post card
β βββ TravelCard.tsx # Travel story card
β βββ MDXContent.tsx # MDX content renderer
βββ content/ # MDX content
β βββ blog/ # Blog posts
β β βββ getting-started-with-nextjs.mdx
β β βββ mastering-typescript.mdx
β β βββ react-performance-optimization.mdx
β βββ travel/ # Travel stories
β βββ tokyo-adventures.mdx
β βββ iceland-road-trip.mdx
β βββ bali-serenity.mdx
βββ lib/ # Utility functions
β βββ utils.ts # Utility helpers
β βββ mdx.ts # MDX processing
β βββ data.ts # Site data (projects, experience, etc.)
βββ public/ # Static assets
βββ package.json # Dependencies
βββ tsconfig.json # TypeScript config
βββ tailwind.config.ts # Tailwind CSS config
βββ next.config.js # Next.js config
Edit lib/data.ts to update your personal information:
export const personalInfo = {
name: "Your Name",
role: "Your Role",
tagline: "Your tagline",
email: "your@email.com",
// ... more fields
}Add or modify projects in lib/data.ts:
export const projects = [
{
title: "Project Name",
description: "Project description",
image: "image-url",
tags: ["React", "Next.js"],
liveUrl: "https://...",
githubUrl: "https://...",
featured: true,
},
// ... more projects
]Create new blog posts in content/blog/:
---
title: "Your Blog Post Title"
date: "2024-11-26"
description: "Brief description"
tags: ["JavaScript", "React"]
---
# Your Blog Post Title
Your content here...Create new travel stories in content/travel/:
---
title: "Your Travel Story"
date: "2024-11-26"
location: "City"
country: "Country"
description: "Brief description"
coverImage: "image-url"
---
# Your Travel Story
Your story here...Modify colors in tailwind.config.ts and app/globals.css:
:root {
--primary: 222.2 47.4% 11.2%;
--secondary: 210 40% 96.1%;
/* ... more colors */
}All UI components are in the components/ directory. They use shadcn/ui patterns and can be easily customized.
- Create a new
.mdxfile incontent/blog/ - Add frontmatter with required fields
- Write your content using Markdown/MDX
- The blog will automatically include it
- Create a new
.mdxfile incontent/travel/ - Add frontmatter with required fields (including
coverImage) - Write your story using Markdown/MDX
- The travel page will automatically include it
- Syntax Highlighting: Code blocks are automatically highlighted
- GitHub Flavored Markdown: Tables, task lists, strikethrough
- Custom Components: Use React components in your MDX
- Auto-linking Headings: Headings get automatic anchor links
The site includes:
- Dynamic meta tags for each page
- OpenGraph tags for social sharing
- Twitter Card support
- Semantic HTML structure
- Automatic sitemap generation
- Reading time calculation
- Structured data (can be extended)
- Push your code to GitHub
- Import project in Vercel
- Deploy with one click
- Connect custom domain (optional)
- Push your code to GitHub
- Import project in Netlify
- Build command:
npm run build - Publish directory:
.next - Deploy
Build the production version:
npm run build
npm run startThe site will be available on http://localhost:3000
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint- Framework: Next.js 15
- Language: TypeScript
- Styling: TailwindCSS
- UI Components: shadcn/ui
- Content: MDX
- Animations: Framer Motion
- Icons: Lucide React
- Syntax Highlighting: rehype-highlight
{
"next": "^15.0.0",
"react": "^18.3.1",
"typescript": "^5",
"tailwindcss": "^3.4.1",
"framer-motion": "^11.0.0",
"next-mdx-remote": "^4.4.1",
"gray-matter": "^4.0.3",
"rehype-highlight": "^7.0.0"
}The design follows these principles:
- Clean & Minimal: Focus on content, not clutter
- Professional: Suitable for showcasing work
- Modern: Contemporary design patterns
- Accessible: WCAG compliant, keyboard navigable
- Performant: Fast loading, optimized assets
- Responsive: Mobile-first approach
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Mobile browsers (iOS Safari, Chrome)
This is a personal portfolio template. Feel free to:
- Fork and customize for your own use
- Report bugs or issues
- Suggest improvements
- Share your customized version
This project is open source and available under the MIT License.
- Images: Use optimized images (WebP format recommended)
- Content: Keep blog posts under 2000 words for better engagement
- SEO: Use descriptive titles and meta descriptions
- Performance: Test with Lighthouse regularly
- Accessibility: Always include alt text for images
- Git: Commit regularly with descriptive messages
- Clear
.nextfolder:rm -rf .next - Delete
node_modulesand reinstall:rm -rf node_modules && npm install - Check TypeScript errors:
npm run build
- Check frontmatter format (must be valid YAML)
- Ensure file extension is
.mdx - Verify file is in correct directory (
content/blogorcontent/travel)
- Clear Tailwind cache:
rm -rf .next - Check class names for typos
- Verify Tailwind config is correct
For issues or questions:
- Check this README
- Review the code comments
- Check Next.js documentation
- Open an issue on GitHub
- Design inspiration from various modern portfolio websites
- Built with amazing open-source tools
- Icons from Lucide
- Images from Unsplash
Built with β€οΈ using Next.js and TypeScript
Happy coding! π