A full-stack task management application designed for individuals and teams, featuring real-time synchronization, team collaboration, and comprehensive productivity analytics.
Note: Click the link above to download and watch the full demo showcasing Taskly's features in action!
- Task Management: Create, edit, delete, and organize tasks with priorities, due dates, and tags
- Team Collaboration: Multi-user teams with role-based permissions
- Project Management: Organize tasks into projects with progress tracking
- Calendar View: Visualize tasks in calendar format
- Notifications: Real-time in-app notifications
- Analytics: Productivity tracking, completion rates, and statistics
- Dark Mode: Full dark mode support
- Responsive Design: Mobile-first approach, works on all devices
- Secure Authentication: Session-based authentication with secure cookies
- Cloud Storage: Cloudinary integration for file uploads
- Email Service: Transactional emails via Resend
- Real-time Updates: Instant synchronization across devices
- Modern UI: Clean interface with smooth animations
- Advanced Search: Search and filter tasks, users, and teams
- Framework: React 18 with Vite
- Styling: Tailwind CSS
- Routing: React Router v6
- State Management: Context API
- Animations: Framer Motion
- HTTP Client: Axios
- Icons: Heroicons
- Runtime: Node.js 18+
- Framework: Express.js
- Database: MongoDB with Mongoose
- Authentication: express-session
- File Storage: Cloudinary
- Email: Resend
- Security: helmet, cors, rate limiting
- Node.js 18 or higher
- MongoDB 5.0 or higher
- npm or yarn
- Clone the repository
git clone https://github.com/yourusername/taskly.git
cd taskly- Install dependencies
# Install backend dependencies
cd backend
npm install
# Install frontend dependencies
cd ../frontend
npm install- Configure environment variables
Backend (backend/.env):
NODE_ENV=development
PORT=5000
MONGODB_URI=mongodb://localhost:27017/taskly
SESSION_SECRET=your-secret-key
FRONTEND_URL=http://localhost:3000
CLOUDINARY_CLOUD_NAME=your-cloud-name
CLOUDINARY_API_KEY=your-api-key
CLOUDINARY_API_SECRET=your-api-secret
RESEND_API_KEY=your-resend-key
EMAIL_FROM=noreply@yourdomain.comFrontend (frontend/.env):
VITE_API_URL=http://localhost:5000/api- Start MongoDB
# macOS
brew services start mongodb-community
# Linux
sudo systemctl start mongod
# Windows
net start MongoDB- Seed the database (optional)
cd backend
npm run seed- Start the application
# Terminal 1 - Backend
cd backend
npm run dev
# Terminal 2 - Frontend
cd frontend
npm run dev- Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000/api
After seeding, you can login with:
Email: john@example.com
Password: password123
Email: sarah@example.com
Password: password123
taskly/
├── backend/ # Backend API
│ ├── config/ # Configuration files
│ ├── controllers/ # Route controllers
│ ├── middleware/ # Custom middleware
│ ├── models/ # Mongoose models
│ ├── routes/ # API routes
│ ├── utils/ # Utility functions
│ ├── seeds/ # Database seeders
│ ├── tests/ # Test files
│ └── server.js # Entry point
│
├── frontend/ # Frontend application
│ ├── public/ # Static assets
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── context/ # Context providers
│ │ ├── hooks/ # Custom hooks
│ │ ├── pages/ # Page components
│ │ ├── services/ # API services
│ │ └── utils/ # Utility functions
│ └── vite.config.js # Vite configuration
│
├── docker-compose.yml # Docker configuration
└── README.md # This file
POST /api/auth/register
POST /api/auth/login
POST /api/auth/logout
GET /api/auth/meGET /api/tasks
POST /api/tasks
GET /api/tasks/:id
PUT /api/tasks/:id
DELETE /api/tasks/:id
PATCH /api/tasks/:id/completeGET /api/projects
POST /api/projects
GET /api/projects/:id
PUT /api/projects/:id
DELETE /api/projects/:id
GET /api/projects/:id/tasks
GET /api/projects/:id/statsGET /api/teams
POST /api/teams
GET /api/teams/:id
PUT /api/teams/:id
DELETE /api/teams/:id
POST /api/teams/:id/invite
GET /api/teams/:id/membersFor complete API documentation, see API_DOCUMENTATION.md
# Backend tests
cd backend
npm test
# Frontend tests
cd frontend
npm test# Backend
cd backend
npm run lint
# Frontend
cd frontend
npm run lint# Seed database
cd backend
npm run seed
# Clear database
npm run db:clear
# Create indexes
npm run db:indexesSee backend/README.md for detailed backend deployment instructions.
Quick steps:
- Set production environment variables
- Use MongoDB Atlas or managed MongoDB
- Deploy to your hosting platform (Heroku, AWS, DigitalOcean, etc.)
- Use PM2 for process management
- Configure Nginx as reverse proxy
See frontend/README.md for detailed frontend deployment instructions.
Quick steps:
- Build the application:
npm run build - Deploy to static hosting (Vercel, Netlify, etc.)
- Or serve with Nginx/Apache
- Configure environment variables
- Set up SSL certificate
# Build and run with Docker Compose
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down| Variable | Description | Example |
|---|---|---|
NODE_ENV |
Environment | production |
PORT |
Server port | 5000 |
MONGODB_URI |
MongoDB connection string | mongodb://localhost:27017/taskly |
SESSION_SECRET |
Session secret key | random-secret-key |
FRONTEND_URL |
Frontend URL for CORS | https://yourdomain.com |
CLOUDINARY_CLOUD_NAME |
Cloudinary cloud name | your-cloud |
CLOUDINARY_API_KEY |
Cloudinary API key | 123456789 |
CLOUDINARY_API_SECRET |
Cloudinary API secret | secret |
RESEND_API_KEY |
Resend API key | re_xxx |
EMAIL_FROM |
From email address | noreply@yourdomain.com |
| Variable | Description | Example |
|---|---|---|
VITE_API_URL |
Backend API URL | https://api.yourdomain.com/api |
- Session-based authentication with secure cookies
- Password hashing with bcrypt
- CORS protection
- Rate limiting on API endpoints
- Input validation and sanitization
- XSS protection
- CSRF protection
- Secure headers with helmet
- Environment variable protection
- Code splitting and lazy loading
- Image optimization with Cloudinary
- Database indexing
- API response caching
- Gzip compression
- CDN for static assets
- Optimized bundle size
- Chrome (last 2 versions)
- Firefox (last 2 versions)
- Safari (last 2 versions)
- Edge (last 2 versions)
- Mobile browsers (iOS Safari, Chrome Mobile)
- Fork the repository
- Create your 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
Database connection failed
- Ensure MongoDB is running
- Check connection string in
.env - Verify network connectivity
CORS errors
- Check
FRONTEND_URLin backend.env - Verify frontend is running on correct port
- Check CORS configuration in
server.js
Session not persisting
- Verify
SESSION_SECRETis set - Check MongoDB connection for session store
- Clear browser cookies
File upload fails
- Verify Cloudinary credentials
- Check file size limits
- Ensure proper MIME types
For more troubleshooting, see:
- Suleiman Abdulkadir