Skip to content

SamridhiiiGupta/Orbit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

41 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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 (Railway) / SQLite (dev) Relational data storage
Auth JWT + bcryptjs Stateless authentication
Dev Tools Nodemon + Concurrently Hot reload + unified dev command
Deployment Railway 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 (Railway 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://your-backend.railway.app"

🌐 Deployment (Railway)

Backend

  1. Push code to GitHub
  2. Go to railway.app β†’ New Project β†’ Deploy from GitHub
  3. Set Root Directory β†’ backend
  4. Add PostgreSQL plugin (Railway auto-sets DATABASE_URL)
  5. Update prisma/schema.prisma: provider = "sqlite" β†’ provider = "postgresql"
  6. Set environment variables:
    JWT_SECRET=your-secret
    CLIENT_URL=https://your-frontend.railway.app
    PORT=5000
    
  7. Railway runs: prisma generate && prisma db push && node src/index.js

Frontend

  1. New Railway service β†’ same repo β†’ Root Directory: frontend
  2. Build command: npm run build
  3. Start command: npx serve dist -l $PORT
  4. Set variable: VITE_API_URL=https://your-backend.railway.app

Common Mistakes

Mistake Fix
prisma: Permission denied Remove node_modules from git, add to .gitignore
CORS error CLIENT_URL must exactly match frontend URL with https://
Blank frontend Check VITE_API_URL is set correctly
DB connection error Add DATABASE_URL as a Railway reference, not manual text

πŸ“‘ 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

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors