A modern, full-featured ticket tracking and project management application
π Features β’ β‘ Quick Start β’ π οΈ Setup β’ ποΈ Architecture β’ π API Documentation
This is a comprehensive ticket tracking system built with modern technologies, featuring a React frontend and FastAPI backend. It demonstrates real-world application architecture with proper authentication, role-based access control, and a professional user interface.
- π JWT-based authentication with secure token management
- π Google OAuth integration for seamless login
- π Role-based access control (Admin/User roles)
- π‘οΈ Protected routes and API endpoints
- πͺ Professional login/logout with confirmation modals
- π Multi-project support with project-specific access
- π― Kanban board with drag-and-drop functionality
- π Issue tracking with detailed issue management
- π₯ Team member management per project
- π·οΈ Issue types, priorities, and statuses
- β±οΈ Time tracking and estimation
- π± Responsive design that works on all devices
- π Professional interface with consistent styling
- β¨ Smooth animations and transitions
- π¨ Custom components (modals, forms, dropdowns)
- π Beautiful gradients and modern design patterns
- π₯ User management (create, update, delete users)
- π Project oversight (view and manage all projects)
- ποΈ Project creation with category management
- ποΈ Safe deletion with confirmation modals
- π Admin dashboard with comprehensive controls
- π Rich text editor for issue descriptions
- π€ Separate reporter and assignee functionality
- π¬ Comments system (ready for implementation)
- π·οΈ Custom fields (estimate, time tracking, priority)
- π Real-time updates and optimistic UI
- Node.js (v14+ recommended)
- Python (v3.8+ required)
- PostgreSQL (v12+ recommended)
- Git
git clone https://github.com/naumanshafi/tooling-ticket-tracker.git
cd tooling-ticket-tracker# Install PostgreSQL (if not already installed)
# macOS
brew install postgresql
brew services start postgresql
# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
# Create database
psql -U postgres -c "CREATE DATABASE ticket_tracker_dev;"cd api
# Create virtual environment
python -m venv venv
# Activate virtual environment
# macOS/Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create environment file
cp .env.example .env
# Edit .env with your database credentials# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=ticket_tracker_dev
DB_USERNAME=postgres
DB_PASSWORD=your_password_here
# JWT Configuration
JWT_SECRET_KEY=your-super-secret-jwt-key-here
JWT_ALGORITHM=HS256
JWT_EXPIRATION_HOURS=24
# Google OAuth (Optional)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# Application Settings
DEBUG=True
CORS_ORIGINS=["http://localhost:3000"]# Development server with auto-reload
python main.py
# Or using uvicorn directly
uvicorn main:app --reload --host 0.0.0.0 --port 5000# Open new terminal
cd client
# Install dependencies
npm install
# Start development server
npm startThe application will open at http://localhost:3000
tooling-ticket-tracker/
βββ π api/ # FastAPI Backend
β βββ π main.py # Main application file
β βββ π requirements.txt # Python dependencies
β βββ π .env.example # Environment template
β βββ π venv/ # Virtual environment
β
βββ π client/ # React Frontend
β βββ π src/
β β βββ π Admin/ # Admin panel components
β β β βββ π Users/ # User management
β β β βββ π Projects/ # Project management
β β β βββ π Sidebar/ # Admin navigation
β β βββ π Auth/ # Authentication components
β β βββ π Project/ # Project workspace
β β β βββ π Board/ # Kanban board
β β β βββ π Members/ # Team management
β β β βββ π Sidebar/ # Project navigation
β β βββ π shared/ # Reusable components
β β βββ π components/ # UI components
β β βββ π hooks/ # Custom React hooks
β β βββ π utils/ # Utility functions
β βββ π package.json # Node.js dependencies
β βββ π webpack.config.js # Build configuration
β
βββ π README.md # This file
- π FastAPI - Modern, fast web framework for Python
- ποΈ PostgreSQL - Robust relational database
- π JWT Authentication - Secure token-based auth
- π Pydantic - Data validation and serialization
- π SQLAlchemy - Database ORM (raw SQL queries)
- π CORS - Cross-origin resource sharing
- π Dependency Injection - Secure route protection
- βοΈ React 16.12 - Modern functional components with hooks
- π¨ Styled Components - CSS-in-JS styling
- π£οΈ React Router - Client-side routing
- π Formik - Form handling and validation
- π― Axios - HTTP client for API calls
- π React Beautiful DnD - Drag and drop functionality
- π§ Webpack - Custom build configuration
- π¨ Custom UI Components - Professional component library
The application uses PostgreSQL with the following table structure:
CREATE TABLE "user" (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
role VARCHAR(50) DEFAULT 'user',
"avatarUrl" VARCHAR(500),
google_id VARCHAR(255),
password VARCHAR(255),
"createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP
);Purpose: Stores all user information including authentication data and profile details.
Key Fields:
role: Either 'admin' or 'user' for global permissionsgoogle_id: For Google OAuth authenticationavatarUrl: Profile picture URL (Google or generated)
CREATE TABLE project (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100) DEFAULT 'software',
"createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Purpose: Stores project information and metadata.
Categories: software, marketing, business, design, research, product
CREATE TABLE issue (
id SERIAL PRIMARY KEY,
title VARCHAR(500) NOT NULL,
type VARCHAR(50) DEFAULT 'task',
status VARCHAR(50) DEFAULT 'backlog',
priority VARCHAR(10) DEFAULT '3',
"listPosition" NUMERIC,
description TEXT,
"descriptionText" TEXT,
estimate INTEGER,
"timeSpent" INTEGER DEFAULT 0,
"timeRemaining" INTEGER,
"reporterId" INTEGER REFERENCES "user"(id),
"projectId" INTEGER REFERENCES project(id),
"createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Purpose: Core ticket/issue tracking with full lifecycle management.
Issue Types: task, story, bug, epic
Statuses: backlog, selected, in-progress, done
Priorities: 1 (highest), 2 (high), 3 (medium), 4 (low), 5 (lowest)
CREATE TABLE user_project (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES "user"(id) ON DELETE CASCADE,
project_id INTEGER REFERENCES project(id) ON DELETE CASCADE,
role VARCHAR(50) DEFAULT 'user',
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id, project_id)
);Purpose: Many-to-many relationship between users and projects with project-specific roles.
CREATE TABLE issue_user (
id SERIAL PRIMARY KEY,
issue_id INTEGER REFERENCES issue(id) ON DELETE CASCADE,
user_id INTEGER REFERENCES "user"(id) ON DELETE CASCADE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(issue_id, user_id)
);Purpose: Many-to-many relationship for issue assignments (separate from reporter).
CREATE TABLE sessions (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES "user"(id) ON DELETE CASCADE,
token VARCHAR(500) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL
);Purpose: JWT token management and session tracking.
user (1) ββ (M) user_project (M) ββ (1) project
user (1) ββ (M) issue [as reporter]
user (M) ββ (M) issue_user ββ (M) issue [as assignees]
project (1) ββ (M) issue
user (1) ββ (M) sessions
- π Referential Integrity: Foreign keys with CASCADE deletes
- β‘ Optimized Queries: Proper indexing on frequently queried fields
- π‘οΈ Data Validation: Constraints and defaults for data consistency
- π Audit Trail: Created/updated timestamps on all major tables
- π Flexible Relationships: Separate reporter vs assignee concepts
- π― Unique Constraints: Prevent duplicate relationships
POST /auth/login # Email/password login
POST /auth/google # Google OAuth login
POST /auth/logout # Logout user
GET /currentUser # Get current user infoGET /users # List all users
POST /users # Create new user
PUT /users/{id} # Update user
DELETE /users/{id} # Delete userGET /projects # Get user's projects
GET /admin/projects # Get all projects (admin)
POST /projects # Create project
PUT /projects/{id} # Update project
DELETE /projects/{id} # Delete project (admin)
GET /projects/{id}/users # Get project members
POST /projects/{id}/users # Add user to project
DELETE /projects/{id}/users/{user_id} # Remove user from projectGET /issues # List all issues
GET /issues/{id} # Get specific issue
POST /issues # Create new issue
PUT /issues/{id} # Update issue
DELETE /issues/{id} # Delete issue- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- ESLint for JavaScript linting
- Prettier for code formatting
- Black for Python code formatting
- Type hints for Python functions
- PropTypes for React components
This project is licensed under the MIT License - see the LICENSE file for details.
β Star this repository if you found it helpful!
π Get Started β’ π Documentation β’ π Report Bug β’ π‘ Request Feature
Made with β€οΈ by Muhammad Noor Ul Ain