A modern web application that tracks client project health by monitoring developer updates from Slack channels. Built with Next.js, TypeScript, Tailwind CSS, and Prisma with advanced scoring and health analytics.
- Real-time Project Monitoring: Track project health status (Green/Yellow/Red) based on update frequency, content analysis, and scoring
- Advanced Health Analytics: Project health considers client scores (1-5), project scores (1-5), update frequency, and sentiment analysis
- Slack Integration: Receive weekly developer updates with scoring via webhook endpoint
- Project Management: Add, view, and manage projects with a modern modal interface
- Score Tracking: Monitor client and project scores over time with historical data
- Modern UI: Clean, responsive dashboard built with Radix UI components and Tailwind CSS
- Admin Dashboard: Complete project management with statistics and recent updates
- Toast Notifications: Real-time feedback for all user actions
- Frontend: Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS
- UI Components: Radix UI primitives with custom components
- Forms: Server Actions with useFormState for modern form handling
- Database: PostgreSQL with Prisma ORM
- Integration: Slack webhook endpoint for weekly updates with scoring support
- Notifications: Radix UI Toast system
- Deployment: Vercel-ready
- Node.js 18+
- PostgreSQL database (local or cloud)
- Slack workspace (for integration)
- Clone the repository:
git clone <repository-url>
cd tracker-app- Install dependencies:
npm install- Set up environment variables:
cp .env.example .envEdit .env with your database and Slack credentials:
DATABASE_URL="postgresql://username:password@localhost:5432/client_health_dashboard"
SERVER_API_KEY=- Set up the database:
# Generate Prisma client
npm run db:generate
# Push schema to database
npm run db:push
# Seed with sample data
npm run db:seed- Start the development server:
npm run devVisit http://localhost:3000 to see the dashboard.
Projects are automatically assigned health status based on multiple factors:
- π΄ Red: Client score β€ 2 OR Project score β€ 2
- π‘ Yellow: Client score = 3 OR Project score = 3
- π’ Green: Client score β₯ 4 AND Project score β₯ 4
- π΄ Red: Updates containing keywords like "blocker", "delay", "issue", "problem", "stuck", "blocked"
- π’ Green: Updated within last 5 days
- π‘ Yellow: Updated 6-10 days ago
- π΄ Red: No update in >10 days
- Client scores and project scores (1-5 scale) are displayed in:
- Recent updates section
- Project health dashboard
- Individual project pages
Add projects through the admin interface or map Slack channels to projects in the database:
Via Admin UI (Recommended):
- Go to
/admin - Click "Add Project"
- Fill out the form with project details
- Submit to create the project
Via Database:
INSERT INTO projects (name, slack_channel_id, vertical, description)
VALUES ('My Project', 'C1234567890', 'APP', 'Mobile app development project');The /api/weekly-updates endpoint expects JSON data with the following structure:
{
"user_id": "U1234567890",
"user_name": "John Doe",
"channel_id": "C1234567890",
"weekly_updates": "Completed user authentication feature. Fixed API rate limiting issues.",
"project_score": "4",
"client_score": "5",
"timestamp": "2024-01-15T10:30:00Z"
}src/
βββ app/ # Next.js App Router pages
β βββ api/ # API routes
β β βββ weekly-updates/ # Weekly update webhook endpoint
β βββ projects/[id]/ # Project detail pages
β βββ admin/ # Admin dashboard
β βββ page.tsx # Main dashboard
βββ components/ # Reusable UI components
β βββ ui/ # Radix UI components
β βββ add-project-form.tsx # Project creation form
β βββ add-project-dialog.tsx # Modal wrapper
β βββ projects-list.tsx # Project listing
βββ lib/ # Utilities and configurations
β βββ actions/ # Server actions
β β βββ projects.ts # Project CRUD operations
β βββ prisma.ts # Database client
β βββ utils.ts # Helper functions
β βββ seed.ts # Database seeding
βββ hooks/ # Custom React hooks
β βββ use-toast.ts # Toast notification hook
βββ types/ # TypeScript type definitions
βββ scripts/ # Utility scripts
- Projects: Store project information, Slack channel mapping, vertical classification, and descriptions
- Updates: Developer updates from Slack with timestamps, client scores (1-5), and project scores (1-5)
- Users: Slack user information including names and avatars
- Projects:
id,name,slackChannelId,vertical(CRYPTO/APP/COMMERCE),description - Updates:
id,projectId,userId,text,clientScore,projectScore,createdAt - Users:
id,slackUserId,name,email,avatar
- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy automatically on push to main branch
I used Prisma DB hosting (postgres)
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run db:generate- Generate Prisma clientnpm run db:push- Push schema changesnpm run db:migrate- Run migrationsnpm run db:studio- Open Prisma Studionpm run db:seed- Seed database with sample data
This project follows strict TypeScript and code quality standards:
- ESLint for code linting
- TypeScript strict mode enabled
- Clean code principles following established cursor rules
- Server-first architecture with Server Actions
- Proper error handling and validation
- Accessible UI components with Radix UI
- Mobile-first responsive design
- Project Statistics: Real-time counts of total, healthy, and at-risk projects
- Projects Overview: Grid view of all projects with health status badges
- Health Indicators: Visual status with emojis for each vertical (βΏ Crypto, π± App, π Commerce)
- Add Project: Modal form with validation for creating new projects
- Project Statistics: Comprehensive stats including projects by vertical
- Recent Updates: Timeline of latest developer updates across all projects
- Toast Notifications: Real-time feedback for all actions
- Project Information: Complete project details with health status
- Recent Updates: Chronological list of updates with scores displayed
- Health Metrics: Last update time, days since update, and latest scores
- Score History: Client and project scores from recent updates
- Click "Add Project" in admin dashboard
- Fill required fields: Name, Slack Channel ID, Vertical
- Optional: Add project description
- Server-side validation ensures unique Slack Channel IDs
- Success/error feedback via toast notifications
- Automatic page refresh shows new project