A modern, feature-rich Next.js project bootstrapped with create-next-app
. This starter template includes the latest Next.js 15 features and a comprehensive UI component library to help you build beautiful, performant web applications.
- ⚡️ Next.js 15 with App Router for modern React applications
- 🎨 Tailwind CSS for utility-first styling
- 🌙 Dark mode support with next-themes
- 🎯 TypeScript for enhanced type safety and developer experience
- 📱 Responsive design for all screen sizes
- 🎭 Radix UI components for accessible UI primitives
- 🌐 Internationalization with intlayer for multi-language support
- 📝 Form handling with react-hook-form and zod validation
- 🎨 Beautiful UI components with shadcn/ui
- 🔍 ESLint for code quality and consistency
- 🚀 Turbopack support for faster development experience
- 🔐 Authentication with better-auth for secure user management
- 💾 Database with Drizzle ORM and Neon serverless PostgreSQL
- 🔄 Type-safe database queries with Drizzle's type system
- Node.js 18.17 or later
- npm, yarn, pnpm, or bun package manager
- Clone the repository:
git clone https://github.com/yourusername/nextjs-15-starter.git
cd nextjs-15-starter
- Install dependencies:
npm install
# or
yarn install
# or
pnpm install
# or
bun install
- Start the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
- For faster development with Turbopack:
npm run dev:turbopack
# or
yarn dev:turbopack
# or
pnpm dev:turbopack
# or
bun dev:turbopack
Open http://localhost:3000 with your browser to see the result.
├── src/
│ ├── app/ # App router pages and layouts
│ ├── components/ # Reusable UI components
│ ├── lib/ # Utility functions and shared logic
│ ├── styles/ # Global styles and Tailwind configuration
│ ├── types/ # TypeScript type definitions
│ ├── db/ # Database schema and migrations
│ │ ├── schema/ # Drizzle schema definitions
│ │ └── migrations/ # Database migrations
│ └── auth/ # Authentication configuration
├── public/ # Static assets
├── .env.example # Example environment variables
├── .eslintrc.json # ESLint configuration
├── next.config.js # Next.js configuration
├── tailwind.config.js # Tailwind CSS configuration
└── tsconfig.json # TypeScript configuration
npm run dev
- Start development servernpm run dev:turbopack
- Start development server with Turbopacknpm run build
- Build for productionnpm run start
- Start production servernpm run lint
- Run ESLintnpm run type-check
- Run TypeScript type checking
- Next.js 15 - React framework
- Tailwind CSS - Utility-first CSS framework
- Radix UI - Unstyled, accessible components
- TypeScript - Type-safe JavaScript
- React Hook Form - Form handling
- Zod - Schema validation
- shadcn/ui - Re-usable components
- better-auth - Authentication system
- Drizzle ORM - TypeScript ORM
- Neon - Serverless PostgreSQL database
This project uses intlayer for internationalization. To add new languages:
- Create a new language file in
src/i18n/locales/
- Add the language to the supported languages list
- Update the language switcher component
- Modify
tailwind.config.js
for custom colors and theme settings - Update
src/styles/globals.css
for global styles - Customize components in
src/components/ui/
- Use shadcn/ui CLI to add new components:
npx shadcn-ui@latest add [component-name]
- Create custom components in
src/components/
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out the Next.js deployment documentation for more details.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
This project uses better-auth for authentication. To set up authentication:
- Configure your environment variables:
AUTH_SECRET=your-secret-key
GITHUB_ID=your-github-client-id
GITHUB_SECRET=your-github-client-secret
- Add authentication providers in
src/auth/auth.config.ts
- Use the auth hooks in your components:
import { useSession } from "next-auth/react"
The project uses Drizzle ORM with Neon serverless PostgreSQL:
- Set up your Neon database and get the connection string
- Add the database URL to your environment variables:
DATABASE_URL=your-neon-connection-string
- Generate and run migrations:
npm run db:generate
npm run db:push
- Use Drizzle in your application:
import { db } from "@/db"
import { users } from "@/db/schema"
// Example query
const allUsers = await db.select().from(users)