| name | preflight |
| description | Pre-PR check for common issues - run before pushing to catch problems early |
Preflight
Run this before creating a PR to catch common issues in changed files.
Instructions
- Run
git diff main --name-onlyto get list of changed files - For each changed file, run the checks below
- Report issues with
file:linereferences - Group by category for readability
Checks
TypeScript Strict
- No
anytypes - find proper type or useunknown - No
@ts-ignoreor@ts-expect-errorwithout explanation - Local interfaces use
PropsnotComponentNameProps
React Patterns
-
'use client'only where actually needed (hooks, browser APIs, event handlers) - Browser-only libs use
dynamic(() => import(...), { ssr: false }) - No
console.logleft in code (use proper logging or remove)
Route Structure
- Routes have
loading.tsxwith skeleton - Routes have
error.tsxwith reset button - Page components are server components unless they need client features
Data Fetching
- Prisma queries use
selectto specify fields (not barefindMany()) - No N+1 patterns (queries inside loops)
- tRPC routers return flat structures
Validation
- Zod schemas in
validations/not inline in components
Environment Variables
- No
process.env.*outsideconstants/directory - New env vars added to
.env.example -
NEXT_PUBLIC_prefix only for client-safe values - Server-only secrets not accessed in client components
Imports
- Use
@/path alias (no../../../climbs) - Barrel exports updated when adding new files
Styling
- Theme-aware colors (
text-muted-foreground) not hardcoded (text-gray-500) - Images use
<Image>fromnext/image
Dates
- Use
formatInTimeZonefromdate-fns-tz, notformatfromdate-fns - Display dates in
facilityTimezone, store in UTC
Accessibility
- Images have
altattributes - Interactive elements have proper
aria-*attributes - Form inputs have associated labels
Code Style
- No semicolons
- Files end with single newline
- Empty lines have no whitespace
- No trailing whitespace
Output Format
## Preflight Report
### TypeScript (2 issues)
- app/users/page.tsx:15 - `any` type used, consider `User[]`
- components/modal.tsx:8 - uses `UserModalProps` instead of `Props`
### Route Structure (1 issue)
- app/bookings/ - missing loading.tsx
### Imports (1 issue)
- lib/utils.ts:3 - relative import `../../components`, use `@/components`
### Passed
- React Patterns
- Data Fetching
- Validation
- Styling
- Dates
- Accessibility
- Code Style
Severity
Report issues but don't block. Developer decides what to fix. Some checks are style preferences, others are bugs waiting to happen.
Should fix: any types, missing error boundaries, N+1 queries, timezone bugs
Nice to fix: Naming conventions, import style, semicolons