Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—      β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—     β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ•β•β–ˆβ–ˆβ•”β•β•β•
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘        β–ˆβ–ˆβ•‘   
β–ˆβ–ˆβ•”β•β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆ   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•  β–ˆβ–ˆβ•‘        β–ˆβ–ˆβ•‘   
β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•‘   
β•šβ•β•     β•šβ•β•  β•šβ•β• β•šβ•β•β•β•β•β•  β•šβ•β•β•β•β• β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β•   β•šβ•β•   

πŸš€ ProJect β€” Full-Stack Project Management App

A modern, feature-rich project management platform built for teams who move fast.

Live Demo React Node.js PostgreSQL Deployed on Vercel


App Dashboard Preview License PRs Welcome


πŸ“– Table of Contents


✨ Overview

ProJect is a full-stack project management application designed to help teams collaborate, organize work, and stay on top of deadlines β€” all from a single, beautiful interface.

Whether you're managing a startup, running a dev team, or coordinating a side project, ProJect gives you everything you need:

  • 🏒 Multi-workspace support β€” manage multiple organizations under one account
  • πŸ“‹ Project & task pipelines β€” create, assign, and track with precision
  • πŸ‘₯ Team collaboration β€” invite members, set roles, and work together
  • πŸ“§ Smart email notifications β€” get notified on task assignments and due date reminders
  • πŸ“Š Analytics & calendar views β€” visualize your work, track progress at a glance
  • πŸŒ— Light & Dark mode β€” because good tools respect your preferences

🎯 Live Demo

🌐 https://project-mgt-ruby.vercel.app/

Sign up with Google or email to explore the full application. Create a workspace, spin up projects, invite collaborators, and manage tasks β€” all live.


πŸ–ΌοΈ Features

πŸ” Authentication & User Management

  • Secure sign-up and sign-in via email or Google OAuth
  • Profile management with avatar support
  • Session-based protected routes

🏒 Workspace & Organization Management

  • Create and switch between multiple organizations/workspaces
  • Invite team members to workspaces via email
  • Role-based access control within workspaces

πŸ“‹ Project Management

  • Create, update, and delete projects within workspaces
  • Add specific members to individual projects
  • View project details, team, and associated tasks in one place
  • Project settings for name, description, and member management

βœ… Task Management

  • Create detailed tasks with title, description, status, and priority
  • Assign tasks to specific team members
  • Set and track due dates
  • Update task statuses: Todo β†’ In Progress β†’ In Review β†’ Done
  • Delete tasks with confirmation

πŸ’¬ Comments & Collaboration

  • Add comments to tasks for discussion and updates
  • Threaded communication directly on task cards
  • Real-time updates on comment submissions

πŸ“§ Email Notifications

  • Automatic email on task assignment β€” assignees get notified instantly
  • Due date reminder emails β€” scheduled reminders sent before deadlines
  • HTML-formatted, professional email templates

πŸ“Š Dashboard & Analytics

  • Overview stats: total projects, completed projects, assigned tasks, overdue tasks
  • Task Summary panel with status breakdown
  • Recent Activity feed across the workspace
  • Project Analytics with visual charts (Recharts)
  • Calendar view for date-based task management

πŸ”” In-App Notification System

  • Bell icon in the navbar with a live unread badge counter
  • Personalized notifications using the logged-in user's name via Clerk
  • Notification types supported: task assignment, workspace invitation, mention, deadline
  • Click any notification to mark it as read β€” unread items highlighted in blue
  • "Mark all read" button to clear the badge in one click
  • Dismiss individual notifications with the βœ• button
  • Empty state with "No notifications yet" when the list is clear
  • Dropdown closes automatically on outside click
  • Timestamps displayed as relative time β€” 2m ago, 1h ago, 3h ago

🎨 UI & Theming

  • Light / Dark mode toggle
  • Fully responsive design for desktop and mobile
  • Clean sidebar navigation with workspace context

πŸ› οΈ Tech Stack

Frontend

Technology Purpose
ReactJS 18 UI framework
Tailwind CSS Utility-first styling
Redux Toolkit Global state management
React Router DOM Client-side routing
Recharts Data visualization / analytics charts
Lucide React Icon library
React Hot Toast Notifications & toasts

Backend

Technology Purpose
Node.js Runtime environment
Express.js REST API framework
Prisma ORM Database schema & queries
Cors / Dotenv Middleware & config
Nodemailer Email sending

Infrastructure & Services

Service Purpose
Neon (Serverless PostgreSQL) Primary database
Clerk Authentication & organization management
Inngest Background jobs, webhooks & email scheduling
Vercel Frontend & backend deployment

πŸ“ Project Structure

πŸ“¦ project-management-app
┣ πŸ“‚ client                          # React Frontend
┃ ┣ πŸ“‚ public
┃ ┃ β”— πŸ“œ favicon.ico
┃ ┣ πŸ“‚ src
┃ ┃ ┣ πŸ“‚ app
┃ ┃ ┃ β”— πŸ“œ store.js                  # Redux store configuration
┃ ┃ ┣ πŸ“‚ assets                      # Static assets (images, icons)
┃ ┃ ┣ πŸ“‚ components                  # Reusable UI components
┃ ┃ ┃ ┣ πŸ“œ AddProjectMember.jsx
┃ ┃ ┃ ┣ πŸ“œ CreateProjectDialog.jsx
┃ ┃ ┃ ┣ πŸ“œ CreateTaskDialog.jsx
┃ ┃ ┃ ┣ πŸ“œ InviteMemberDialog.jsx
┃ ┃ ┃ ┣ πŸ“œ MyTasksSidebar.jsx
┃ ┃ ┃ ┣ πŸ“œ Navbar.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectAnalytics.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectCalendar.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectCard.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectOverview.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectSettings.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectsSidebar.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectTasks.jsx
┃ ┃ ┃ ┣ πŸ“œ RecentActivity.jsx
┃ ┃ ┃ ┣ πŸ“œ Sidebar.jsx
┃ ┃ ┃ ┣ πŸ“œ StatsGrid.jsx
┃ ┃ ┃ ┣ πŸ“œ TasksSummary.jsx
┃ ┃ ┃ β”— πŸ“œ WorkspaceDropdown.jsx
┃ ┃ ┣ πŸ“‚ configs
┃ ┃ ┃ β”— πŸ“œ api.js                    # Axios API config
┃ ┃ ┣ πŸ“‚ features
┃ ┃ ┃ ┣ πŸ“œ themeSlice.js             # Dark/light mode state
┃ ┃ ┃ β”— πŸ“œ workspaceSlice.js         # Workspace state & async thunks
┃ ┃ ┣ πŸ“‚ pages
┃ ┃ ┃ ┣ πŸ“œ Dashboard.jsx
┃ ┃ ┃ ┣ πŸ“œ Layout.jsx
┃ ┃ ┃ ┣ πŸ“œ ProjectDetails.jsx
┃ ┃ ┃ ┣ πŸ“œ Projects.jsx
┃ ┃ ┃ ┣ πŸ“œ TaskDetails.jsx
┃ ┃ ┃ β”— πŸ“œ Team.jsx
┃ ┃ ┣ πŸ“œ App.jsx
┃ ┃ ┣ πŸ“œ index.css
┃ ┃ β”— πŸ“œ main.jsx
┃ ┣ πŸ“œ .env
┃ ┣ πŸ“œ index.html
┃ ┣ πŸ“œ package.json
┃ ┣ πŸ“œ vercel.json
┃ β”— πŸ“œ vite.config.js
┣ πŸ“‚ server                          # Express Backend
┃ ┣ πŸ“‚ configs
┃ ┃ ┣ πŸ“œ nodemailer.js               # Email transporter setup
┃ ┃ β”— πŸ“œ prisma.js                   # Prisma client instance
┃ ┣ πŸ“‚ controllers
┃ ┃ ┣ πŸ“œ commentController.js
┃ ┃ ┣ πŸ“œ projectController.js
┃ ┃ ┣ πŸ“œ taskController.js
┃ ┃ β”— πŸ“œ workspaceController.js
┃ ┣ πŸ“‚ inngest
┃ ┃ β”— πŸ“œ index.js                    # Background job functions
┃ ┣ πŸ“‚ middlewares
┃ ┃ β”— πŸ“œ authMiddleware.js           # Clerk auth protection
┃ ┣ πŸ“‚ prisma
┃ ┃ β”— πŸ“œ schema.prisma               # DB schema
┃ ┣ πŸ“‚ routes
┃ ┃ ┣ πŸ“œ commentRoutes.js
┃ ┃ ┣ πŸ“œ projectRoutes.js
┃ ┃ ┣ πŸ“œ taskRoutes.js
┃ ┃ β”— πŸ“œ workspaceRoutes.js
┃ ┣ πŸ“œ .env
┃ ┣ πŸ“œ package.json
┃ ┣ πŸ“œ server.js
┃ β”— πŸ“œ vercel.json
β”— πŸ“œ .gitignore

βš™οΈ Getting Started

Prerequisites

Before you begin, make sure you have the following installed:

  • Node.js v18+
  • npm or yarn
  • A Clerk account β†’ clerk.com
  • A Neon account β†’ neon.tech
  • An Inngest account β†’ inngest.com
  • An SMTP provider for emails (e.g., Brevo, Gmail, SendGrid)

1. Clone the Repository

git clone https://github.com/Saket22-CS/project-management-app.git
cd project-management-app

2. Set Up the Frontend (Client)

cd client
npm install

Create a .env file inside /client:

VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
VITE_BACKEND_URL=http://localhost:5000

Start the development server:

npm run dev

The frontend will run at http://localhost:5173


3. Set Up the Backend (Server)

cd server
npm install

Create a .env file inside /server (see Environment Variables section below).

Push the database schema to Neon:

npx prisma db push
npx prisma generate

Start the backend server:

npm run dev

The backend will run at http://localhost:5000


4. Start Inngest Dev Server (for background jobs)

In a new terminal:

npx inngest-cli@latest dev

This starts the local Inngest runner, which processes webhook events and scheduled email jobs.


πŸ” Environment Variables

/client/.env

VITE_CLERK_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxxxxxxxxxx
VITE_BACKEND_URL=http://localhost:5000

/server/.env

# Clerk
CLERK_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxx
CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxx

# Neon PostgreSQL
DATABASE_URL=postgresql://user:password@host/dbname?sslmode=require

# Inngest
INNGEST_EVENT_KEY=xxxxxxxxxxxxxxxxxxxx
INNGEST_SIGNING_KEY=signkey-prod-xxxxxxxxxxxxxxxxxxxx

# Email (SMTP via Brevo / SendGrid / Gmail)
SMTP_HOST=smtp-relay.brevo.com
SMTP_PORT=587
SMTP_USER=your_smtp_username
SMTP_PASS=your_smtp_password
EMAIL_FROM=noreply@yourdomain.com

⚠️ Never commit your .env files. They are already listed in .gitignore.


πŸš€ Deployment

This project is deployed using Vercel β€” both frontend and backend are served independently.

Deploy Frontend

cd client
vercel --prod

Set the environment variables in the Vercel dashboard under your project settings.

Deploy Backend

cd server
vercel --prod

The vercel.json in /server configures the Express app as a serverless function.

Post-Deployment Steps

  1. Update Clerk webhook URL β€” Set the Inngest HTTP endpoint as your Clerk webhook URL in the Clerk dashboard.
  2. Sync Inngest β€” Deploy Inngest functions to the cloud by visiting the Inngest dashboard and syncing your deployed backend URL.
  3. Update frontend API URL β€” Make sure VITE_BACKEND_URL in Vercel points to your live backend URL.

πŸ“Š Database Schema

The application uses Prisma ORM with a Neon (PostgreSQL) database. Key models:

User         β€” Synced from Clerk via webhooks
Workspace    β€” Represents an organization
Project      β€” Belongs to a workspace
Task         β€” Belongs to a project, assigned to a user
Comment      β€” Belongs to a task
Member       β€” Join table for workspace/project membership

To view or modify the schema:

server/prisma/schema.prisma

Apply any schema changes:

npx prisma db push
npx prisma generate

πŸ”Œ API Reference

All routes are prefixed with /api and protected by Clerk authentication middleware.

Workspace Routes β€” /api/workspace

Method Endpoint Description
GET / Get all workspaces for the current user
POST /add-member Add a member to a workspace

Project Routes β€” /api/project

Method Endpoint Description
POST /create Create a new project
PUT /update/:id Update project details
POST /add-member Add a member to a project

Task Routes β€” /api/task

Method Endpoint Description
POST /create Create a new task
PUT /update/:id Update task details / status
DELETE /delete/:id Delete a task

Comment Routes β€” /api/comment

Method Endpoint Description
POST /add Add a comment to a task
GET /:taskId Get all comments for a task

🀝 Contributing

Contributions are welcome! Here's how to get involved:

  1. Fork the repository
  2. Create a new branch β€” git checkout -b feature/your-feature-name
  3. Commit your changes β€” git commit -m 'feat: add your feature'
  4. Push to your branch β€” git push origin feature/your-feature-name
  5. Open a Pull Request

Please read the CONTRIBUTING.md and follow the CODE_OF_CONDUCT.md before submitting.

Ideas for Contributions

  • πŸ”” Real-time notifications (WebSockets)
  • πŸ“Ž File attachments on tasks
  • 🏷️ Task labels and tagging system
  • πŸ” Global search across workspaces
  • πŸ“± Mobile-first responsive improvements
  • 🌍 Internationalization (i18n)

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE.md file for details.


Built with ❀️ using the PERN stack

ReactJS Β· Express Β· Neon PostgreSQL Β· Node.js

Live Demo


⭐ If you found this project useful, consider giving it a star! ⭐

About

ProJect is a full-stack project management platform built with React, Node.js, Express, Prisma, and PostgreSQL. Manage workspaces, projects, tasks, teams, analytics, and notifications with Clerk authentication, Inngest background jobs, and a modern responsive UI.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages