A production-grade, microservices-based project management tool inspired by Linear and Jira. Built with Node.js, Express, Next.js 15, PostgreSQL, Redis, and Socket.io.
- Kanban Board - Drag-and-drop task management with dnd-kit
- Real-time Updates - Socket.io for live collaboration
- AI-Powered - Claude API for task description and subtask generation
- Notifications - Email and in-app notifications
- Activity Feed - Audit log with infinite scroll
- RBAC - Role-based access control (admin, member, viewer)
- Metrics - Prometheus + Grafana monitoring
┌─────────────────────────────────────────────────────────────────┐
│ Nginx (443) │
└──────────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Next.js 15 │ │ API Gateway │ │ Socket.io │
│ (Web) │────▶│ (Port 80) │────▶│ (Realtime) │
│ Port 3005 │ │ Port 80 │ │ Port 3004 │
└──────────────┘ └──────┬───────┘ └──────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Auth Service │ │Task Service │ │ AI Service │
│ Port 3001 │ │ Port 3002 │ │ Port 3003 │
└──────┬───────┘ └──────┬───────┘ └──────────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ PostgreSQL │ │ Redis │
│ Port 5432 │ │ Port 6379 │
└──────────────┘ └──────────────┘
| Service | Port | Description |
|---|---|---|
| api-gateway | 3000 | Reverse proxy with rate limiting |
| auth-service | 3001 | Authentication, JWT, RBAC |
| task-service | 3002 | Tasks, projects, labels |
| ai-service | 3003 | Claude AI integration |
| realtime-worker | 3004 | Socket.io server |
| notification-worker | 3005 | Email notifications |
| audit-worker | 3006 | Activity logging |
| web | 3005 | Next.js 15 frontend |
- Node.js 20 + TypeScript
- Express.js - Web framework
- PostgreSQL + Prisma - Database
- Redis - Cache, sessions, queues, pub/sub
- Socket.io - Real-time communication
- BullMQ - Job queues
- JWT - Authentication
- Prometheus - Metrics
- Next.js 15 - React framework
- TypeScript
- TanStack Query v5 - Data fetching
- shadcn/ui - UI components
- Tailwind CSS - Styling
- dnd-kit - Drag and drop
- Zod - Validation
- Node.js 20+
- Docker & Docker Compose
- pnpm (optional)
git clone <repository-url>
cd project-managementcp .env.example .envdocker-compose up -dThis starts all services including PostgreSQL, Redis, Prometheus, and Grafana.
- Web App: http://localhost:3005
- Grafana: http://localhost:3001 (admin/admin)
- Prometheus: http://localhost:9090
# Install dependencies
pnpm install
# Start PostgreSQL and Redis
docker-compose up postgres redis -d
# Run services (each in separate terminal)
pnpm --filter api-gateway dev
pnpm --filter auth-service dev
pnpm --filter task-service dev
pnpm --filter ai-service dev
pnpm --filter web devcd services/auth-service
pnpm prisma:migrate
cd ../task-service
pnpm prisma:migratecd services/auth-service
pnpm prisma db seed# Run tests for a service
cd services/auth-service
pnpm test
# Run tests with coverage
pnpm test:coverage| Variable | Description | Default |
|---|---|---|
POSTGRES_USER |
PostgreSQL user | projectmanager |
POSTGRES_PASSWORD |
PostgreSQL password | - |
POSTGRES_DB |
PostgreSQL database | projectmanager |
REDIS_PASSWORD |
Redis password | - |
JWT_ACCESS_SECRET |
JWT access token secret | - |
JWT_REFRESH_SECRET |
JWT refresh token secret | - |
ANTHROPIC_API_KEY |
Claude API key | - |
SMTP_HOST |
SMTP server for emails | - |
All services expose a /metrics endpoint for Prometheus scraping.
Grafana Dashboard: Import monitoring/grafana-dashboard.json
- Request rate, latency, errors
- Authentication events
- Cache hit/miss ratio
- AI token usage
- CPU, memory per service
- Build Docker images
docker-compose build- Set strong secrets
JWT_ACCESS_SECRET=$(openssl rand -base64 32)
JWT_REFRESH_SECRET=$(openssl rand -base64 32)-
Configure reverse proxy (nginx included)
-
Enable HTTPS with Let's Encrypt or similar
MIT