BlogNest is a modern full-stack blog application where authenticated users can create, view, and interact with blog posts.
Built using Next.js 15 (App Router), it supports SSR, Server Actions, and React Suspense for a fast and optimized experience.
This project includes secure user authentication via Kinde, a clean and responsive UI powered by Tailwind CSS, and a PostgreSQL database managed through Prisma ORM.
- 📝 Post CRUD – Authenticated users can create blog posts with title, content, and image.
- 🔐 Kinde Auth Integration – Secure login, registration, and logout flows.
- ⏳ React Suspense + Skeleton Loaders – Enhanced UX with graceful async loading.
- ⚙️ Next.js Server Actions – Mutate server-side data using
use serverfunctions. - 📦 Prisma + SQL – Strong data modeling and querying with PostgreSQL.
- 🎨 Modern Responsive UI – Built with Tailwind CSS and ShadCN components.
- 📅 Formatted Dates – Posts display human-readable timestamps.
- 🔁 Dynamic Routing – Each post has its own detail page.
- Next.js 15 — React framework with support for server components, server actions, SSR, and routing.
- React 19 — UI library with built-in Suspense support for async rendering.
- Tailwind CSS — Utility-first CSS framework for fast and responsive styling.
- ShadCN UI — Accessible UI components built on Tailwind and Radix UI.
- TypeScript — Strongly typed language that compiles to JavaScript.
- Prisma — Type-safe ORM for working with SQL databases (PostgreSQL).
- Kinde Auth — Authentication and user management platform with Next.js SDK.
- Lucide Icons — Open-source icon set used throughout the UI.
- Full-Stack with App Router – Built entirely with the Next.js 15 App Router, allowing layout-based routing and server-side logic.
- Authentication with Kinde – Clean and secure auth workflows using Kinde SDK and protected routes.
- Server Actions + Revalidation – Uses
serverfunctions ("use server") for form submissions, mutations, and cache revalidation withrevalidatePath(). - React Suspense – Async rendering powered by
Suspense, with fallback skeleton components while fetching data. - Optimized Performance – SSR-enabled pages, efficient database queries via Prisma, and UI feedback through loaders and skeletons.
-
Clone the repository:
git clone https://github.com/Cauebf/blognest.git cd blognest -
Install dependencies:
npm install
-
Set up environment variables:
Create a
.envfile in the root directory and add the following variables:# Prisma database URL DATABASE_URL=your_database_connection_string_here # Kinde Auth configuration KINDE_CLIENT_ID=your_kinde_client_id KINDE_CLIENT_SECRET=your_kinde_client_secret KINDE_ISSUER_URL=your_kinde_issuer_url KINDE_SITE_URL=http://localhost:3000 KINDE_POST_LOGOUT_REDIRECT_URL=http://localhost:3000 KINDE_POST_LOGIN_REDIRECT_URL=http://localhost:3000/dashboard
-
Set up Prisma and the database:
npx prisma generate npx prisma migrate dev --name init
-
Start the development server:
npm run dev
-
Build the app for production:
npm run build npm start
Contributions are welcome! Feel free to open issues or pull requests for any improvements or bug fixes.
For any inquiries or collaboration opportunities, feel free to reach out via:
