43 lines
1.8 KiB
Markdown
43 lines
1.8 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project
|
|
|
|
Eyrun is an API-only service built with Node.js, TypeScript, Fastify, and PostgreSQL (via Drizzle ORM).
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
pnpm dev # Start dev server with hot reload (tsx watch)
|
|
pnpm build # Compile TypeScript to dist/
|
|
pnpm start # Run compiled output (node dist/server.js)
|
|
pnpm db:generate # Generate migration files from schema changes
|
|
pnpm db:migrate # Apply pending migrations to the database
|
|
pnpm db:studio # Open Drizzle Studio (visual DB browser)
|
|
```
|
|
|
|
## Architecture
|
|
|
|
**Entry point**: `src/server.ts` creates the app and starts listening.
|
|
|
|
**App factory**: `src/app.ts` — `buildApp()` creates a Fastify instance, registers plugins and routes. This pattern makes it easy to create separate instances for testing.
|
|
|
|
**Config**: `src/config.ts` loads `.env` and validates with Zod. Required env vars: `DATABASE_URL`, `PORT`, `HOST`.
|
|
|
|
**Database**: Drizzle ORM with `postgres` (postgres.js) driver.
|
|
- `src/db/schema.ts` — all table definitions go here
|
|
- `src/db/index.ts` — exports the `db` client with schema attached
|
|
- `src/db/migrate.ts` — standalone migration runner
|
|
- `drizzle.config.ts` — Drizzle Kit config at project root
|
|
|
|
**Routes**: `src/routes/` — each file exports an async Fastify plugin function. Register new route files in `src/routes/index.ts`.
|
|
|
|
**Plugins**: `src/plugins/` — Fastify plugins (error handling, etc). Registered in `app.ts`.
|
|
|
|
## Conventions
|
|
|
|
- ESM (`"type": "module"` in package.json) — use `.js` extensions in all imports
|
|
- All Drizzle table definitions go in `src/db/schema.ts`
|
|
- After modifying the schema, run `pnpm db:generate` then `pnpm db:migrate`
|