Skip to content

Latest commit

Β 

History

42 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation



β—Ž Orbit

Organize your team. Track every task. Ship faster.

A production-ready, full-stack Team Task Manager with role-based access, real-time dashboards, and a premium UI β€” built and deployed in under 48 hours.


🌐 Live Demo Β· πŸ“‚ GitHub Repo Β· βš™οΈ API Health



πŸ“Έ Screenshots

🏠 Landing Page

Premium SaaS-style landing with animated particles, live activity feed, and scroll-reveal sections

Landing Page


πŸ” Authentication

Clean sign-in and registration flow with warm gradient aesthetic

Sign In Create Account
Sign In Register

πŸ“Š Dashboard

Animated stat cards, bar chart, donut completion ring, overdue alerts, and filterable task list

Dashboard


πŸ“ Projects

All your projects at a glance β€” with member count, task count, and role badges

Projects Page


✨ Features

πŸ” Core Features

  • JWT Authentication β€” Secure signup/login with bcrypt password hashing and 7-day token expiry
  • Project Management β€” Create, update, and delete projects with name and description
  • Team Management β€” Add team members by email, assign roles (Admin / Member)
  • Task System β€” Create tasks, assign to members, set due dates, and track status (Pending β†’ In Progress β†’ Completed)
  • Dashboard β€” Real-time overview of all tasks across all projects, status breakdown, and overdue detection
  • Role-Based Access Control β€” Admins have full control; Members can only update status of their own tasks

🧠 Advanced Features

  • Overdue Detection β€” Automatically flags tasks past due date that aren't completed
  • Cross-Project Dashboard β€” Aggregates tasks from all projects into one view
  • Member Safety Guards β€” Prevents removing the last admin from a project
  • Cascading Deletes β€” Deleting a project removes all its tasks and memberships cleanly
  • Single-Command Dev β€” Frontend + backend start together with one npm run dev from root

🎨 UX Features

  • Animated Landing Page β€” Canvas particle system, floating orbs, grain overlay, scroll-reveal sections
  • Count-Up Stat Cards β€” Numbers animate from 0 on page load
  • Donut Completion Chart β€” Visual completion percentage with animated progress bars
  • 3D Card Tilt β€” Feature cards respond to mouse movement with perspective tilt
  • Live Activity Feed β€” Simulated real-time team activity on the landing page
  • Filter Tabs β€” Filter recent tasks by status directly on the dashboard
  • Skeleton Loading β€” Smooth loading states instead of blank screens
  • Auto Browser Launch β€” npm run dev opens the browser automatically

πŸ› οΈ Tech Stack

Layer Technology Purpose
Frontend React 18 + Vite UI framework + lightning-fast dev server
Styling Tailwind CSS Utility-first styling
Charts Recharts Bar chart + Donut/Pie chart on dashboard
Routing React Router v6 Client-side navigation + protected routes
HTTP Client Axios API calls with JWT interceptor + auto-logout
Backend Node.js + Express REST API server
ORM Prisma Type-safe database access + migrations
Database PostgreSQL (Neon) / SQLite (dev) Relational data storage
Auth JWT + bcryptjs Stateless authentication
Dev Tools Nodemon + Concurrently Hot reload + unified dev command
Deployment Render (frontend + backend) + Neon (database) Full-stack cloud deployment

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     CLIENT (Browser)                     β”‚
β”‚              React + Vite  (port 5173)                   β”‚
β”‚   Landing β†’ Auth β†’ Dashboard β†’ Projects β†’ ProjectDetail  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ HTTP (Axios + JWT)
                       β”‚ /api/*
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  BACKEND (Express)                        β”‚
β”‚                  Node.js  (port 5000)                    β”‚
β”‚                                                          β”‚
β”‚  /api/auth     β†’  AuthController    (register, login)   β”‚
β”‚  /api/projects β†’  ProjectController (CRUD)              β”‚
β”‚  /api/tasks    β†’  TaskController    (CRUD + dashboard)  β”‚
β”‚  /api/members  β†’  MemberController  (add/remove/roles)  β”‚
β”‚                                                          β”‚
β”‚  Middleware: JWT verification β†’ Role guard              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ Prisma ORM
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    DATABASE                               β”‚
β”‚          PostgreSQL (Neon prod) / SQLite (dev)           β”‚
β”‚                                                          β”‚
β”‚   Users ──< ProjectMembers >── Projects                  β”‚
β”‚                                     └──< Tasks           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow

  1. User logs in β†’ JWT issued β†’ stored in localStorage
  2. Every API request β†’ Axios attaches JWT in Authorization: Bearer header
  3. Express middleware verifies JWT β†’ attaches req.user
  4. Role middleware checks ProjectMember.role before sensitive operations
  5. Prisma executes DB queries β†’ returns typed data
  6. Frontend renders with React state

πŸ“ Folder Structure

orbit/
β”œβ”€β”€ package.json               ← Root: runs both frontend + backend
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ prisma/
β”‚   β”‚   └── schema.prisma      ← DB models (User, Project, Task, Member)
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ controllers/
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.controller.js
β”‚   β”‚   β”‚   β”œβ”€β”€ project.controller.js
β”‚   β”‚   β”‚   β”œβ”€β”€ task.controller.js
β”‚   β”‚   β”‚   └── member.controller.js
β”‚   β”‚   β”œβ”€β”€ middleware/
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.middleware.js   ← JWT verification
β”‚   β”‚   β”‚   └── role.middleware.js   ← Admin/Member guard
β”‚   β”‚   β”œβ”€β”€ routes/
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.routes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ project.routes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ task.routes.js
β”‚   β”‚   β”‚   └── member.routes.js
β”‚   β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”‚   └── prisma.js            ← Prisma client singleton
β”‚   β”‚   └── index.js                 ← Express entry point
β”‚   β”œβ”€β”€ .env
β”‚   β”œβ”€β”€ railway.toml                 ← Railway deployment config
β”‚   └── package.json
β”‚
└── frontend/
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ api/
    β”‚   β”‚   └── client.js            ← Axios instance + interceptors
    β”‚   β”œβ”€β”€ components/
    β”‚   β”‚   β”œβ”€β”€ Layout.jsx           ← Sidebar navigation
    β”‚   β”‚   β”œβ”€β”€ Modal.jsx            ← Reusable modal
    β”‚   β”‚   └── TaskCard.jsx         ← Task display card
    β”‚   β”œβ”€β”€ context/
    β”‚   β”‚   └── AuthContext.jsx      ← Global auth state
    β”‚   β”œβ”€β”€ pages/
    β”‚   β”‚   β”œβ”€β”€ Landing.jsx          ← Public landing page
    β”‚   β”‚   β”œβ”€β”€ Login.jsx
    β”‚   β”‚   β”œβ”€β”€ Register.jsx
    β”‚   β”‚   β”œβ”€β”€ Dashboard.jsx        ← Stats + charts + tasks
    β”‚   β”‚   β”œβ”€β”€ Projects.jsx         ← Projects list
    β”‚   β”‚   └── ProjectDetail.jsx    ← Tasks + members management
    β”‚   β”œβ”€β”€ App.jsx                  ← Routes + auth guards
    β”‚   └── main.jsx
    β”œβ”€β”€ index.html
    β”œβ”€β”€ vite.config.js
    └── package.json

πŸš€ Getting Started

Prerequisites

  • Node.js v18+
  • npm v8+
  • Git

Installation

# 1. Clone the repository
git clone https://github.com/SamridhiiiGupta/Orbit.git
cd Orbit

# 2. Install all dependencies (frontend + backend)
npm run install:all

# 3. Set up environment variables
cp backend/.env.example backend/.env
# Edit backend/.env with your values (see Environment Variables below)

# 4. Initialize the database
cd backend
npx prisma db push
cd ..

# 5. Start the full app (one command)
npm run dev

The app will open automatically at http://localhost:5173


▢️ Running the Project

Single command from root:

npm run dev

This uses concurrently to:

  • Start the Express backend on http://localhost:5000
  • Start the Vite frontend on http://localhost:5173
  • Auto-opens the browser

Individual services:

# Backend only
cd backend && npm run dev

# Frontend only
cd frontend && npm run dev

πŸ” Environment Variables

Backend (backend/.env)

# Database
DATABASE_URL="file:./dev.db"           # SQLite for local dev
# DATABASE_URL="postgresql://..."      # PostgreSQL for production

# Auth
JWT_SECRET="your-secret-key-here"      # Used to sign/verify JWT tokens

# Server
PORT=5000                               # Express server port

# CORS
CLIENT_URL="http://localhost:5173"      # Frontend URL (exact match required)

Frontend (frontend/.env)

# Only needed for production deployment
# In local dev, Vite proxy handles /api β†’ localhost:5000
VITE_API_URL="https://orbit-backend-wp7w.onrender.com"

🌐 Deployment (Render + Neon)

Database

  1. Go to neon.tech β†’ New Project
  2. Copy the connection string it provides
  3. Update prisma/schema.prisma: provider = "sqlite" β†’ provider = "postgresql"
  4. Locally, set DATABASE_URL to the Neon string and run npx prisma db push to sync the schema

Backend

  1. Push code to GitHub
  2. Go to render.com β†’ New β†’ Web Service β†’ connect repo
  3. Set Root Directory β†’ backend
  4. Build command: npm install
  5. Start command: npx prisma generate && node src/index.js
  6. Set environment variables:
    DATABASE_URL=your-neon-connection-string
    JWT_SECRET=your-secret
    CLIENT_URL=https://your-frontend.onrender.com
    

Frontend

  1. New Render service β†’ Static Site β†’ same repo β†’ Root Directory: frontend
  2. Build command: npm install && npm run build
  3. Publish directory: dist
  4. Set variable: VITE_API_URL=https://your-backend.onrender.com

Common Mistakes

Mistake Fix
prisma: command not found Use npx prisma generate, not the bare prisma command β€” Render doesn't install it globally
Root directory "backend " does not exist Check for a trailing space in the Root Directory field
CORS error CLIENT_URL must exactly match the frontend URL with https://, no trailing slash
Blank frontend Check VITE_API_URL is set correctly before the build runs β€” Vite bakes it in at build time
DB connection error Confirm the full Neon connection string is on one line in .env, wrapped in quotes

πŸ“‘ API Reference

Auth

Method Endpoint Auth Description
POST /api/auth/register ❌ Create account
POST /api/auth/login ❌ Login, returns JWT
GET /api/auth/me βœ… Get current user

Projects

Method Endpoint Role Description
GET /api/projects Any List user's projects
POST /api/projects Any Create project
GET /api/projects/:id Member Get project details
PATCH /api/projects/:id Admin Update project
DELETE /api/projects/:id Admin Delete project

Tasks

Method Endpoint Role Description
GET /api/tasks/dashboard Any Cross-project dashboard data
GET /api/tasks/project/:id Member List project tasks
POST /api/tasks/project/:id Member Create task
PATCH /api/tasks/:id Member* Update task
DELETE /api/tasks/:id Admin Delete task

*Members can only update status of tasks assigned to them.

Members

Method Endpoint Role Description
GET /api/members/:projectId Member List members
POST /api/members/:projectId Admin Add member by email
PATCH /api/members/:projectId/:userId Admin Change role
DELETE /api/members/:projectId/:userId Admin Remove member

⚑ Performance & Optimizations

  • Prisma WAL mode β€” SQLite uses Write-Ahead Logging for better concurrent read performance
  • JWT stateless auth β€” No server-side sessions; scales horizontally
  • Vite proxy β€” In dev, /api requests proxy to backend avoiding CORS entirely
  • Cascading deletes β€” Single DB operation cleans up all related records
  • Prisma singleton β€” Single PrismaClient instance reused across all requests
  • React lazy state β€” Dashboard data fetched once per mount, no polling

πŸ”­ Future Improvements

  • Email notifications β€” Notify assignees when tasks are created or updated
  • File attachments β€” Upload files to tasks (S3/Cloudinary)
  • Activity log β€” Full audit trail per project
  • Kanban view β€” Drag-and-drop board alongside list view
  • Task comments β€” Threaded discussion per task
  • Due date reminders β€” Scheduled emails for upcoming deadlines
  • OAuth β€” Login with Google / GitHub
  • Mobile app β€” React Native client

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

Samridhi Gupta

GitHub

Built solo in under 24 hours as a full-stack assignment.


β—Ž Orbit β€” Built for teams that move fast.

About

πŸ”₯ Orbit β€” A high-performance full-stack team task manager with a premium UI, secure JWT auth, role-based access, and powerful dashboards. Built with React, Node.js & PostgreSQL. Clean. Fast. Production-ready. πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages