Initialize Stage 0: Next.js 16 scaffold with auth and role-based routing

- Next.js 16.2.2 + React 19 + TypeScript + Tailwind v4
- Better Auth with email/password and role system (student/curator/admin)
- Prisma 7 schema: User, Session, Account, Verification + full LMS model
- Role-based dashboards: student /dashboard, curator /curator/dashboard, admin /admin/dashboard
- Auth pages: login, register, verify-email
- Better Auth API route handler
- Middleware for route protection
- Docker Compose with PostgreSQL 16
- Seed script with test users (admin/curator/student)
- CLAUDE.md and ROADMAP.md project documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-07 10:32:37 +05:00
commit 80ca4b2d9d
41 changed files with 10138 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
import "dotenv/config";
import { PrismaClient } from "../src/generated/prisma";
import bcrypt from "bcryptjs";
const prisma = new PrismaClient();
async function main() {
console.log("Seeding database...");
const hashedPassword = await bcrypt.hash("Password123!", 10);
// Admin
const admin = await prisma.user.upsert({
where: { email: "admin@second-brain.ru" },
update: {},
create: {
email: "admin@second-brain.ru",
name: "Администратор",
emailVerified: true,
role: "admin",
accounts: {
create: {
accountId: "admin@second-brain.ru",
providerId: "credential",
password: hashedPassword,
},
},
},
});
// Curator
const curator = await prisma.user.upsert({
where: { email: "curator@second-brain.ru" },
update: {},
create: {
email: "curator@second-brain.ru",
name: "Куратор",
emailVerified: true,
role: "curator",
accounts: {
create: {
accountId: "curator@second-brain.ru",
providerId: "credential",
password: hashedPassword,
},
},
},
});
// Student
const student = await prisma.user.upsert({
where: { email: "student@second-brain.ru" },
update: {},
create: {
email: "student@second-brain.ru",
name: "Ученик",
emailVerified: true,
role: "student",
accounts: {
create: {
accountId: "student@second-brain.ru",
providerId: "credential",
password: hashedPassword,
},
},
},
});
console.log("Created users:");
console.log(` Admin: ${admin.email}`);
console.log(` Curator: ${curator.email}`);
console.log(` Student: ${student.email}`);
console.log(" Password for all: Password123!");
console.log("Done.");
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());