A full-stack Project Management Tool built as Task 3 for the CodeAlpha Full Stack Development Internship.
The application provides a collaborative workspace where users can create and manage projects, add team members, assign tasks, organize work through a Kanban board, communicate through task comments, receive in-app notifications, and monitor project progress through reports.
- User registration
- User login
- JWT-based authentication
- Password hashing using PHP
password_hash() - Protected API endpoints
- Authentication state management
- Automatic session expiration through JWT
- Create projects
- Edit projects
- Delete projects
- Project descriptions
- Project status management
- Project priority management
- Project due dates
- Project ownership
- Project-level authorization
- Add members to projects
- Remove project members
- View project members
- Assign tasks to project members
- Owner/member roles
- Collaborative project workspace
- Member authorization
- Create tasks
- Edit tasks
- Delete tasks
- Assign tasks to users
- Task descriptions
- Task priorities
- Task due dates
- Task status management
- Kanban board
- Drag-and-drop task organization
- Add comments to tasks
- View task comments
- Delete your own comments
- Task-based communication
- Comment ownership
- Task assignment notifications
- Project membership notifications
- Comment notifications
- Notification center
- Read/unread notification state
- Direct navigation from notifications to related project boards
- Project status breakdown
- Task status breakdown
- Overall task completion rate
- Personal assigned-task summary
- Project progress monitoring
| Layer | Technology |
|---|---|
| Frontend | React 18 |
| Frontend Routing | React Router |
| Build Tool | Vite |
| Styling | CSS |
| Backend | PHP 8 |
| API | REST API |
| Database | MySQL / MariaDB |
| Database Access | PDO |
| Authentication | Custom JWT (HS256) |
| Password Security | PHP password_hash() |
| Web Server | Apache |
| Local Environment | XAMPP |
| Package Manager | npm |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ React Frontend โ
โ โ
โ Dashboard โ Board โ Reports โ
โ Projects โ Tasks โ Comments โ
โ Notifications โ Authentication โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ
โ HTTP / REST API
โ JSON + JWT
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PHP Backend โ
โ โ
โ Authentication โ Projects โ
โ Tasks โ Comments โ Notifications โ
โ Reports โ Authorization โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ
โ PDO
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MySQL / MariaDB โ
โ โ
โ Users โ
โ Projects โ
โ Project Members โ
โ Tasks โ
โ Comments โ
โ Notifications โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
CodeAlpha_ProjectManagementTool/
โ
โโโ backend/
โ โโโ api/
โ โ โโโ auth/
โ โ โ โโโ login.php
โ โ โ โโโ register.php
โ โ โ โโโ me.php
โ โ โ
โ โ โโโ comments/
โ โ โ โโโ index.php
โ โ โ โโโ delete.php
โ โ โ
โ โ โโโ notifications/
โ โ โ โโโ index.php
โ โ โ
โ โ โโโ projects/
โ โ โ โโโ index.php
โ โ โ โโโ detail.php
โ โ โ โโโ update.php
โ โ โ โโโ members.php
โ โ โ
โ โ โโโ reports/
โ โ โ โโโ index.php
โ โ โ
โ โ โโโ tasks/
โ โ โโโ index.php
โ โ โโโ update.php
โ โ โโโ delete.php
โ โ
โ โโโ config/
โ โ โโโ cors.php
โ โ โโโ database.php
โ โ
โ โโโ database/
โ โ โโโ schema.sql
โ โ
โ โโโ utils/
โ โ โโโ Jwt.php
โ โ โโโ authorize.php
โ โ
โ โโโ .htaccess
โ
โโโ docs/
โ โโโ QA_CHECKLIST.md
โ โโโ screenshots/
โ โโโ login.png
โ โโโ register.png
โ โโโ dashboard.png
โ โโโ create-project.png
โ โโโ project-members.png
โ โโโ kanban-board.png
โ โโโ task-details.png
โ โโโ comments.png
โ โโโ notifications.png
โ โโโ reports.png
โ
โโโ frontend/
โ โโโ src/
โ โ โโโ api/
โ โ โ โโโ client.js
โ โ โโโ components/
โ โ โโโ context/
โ โ โโโ pages/
โ โ โโโ styles/
โ โ โโโ utils.js
โ โ
โ โโโ index.html
โ โโโ package.json
โ โโโ package-lock.json
โ โโโ vite.config.js
โ
โโโ .gitignore
โโโ README.md
The application uses a relational MySQL/MariaDB database.
| Table | Purpose |
|---|---|
users |
User accounts and authentication data |
projects |
Project information and ownership |
project_members |
Project/user membership and roles |
tasks |
Project tasks and assignments |
comments |
Task-based communication |
notifications |
User notifications |
Users
โ
โโโโโโโโโโโโโโโโ
โ โ
โผ โผ
Projects Notifications
โ
โผ
Project Members
โ
โผ
Tasks
โ
โผ
Comments
The database schema is provided in:
backend/database/schema.sql
The schema contains the required database tables and relationships.
It does not include demo accounts or test data.
Make sure the following are installed:
- PHP 8.x
- XAMPP
- Apache
- MySQL / MariaDB
- Node.js
- npm
- Git
Check the installed versions:
php --version
node --version
npm --versiongit clone https://github.com/MBen213/CodeAlpha_ProjectManagementTool.git
cd CodeAlpha_ProjectManagementToolOpen the XAMPP Control Panel and start:
Apache
MySQL
The project should be located inside the Apache document root.
For a standard XAMPP installation:
C:\xampp\htdocs\CodeAlpha_ProjectManagementTool
Open phpMyAdmin:
http://localhost/phpmyadmin
Create a database named:
codealpha_pmt
Then import:
backend/database/schema.sql
The schema creates the required tables and relationships.
The backend supports local configuration through:
backend/config/config.local.php
This file is intentionally not committed to Git because it may contain local credentials and secrets.
The default XAMPP database configuration is:
Host: localhost
Database: codealpha_pmt
Username: root
Password: empty
If your MySQL credentials are different, configure them in your local configuration file.
Do not commit:
backend/config/config.local.php
This file is ignored by .gitignore.
The backend currently allows the Vite development server:
http://localhost:5173
The configuration is located in:
backend/config/cors.php
If you use a different frontend origin, update the allowed origin accordingly.
Open a terminal inside:
frontend/
Install dependencies:
npm installStart the development server:
npm run devThe frontend will normally be available at:
http://localhost:5173
The PHP backend is served through Apache.
The API base URL used by the frontend is configured in:
frontend/src/api/client.js
Default API base URL:
http://localhost/CodeAlpha_ProjectManagementTool/backend/api
If the project is installed under a different directory, update API_BASE accordingly.
The frontend can be built using:
npm run buildThe production build is generated in:
frontend/dist/
The production build has been successfully verified with Vite.
Example build result:
vite v5.4.21 building for production...
โ 51 modules transformed.
โ built successfully
The dist/ directory is excluded from Git through .gitignore.
Register
โ
Password Hashing
โ
User Account
โ
Login
โ
JWT Token
โ
Authorization Header
โ
Protected REST API
โ
Authorized Resources
JWT tokens are signed using HS256 and include an expiration time.
Passwords are hashed using PHP's built-in password hashing functionality.
| Method | Endpoint | Description | Access |
|---|---|---|---|
| POST | /api/auth/register.php |
Register a user | Public |
| POST | /api/auth/login.php |
Authenticate a user | Public |
| GET | /api/auth/me.php |
Get current user | Authenticated |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/projects/index.php |
Get projects | Authenticated |
| POST | /api/projects/index.php |
Create project | Authenticated |
| GET | /api/projects/detail.php?id={id} |
Get project details | Authorized |
| PUT | /api/projects/update.php?id={id} |
Update project | Authorized |
| DELETE | /api/projects/update.php?id={id} |
Delete project | Owner |
| POST | /api/projects/members.php |
Add project member | Owner |
| DELETE | /api/projects/members.php?project_id={id}&user_id={id} |
Remove member | Owner |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| POST | /api/tasks/index.php |
Create task | Authorized |
| PUT | /api/tasks/update.php?id={id} |
Update task | Authorized |
| DELETE | /api/tasks/delete.php?id={id} |
Delete task | Authorized |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/comments/index.php?task_id={id} |
Get task comments | Authorized |
| POST | /api/comments/index.php |
Add comment | Authorized |
| DELETE | /api/comments/delete.php?id={id} |
Delete comment | Comment Owner |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/notifications/index.php |
Get notifications | Authenticated |
| PUT | /api/notifications/index.php |
Mark notifications as read | Authenticated |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/reports/index.php |
Get project/task reports | Authenticated |
Create Account
โ
Login
โ
Create Project
โ
Add Team Members
โ
Create Tasks
โ
Assign Tasks
โ
Manage Tasks
โ
Kanban Board
โ
Drag & Drop
โ
Task Comments
โ
Notifications
โ
Project Reports
The application includes a Kanban-style board with four task statuses:
โโโโโโโโโโโโโโโ
โ TO DO โ
โโโโโโโโโโโโโโโค
โ Task 1 โ
โ Task 2 โ
โโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโ
โ IN PROGRESS โ
โโโโโโโโโโโโโโโค
โ Task 3 โ
โโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโ
โ REVIEW โ
โโโโโโโโโโโโโโโค
โ Task 4 โ
โโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโ
โ DONE โ
โโโโโโโโโโโโโโโค
โ Task 5 โ
โโโโโโโโโโโโโโโ
Tasks can be moved between columns using drag and drop, allowing users to visually track project progress.
A dedicated QA checklist is included in:
docs/QA_CHECKLIST.md
- User registration
- User login
- Invalid login rejection
- JWT authentication
- Protected routes
- Logout
- Create project
- Edit project
- Delete project
- Project status
- Project priority
- Project due date
- Add project member
- Remove project member
- View project members
- Assign tasks to members
- Owner/member authorization
- Create task
- Edit task
- Delete task
- Assign task
- Change priority
- Change due date
- Change status
- Kanban drag & drop
- Add comment
- View comments
- Delete own comment
- Unauthorized comment deletion rejected
- Task assignment notification
- Project membership notification
- Comment notification
- Read/unread state
- Notification navigation
- Project statistics
- Task statistics
- Status breakdown
- Completion rate
- Personal task summary
The following screenshots demonstrate the main application workflow and user interface.
The project implements several security practices:
- Password hashing using PHP
password_hash() - JWT-based authentication
- Protected REST API endpoints
- Authorization middleware
- Project-level access control
- Owner/member roles
- Comment ownership checks
- PDO prepared statements
- CORS configuration
- Apache authorization-header forwarding
The current project is configured for local development and internship demonstration.
Before production deployment:
- Set a strong
CODEALPHA_JWT_SECRET - Keep
config.local.phpoutside version control - Change database credentials
- Restrict CORS to the production frontend origin
- Review Apache and PHP production configuration
- Use HTTPS in production
- Store secrets using environment variables or a secure server-side configuration
The JWT secret is loaded through the application's configuration layer and is not hardcoded in Jwt.php.
Local secrets can be stored in:
backend/config/config.local.php
This file is excluded from Git.
The following features can be added in future versions:
- Real-time updates using WebSockets
- Email notifications
- File attachments
- Advanced project permissions
- Activity timeline
- Search and advanced filtering
- Team productivity analytics
- Production deployment
- Automated tests
- CI/CD pipeline
This project was developed as part of the:
CodeAlpha Full Stack Development Internship
- โ Create group projects
- โ Assign tasks
- โ Comment and communicate within tasks
- โ Authentication system
- โ Project boards
- โ Task cards
- โ Backend API
- โ Database integration
- โ Project management
- โ Team collaboration
- โ Notifications
- โ Reports
- โณ Real-time WebSocket updates
Real-time WebSocket functionality is not included in the current version.
- Built for the CodeAlpha Full Stack Development Internship.
- Frontend built with React and Vite.
- Backend implemented using plain PHP REST APIs.
- MySQL/MariaDB is used for persistent data storage.
- JWT is used for authentication.
- Passwords are securely hashed before storage.
- PDO is used for database access.
- The application is designed for local development using XAMPP.
- Notifications currently use application-level refresh/polling rather than WebSockets.
- The production frontend build has been successfully verified with Vite.
- Local configuration files containing credentials or secrets are excluded from Git.
Mohamed Ben
Full Stack Web Developer | Software Engineer
This project was created for educational and internship purposes as part of the CodeAlpha Full Stack Development Internship.









