diff --git a/AGENTS.md b/AGENTS.md index f71b199..0ecc2f8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,172 +1,26 @@ -# AGENTS.md - Agent Coding Guidelines +# AGENTS.md -This document provides guidelines for agents working on the OpenFrame project. +## Must-follow constraints +- Use `bun` only. Do not use `npm` or `pnpm`. +- Do not start the dev server (`bun run dev`); assume it is already running. +- If you change `prisma/schema.prisma`, run `bun run db:generate`. +- In App Router dynamic routes, keep `params` typed as `Promise<...>` and `await params` in handlers/pages. -## Project Overview +## Validation before finishing +- Run `bun run check`. +- Run `bun test ` for changed behavior; run `bun test` when changes are cross-cutting. -OpenFrame is a Next.js 16 video sharing platform with: -- Next.js 16 App Router, TypeScript with strict mode, Tailwind CSS v4 -- Prisma ORM with PostgreSQL, NextAuth v5 (Auth.js), shadcn/ui components +## Repo-specific conventions +- Use `auth()` from `@/lib/auth` for server-side session reads. +- Use `checkProjectAccess()` / `checkWorkspaceAccess()` for authorization instead of ad-hoc role checks. +- For API responses, use `successResponse` / `apiErrors` from `@/lib/api-response`. +- Keep API and UI imports on `@/` aliases when available. ---- +## Important locations +- Custom SQL not managed by Prisma migrations: `prisma/migrations/*.sql` and runner `scripts/db-extras.ts`. +- Shared API response helpers: `lib/api-response.ts`. +- Auth + access-control helpers: `lib/auth.ts`. -## Build & Development Commands - -### Core Commands - -```bash -bun run dev # Start Next.js dev server -bun run build # Build for production (runs typecheck first) -bun run typecheck # Run TypeScript type checking only -bun run lint # Run ESLint -bun run check # typecheck + lint you should run this one -bun test # Run all tests -bun test path/to/test.ts # Run specific test file -``` - -### Database Commands - -```bash -bun run db:generate # Generate Prisma client -bun run db:push # Push schema to database -bun run db:migrate # Run database migrations -bun run db:seed # Seed database -bun run db:setup # Full DB setup: generate + push + extras -``` - -### Important Notes - -- **Always use bun** - Never use npm or pnpm. -- Pre-build runs typecheck automatically via `prebuild` script. -- Post-install runs `prisma generate` automatically. -- Do not run dev server. Assume already running. - ---- - -## Code Style Guidelines - -### TypeScript - -- **Strict mode enabled** - All TypeScript strict checks are on -- Use explicit types for function parameters and return types -- Use `interface` for public APIs, `type` for unions/intersections -- Avoid `any` - use `unknown` when type is truly unknown -- Use optional chaining (`?.`) and nullish coalescing (`??`) - -```typescript -// Good -function getUserById(id: string): Promise -const name = user?.name ?? 'Anonymous' - -// Avoid -function getUser(id) // Missing types -``` - -### Imports & Path Aliases - -- Use `@/` prefix for absolute imports (configured in tsconfig.json) -- Order: React/Next → External libs → Internal modules (@/) → Relative - -```typescript -import { useState, useEffect } from 'react' -import { z } from 'zod' -import { db } from '@/lib/db' -import { cn } from '@/lib/utils' -``` - -### Components - -- Use functional components with TypeScript -- Use shadcn/ui components from `components/ui/` -- Use `cva` (class-variance-authority) for component variants -- Use Radix UI primitives for accessible interactive components - -```typescript -import { cva, type VariantProps } from "class-variance-authority" -import { cn } from "@/lib/utils" - -const buttonVariants = cva("...", { - variants: { - variant: { default: "...", destructive: "..." }, - size: { default: "...", sm: "..." }, - }, - defaultVariants: { variant: "default", size: "default" }, -}) - -function Button({ className, variant, size, ...props }: ButtonProps) { - return