A modern, responsive blog application built with Next.js, MDX, Tailwind CSS, and Framer Motion. This blog features dark mode support, dynamic content generation from Markdown (MDX), and SEO enhancements with a sitemap and robots.txt.
- Dark Mode Support: Toggle between dark and light themes.
- Dynamic Content with MDX: Write blog posts using Markdown (MDX) and render them as dynamic pages.
- SEO-Optimized: Automatically generates
sitemap.xml
androbots.txt
for improved search engine visibility. - Responsive Design: Optimized for mobile and desktop with a clean, responsive UI.
- Smooth Animations: Includes beautiful animations using Framer Motion.
- Tag-based categorization: Organize posts with tags like
#reactjs
or#nextjs
.
You can view the live demo of this blog at https://blog.milansachani.dev/.
You can view the live demo of this blog app test cases Milan-Blog-Test
- Features
- Demo
- Getting Started
- Project Structure
- Writing a Blog Post
- Environment Variables
- Scripts
- Contributing
- License
To get started, clone this repository and install the dependencies:
git clone https://github.com/Milan-960/nextjs-blog-app.git
cd my-blog-app
npm install
- To run the project locally:
npm run dev
- The app will be available at http://localhost:3000.
The main files and folders:
my-blog-app/
βββ content/ # Blog posts written in MDX
β βββ first-post.mdx
βββ src/
β βββ app/
β β βββ layout.tsx # Layout component for the blog
β β βββ page.tsx # Homepage rendering the list of blog posts
β β βββ [slug].tsx # Dynamic blog post pages
β βββ components/
β β βββ Card.tsx # Blog post card component
β β βββ DarkModeToggle.tsx # Dark mode toggle component
β β βββ Navbar.tsx # Navbar component
β βββ scripts/
β β βββ sitemap.mjs # Sitemap generation script
β βββ utils/
β βββ getAllPosts.ts # Utility to fetch all MDX blog posts
βββ public/
β βββ images/ # Blog post images and assets
β βββ favicon.ico
β βββ robots.txt # SEO robots.txt file
βββ .env # Environment variables for project
βββ tailwind.config.ts # Tailwind CSS configuration
βββ next.config.mjs # Next.js configuration with MDX and other plugins
βββ tsconfig.json # TypeScript configuration
βββ package.json # Project scripts and dependencies
- Blog posts are written in the content/ folder using MDX. Example blog post:
---
title: "First Blog Post"
description: "This is a brief introduction to my first blog post."
tags: ["#reactjs", "#nextjs"]
img: "/images/blog1.jpg"
---
# Welcome to My First Post
This is a sample blog post written in **MDX**. You can use Markdown and JSX together to create dynamic content.
You can also include images and components inside your posts.
- You will need to set up a .env file in the root of your project with the following values:
NEXT_PUBLIC_BASE_URL=https://yourblogdomain.com
npm run dev
: Starts the development server at http://localhost:3000.npm run build
: Builds the application for production.npm run start
: Runs the production build.npm run lint
: Runs ESLint to check for issues.
This project is easily deployable on platforms like Vercel. Make sure to configure your environment variables in the Vercel dashboard.
The sitemap is generated automatically during the build step. You can view the sitemap at /sitemap.xml in production. This helps search engines crawl and index your pages.
Users can toggle between dark and light mode using the built-in toggle. The theme is automatically saved in localStorage.
Contributions, issues, and feature requests are welcome! Feel free to check the issues page if you want to contribute.
This project is licensed under the MIT License. See the LICENSE file for more details.
- Update the necessary links: Replace placeholder links like
https://yourblogdomain.com
with your actual domain or GitHub repository URL. - Personalize the description: Tailor the introduction and features list based on your preferences.
- Add a License: You can include an open-source license like MIT or any other license based on your requirements.
This template should be good to go for sharing on GitHub as a community project!