A tactile, high-craft agile project orchestration platform built for high-velocity software teams. Zero ceremonial drag.
Tasker is an agile project and task management system designed to eliminate context-switching and configuration labyrinths. Rather than burying work beneath enterprise clutter, Tasker treats every task, stage, and sprint as an architectural blueprint: clear structural lines, high-contrast typography, and sub-80ms interactions.
- Speed Over Ceremony: Transition stages, assign teammates, and check off subtasks in a single interaction without full-page reloads.
- Visual Scanability: Overdue milestones, priority alerts, and stage progressions are immediately discernible through structured color hierarchy and typography.
- Zero Dead Ends: Every stateβwhether an empty trash bin, route error, or offline stateβprovides an instant path forward.
- Multi-stage pipeline (To Do, In Progress, Completed) powered by
@hello-pangea/dnd. - Optimistic local state updates with automatic server rollback on network errors.
- Priority tagging (Urgent, High, Normal, Low) with visual indicators.
- Subtask checklists with automatic sprint completion calculations.
- Instant keyboard launcher for fuzzy-searching tasks and quick navigation across all views.
- Quick stage filters, theme switching, and action execution without lifting fingers from the keys.
- Integrated Lenis inertia scrolling delivering butter-smooth 120fps navigation.
- Calibrated navbar offset clearance ensuring header anchors land with exact spacing.
- Dual dark/light theme architecture with noise grain overlay.
- High-contrast obsidian base palette (
#08090d,#10121a) paired with refined cadmium cobalt accents (#2563eb). - Persisted user preference via
localStoragewith zero theme flash.
- Stateless Session Security: Cryptographically signed JWT tokens delivered via
httpOnly,SameSite: None,Securecookiesβimmune to client-side XSS token extraction. - OWASP Defense-in-Depth:
- Helmet HTTP Headers for clickjacking and MIME-type sniffing prevention.
- NoSQL Injection Sanitization stripping malicious query operators (
$gt,$ne). - Express Rate Limiting mitigating credential stuffing and DoS attacks.
- Payload Size Caps restricting body parsing to prevent memory exhaustion.
- Mobile drawer navigation with backdrop blur.
- Floating glassmorphic Sticky Mobile Conversion CTA for mobile landing page visitors.
- Privacy-preserving real-time visitor metrics via
@vercel/analytics. - Production SEO setup:
robots.txt,sitemap.xml, Open Graph cards, and Twitter summary metadata. - PWA-ready
site.webmanifestand high-resolution icon set. - Built-in legal transparency with dedicated
/privacyand/termspages. - Custom architectural
/404diagnostic page.
| Layer | Technologies |
|---|---|
| Frontend Framework | React 19, Vite 6, React Router DOM v7 |
| State & Data Fetching | Redux Toolkit (RTK), RTK Query with tag invalidation |
| Styling & Icons | Tailwind CSS, Lucide React, React Icons |
| Motion & Interaction | Lenis Smooth Scroll, Headless UI, @hello-pangea/dnd |
| Telemetry & Alerts | Sonner Toaster, Recharts, @vercel/analytics |
| Backend Runtime | Node.js (v20+), Express.js 4 |
| Database | MongoDB Atlas, Mongoose ODM |
| Security & Middleware | Cookie Parser, Helmet, Express Rate Limit, Morgan |
| Asset Storage | Cloudinary CDN |
flowchart TD
Client["Client: React 19 + Vite (port 3000)"]
subgraph Browser["Browser Runtime"]
Client --> RTK["Redux Toolkit / RTK Query"]
Client --> Lenis["Lenis Inertia Scrolling"]
Client --> DND["@hello-pangea/dnd Kanban"]
Client --> Analytics["@vercel/analytics"]
end
subgraph SecurityBoundary["Security & Middleware Layer"]
Helmet["Helmet Security Headers"]
RateLimit["Rate Limiter (DoS Defense)"]
Sanitize["NoSQL Sanitizer"]
CookieAuth["httpOnly Cookie Parser"]
end
subgraph Server["Backend: Express 4 (port 8800)"]
Routes["REST API Routes: /api/*"]
AuthMiddleware["verifyToken Middleware"]
Controllers["Controllers (Tasks, Users, Auth)"]
end
subgraph Database["Data Layer"]
Mongo[("MongoDB Atlas")]
Cloudinary[("Cloudinary CDN")]
end
Client -->|HTTPS + Credentials| SecurityBoundary
SecurityBoundary --> Routes
Routes --> AuthMiddleware
AuthMiddleware --> Controllers
Controllers --> Mongo
Client -.->|Direct Image Upload| Cloudinary
Tasker/
βββ client/ # React 19 Frontend
β βββ public/
β β βββ googlefaf7226c098585ff.html # Google Search Console verification
β β βββ robots.txt # Search crawler directives
β β βββ site.webmanifest # PWA manifest
β β βββ sitemap.xml # Canonical XML sitemap
β β βββ logo.png / tasker.ico # Brand icon assets
β βββ src/
β β βββ assets/ # Static styling assets
β β βββ components/ # Reusable UI primitives
β β β βββ tasks/ # TaskDialog, AddTask, UserList, BoardView
β β β βββ Navbar.jsx # Workspace navigation & search bar
β β β βββ Sidebar.jsx # Desktop navigation links
β β β βββ CommandPalette.jsx # βK universal command launcher
β β β βββ Table.jsx # Data tables with sorting & actions
β β βββ pages/ # Application routes
β β β βββ LandingPage.jsx # Architectural product landing page
β β β βββ Login.jsx # Authentication & demo quick-launch
β β β βββ Dashboard.jsx # Metrics overview & sprint telemetry
β β β βββ Tasks.jsx # Interactive Kanban & list view
β β β βββ MyTasks.jsx # Member assigned tasks
β β β βββ ActivityFeed.jsx # System activity stream
β β β βββ CalendarView.jsx # Milestones & deadline calendar
β β β βββ Users.jsx # Admin team directory management
β β β βββ Trash.jsx # Soft-deleted task recovery
β β β βββ Privacy.jsx # Legal data & cookie policy
β β β βββ Terms.jsx # Terms of service & governance
β β β βββ NotFound.jsx # Diagnostic 404 route handler
β β βββ redux/ # Store configuration & RTK Query slices
β β β βββ slices/ # authSlice, apiSlice, userApiSlice, taskApiSlice
β β β βββ store.js
β β βββ utils/ # ThemeContext, formatters, helpers
β β βββ App.jsx # Routing & dynamic document.title listener
β β βββ main.jsx
β βββ index.html # Open Graph, Twitter Cards, Typography preconnects
β βββ vite.config.js # Vite configuration (port 3000, manualChunks)
β βββ package.json
βββ server/ # Express Backend
β βββ controllers/ # authController, taskController, userController
β βββ middlewares/ # errorMiddleware, sanitizeMiddleware, authMiddleware
β βββ models/ # taskModel, userModel, notificationModel
β βββ routes/ # Express route routers
β βββ utils/ # dbConnection, createJWT cookie handler
β βββ index.js # Server entry point (port 8800)
β βββ package.json
βββ PRODUCT.md # Product specs & user personas
βββ DESIGN.md # Design tokens & color system
βββ README.md # Project documentation
- Node.js (v18.0.0 or higher recommended)
- MongoDB Atlas cluster or local MongoDB instance
- Cloudinary account (free tier for task attachment uploads)
git clone https://github.com/AviralMehrotra/Tasker.git
cd Taskercd server
npm installCreate a .env file in the /server directory:
PORT=8800
NODE_ENV=development
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_signing_secret_keyStart the backend API server:
npm run devThe API server will initialize at
http://localhost:8800.
Open a separate terminal window:
cd client
npm installCreate a .env file in the /client directory:
VITE_SERVER_API=http://localhost:8800/api
VITE_CLOUDINARY_URL=https://api.cloudinary.com/v1_1/<your_cloud_name>/upload
VITE_CLOUDINARY_PRESET=<your_upload_preset>Start the frontend Vite development server:
npm run devThe frontend application will run at
http://localhost:3000.
| Variable | Required | Description | Example / Default |
|---|---|---|---|
PORT |
No | Port on which Express server listens | 8800 |
NODE_ENV |
Yes | Runtime environment mode | development / production |
MONGODB_URI |
Yes | MongoDB Atlas connection URI | mongodb+srv://user:pass@cluster.mongodb.net/tasker |
JWT_SECRET |
Yes | Cryptographic secret for signing tokens | super_secure_random_hash_string |
| Variable | Required | Description | Example / Default |
|---|---|---|---|
VITE_SERVER_API |
Yes | Base URL for backend REST endpoints | http://localhost:8800/api |
VITE_CLOUDINARY_URL |
No | Cloudinary unsigned REST upload endpoint | https://api.cloudinary.com/v1_1/<cloud_name>/upload |
VITE_CLOUDINARY_PRESET |
No | Unsigned Cloudinary upload preset name | tasker_uploads |
| Method | Endpoint | Description | Access |
|---|---|---|---|
POST |
/api/user/register |
Register new user account | Public |
POST |
/api/user/login |
Authenticate credentials & set token cookie |
Public |
POST |
/api/user/logout |
Clear session cookie | Authenticated |
GET |
/api/user/get-team |
Fetch team directory and profile metadata | Authenticated |
GET |
/api/user/notifications |
Fetch unread notifications | Authenticated |
PUT |
/api/user/profile |
Update account profile | Authenticated |
PUT |
/api/user/change-password |
Update account password | Authenticated |
DELETE |
/api/user/:id |
Remove user from workspace | Admin Only |
| Method | Endpoint | Description | Access |
|---|---|---|---|
POST |
/api/task/create |
Create a new task with subtasks & attachments | Authenticated |
GET |
/api/task |
Fetch tasks with stage/priority filters & search | Authenticated |
GET |
/api/task/dashboard |
Fetch aggregate metrics, charts & sprint telemetry | Authenticated |
GET |
/api/task/:id |
Fetch detailed task card with activity timeline | Authenticated |
PUT |
/api/task/update/:id |
Update task fields (title, priority, stage, dates) | Authenticated |
POST |
/api/task/activity/:id |
Post timestamped comment / status event | Authenticated |
PUT |
/api/task/create-subtask/:id |
Append checklist subtask | Authenticated |
PUT |
/api/task/:id |
Soft-delete task to Trash Bin | Authenticated |
DELETE |
/api/task/delete-restore/:id |
Restore from Trash or permanently delete | Authenticated |
Tasker is optimized for rapid cloud deployment:
- Frontend: Hosted seamlessly on Vercel with native Single-Page Application rewrites and
@vercel/analyticssupport.- Production URL: https://tasker-pm.vercel.app/
- Backend: Deployable to Render, Railway, or Fly.io as a persistent Node service.
- Database: Hosted on MongoDB Atlas with compound indexes on
{ stage: 1, isTrashed: 1 }for high-throughput queries.
Contributions, feature suggestions, and issues are welcome!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'feat: add AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.