What Is NextJS? Why Would You Use It?
Key Features & Benefits Of NextJS
Creating a First NextJS App
NextJS vs "Just React" - Analyzing The NextJS Project
Pages Router vs App Router - One Framework Two Approaches
How To Get The Most Out Of This Course
Learning Community & Course Resources
What Is React & Why Would You Use It?
React Projects - Requirements
Understanding How React Works
Building A First Custom Component
Outputting Dynamic Values
Passing Data to Components with Props
CSS Styling & CSS Modules
Exercise & Another Component
Preparing the App For State Management
The Special "children" Prop
State & Conditional Content
Adding a Shared Header & More State Management
Updating State Based On Previous State
Adding a Backend to the React SPA
Sending a POST HTTP Request
Handling Side Effects with useEffect()
Understanding & Adding Routing
Working with Layout Routes
Refactoring Route Components & More Nesting
Data Fetching via loader()s
Submitting Data with action()s
IMPORTANT -- LEGACY CONTENT BELOW
Why ReactJS & A First Demo
Building Single-Page Applications (SPAs)
Creating a New React Project
Diving Into The Created Project
How React Works & Understanding Components
More Component Work & Styling With CSS Classes
Building & Re-using Components
Passing Data With Props & Dynamic Content
Working with "Event Props"
Use The Right React Router Version
Adding Links & Navigation
Scoping Component Styles With CSS Modules
Outputting Lists Of Data & Components
Adding Even More Components
Creating "Wrapper" Components
Getting User Input & Handling Form Submission
Preparing The App For Http Requests & Adding a Backend
Sending a POST Http Request
Navigating Programmatically
Getting Started with Fetching Data
Using the "useEffect" Hook
Introducing React Context
Updating State Based On Previous State
Using Context In Components
Understanding File-based Routing & React Server Components
Adding Another Route via the File System
Navigating Between Pages - Wrong & Right Solution
Working with Pages & Layouts
Reserved File Names Custom Components & How To Organize A NextJS Project
Configuring Dynamic Routes & Using Route Parameters
Onwards to the Main Project: The Foodies App
Revisiting The Concept Of Layouts
Adding a Custom Component To A Layout
Styling NextJS Project: Your Options & Using CSS Modules
Optimizing Images with the NextJS Image Component
Using More Custom Components
Populating The Starting Page Content
Preparing an Image Slideshow
React Server Components vs Client Components - When To Use What
Using Client Components Efficiently
Outputting Meals Data & Images With Unknown Dimensions
Setting Up A SQLite Database
Fetching Data By Leveraging NextJS & Fullstack Capabilities
Using Suspense & Streamed Responses For Granular Loading State Management
Handling "Not Found" States
Loading & Rendering Meal Details via Dynamic Routes & Route Parameters
Throwing Not Found Errors For Individual Meals
Getting Started with the "Share Meal" Form
Getting Started with a Custom Image Picker Input Component
Adding an Image Preview to the Picker
Improving the Image Picker Component
Introducing & Using Server Actions for Handling Form Submissions
Storing Server Actions in Separate Files
Creating a Slug & Sanitizing User Input for XSS Protection
Storing Uploaded Images & Storing Data in the Database
Managing the Form Submission Status with useFormStatus
Adding Server-Side Input Validation
Working with Server Action Responses & useFormState
Building For Production & Understanding NextJS Caching
Triggering Cache Revalidations
Don't Store Files Locally On The Filesystem!
Bonus: Storing Uploaded Images In The Cloud (AWS S3)
From App Router To Pages Router
What Is "File-based Routing"? And Why Is It Helpful?
Adding a Named / Static Route File
Working with Nested Paths & Routes
Adding Dynamic Paths & Routes
Extracting Dynamic Path Segment Data (Dynamic Routes)
Building Nested Dynamic Routes & Paths
Navigating with the "Link" Component
Navigating To Dynamic Routes
A Different Way Of Setting Link Hrefs
Navigating Programmatically
Setting Up The Main Pages
Adding Dummy Data & Static Files
Adding Regular React Components
Adding More React Components & Connecting Components
Styling Components In Next.js Projects
Adding the "Event Detail" Page (Dynamic Route)
Adding a General Layout Wrapper Component
Working on the "All Events" Page
Adding a Filter Form for Filtering Events
Navigating to the "Filtered Events" Page Progammatically
Extracting Data on the Catch-All Page
The Problem With Traditional React Apps (and Data Fetching)
How NextJS Prepares & Pre-renders Pages
Introducing Static Generation with "getStaticProps"
NextJS Pre-renders By Default!
Adding "getStaticProps" To Pages
Running Server-side Code & Using the Filesystem
Utilizing Incremental Static Generation (ISR)
ISR: A Look Behind The Scenes
A Closer Look At "getStaticProps" & Configuration Options
Working With Dynamic Parameters
Introducing "getStaticPaths" For Dynamic Pages
"getStaticPaths" & Link Prefetching: Behind The Scenes
Working With Fallback Pages
Loading Paths Dynamically
Fallback Pages & "Not Found" Pages
Introducing "getServerSideProps" for Server-side Rendering (SSR)
Using "getServerSideProps" for Server-side Rendering
"getServerSideProps" and its Context
Dynamic Pages & "getServerSideProps"
"getServerSideProps": Behind The Scenes
Introducing Client-Side Data Fetching (And When To Use It)
Implementing Client-Side Data Fetching
Using the "useSWR" NextJS Hook
Combining Pre-Fetching With Client-Side Fetching
Analyzing the Need for "head" Metadata
Configuring the "head" Content
Adding Dynamic "head" Content
Reusing Logic Inside A Component
Working with the "_app.js" File (and Why)
The "_document.js" File (And What It Does)
A Closer Look At Our Images
Optimizing Images with the "Next Image" Component & Feature
Taking A Look At The "Next Image" Documentation
Writing Our First API Route
Preparing the Frontend Form
Parsing The Incoming Request & Executing Server-side Code
Sending Requests To API Routes
Using API Routes To Get Data
Using API Routes For Pre-Rendering Pages
Creating & Using Dynamic API Routes
Exploring Different Ways Of Structuring API Route Files
Starting Setup & A Challenge For You!
Adding a Newsletter Route
Adding Comments API Routes
Connecting the Frontend To the Comments API Routes
Setting Up A MongoDB Database
Running MongoDB Queries From Inside API Routes
Inserting Comments Into The Database
Getting Data From The Database
A Final Note On MongoDB Connections
Improvement: Getting Comments For A Specific Event
Setting Up The Core Pages
Getting Started With The Home Page
Adding The "Hero" Component
Adding Layout & Navigation
Time To Add Styling & A Logo
Starting Work On The "Featured Posts" Part
Adding A Post Grid & Post Items
Rendering Dummy Post Data
Adding the "All Posts" Page
Working On The "Post Detail" Page
Rendering Markdown As JSX
Adding Markdown Files As A Data Source
Adding Functions To Read & Fetch Data From Markdown Files
Using Markdown Data For Rendering Posts
Rendering Dynamic Post Pages & Paths
Rendering Custom HTML Elements with React Markdown
Rendering Images With The "Next Image" Component (From Markdown)
Rendering Code Snippets From Markdown
Preparing The Contact Form
Adding The Contact API Route
Sending Data From The Client To The API Route
Storing Messages With MongoDB In A Database
Adding UI Feedback With Notifications
Adding A "_document.js" File
Building NextJS Apps: Your Options
Checking & Optimizing Our Code
The NextJS Config File & Working With Environment Variables
Running a Test Build & Reducing Code Size
A Full Deployment Example (To Vercel)
A Note On Github & Secret Credentials
Using the "export" Feature
How Does Authentication Work (In React & NextJS Apps)?
Must Read: Install the Right next-auth Version
Using The "next-auth" Library
Adding A User Signup API Route
Sending Signup Requests From The Frontend
Improving Signup With Unique Email Addresses
Adding the "Credentials Auth Provider" & User Login Logic
Sending a "Signin" Request From The Frontend
Managing Active Session (On The Frontend)
Adding Client-Side Page Guards (Route Protection)
Adding Server-Side Page Guards (And When To Use Which Approach)
Protecting the "Auth" Page
Using the "next-auth" Session Provider Component
Analyzing Further Authentication Requirements
Adding the "Change Password" Logic
Sending a "Change Password" Request From The Frontend
Module Summary & Final Steps
Key Feature: Server-side (Pre-) Rendering of Pages
Key Feature: File-based Routing
Key Feature: Build Fullstack Apps With Ease
Creating a NextJS Project & IDE Setup
Analyzing the Created Project
Adding First Pages To The Project
Adding Nested Pages / Paths
Extracting Dynamic Route Data
Onwards To A Bigger Project!
Preparing Our Project Pages
Rendering A List Of (Dummy) Meetups
Adding A Form For Adding Meetups
The "_app.js" File & Wrapper Components
Adding Custom Components & Styling With CSS Modules
How NextJS Page Pre-Rendering Actually Works
Introducing Data Fetching For Page Generation (getStaticProps)
More Static Site Generation (SSG) With getStaticProps
Exploring getServerSideProps
Working With Dynamic Path Params In getStaticProps
Dynamic Pages & getStaticProps & getStaticPaths
Connecting & Querying a MongoDB Database
Sending HTTP Requests To API Routes
Getting Data From The Database (For Page Pre-Rendering)
Getting Meetup Detail Data & Paths
Adding "head" Metadata To Pages
Deploying NextJS Projects
Working With Fallback Pages & Re-Deploying