Skip to content

Full-stack task management app with real-time collaboration. Built with React 19, TypeScript, Node.js, MongoDB, Pusher & Turborepo

License

Notifications You must be signed in to change notification settings

apLanka/task-orbit

Repository files navigation

πŸš€ TaskOrbit

TaskOrbit TypeScript React Node.js MongoDB

A modern, real-time collaborative task management platform built with cutting-edge technologies

Features β€’ Tech Stack β€’ Getting Started β€’ Documentation


πŸ“‹ Overview

TaskOrbit is a full-stack task management application designed for teams and individuals who need powerful project organization with real-time collaboration. Built with a modern monorepo architecture using Turborepo, it demonstrates enterprise-level development practices with beautiful UI/UX powered by Shadcn and Tailwind CSS.

✨ Key Highlights

  • Real-time Collaboration - Live updates across all connected clients using Pusher
  • Multiple Views - Kanban, List, and Calendar views for flexible task visualization
  • Beautiful UI - Modern, responsive design with dark mode support
  • Monorepo Architecture - Organized codebase with Turborepo for optimal development
  • Secure Authentication - JWT-based auth with role-based access control
  • Fully Responsive - Seamless experience across desktop, tablet, and mobile
  • High Performance - Optimized with React Query for efficient data fetching
  • Type-Safe - 100% TypeScript for robust, maintainable code

🎯 Features

Task Management

  • Create, edit, delete, and organize tasks
  • Priority levels (Low, Medium, High, Urgent)
  • Due dates and time tracking
  • Tags and labels for categorization
  • Subtasks with progress tracking
  • Multi-user task assignments
  • File attachments support

Board Organization

  • Multiple boards/projects per user
  • Customizable board colors and icons
  • Board sharing and collaboration
  • Custom status columns
  • Kanban and List view options
  • Archive and restore functionality

Real-Time Features

  • Live task updates across all clients
  • User presence indicators
  • Real-time notifications
  • Drag-and-drop synchronization
  • Instant UI updates with Pusher

User Experience

  • Dark/Light theme toggle
  • Advanced search and filtering
  • Keyboard shortcuts
  • Mobile-responsive design
  • Beautiful animations with Framer Motion
  • Intuitive drag-and-drop interface

Additional Features

  • Email notifications
  • Secure authentication (JWT)
  • User profiles and avatars
  • Activity timeline
  • Role-based access control
  • Auto-save functionality

πŸ› οΈ Tech Stack

Frontend

  • Framework: React 19 with TypeScript
  • Build Tool: Vite
  • Styling: Tailwind CSS 4
  • UI Components: Shadcn UI + Radix UI
  • State Management: Zustand + React Query
  • Animations: Framer Motion
  • Drag & Drop: @dnd-kit
  • Forms: React Hook Form + Zod
  • Routing: React Router v7
  • Real-time: Pusher JS

Backend

  • Runtime: Node.js with Express
  • Language: TypeScript
  • Database: MongoDB with Mongoose
  • Authentication: JWT + bcrypt
  • Real-time: Pusher
  • Email: Nodemailer
  • Security: Helmet, express-rate-limit, xss-clean
  • Validation: Express Validator

DevOps & Tools

  • Monorepo: Turborepo
  • Package Manager: pnpm
  • Code Quality: ESLint + Prettier
  • Git Hooks: Husky + lint-staged
  • Type Checking: TypeScript 5.9

πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js 18+ or 20+
  • pnpm 9.0.0+
  • MongoDB (local or MongoDB Atlas)
  • Git

Installation

  1. Clone the repository
git clone https://github.com/yourusername/task-orbit.git
cd task-orbit
  1. Install dependencies
pnpm install
  1. Set up environment variables

Create .env files in both apps/api and apps/web:

apps/api/.env

# Server
PORT=5000
NODE_ENV=development

# Database
MONGODB_URI=mongodb://localhost:27017/task-orbit

# JWT
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_EXPIRES_IN=7d

# Pusher (Real-time)
PUSHER_APP_ID=your-pusher-app-id
PUSHER_KEY=your-pusher-key
PUSHER_SECRET=your-pusher-secret
PUSHER_CLUSTER=your-pusher-cluster

# Email (Nodemailer)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASSWORD=your-app-password
EMAIL_FROM=TaskOrbit <noreply@taskorbit.com>

# Frontend URL
FRONTEND_URL=http://localhost:5173

apps/web/.env

VITE_API_URL=http://localhost:5000/api
VITE_PUSHER_KEY=your-pusher-key
VITE_PUSHER_CLUSTER=your-pusher-cluster
  1. Start MongoDB
# macOS with Homebrew
brew services start mongodb-community

# Or manually
mongod --dbpath /path/to/data

# Windows
net start MongoDB
  1. Run the development servers
# Start both API and Web servers
pnpm dev

# Or start individually
pnpm --filter api dev      # API server on http://localhost:5000
pnpm --filter web dev      # Web app on http://localhost:5173
  1. Open your browser

Navigate to http://localhost:5173


πŸ“ Project Structure

task-orbit/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ api/                      # Backend API (Node.js + Express)
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ controllers/      # Route controllers
β”‚   β”‚   β”‚   β”œβ”€β”€ models/           # MongoDB models
β”‚   β”‚   β”‚   β”œβ”€β”€ routes/           # API routes
β”‚   β”‚   β”‚   β”œβ”€β”€ middleware/       # Auth, validation, error handling
β”‚   β”‚   β”‚   β”œβ”€β”€ services/         # Business logic (email, pusher)
β”‚   β”‚   β”‚   β”œβ”€β”€ utils/            # Utilities (JWT, etc.)
β”‚   β”‚   β”‚   β”œβ”€β”€ config/           # Configuration files
β”‚   β”‚   β”‚   β”œβ”€β”€ scripts/          # Seed data and utilities
β”‚   β”‚   β”‚   └── index.ts          # Entry point
β”‚   β”‚   └── package.json
β”‚   β”‚
β”‚   β”œβ”€β”€ web/                      # Frontend (React + Vite)
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ components/       # React components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ ui/          # Shadcn UI components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ board/       # Board & Kanban components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ task/        # Task components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ layout/      # Layout components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ notifications/ # Notification components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ animations/  # Animation wrappers
β”‚   β”‚   β”‚   β”‚   └── theme/       # Theme components
β”‚   β”‚   β”‚   β”œβ”€β”€ pages/           # Page components
β”‚   β”‚   β”‚   β”œβ”€β”€ hooks/           # Custom React hooks
β”‚   β”‚   β”‚   β”œβ”€β”€ services/        # API services
β”‚   β”‚   β”‚   β”œβ”€β”€ contexts/        # React contexts
β”‚   β”‚   β”‚   β”œβ”€β”€ store/           # Zustand stores
β”‚   β”‚   β”‚   β”œβ”€β”€ lib/             # Utilities
β”‚   β”‚   β”‚   β”œβ”€β”€ styles/          # Global styles
β”‚   β”‚   β”‚   └── types/           # TypeScript types
β”‚   β”‚   └── package.json
β”‚   β”‚
β”‚   └── docs/                     # Documentation
β”‚       β”œβ”€β”€ project-specification.md
β”‚       β”œβ”€β”€ ui-revamp-*.md
β”‚       └── phase-*-completion.md
β”‚
β”œβ”€β”€ packages/                     # Shared packages
β”‚   β”œβ”€β”€ eslint-config/           # Shared ESLint configs
β”‚   β”œβ”€β”€ typescript-config/       # Shared TypeScript configs
β”‚   β”œβ”€β”€ ui/                      # Shared UI components
β”‚   └── types/                   # Shared TypeScript types
β”‚
β”œβ”€β”€ turbo.json                   # Turborepo configuration
β”œβ”€β”€ package.json                 # Root package.json
β”œβ”€β”€ pnpm-workspace.yaml          # pnpm workspace config
└── README.md                    # This file

πŸ“š Documentation

Quick Links

Available Scripts

Root Level

# Development
pnpm dev              # Start all apps in development mode
pnpm build            # Build all apps for production
pnpm lint             # Lint all packages
pnpm format           # Format code with Prettier
pnpm check-types      # Type check all packages

# Turborepo commands
turbo run dev         # Run dev with Turborepo
turbo run build       # Build with Turborepo

API (apps/api)

cd apps/api

pnpm dev              # Start API server with nodemon
pnpm build            # Compile TypeScript
pnpm start            # Start production server
pnpm seed             # Seed database with sample data

Web (apps/web)

cd apps/web

pnpm dev              # Start Vite dev server
pnpm build            # Build for production
pnpm preview          # Preview production build
pnpm lint             # Lint frontend code

🌱 Seed Data

To populate your database with sample data for testing or portfolio screenshots:

cd apps/api
pnpm seed

This will create:

  • 3 sample boards (Product Development, Marketing Campaign, Design System)
  • 23 realistic tasks with various statuses, priorities, and subtasks
  • Data assigned to your user account

For detailed instructions, see:


πŸ” Authentication

TaskOrbit uses JWT-based authentication with the following features:

  • Registration: Create new user accounts with email verification
  • Login: Secure login with JWT token generation
  • Password Reset: Email-based password recovery
  • Role-Based Access: Admin, Manager, and Member roles
  • Protected Routes: Middleware-based route protection

API Endpoints

POST   /api/auth/register        # Register new user
POST   /api/auth/login           # Login user
POST   /api/auth/forgot-password # Request password reset
POST   /api/auth/reset-password  # Reset password
GET    /api/auth/me              # Get current user
PUT    /api/auth/profile         # Update profile

πŸ”„ Real-Time Features

TaskOrbit uses Pusher for real-time collaboration:

Implemented Features

  • βœ… Live task updates across all connected clients
  • βœ… Real-time notifications
  • βœ… User presence indicators
  • βœ… Board-specific channels
  • βœ… Private user channels

Pusher Setup

  1. Create a free account at pusher.com
  2. Create a new Channels app
  3. Copy credentials to .env files
  4. Restart servers

🎨 UI/UX Design

TaskOrbit features a modern, carefully crafted design system:

  • Design Tokens: Consistent colors, spacing, and typography
  • Component Library: Built with Shadcn UI and Radix UI
  • Animations: Smooth transitions with Framer Motion
  • Responsive: Mobile-first design approach
  • Accessibility: ARIA labels and keyboard navigation
  • Dark Mode: System-aware theme switching

For detailed design specifications, see UI Revamp Documentation.


πŸ§ͺ Testing

# Run tests (when implemented)
pnpm test

# Type checking
pnpm check-types

# Linting
pnpm lint

🚒 Deployment

Frontend (Vercel)

cd apps/web
pnpm build

# Deploy to Vercel
vercel --prod

Backend (Railway/Render/Heroku)

cd apps/api
pnpm build

# Set environment variables on your platform
# Deploy using platform CLI or Git integration

Environment Variables

Remember to set all environment variables in your deployment platform:

  • MongoDB connection string
  • JWT secret
  • Pusher credentials
  • Email service credentials
  • Frontend URL

🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Code Style

  • Follow the existing code style
  • Run pnpm lint before committing
  • Run pnpm format to format code
  • Ensure TypeScript types are properly defined
  • Write meaningful commit messages

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘¨β€πŸ’» Author

Pasindu Lanka


πŸ™ Acknowledgments


πŸ“ž Support

If you have any questions or need help, please:

  1. Check the Documentation
  2. Review Troubleshooting Guide
  3. Open an issue on GitHub
  4. Contact via email

⭐ Star this repo if you find it helpful! ⭐

Made with ❀️ by Pasindu Lanka

About

Full-stack task management app with real-time collaboration. Built with React 19, TypeScript, Node.js, MongoDB, Pusher & Turborepo

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages