- ST-001: Next.js 16 + React 19 + TypeScript strict + Tailwind + shadcn/ui + all deps - ST-002: Prisma v7 setup with better-sqlite3 adapter (local) and pg adapter (cloud) - ST-003: Full schema migration (users, pbis, stories, sprints, tasks, todos, api_tokens) - ST-004: Seed with 9 PBIs, ~40 stories, demo user (demo/demo1234), lars user - ST-005: Zod-validated env vars, .env.example, lib/session, lib/auth, lib/api-auth Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
18 lines
609 B
TypeScript
18 lines
609 B
TypeScript
import { z } from 'zod'
|
|
|
|
const envSchema = z.object({
|
|
DATABASE_URL: z.string().min(1, 'DATABASE_URL is required'),
|
|
DIRECT_URL: z.string().optional(),
|
|
SESSION_SECRET: z.string().min(32, 'SESSION_SECRET must be at least 32 characters'),
|
|
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
})
|
|
|
|
const parsed = envSchema.safeParse(process.env)
|
|
|
|
if (!parsed.success) {
|
|
console.error('❌ Invalid environment variables:')
|
|
console.error(parsed.error.flatten().fieldErrors)
|
|
throw new Error('Invalid environment variables. Check .env.local.')
|
|
}
|
|
|
|
export const env = parsed.data
|