|
1 | | -# Agent Guidelines for albert-plus |
| 1 | +# Development Guidelines for Albert Plus |
2 | 2 |
|
3 | 3 | ## Build/Lint/Test Commands |
4 | 4 |
|
5 | | -- `bun run dev` - Start all apps in development mode |
6 | | -- `bun run build` - Build all applications |
7 | | -- `bun run check` - Run Biome linting/formatting across all workspaces |
8 | | -- `biome check --fix` - Auto-fix safe Biome issues (formatting, imports, safe fixes) |
9 | | -- `bun run check:types` - TypeScript type checking across all workspaces |
10 | | -- `bun run dashboard` - Open Convex dashboard |
11 | | -- **Single app**: `bun run --filter <app-name> <command>` (e.g., `bun run --filter web dev`) |
12 | | -- **Tests**: `bun run test` (runs all tests); `bun run --filter scraper test` (single app tests) |
13 | | -- **Single test**: `cd apps/scraper && bun test src/modules/courses/index.test.ts` (uses bun:test) |
| 5 | +- **Build**: `bun run build` (builds all workspaces via turbo) |
| 6 | +- **Lint**: `bun run check` (runs Biome linter/formatter) |
| 7 | +- **Type check**: `bun run check:types` (type checks all workspaces) |
| 8 | +- **Test**: `bun run test` (runs all tests) or `bun test <file>` (single test) |
| 9 | +- **Test single file**: `cd apps/scraper && bun test src/modules/courses/index.test.ts` |
| 10 | +- **Test with pattern**: `bun test --test-name-pattern="<regex>"` |
| 11 | +- **Dev**: `bun run dev` (starts all dev servers with turbo) |
14 | 12 |
|
15 | | -## Code Style |
| 13 | +## Code Style & Formatting |
16 | 14 |
|
17 | | -- **Formatter**: Biome with 2-space indentation, double quotes, auto-organize imports |
18 | | -- **Imports**: Use `@/` for app-relative paths; imports auto-sorted by Biome |
19 | | -- **Types**: TypeScript strict mode; use explicit return types for exported functions |
20 | | -- **Components**: React functional components with intersection types for props (e.g., `React.ComponentProps<"button"> & VariantProps<...>`) |
| 15 | +- **Formatter**: Biome with 2-space indentation, double quotes for strings |
| 16 | +- **Imports**: Organize imports automatically (use `@/*` alias for apps/web src paths) |
| 17 | +- **Types**: Strict TypeScript enabled - use explicit types, avoid `any` |
21 | 18 | - **Naming**: camelCase for variables/functions, PascalCase for components/types |
22 | | -- **CSS**: TailwindCSS v4 with `cn()` utility (`clsx` + `tailwind-merge`) for conditional classes |
23 | | -- **Patterns**: Use `class-variance-authority` (cva) for component variants; `convex-helpers` for auth/data access |
| 19 | +- **Error Handling**: Use `JobError` for scraper modules, return `null` for not found in queries |
24 | 20 |
|
25 | | -## Project Structure |
| 21 | +## Architecture Notes |
26 | 22 |
|
27 | | -- **Monorepo**: Turbo + Bun package manager; workspaces in `apps/*` and `packages/*` |
28 | | -- **Apps**: `web` (Next.js 15 + Clerk), `browser` (Chrome extension), `scraper` (Cloudflare Worker + Drizzle) |
29 | | -- **Server**: Convex backend in `packages/server` with `protectedQuery`/`protectedMutation` for auth |
30 | | -- **Dependencies**: Use `workspace:*` for internal packages; Doppler for environment variables |
31 | | -- **Database**: Convex for main data; Cloudflare D1 + Drizzle for scraper operations |
| 23 | +- **Monorepo**: Turbo + Bun workspaces (`apps/*`, `packages/*`) |
| 24 | +- **Backend**: Convex (packages/server) for queries/mutations with Clerk auth |
| 25 | +- **Frontend**: Next.js 15 with App Router, Tailwind CSS v4, React 19 |
| 26 | +- **Scraper**: Cloudflare Workers with Hono, Drizzle ORM for D1 |
| 27 | +- **Testing**: Bun test runner with mocks in `__mocks__/` directories |
0 commit comments