A modern, responsive portfolio website built with Next.js, featuring a blog section that automatically parses markdown files.
- 🎨 Modern Design: Clean, responsive design with Tailwind CSS
- 📝 Blog System: Automatic markdown parsing with frontmatter support
- 🏷️ Categories & Tags: Organize blog posts by categories and tags
- ⏱️ Reading Time: Automatic calculation of reading time
- 🔍 Category Filtering: Filter blog posts by category
- 📱 Mobile Responsive: Optimized for all device sizes
- ⚡ Fast Performance: Built with Next.js for optimal performance
- 🖼️ Image Optimization: Automatic image optimization with Next.js Image component
- Framework: Next.js 14 with App Router
- Language: TypeScript
- Styling: Tailwind CSS
- Markdown Parsing: gray-matter, remark
- Date Handling: date-fns
- Node.js 18+
- npm or yarn
- Clone the repository:
git clone <your-repo-url>
cd portfolio-website- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 in your browser.
portfolio-website/
├── content/
│ └── blog/ # Blog posts (markdown files)
├── public/
│ └── images/
│ └── posts/ # Blog post images
├── src/
│ ├── app/ # Next.js app router pages
│ ├── components/ # React components
│ └── lib/ # Utility functions
└── README.md
Place your blog posts in the content/blog/ directory. Each post should be a .md file with the following frontmatter format:
---
title: "Your Blog Post Title"
excerpt: "A brief description of your blog post"
date: "2025-01-20"
author: "Your Name"
category: "Category Name"
tags: ["tag1", "tag2", "tag3"]
image: "/images/posts/your-image.jpg"
featured: false
---
# Your Blog Content
Your markdown content goes here...Place your blog post images in public/images/posts/ and reference them in the frontmatter using the path starting with /images/posts/.
title(required): The title of your blog postexcerpt(required): A brief description for previewsdate(required): Publication date in YYYY-MM-DD formatauthor(required): Author namecategory(required): Post categorytags(required): Array of tagsimage(required): Featured image pathfeatured(optional): Set totrueto feature on homepage
Your blog posts support:
- Headers:
#,##,### - Lists: Ordered and unordered lists
- Code blocks: Syntax highlighting
- Links: Standard markdown links
- Images: Standard markdown images
- Blockquotes:
> Quote text - Bold/Italic:
**bold**,*italic*
Update the following files with your information:
src/components/Header.tsx: Change "Your Name" to your actual namesrc/components/Footer.tsx: Update social links and contact informationsrc/app/about/page.tsx: Update your personal story and experiencesrc/app/contact/page.tsx: Update contact information
The website uses Tailwind CSS. You can customize the design by:
- Modifying the color scheme in
tailwind.config.js - Updating component styles in the respective files
- Adding custom CSS in
src/app/globals.css
Modify blog-related settings in src/lib/markdown.ts:
- Change the posts directory path
- Adjust reading time calculation (currently 200 words per minute)
- Modify sorting behavior
- Push your code to GitHub
- Connect your repository to Vercel
- Deploy automatically
The website can be deployed to any platform that supports Next.js:
- Netlify
- AWS Amplify
- Railway
- DigitalOcean App Platform
The website includes several performance optimizations:
- Static Generation: Blog posts are pre-rendered at build time
- Image Optimization: Automatic image optimization with Next.js
- Code Splitting: Automatic code splitting by Next.js
- SEO Optimization: Proper meta tags and structured data
- Meta tags for each page
- Open Graph tags for social sharing
- Structured data for blog posts
- Sitemap generation (can be added)
- RSS feed (can be added)
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is open source and available under the MIT License.
If you have any questions or need help, please open an issue on GitHub.
Happy blogging! 🚀