Next.js tutorial 2025

Next.js Tutorial for Beginners: Create a Simple Blog App with Tailwind CSS

πŸš€ Introduction

In this tutorial, you’ll learn how to create a simple blog app using Next.js 14 and Tailwind CSS. This step-by-step guide is perfect for beginners who want to understand Next.js fundamentals like routing, pages, dynamic routes, and styling.

πŸ“¦ Step 1: Create a New Next.js App

npx create-next-app@latest simple-blog-app

Follow the prompts:

  • TypeScript: No
  • App Router: Yes
  • Tailwind CSS: Yes

πŸ“‚ Step 2: Folder Structure

simple-blog-app/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ page.js           β†’ Home Page
β”‚   β”œβ”€β”€ about/page.js     β†’ About Page
β”‚   β”œβ”€β”€ blog/page.js      β†’ Blog List
β”‚   └── blog/[slug]/page.js β†’ Blog Post (Dynamic)
β”œβ”€β”€ components/Navbar.js
β”œβ”€β”€ data/posts.js

πŸ“ Step 3: Add Dummy Blog Data

// data/posts.js
export const posts = [
  {
    slug: "nextjs-introduction",
    title: "Getting Started with Next.js",
    content: "Next.js is a React framework for production..."
  },
  {
    slug: "tailwind-setup",
    title: "Using Tailwind CSS with Next.js",
    content: "Tailwind makes styling easy and fast..."
  }
];

🧩 Step 4: Create Navbar Component

// components/Navbar.js
import Link from "next/link";

export default function Navbar() {
  return (
    <nav className="bg-blue-600 text-white p-4">
      <div className="max-w-5xl mx-auto flex gap-4">
        <Link href="/">Home</Link>
        <Link href="/about">About</Link>
        <Link href="/blog">Blog</Link>
      </div>
    </nav>
  );
}

🏠 Step 5: Home Page

// app/page.js
import Navbar from "../components/Navbar";

export default function Home() {
  return (
    <>
      <Navbar />
      <main className="max-w-5xl mx-auto p-4">
        <h1 className="text-3xl font-bold">Welcome to Simple Blog</h1>
        <p className="mt-2">A blog built with Next.js and Tailwind CSS.</p>
      </main>
    </>
  );
}

πŸ“„ Step 6: About Page

// app/about/page.js
import Navbar from "../../components/Navbar";

export default function About() {
  return (
    <>
      <Navbar />
      <main className="max-w-5xl mx-auto p-4">
        <h1 className="text-2xl font-semibold">About Us</h1>
        <p className="mt-2">This is a demo blog made with Next.js 14.</p>
      </main>
    </>
  );
}

πŸ“ Step 7: Blog List Page

// app/blog/page.js
import { posts } from "../../data/posts";
import Link from "next/link";
import Navbar from "../../components/Navbar";

export default function Blog() {
  return (
    <>
      <Navbar />
      <main className="max-w-5xl mx-auto p-4">
        <h1 className="text-2xl font-semibold mb-4">Blog Posts</h1>
        <ul className="space-y-3">
          {posts.map((post) => (
            <li key={post.slug}>
              <Link href={`/blog/${post.slug}`} className="text-blue-600 hover:underline">
                {post.title}
              </Link>
            </li>
          ))}
        </ul>
      </main>
    </>
  );
}

πŸ” Step 8: Dynamic Blog Post Page

// app/blog/[slug]/page.js
import { posts } from "../../../data/posts";
import Navbar from "../../../components/Navbar";

export default function Post({ params }) {
  const post = posts.find((p) => p.slug === params.slug);

  if (!post) return <p>Post not found!</p>;

  return (
    <>
      <Navbar />
      <main className="max-w-5xl mx-auto p-4">
        <h1 className="text-2xl font-bold">{post.title}</h1>
        <p className="mt-2">{post.content}</p>
      </main>
    </>
  );
}

πŸš€ Step 9: Deploy on Vercel

Run the following command to deploy your app on Vercel:

npx vercel

Or sign up on https://vercel.com and import your GitHub repo.

πŸŽ‰ Final Thoughts

This tutorial helped you build a complete blog website using Next.js and Tailwind CSS. You’ve learned about routing, components, and dynamic pages. Now you can expand it with features like markdown blogs, CMS integration, or Firebase.

Happy Coding! πŸš€

Leave a Reply