A full-stack project management web application where users can create projects, invite team members, create tasks, assign tasks, update task status, and track progress with role-based access control. This project demonstrates hands-on experience in designing and developing full-stack web applications using REST APIs, backend architecture, relational SQL database design, table relationships, indexing optimization, authentication systems, role-based access control, frontend development, API integration, and real-world cloud deployment using Railway.
This project is designed as a real-world team collaboration and task tracking platform. The goal is to give users a simple but professional system where they can:
- sign up and log in securely,
- create and manage projects,
- add team members to a project,
- create tasks and assign them to project members,
- update task status through a Kanban-style workflow,
- track project progress using dashboard summaries,
- manage access using project-level roles.
This project was built to demonstrate a production-style full-stack workflow with frontend, backend, database, validation, relationships, indexing, and deployment.
Team Task Manager is a task management application for teams. Each project has its own members and its own task board. A user who creates a project becomes the admin for that project, and that admin can manage members and tasks in that project.
The application supports:
- user authentication,
- project management,
- team member management,
- task management,
- dashboard statistics,
- role-based permissions,
- Railway deployment.
- Signup
- Login
- JWT-based session handling
- Email validation
- Secure password hashing
- Create project
- View projects
- View project members
- Add members to a project using email
- Remove members from a project
- Edit project title and description
- Delete project
- Create task
- Assign task to a project member
- Update task status
- Edit task details
- Delete task
- Filter by my tasks / all tasks
- Kanban-style task board
- Total task count
- Todo / In Progress / Done counts
- Overdue tasks
- Project-wise task summary
- Project admin can manage project and tasks
- Project members can view and work on tasks
- Access is controlled at project level, not only global user level
- React
- Vite
- Axios
- React Router DOM
- Context API
- Custom reusable components
- Python
- Flask
- Flask-CORS
- MySQL Connector
- PyJWT
- bcrypt
- gunicorn
- MySQL
- Railway
- Git
- GitHub
Full Stack Architecture:
The database is normalized and designed around real relationships.
usersprojectsproject_memberstasks_table
- One user can create many projects.
- One project can have many members.
- One user can belong to many projects.
- One project can have many tasks.
- One task belongs to one project.
- One task can be assigned to one user.
users
│
├── creates ──> projects
│ │
│ ├── has many ──> tasks_table
│ │
│ └── has many ──> project_members
│
└── belongs to many projects through project_members
Stores registered users.
Important columns:
idusername/nameemailpassword_hashrolecreated_at
Purpose:
- authentication
- identity
- project membership mapping
Stores project details. Important columns:
idtitle/namedescriptioncreated_bycreated_at
Purpose:
- store project metadata
- connect project to creator
- drive project-level access
Stores project membership and project-level role.
Important columns:
idproject_iduser_idrolejoined_at
Purpose:
- many-to-many mapping between users and projects
- project-level role control
- member management
Role meanings:
admin= project owner / project managermember= regular project team member
Stores tasks for each project.
Important columns:
idtitledescriptionstatusprioritydue_dateproject_idassigned_tocreated_bycreated_atupdated_at
Purpose:
- task creation
- task assignment
- task status tracking
- dashboard analytics
Indexes were added only where they are useful for performance.
users.emailprojects.created_byproject_members.project_idproject_members.user_idtasks_table.project_idtasks_table.assigned_totasks_table.statustasks_table.prioritytasks_table.due_date
Indexes improve performance for:
- login by email,
- loading user projects,
- loading project members,
- loading task boards,
- filtering tasks by status,
- loading “my tasks”,
- finding overdue tasks,
- dashboard summary queries.
Indexing every column increases storage and can slow inserts/updates.
So only columns used frequently in filters, joins, and lookups were indexed.
The backend is written in Flask and follows a REST API structure.
- connect to MySQL,
- register and login users,
- hash and verify passwords,
- issue JWT tokens,
- protect routes,
- validate project access,
- handle task and project operations,
- calculate dashboard stats,
- return JSON responses to frontend.
The backend includes:
- required-field validation,
- Gmail validation for registration,
- duplicate email protection,
- password hashing with bcrypt,
- JWT authentication,
- project-level permission checks,
- task assignment validation,
- access control for admin/member operations.
The API is structured using standard REST patterns:
The frontend is built using React + Vite.
- show login/register screens,
- store token and user data,
- protect private routes,
- display dashboard cards,
- show project lists,
- open project detail pages,
- show task boards,
- display member dropdowns,
- allow editing and deleting based on permissions,
- call backend APIs through Axios.
Context APIfor auth state,localStoragefor token persistence,ProtectedRoutefor private pages,- Axios interceptor to attach JWT automatically.
The project is deployed using Railway.
- Frontend service
- Backend service
- MySQL database service
- Push code to GitHub.
- Create Railway project.
- Add MySQL service.
- Add backend service from the GitHub repo.
- Add frontend service from the same GitHub repo.
- Configure root directories:
- backend service →
backend - frontend service →
frontend
- backend service →
- Add backend environment variables.
- Use Railway MySQL variables in backend config.
- Set frontend Axios base URL to the backend public URL.
- Deploy and test.
- The backend runs using
gunicorn. - Railway listens on port
8080. - CORS is enabled to allow frontend requests.
- The frontend is built using Vite.
- The build uses
npm run build. - The preview/start command runs on the Railway provided port.
- Vite allowed host configuration was adjusted for Railway domain access.
USE CASE Diagram:
Install:
- Python 3.11+ (or compatible)
- Node.js 18+
- MySQL server or MySQL Workbench
- Git
git clone <your-github-repo-url>
cd Team_Task_Manager
Open MySQL Workbench or any MySQL client and run the SQL schema from this README.
Make sure the tables are created:
usersprojectsproject_memberstasks_table
Create a .env file inside backend/:
MYSQLHOST=localhost
MYSQLPORT=3306
MYSQLUSER=root
MYSQLPASSWORD=your_password
MYSQLDATABASE=team_task_manager
SECRET_KEY=your_secret_key
If using Railway or remote MySQL, replace these with the correct values.
cd backend pip install -r requirements.txt
If you use a virtual environment:
python -m venv venv venv\Scripts\activate pip install -r requirements.txt
python app.py
Or if you want production-like local run:
gunicorn app:app
Open:
frontend/src/services/api.js
Set:
baseURL: "http://127.0.0.1:5000/api"
If backend runs on another host or port, update it accordingly.
cd ../frontend npm install
npm run dev
The frontend will usually run on:
- If the backend and frontend are running separately, make sure the backend CORS settings allow the frontend origin.
- The backend must use the same database schema as the frontend expects.
- The task assignment dropdown expects project members to be present.
- The project creator becomes the project admin automatically.
- required fields cannot be empty,
- Gmail validation on register,
- duplicate email not allowed,
- passwords are stored hashed.
- project name is required,
- only project admin can edit/delete project,
- only project admin can add/remove members.
- title and project are required,
- assignee must be a project member,
- task access is restricted by project membership,
- only project admin can create/edit/delete tasks.
Team Task Manager / TaskFlow Pro is a Railway-deployed full-stack team collaboration platform that lets users:
- sign up and log in,
- create projects,
- manage team members,
- create and assign tasks,
- track task status,
- view dashboards,
- work with project-level permissions.
It uses:
- React for the frontend,
- Flask for the backend,
- MySQL for relational data,
- JWT for authentication,
- Railway for deployment.



