A comprehensive, specialized project management platform designed specifically for web agencies and freelance web developers. This system enables seamless collaboration, project tracking, client management, and team communication.
- Features
- Tech Stack
- Project Structure
- Prerequisites
- Installation
- Configuration
- Running the Application
- Testing
- API Documentation
- Database Schema
- File Upload & Cloud Storage
- Deployment
- Contributing
- Workspace Management: Create and manage multiple workspaces for different agencies or clients
- Project Creation & Tracking: Full lifecycle management from conception to completion
- Task Management: Create, assign, and track tasks with priorities and dependencies
- Milestones & Deliverables: Track key project milestones and deliverable submissions
- Checklists: Template-based and custom checklists for quality assurance
- Timeline & Scheduling: Visual project timelines and milestone tracking
- Real-time Chat: Socket.io-powered chat rooms for project discussions
- Notifications: Real-time notifications for important project updates
- Comments & Feedback: Inline feedback on tasks and deliverables
- Team Members: Role-based member management (Admin, Manager, Member)
- Client Portal: Dedicated interface for client interactions
- Project Visibility: Clients can view project progress and deliverables
- Payment Tracking: Integrated payment management and payment history
- Reports & Analytics: Comprehensive project reports and performance analytics
- Email Notifications: Automated email notifications via Resend
- File Management: Cloud-based file uploads via Cloudinary
- Google OAuth: Social login integration for user convenience
- Rate Limiting: API rate limiting for stability and security
- Security: Helmet protection, XSS prevention, input sanitization, password hashing
- Marketing Email Management: Send and track marketing emails
- System Reports: Comprehensive system-wide reporting
| Technology | Purpose |
|---|---|
| Node.js + Express.js | REST API server |
| TypeScript | Type-safe JavaScript |
| MongoDB + Mongoose | NoSQL database with ODM |
| Socket.io | Real-time bidirectional communication |
| Passport.js | Authentication (Local & Google OAuth) |
| Multer | File upload handling |
| Cloudinary | Cloud file storage |
| Resend | Email service |
| Helmet | HTTP headers security |
| Zod | Schema validation |
| Vitest + Supertest | Testing framework |
| Winston | Logging |
| Technology | Purpose |
|---|---|
| React 18 | UI library |
| TypeScript | Type-safe JavaScript |
| Vite | Build tool & dev server |
| React Router | Client-side routing |
| React Query (@tanstack/react-query) | Server state management |
| React Hook Form | Form state management |
| Radix UI | Headless UI components |
| Tailwind CSS | Utility-first CSS framework |
| Axios | HTTP client |
| DnD Kit | Drag & drop functionality |
| Date-fns | Date manipulation |
| Vitest | Unit testing |
Web-Based-Project-Management-System/
βββ backend/ # Express.js REST API
β βββ src/
β β βββ @types/ # TypeScript declarations
β β βββ config/ # Configuration files
β β βββ controllers/ # Route handlers
β β βββ data/ # Seed data and templates
β β βββ enums/ # TypeScript enums
β β βββ middlewares/ # Express middlewares
β β βββ models/ # Mongoose schemas
β β βββ routes/ # API routes
β β βββ seeders/ # Database seeders
β β βββ services/ # Business logic
β β βββ socket/ # Socket.io handlers
β β βββ tests/ # Unit tests
β β βββ utils/ # Utility functions
β β βββ validation/ # Request validation schemas
β β βββ index.ts # Entry point
β βββ package.json
β βββ tsconfig.json
β βββ vitest.config.ts
β
βββ client/ # React + Vite frontend
β βββ src/
β β βββ components/ # React components
β β βββ constant/ # Constants
β β βββ context/ # React context providers
β β βββ hoc/ # Higher-order components
β β βββ hooks/ # Custom React hooks
β β βββ layout/ # Layout components
β β βββ lib/ # Utility libraries
β β βββ page/ # Page components
β β βββ routes/ # Route configuration
β β βββ tests/ # Unit tests
β β βββ types/ # TypeScript type definitions
β β βββ App.tsx
β β βββ main.tsx
β β βββ index.css
β βββ public/ # Static assets
β βββ package.json
β βββ tsconfig.json
β βββ vite.config.ts
β βββ vitest.config.ts
β
βββ .git/ # Git repository
βββ .gitignore
βββ .prettierrc # Prettier config
βββ README.md # This file
Before you begin, ensure you have the following installed:
- Node.js >= 18.0.0 (Download)
- npm >= 9.0.0 or yarn >= 3.0.0
- MongoDB >= 5.0 (for local development)
- Git >= 2.0.0
-
MongoDB Atlas (or local MongoDB)
- Create a cluster and get connection string
-
Cloudinary (for image uploads)
- Sign up at cloudinary.com
- Get your API credentials
-
Resend (for email notifications)
- Sign up at resend.com
- Get your API key
-
Google OAuth (for social login)
- Create a project in Google Cloud Console
- Set up OAuth 2.0 credentials (Web application)
- Get Client ID and Client Secret
git clone <repository-url>
cd "Web-Based-Project-Management-System-Specialized-for-Web-Agencies-and-Freelance-Web-Developers"cd backend
# Install dependencies
npm install
# Create .env file (see Configuration section below)
cp .env.example .env
# Install TypeScript globally (optional but recommended)
npm install -g typescriptcd ../client
# Install dependencies
npm install
# Create .env file (see Configuration section below)
cp .env.example .envCreate a .env file in the backend/ directory:
# Server Configuration
BASE_PATH=/api/v1
PORT=5000
NODE_ENV=development
# Database
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/dbname?retryWrites=true&w=majority
# Session
SESSION_SECRET=your-random-secret-key-min-32-chars
# Authentication
JWT_SECRET=your-jwt-secret-key
JWT_EXPIRES_IN=7d
# Google OAuth
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_CALLBACK_URL=http://localhost:5000/api/v1/auth/google/callback
# Cloudinary
CLOUDINARY_CLOUD_NAME=your-cloud-name
CLOUDINARY_API_KEY=your-api-key
CLOUDINARY_API_SECRET=your-api-secret
# Email Service (Resend)
RESEND_API_KEY=your-resend-api-key
SENDER_EMAIL=noreply@yourdomain.com
# Frontend URL
CLIENT_URL=http://localhost:5173
# CORS
CORS_ORIGIN=http://localhost:5173
# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100Create a .env file in the client/ directory:
VITE_API_BASE_URL=http://localhost:5000/api/v1
VITE_SOCKET_URL=http://localhost:5000cd backend
npm run devThe backend server will start at http://localhost:5000
cd client
npm run devThe frontend will start at http://localhost:5173
cd backend
npm run build
npm startcd client
npm run build
npm run previewcd backend
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run tests in watch mode
npm test -- --watchcd client
# Run all tests
npm test
# Run tests with coverage and generate report
npm test -- --coverage
# Run tests in watch mode
npm test -- --watchhttp://localhost:5000/api/v1
POST /auth/register- Register new userPOST /auth/login- Login userPOST /auth/logout- Logout userGET /auth/google- Google OAuth loginGET /auth/google/callback- Google OAuth callback
GET /users/:id- Get user profilePUT /users/:id- Update user profileGET /users- List all users (admin)
POST /workspaces- Create workspaceGET /workspaces- Get user workspacesPUT /workspaces/:id- Update workspaceDELETE /workspaces/:id- Delete workspace
POST /projects- Create projectGET /projects- Get projectsPUT /projects/:id- Update projectDELETE /projects/:id- Delete projectGET /projects/:id/reports- Get project reports
POST /tasks- Create taskGET /tasks- Get tasksPUT /tasks/:id- Update taskDELETE /tasks/:id- Delete taskPATCH /tasks/:id/status- Update task status
POST /deliverables- Create deliverableGET /deliverables- Get deliverablesPUT /deliverables/:id- Update deliverablePOST /deliverables/:id/feedback- Add feedback
POST /chat/rooms- Create chat roomGET /chat/rooms- Get chat roomsPOST /chat/messages- Send messageGET /chat/rooms/:roomId/messages- Get messages
POST /payments- Record paymentGET /payments- Get paymentsGET /payments/history- Get payment history
GET /notifications- Get notificationsPATCH /notifications/:id/read- Mark as readDELETE /notifications/:id- Delete notification
For detailed API documentation, refer to route files in backend/src/routes/
Workspace
- Members management
- Project organization
- Settings
Project
- Milestones
- Tasks
- Deliverables
- Timeline
Task
- Assignments
- Status tracking
- Priority levels
- Dependencies
User
- Authentication
- Profile information
- Role assignments
- Preferences
ChatMessage & ChatRoom
- Real-time messaging
- Room-based conversations
- Message history
Payment
- Transaction records
- Payment history
- Invoice data
Notification
- Event notifications
- User notifications
- Read/unread status
For detailed schema definitions, see backend/src/models/
- Handled via Cloudinary
- Maximum file size: 10MB
- Supported formats: JPG, PNG, GIF, WebP
- Chat message images are auto-cleaned after 30 days
// backend/src/config/cloudinary.config.ts
// Cloudinary is configured via environment variables- Push code to Git repository
- Set environment variables
- Ensure MongoDB is accessible
- Deploy using platform's CLI or GitHub integration
-
Build the application:
npm run build
-
Deploy
dist/folder to hosting platform -
Set
VITE_API_BASE_URLenvironment variable to production backend URL
Create Dockerfile for backend:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 5000
CMD ["npm", "start"]- Use TypeScript for type safety
- Follow existing code structure
- Format code with Prettier:
npm run lint - Write tests for new features
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -m 'Add your feature' - Push to branch:
git push origin feature/your-feature - Open a Pull Request