- Node.js >= 18.0.0
- pnpm >= 8.0.0
- PostgreSQL database
-
Install dependencies
pnpm install
-
Set up environment variables
Backend (
apps/backend/.env):NODE_ENV=development PORT=4000 DATABASE_URL="postgresql://user:password@localhost:5432/project_management" JWT_SECRET="your-secret-key" JWT_REFRESH_SECRET="your-refresh-secret-key" CORS_ORIGIN="http://localhost:3000"
-
Generate Prisma client
pnpm db:generate
-
Run database migrations
pnpm db:migrate
-
Seed the database (optional)
pnpm db:seed
pnpm dev# Backend only
pnpm dev:backend
# Frontend only
pnpm dev:frontend
# Database studio
pnpm dev:dbpnpm build # Build all packagespnpm dev # Start all in dev mode
pnpm dev:backend # Start backend only
pnpm dev:frontend # Start frontend only
pnpm dev:db # Open Prisma Studiopnpm test # Run all tests
pnpm test:ui # Run tests with UI
pnpm test:coverage # Run tests with coveragepnpm db:generate # Generate Prisma client
pnpm db:migrate # Run migrations (dev)
pnpm db:migrate:deploy # Run migrations (prod)
pnpm db:push # Push schema changes
pnpm db:seed # Seed database
pnpm db:studio # Open Prisma Studio
pnpm db:reset # Reset databasepnpm lint # Lint all packages
pnpm type-check # Type check all packages
pnpm format # Format code
pnpm format:check # Check formattingproject-management-app/
├── apps/
│ ├── backend/ # Express.js API
│ └── frontend/ # Next.js application
├── packages/
│ ├── database/ # Prisma schema and client
│ ├── shared/ # Shared types and utilities
│ └── eslint-config/ # Shared ESLint configuration
├── .github/
│ └── workflows/ # CI/CD workflows
└── package.json # Root package.json
This is a modular monolith using:
- Layered Architecture: UI → API → Service → Domain → Data
- TypeScript Strict Mode: Everywhere
- PostgreSQL + Prisma: Database layer
- Shared Packages: Types, schemas, and utilities
If you see "Module '@prisma/client' has no exported member" errors:
pnpm db:generatepnpm type-checkChange the port in apps/backend/.env:
PORT=4001Verify your DATABASE_URL in apps/backend/.env and ensure PostgreSQL is running.