-> View demo: news.mongodb.com
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.
- 🔐 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
Click the "Deploy" button to clone this repo, create a new Vercel project, setup the MongoDB integration, and provision a new MongoDB database:
Install the dependencies:
npm install
cp .env.example .env
Update the .env
file with your configuration:
# MongoDB connection string from Atlas Dashboard
MONGODB_URI=mongodb+srv://<username>:<password>@<cluster-url>/<database>?retryWrites=true&w=majority
MONGODB_DB=better-auth
# Better Auth configuration
BETTER_AUTH_URL=http://localhost:3000
BETTER_AUTH_SECRET=your-secure-secret-key-here-minimum-32-characters
npm run setup-indexes
npm run dev
Open http://localhost:3000 with your browser to see the result.
- 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
├── 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
- 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
- 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_cache
and revalidation - Pagination: URL-based pagination with smooth navigation
- 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
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
Commit and push your code changes to your GitHub repository to automatically trigger a new deployment.