Next.js 15 + React 19 + TypeScript + Prisma competitive programming platform.
- Performance: Server Components by default, selective Prisma fields, ISR/SWR caching
- No Regression: Run
pnpm check-types && pnpm lint && pnpm testbefore commits - Maintainability: Follow existing patterns, strict TypeScript, Zod validation
// Server Component (default) - direct Prisma
const tasks = await prisma.task.findMany({
where: { private: false },
select: { id: true, title: true } // Always select specific fields
})
// Client Component - only when needed
'use client' // forms, useState, useEffect, browser APIs
// API Routes - always validate with Zod
const result = Schema.safeParse(input)
if (!result.success) return Response.json({ error: 'Invalid' }, { status: 400 })
// Auth - use getServerUser() from @/lib/session
// Prisma - import from @/lib/prisma (singleton)pnpm dev # Dev server (Turbopack)
pnpm check-types # TypeScript check
pnpm lint # ESLint
pnpm test # Vitest- Prisma: Always
@/lib/prisma, always useselect - Auth:
getServerUser()for server-side, checkuser.adminfor admin routes - Files: Presigned S3 URLs only, sanitize paths
- Dark mode:
dark:Tailwind variants