-> 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 seamless GitHub OAuth integration.
- 🔐 Authentication: GitHub OAuth integration 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
# GitHub OAuth credentials (create at https://github.com/settings/developers)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
- Go to GitHub Developer Settings
- Create a new OAuth App
- Set Authorization callback URL to:
http://localhost:3000/api/auth/callback/github
- Copy the Client ID and Client Secret to your
.env
file
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 GitHub OAuth
- 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
- GitHub OAuth: Seamless login with GitHub accounts
- Session Management: Secure session handling with MongoDB storage
- User Profiles: Automatic GitHub username integration
- 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.