Markdown Converter
Agent skill for markdown-converter
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Job Management is a Next.js 16 application using the App Router with TypeScript, Material UI (MUI), TypeORM, and NextAuth for authentication. The project uses either SQLite (default) or PostgreSQL for data persistence.
npm run dev # Start dev server (uses PORT and HOSTNAME from .env) npm run build # Build for production npm start # Start production server
npm run check # Run all checks (format, lint, type-check) npm run check:fix # Auto-fix formatting and linting issues npm run format # Format code with Prettier npm run format:check # Check if code is formatted npm run lint # Check for linting errors npm run lint:fix # Fix auto-fixable linting errors npm run type-check # Check TypeScript types
npm run migration:run # Run pending migrations npm run migration:revert # Revert last migration npm run migration:show # Show migration status npm run migration:generate -- -n MigrationName # Generate migration from entity changes npm run migration:create -- src/lib/db/migrations/MigrationName # Create empty migration
IMPORTANT: Database synchronization is disabled. Always use migrations for schema changes.
src/lib/db/entities/ (e.g., User.ts)migrations/ directoryinit.tsDATABASE_URL// Database is initialized automatically, access via: import { getDataSource } from '@/lib/db/init'; const dataSource = getDataSource(); const userRepo = dataSource.getRepository(User);
src/lib/auth.ts/dashboard/* routes (src/middleware.ts)ADMIN and USER (enum in User entity)// In server components or API routes: import { auth } from '@/lib/auth'; const session = await auth(); // In client components: import { useSession } from 'next-auth/react'; const { data: session } = useSession();
src/lib/validations/// Example from lib/validations/user.ts: const createUserSchema = z.object({ /* ... */ }); type CreateUserInput = z.infer<typeof createUserSchema>;
src/app/api/route.ts)// Response format: { data: T } | { error: string, details?: unknown }
src/components/ui/ - Base reusable components (Button, Input, etc.)forms/ - Form-specific componentsfeatures/ - Feature-specific componentslayouts/ - Layout components"use client" only when neededsx prop (no Tailwind CSS)src/theme/theme.tsThemeRegistry.tsx wraps the appsrc/ ├── app/ # Next.js App Router │ ├── api/ # API routes (route.ts files) │ ├── dashboard/ # Protected dashboard pages │ ├── signin/ # Sign-in page │ ├── layout.tsx # Root layout │ ├── page.tsx # Home page │ └── globals.css # Minimal global styles ├── components/ # React components │ ├── ui/ # Base UI components │ ├── forms/ # Form components │ ├── features/ # Feature-specific components │ └── layouts/ # Layout components ├── lib/ # Business logic & utilities │ ├── db/ # Database layer │ │ ├── entities/ # TypeORM entities │ │ ├── migrations/ # Database migrations │ │ ├── repositories/ # Custom repositories │ │ ├── config.ts # TypeORM configuration │ │ └── init.ts # Database initialization │ ├── validations/ # Zod schemas │ ├── utils/ # Utility functions │ ├── hooks/ # Custom React hooks │ ├── constants/ # App constants │ └── auth.ts # NextAuth configuration ├── types/ # TypeScript type definitions ├── theme/ # MUI theme configuration └── middleware.ts # Next.js middleware (auth)
Always use path aliases (configured in
tsconfig.json):
// ✅ Good import { Button } from '@/components/ui/Button'; import { formatDate } from '@/lib/utils/date'; import { User } from '@/lib/db/entities/User'; // ❌ Bad import { Button } from '../../../components/ui/Button';
camelCase (e.g., userData, getUserById())PascalCase (e.g., UserCard, User)SCREAMING_SNAKE_CASE (e.g., MAX_RETRIES)PascalCase.tsx, utilities use camelCase.tslowercase_plural, columns are snake_casePascalCase, properties in camelCaseany types allowed (use unknown if needed)noUnusedLocals and noUnusedParameters enabled.env.local, not tracked by git)src/lib/db/entities/User.ts):@Column({ nullable: true }) phoneNumber?: string;
npm run migration:generate -- -n AddPhoneNumber
Review Generated Migration in
src/lib/db/migrations/
Run Migration:
npm run migration:run
src/lib/validations/user.ts)src/lib/db/entities/entities array in src/lib/db/config.tsBefore committing:
npm run check:fix # Auto-fix issues npm run type-check # Verify types npm run build # Test production build
Copy
.env.example to .env.local and configure:
DATABASE_URL: Database connection (SQLite or PostgreSQL)NEXTAUTH_SECRET: Random secret for JWT signingADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_EMAIL: Default admin userComprehensive documentation in
docs/ folder:
naming-conventions.md - Variable, function, file namingfolder-structure.md - Project organizationtypescript-standards.md - TypeScript usage patternscomponent-patterns.md - React component guidelinesapi-guidelines.md - API route standardsdatabase-standards.md - TypeORM and migration patternsstyling-guide.md - MUI styling conventionscode-review-checklist.md - Review standardsRefer to these docs for detailed patterns and examples.
synchronize: true - It's disabled for safety@/)lib/git checkout -b feature/descriptionnpm run check:fix && npm run type-checknpm run dev and verify functionalitydocs/code-review-checklist.md