Getting started

Quick Start Guide

TL;DR (Fastest Way)

  1. bun install 2) cp .env.example .env.local 3) bun run init 4) bun run dev
bun install && cp .env.example .env.local && bun run init && bun run dev

Get Started with NextJS Base in 10 Minutes

Get Project · Environment Setup · One-Click Initialization · Next Steps


📋 Overview

  • Environment: Node.js 20.9+, PostgreSQL 16+ (or cloud service), recommended package manager: bun.
  • Goal: Complete "Install → Initialize → Start" in 10 minutes.

This guide will help you complete the project's environment setup and startup in 10 minutes.

Prerequisites

ToolVersion RequirementDescription
Node.js20.9+Recommended LTS version
PostgreSQL16+Or use cloud database services (e.g., Supabase, Neon)
bun/pnpm/npm/yarnLatestRecommended: bun
GitLatestVersion control
GitHub Account-For Forking the project

🍴 Get Project

Recommended: This allows you to keep your own modifications while easily receiving upstream updates.

  1. Visit NextJS Base GitHub Repository
  2. Click the Fork button in the top right corner
  3. Select your GitHub account as the target
  4. After Forking, clone your own repository:
# Replace your-username with your GitHub username
git clone https://github.com/your-username/nextjs-base.git my-project
cd my-project
  1. (Optional) Add upstream repository for syncing updates:
git remote add upstream https://github.com/huglemon/nextjs-base.git

# Later sync upstream updates
git fetch upstream
git merge upstream/develop

Method 2: Use Template

If you want to be completely independent without maintaining a connection to the original repository:

  1. Visit NextJS Base GitHub Repository
  2. Click Use this templateCreate a new repository
  3. Fill in your repository name and click create
  4. Clone the newly created repository:
git clone https://github.com/your-username/your-repo-name.git
cd your-repo-name

Method 3: Direct Clone (For Experience Only)

⚠️ Note: Direct cloning cannot push modifications to the original repository, only suitable for quick experience.

git clone https://github.com/huglemon/nextjs-base.git
cd nextjs-base

🔧 Environment Setup

bun install

pnpm install

npm install

yarn install

2. Configure Environment Variables

Copy the environment variable template:

cp .env.example .env.local

Edit the .env.local file:

# Database Connection (Required)
DATABASE_URL="postgresql://username:password@localhost:5432/your_database?schema=public"

# Better Auth Configuration (Required)
BETTER_AUTH_SECRET="your-secret-key-at-least-32-characters"
BETTER_AUTH_URL="http://localhost:3000"

# Cloud Storage (Optional, for asset management)
# Supports: r2, s3, aliyun, qiniu - switch via CDN_MODE
CDN_MODE="r2"
R2_ACCOUNT_ID="your-account-id"
R2_ACCESS_KEY_ID="your-access-key"
R2_SECRET_ACCESS_KEY="your-secret-key"
R2_BUCKET_NAME="your-bucket"
R2_PUBLIC_URL="https://your-bucket.r2.cloudflarestorage.com"
# For more storage service configurations, see /docs/admin/guides/STORAGE

3. Prepare Database

Local PostgreSQL

# Login to PostgreSQL
psql -U postgres

# Create database
CREATE DATABASE your_database;

# Exit
\q

Recommended cloud database services, no local installation required:

ServiceDescriptionFree Tier
SupabaseOpen-source Firebase alternative500MB
NeonServerless PostgreSQL512MB
Vercel PostgresNative Vercel integration256MB

After creating the database, fill in the connection string in .env.local's DATABASE_URL.


🚀 One-Click Initialization

Execute Initialization

Just run one command to complete all initialization work:

bun run init
pnpm run init
npm run init
yarn run init

This command will automatically complete:

  1. ✅ Load .env.local environment variables
  2. ✅ Generate Prisma Client
  3. ✅ Create database table structure
  4. ✅ Import seed data (RBAC permissions, menus, example data)
  5. ✅ Create super admin account (interactive email and password input)
╔═══════════════════════════════════════════════════════════╗
║           NextJS Base Admin - Initialization              ║
╚═══════════════════════════════════════════════════════════╝

[1/4] Checking environment...
   ✓ Loaded environment from .env.local
   ✓ DATABASE_URL found

[2/4] Setting up database schema...
   ✓ Prisma Client generated
   ✓ Database schema created

[3/4] Importing seed data...
   ✓ 43 permissions created
   ✓ 17 menus created
   ✓ 8 roles created
   ✓ 3 example records created

[4/4] Creating super admin account...
   Admin Email: [email protected]
   Admin Password: ********
   ✓ Super admin created

╔═══════════════════════════════════════════════════════════╗
║           ✅ Initialization Completed!                    ║
╚═══════════════════════════════════════════════════════════╝

Non-Interactive Initialization (CI/CD)

If you want to skip interactive input, you can preset admin information via environment variables:

ADMIN_EMAIL=[email protected] ADMIN_PASSWORD=your-password ADMIN_NAME=Administrator bun run init
ADMIN_EMAIL=[email protected] ADMIN_PASSWORD=your-password ADMIN_NAME=Administrator pnpm run init
ADMIN_EMAIL=[email protected] ADMIN_PASSWORD=your-password ADMIN_NAME=Administrator npm run init
ADMIN_EMAIL=[email protected] ADMIN_PASSWORD=your-password ADMIN_NAME=Administrator yarn run init

Step-by-Step Execution

If you want more granular control over the initialization process:

bun run db:generate
bun run db:push
bun run db:seed
bun run db:admin
pnpm run db:generate
pnpm run db:push
pnpm run db:seed
pnpm run db:admin
npm run db:generate
npm run db:push
npm run db:seed
npm run db:admin
yarn run db:generate
yarn run db:push
yarn run db:seed
yarn run db:admin

🎉 Start Project

Development Mode

bun run dev
pnpm run dev
npm run dev
yarn run dev

Access Application

PageAddress
Frontend Homehttp://localhost:3000
Admin Panelhttp://localhost:3000/admin

Use the admin account you created during initialization to log in to the admin panel.

⚠️ Security Tip: Please use a strong password and change it regularly in production!


👤 Super Admin Explanation

What is a Super Admin?

Super admin is the highest-privilege user in the system:

AttributeValueDescription
roleadminBetter Auth's admin role
roles[]No RBAC roles needed
isBackendAllowedtrueAllowed to access admin panel

Important: role: 'admin' has all permissions and does not need RBAC role assignment.

User Type Comparison

TyperolerolesisBackendAllowedDescription
Regular Useruser[]falseCan only access frontend
Admin Useruser['role_id']trueNeeds RBAC role assignment
Super Adminadmin[]trueHas all permissions

📦 Seed Data Explanation

The initialization script imports the following preset data (using fixed IDs, all installation system data is consistent):

RBAC Data

TypeCountDescription
Permissions43Includes CRUD, RBAC, system management permissions
Menus17Dashboard, Example, RBAC, System, Links
Roles8Admin Roles, User Roles and their sub-roles

Preset Roles

Role NameDescription
Super AdminFull permissions
Demo - ReadonlyGlobal read-only
Admin - RBAC Ops (No Delete)RBAC writable but no delete
Demo - RBAC Readonly + Example WriteDemo role

Example Data

TypeCountDescription
Example Data3SmartCrudPage demo data

✅ Verify Installation

Checklist

  • Project starts successfully without errors
  • Can access frontend home page
  • Can access admin login page
  • Can log in with admin account
  • Admin menu displays normally (Dashboard, Example, User & Permission, System, Links)
  • Can access Example > Data Table > Basic page

Common Issues

Database Connection Failed

Check if the DATABASE_URL configuration in .env.local is correct:

DATABASE_URL="postgresql://username:password@host:port/database_name?schema=public"

Ensure:

  • PostgreSQL service is started
  • Username and password are correct
  • Database is created
  • Port number is correct (default 5432)
Initialization Script Error "DATABASE_URL not found"

Ensure .env.local file exists and format is correct:

# Check if file exists
ls -la .env.local

# Check content
cat .env.local

Note:

  • Environment variables should not have extra spaces
  • If values contain special characters, wrap them in double quotes
Prisma Migration Failed

Try resetting the database:

# Reset database (will delete all data)
bunx prisma migrate reset

# Re-run initialization
bun run init
Login Admin Shows No Permission

Ensure your account is a super admin (role: 'admin'), or has been assigned the correct RBAC role.

You can check user data via Prisma Studio:

bun run db:studio
pnpm run db:studio
npm run db:studio
yarn run db:studio
How to Add More Admins?

Method 1: Via Command Line

bun run db:admin
pnpm run db:admin
npm run db:admin
yarn run db:admin

Method 2: Via Admin Panel

Login to Admin → User & Permission → Users → Create User → Set role: admin


🎯 Next Steps

Congratulations on completing project initialization! Next you can:


📜 Available Commands

CommandDescription
bun run initOne-click initialization (recommended)
bun run devStart development server
bun run buildBuild production version
bun run db:generateGenerate Prisma Client
bun run db:pushPush Schema to database
bun run db:migrateExecute database migration
bun run db:studioOpen Prisma Studio
bun run db:seedImport seed data
bun run db:adminCreate super admin