A modern, feature-rich collaborative task management platform with recurring tasks, communities, departments, real-time chat, and daily email summaries.
Task Tapper is a comprehensive task management solution designed for teams and communities. Built with a Node/Express + MongoDB backend and a modern React frontend, it provides:
- One-Time & Recurring Tasks: Create and manage both single and recurring tasks (Daily/Weekly/Monthly)
- Community Structure: Organize work into Communities β Departments β Tasks
- Smart Task Management: Auto-generate recurring tasks, skip Sundays, track completion
- Real-Time Collaboration: World chat via WebSockets with message persistence
- Email Notifications: Daily summary emails with de-duplication (Gmail + Nodemailer)
- Rich Task Details: Comments, updates, and priority tracking
- User Stats: Track assigned, completed, and pending tasks
- Advanced Filtering: Filter by status, type, date range with search capabilities
- Mobile-First Design: Responsive UI with compact layouts and pagination
- Create one-time or recurring tasks with customizable frequency
- Assign tasks to team members with priority levels (High/Medium/Low)
- Auto-generation of recurring task instances
- Smart date handling (automatically skip Sundays)
- Task completion tracking with history
- Comments and updates on tasks
- Multi-level structure: Communities β Departments β Tasks
- Department-based task organization
- Member management with pending approvals
- Owner and member role differentiation
- Community-wide visibility controls
- Status Filters: All, Upcoming, Overdue, Completed
- Type Filters: All, One-Time, Recurring
- Date Filters: All Dates, Today, This Week, This Month
- Search: Real-time search across tasks, departments, and communities
- Pagination: Mobile-friendly pagination (6 items per page)
- World chat with Socket.io
- Message persistence in MongoDB
- Last 50 messages on connect
- Live updates across connected clients
- Modern gradient designs with animations
- Compact, mobile-first layouts
- Framer Motion animations
- Responsive grid layouts (1-4 columns)
- Toast notifications for user feedback
- Runtime: Node.js 18+
- Framework: Express 5
- Database: MongoDB with Mongoose
- Real-Time: Socket.io
- Email: Nodemailer with Gmail
- Environment: dotenv
- Framework: React 19
- Build Tool: Vite
- Styling: Tailwind CSS
- State Management: Zustand
- HTTP Client: Axios
- Routing: React Router v6
- Animations: Framer Motion
- Charts: Recharts
- Icons: React Icons
- Date Picker: React Datepicker
- Frontend: Vercel-ready with routing config
- Backend: Any Node.js hosting (Railway, Render, etc.)
backend/
βββ server.js # Express app + Socket.io + routes
βββ taskScheduler.js # Task scheduling logic
βββ config/
β βββ connectDB.js # MongoDB connection with retry
βββ controllers/
β βββ auth.js # Authentication logic
β βββ community.js # Community management
β βββ team.js # Task operations
β βββ recurringTaskController.js
βββ models/
β βββ User.js # User schema
β βββ Community.js # Community schema
β βββ CommunityDept.js # Department schema
β βββ Team.js # One-time tasks
β βββ recurringTaskModel.js # Recurring tasks
β βββ TaskUpdate.js # Task updates/comments
β βββ WorldChatMessage.js # Chat messages
βββ routes/
β βββ auth.route.js # Auth endpoints
β βββ community.route.js # Community endpoints
β βββ team.route.js # Task endpoints
β βββ recurringTaskRoutes.js # Recurring task endpoints
βββ socket/
β βββ worldChat.js # Socket.io chat setup
βββ utils/
βββ checkAndSendDailySummary.js
βββ emailTemplates.js
βββ sendMail.js
client/
βββ src/
β βββ App.jsx # Main app component
β βββ components/
β β βββ Dashboard.jsx
β β βββ UserTasks.jsx # Task list with filters
β β βββ TaskDetail.jsx # Single task view
β β βββ RecurringTaskDetail.jsx
β β βββ RecurringTaskForm.jsx
β β βββ WorldChat.jsx # Real-time chat
β β βββ community/
β β βββ AllCommunity.jsx # Communities list
β β βββ CommunityMembers.jsx # Member management
β β βββ CommunityDepartment.jsx # Departments with filters
β β βββ CommunityDeptTasks.jsx # Department tasks
β β βββ CreateCommunity.jsx
β β βββ CreateCommunityDept.jsx
β β βββ CreateCommunityTask.jsx
β β βββ CreateCommunityRecurringTask.jsx
β βββ services/
β β βββ taskService.js
β β βββ community.js
β β βββ recurring.js
β βββ assests/
β βββ store.js # Zustand state
βββ vite.config.js
βββ vercel.json # Vercel deployment config
- Node.js 18+ (recommended)
- MongoDB connection string (MongoDB Atlas or self-hosted)
- Gmail Account with App Password for email notifications
Create a .env file in the backend/ directory:
# Required
MONGO_URI=mongodb+srv://user:pass@cluster.mongodb.net/dbname
EMAIL=your_gmail_address@gmail.com
APP_PASSWORD=your_gmail_app_password
# Optional
MONGO_DB_NAME=task_tapper # If not in URI
MONGO_MAX_RETRIES=3
MONGO_RETRY_DELAY_MS=3000
PORT=5000 # Default: 5000
TWILIO_SID=... # Optional for SMSCreate a .env file in the client/ directory:
VITE_APP_API_URL=http://localhost:5000For production, update to your backend URL:
VITE_APP_API_URL=https://your-api-domain.comgit clone <repository-url>
cd task-tappercd backend
npm install
npm run devThe backend server will start on http://localhost:5000
Open a new terminal:
cd client
npm install
npm run devThe frontend will start on http://localhost:5173
Open your browser and navigate to: http://localhost:5173
- Development:
http://localhost:5000 - Production: Set via
VITE_APP_API_URL
| Method | Endpoint | Description | Body |
|---|---|---|---|
| POST | /login |
User login | { email } |
| POST | /signup |
User registration | { email, username } |
| POST | /user-detail |
Update user details | { email, phoneNumber, role } |
| GET | /profile/:email |
Get user profile | - |
| GET | /tasks/:email |
Get user's tasks | - |
| GET | /assignedByMe |
Tasks assigned by user | ?email=user@example.com |
| Method | Endpoint | Description |
|---|---|---|
| POST | /createtask |
Create new task |
| POST | /updatetask |
Mark task complete |
| POST | /deletetask |
Delete task |
| GET | /email |
Get all user emails |
| GET | /tasks/:taskId |
Get single task |
| GET | /tasks/:taskId/updates |
Get task updates |
Create Task Body:
{
"createdBy": "user@example.com",
"taskName": "Task Title",
"taskDescription": "Description",
"assignedTo": "assignee@example.com",
"assignedName": "Assignee Name",
"dueDate": "2025-12-31",
"priority": "High"
}| Method | Endpoint | Description |
|---|---|---|
| GET | / |
List all recurring tasks |
| POST | / |
Create recurring task |
| GET | /:id |
Get single recurring task |
| DELETE | /:id |
Delete recurring task |
| POST | /:taskId/updates |
Add task update |
| GET | /:taskId/updates |
Get task updates |
Create Recurring Task Body:
{
"taskName": "Recurring Task",
"taskDescription": "Description",
"taskAssignedTo": "user@example.com",
"taskFrequency": "Daily",
"taskStartDate": "2025-01-01",
"taskEndDate": "2025-12-31",
"taskPriority": "Medium",
"taskCreateDaysAhead": 1
}| Method | Endpoint | Description |
|---|---|---|
| GET | / |
Get all communities |
| POST | / |
Create community |
| GET | /:id |
Get community details |
| GET | /:id/members |
Get community members |
| GET | /:id/departments |
Get departments |
| POST | /:id/departments |
Create department |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/ping |
Trigger daily summary check |
world-chat-message: Send chat message{ "userId": "user_id", "message": "Hello!" }
world-chat-init: Initial 50 messages on connectworld-chat-message: Broadcast new message to all clients
- Gradient backgrounds and text effects
- Smooth animations with Framer Motion
- Glass-morphism effects with backdrop blur
- Hover states and transitions
- Mobile-first responsive layouts
- Reduced padding and margins for efficiency
- Smart text truncation with line-clamp
- Icon-only buttons on mobile
- Collapsible filter panels
- Status: All, Upcoming, Overdue, Completed
- Task Type: All, One-Time, Recurring
- Date Range: All Dates, Today, This Week, This Month
- Search: Real-time search across all fields
- Filters work together and reset pagination
- 6 items per page (customizable)
- Numbered page buttons (max 5 visible)
- Previous/Next navigation
- Smart page number display
- Mobile-optimized controls
- Navigate to Communities page
- Click "Create Community"
- Enter community name and description
- Submit to create
- Go to Community β Departments
- Click "Create Department"
- Fill in department details
- Tasks can now be organized under this department
One-Time Task:
- Go to Department β Add Task
- Fill in task details, assignee, due date, priority
- Submit to create
Recurring Task:
- Go to Department β Add Recurring
- Set frequency (Daily/Weekly/Monthly)
- Define start and end dates
- System auto-generates instances
- Click the "Filter" button
- Select desired filters:
- Status (Upcoming, Overdue, etc.)
- Task Type (One-Time or Recurring)
- Date Range (Today, This Week, This Month)
- Use search bar for specific tasks
- Navigate through pages if needed
- Push code to GitHub/GitLab
- Import project in Vercel
- Set environment variable:
VITE_APP_API_URL=https://your-backend-url.com - Deploy
The vercel.json file handles routing for React Router.
- Choose your hosting platform
- Connect your repository
- Set environment variables from
.env - Deploy with Node.js 18+
- Ensure MongoDB connection is accessible
- Create a cluster on MongoDB Atlas
- Create a database user
- Whitelist IP addresses (0.0.0.0/0 for all IPs or specific IPs)
- Get connection string and add to
MONGO_URI
npm run dev # Start development server with nodemon
npm start # Start production servernpm run dev # Start Vite dev server (port 5173)
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLintFirst-time setup:
git config --global user.name "Your Name"
git config --global user.email "your@email.com"- Backend uses nodemon for auto-restart on file changes
- Frontend uses Vite's HMR (Hot Module Replacement)
- Backend logs to console via
console.log() - Frontend uses React DevTools and browser console
- Socket.io has built-in debugging: set
DEBUG=socket.io*in environment
Monitor MongoDB operations:
mongoose.set('debug', true);- Always set priority for better organization
- Use descriptive task names (50 chars max recommended)
- Add detailed descriptions for clarity
- Set realistic due dates
- Use "Daily" for everyday tasks
- Use "Weekly" for weekly meetings/reviews
- Use "Monthly" for monthly reports
- Set
taskCreateDaysAheadto 1-2 for advance notice
- Create departments by function (Dev, Marketing, etc.)
- Assign department-specific tasks
- Keep community descriptions clear and concise
- Regularly review pending applications
- Use pagination for large task lists
- Apply filters to narrow down results
- Search is case-insensitive and searches all fields
- Indexes on MongoDB collections for faster queries
- Check MongoDB connection string
- Verify environment variables are set
- Ensure port 5000 is available
- Check Node.js version (18+)
- Verify
VITE_APP_API_URLin client.env - Check CORS settings in backend
- Ensure backend is running
- Check browser console for errors
- Verify user is logged in
- Check user email matches task assignment
- Confirm task is not filtered out
- Check MongoDB for data
- Verify Gmail App Password (not regular password)
- Check EMAIL and APP_PASSWORD in
.env - Ensure "Less secure app access" is enabled (or use App Password)
- Check spam folder
- Verify WebSocket support in browser
- Check firewall/proxy settings
- Ensure backend Socket.io is initialized
- Check browser console for connection errors
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is provided as-is. Add a proper license (MIT, Apache, etc.) if open-sourcing.
- Built with β€οΈ for efficient task management
- Contributions welcome!
- React team for amazing frontend framework
- MongoDB for flexible database solution
- Socket.io for real-time capabilities
- Vercel for seamless deployment
- All open-source contributors
For issues, questions, or suggestions:
- Open an issue on GitHub
- Check existing documentation
- Review troubleshooting section
Made with π by the Task Tapper Team