
-> View demo: mongodb-news-template-nextjs.vercel.app
Next.js with MongoDB and Better Auth
A modern full-stack template for building React applications using Next.js, MongoDB, and Better Auth for authentication. Features a Hacker News-style post submission and voting system with optimistic updates, server actions, and email/password authentication.
Features
- š Authentication: Email/password authentication with Better Auth
- š Post System: Hacker News-style post submission and voting
- ā” Optimistic Updates: Real-time UI updates with React's useOptimistic
- šØ Modern UI: Built with shadcn/ui and Tailwind CSS
- š± Responsive Design: Mobile-first design with dark mode support
- šļø MongoDB Integration: Native MongoDB driver with optimized queries
- š Server Actions: Form handling without client-side API calls
- š Real-time Status: Database connection monitoring
- š Production Ready: TypeScript, ESLint, and Vercel deployment optimized
Getting Started
Click the "Deploy" button to clone this repo, create a new Vercel project, setup the MongoDB integration, and provision a new MongoDB database:
Local Setup
Installation
Install the dependencies:
npm install
Development
Create a .env file in the project root
cp .env.example .env
Configure environment variables
Update the .env file with your configuration:
# MongoDB connection string from Atlas DashboardMONGODB_URI=mongodb+srv://<username>:<password>@<cluster-url>/<database>?retryWrites=true&w=majorityMONGODB_DB=better-auth# Better Auth configurationBETTER_AUTH_URL=http://localhost:3000BETTER_AUTH_SECRET=your-secure-secret-key-here-minimum-32-characters
Setup database indexes (optional for production)
npm run setup-indexes
Start the development server
npm run dev
Open http://localhost:3000 with your browser to see the result.
Tech Stack
- Framework: Next.js 15 with App Router
- Database: MongoDB with native Node.js driver
- Authentication: Better Auth with email/password
- Styling: Tailwind CSS with shadcn/ui
- Forms: React Hook Form with Zod validation
- Icons: Lucide React
- Notifications: Sonner
- Deployment: Vercel
Project Structure
āāā app/ # Next.js App Routerā āāā api/auth/ # Better Auth API routesā āāā login/ # Login pageā āāā signup/ # Signup pageā āāā page.tsx # Home pageāāā components/ # React componentsā āāā ui/ # shadcn/ui componentsā āāā PostItem.tsx # Individual post with votingā āāā PostListServer.tsx # Server-side post listā āāā PostSection.tsx # Post section wrapperā āāā ... # Other componentsāāā lib/ # Core utilitiesā āāā auth.ts # Better Auth configurationā āāā auth-client.ts # Client-side auth methodsā āāā mongodb.ts # Database connectionā āāā posts.ts # Post data functionsā āāā actions.ts # Server actionsā āāā schemas.ts # Zod validation schemasāāā scripts/ # Utility scriptsāāā setup-indexes.mjs # Database index setup
Key Features Explained
Authentication System
- Email/Password: Secure login with email and password
- Form Validation: Password requirements and email validation
- Session Management: Secure session handling with MongoDB storage
- User Profiles: User account management with Better Auth
Post Management
- Real-time Voting: Optimistic UI updates using React's
useOptimistic - Server Actions: Form submissions without client-side API calls
- Caching: Strategic caching with Next.js
unstable_cacheand revalidation - Pagination: URL-based pagination with smooth navigation
Modern React Patterns
- Server Components: SEO-friendly server-side rendering
- Client Components: Interactive elements with proper hydration boundaries
- Suspense: Loading states for better user experience
- Form Validation: Type-safe forms with React Hook Form and Zod
Learn More
To learn more about the technologies used in this template:
- Next.js Documentation - learn about Next.js features and API
- Better Auth Documentation - authentication and session management
- MongoDB Documentation - database features and APIs
- shadcn/ui Documentation - component library and design system
- Tailwind CSS Documentation - utility-first CSS framework
Deploy on Vercel
Commit and push your code changes to your GitHub repository to automatically trigger a new deployment.
