A production-oriented Django REST Framework backend for managing organizations, projects, tasks, memberships, comments and activity logs. Designed with scalability, RESTful architecture, role-based permissions, UUID primary keys and OpenAPI documentation in mind.
- Overview
- Features
- Architecture
- Database Structure
- Authentication
- Permission System
- Complete Workflow
- API Overview
- Installation
- Environment Variables
- Running the Project
- Seed Data
- Project Structure
- Future Improvements
- Important Notes
This project is a complete backend for a collaborative Project Management platform.
Instead of being limited to simple CRUD operations, the API supports complete organization management where users collaborate inside organizations, create projects, assign tasks, leave comments, and maintain a complete activity history.
The application follows REST principles while using:
- UUID primary keys
- JWT Authentication
- Role Based Access Control (RBAC)
- OpenAPI / Swagger Documentation
- Generic Activity Logging
- Nested Resources
- Clean serializer validation
- Modular application structure
- Custom User Model
- Email authentication
- JWT login
- Profile management
- Profile pictures
- Email verification support
- User bios
- Job titles
- Phone numbers
- Create organizations
- Update organizations
- Delete organizations
- Organization logos
- Organization owners
- Membership invitations
- Leave organization
- Remove members
- Change member roles
Supported Roles
- Owner
- Admin
- Manager
- Member
- Multiple projects per organization
- Status tracking
Project statuses include:
- Planning
- Active
- On Hold
- Completed
- Cancelled
Priority support
- Low
- Medium
- High
- Urgent
Additional features
- Cover images
- Slugs
- Start dates
- End dates
Tasks support
- Assignment
- Reporters
- Due dates
- Priorities
- Statuses
- Attachments
Task Statuses
- Todo
- In Progress
- In Review
- Done
- Cancelled
Each task supports
- Unlimited comments
- Attachments
- Author tracking
- Edit timestamps
Every important action can be logged including
- Creation
- Updates
- Deletion
- Joining organizations
- Leaving organizations
- Comments
The project uses GenericForeignKey allowing activity logs to reference different models without duplicating code.
User
│
├─────────────── Owns
│
▼
Organization
│
├──────── Members
│
▼
OrganizationMembership
│
▼
Project
│
▼
Task
│
├──────── Comments
│
▼
TaskComment
Activity
│
└──────── Generic relation to any object
accounts/
User
Organization
OrganizationMembership
projects/
Project
tasks/
Task
TaskComment
activity/
Activity
Every application has its own
- models
- serializers
- views
- urls
- admin
- migrations
making the codebase easy to maintain.
Authentication uses JWT.
Typical flow
Register
↓
Login
↓
Receive Access Token
Receive Refresh Token
↓
Attach Access Token
Authorization: Bearer <token>
↓
Access Protected Endpoints
The API uses role-based permissions.
| Role | Create Projects | Manage Members | Create Tasks | Delete Organization |
|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Yes |
| Admin | Yes | Limited | Yes | No |
| Manager | Limited | No | Yes | No |
| Member | No | No | Assigned Tasks | No |
Create a user account.
↓
Receive JWT tokens.
↓
Become the organization owner.
↓
Assign
- Admin
- Manager
- Member
↓
Each organization can own multiple projects.
↓
Assign
- Reporter
- Assignee
- Due Date
- Priority
↓
- Update task status
- Upload files
- Leave comments
↓
Every important action becomes part of the organization history.
- Registration
- Login
- Refresh Token
- Profile
- Update Profile
- Create
- Retrieve
- Update
- Delete
- Members
- Invitations
- Leave Organization
- CRUD
- Status updates
- Priority updates
- Cover images
- CRUD
- Assign users
- Upload attachments
- Due dates
- Status updates
- Create
- Update
- Delete
- Attachments
Read-only activity feed showing organization history.
Clone the repository
git clone https://github.com/zoanig/PMS
cd PMSCreate virtual environment
python -m venv .venvActivate
Linux
source .venv/bin/activateWindows
.venv\Scripts\activateInstall dependencies
pip install -r requirements.txtRename
.env-sample
to
.env
Then configure all required environment variables before running the project.
Apply migrations
python manage.py migrateRun server
python manage.py runserverPMS/
accounts/
activity/
projects/
tasks/
media/
manage.py
requirements.txt
.env
- Notifications
- Email invitations
- Project analytics
- Task labels
- Task dependencies
- Kanban board
- Calendar integration
- Time tracking
- Audit exports
- WebSocket notifications
- Docker support
- CI/CD pipeline
- PostgreSQL deployment
- Redis caching
- Celery background jobs
Warning
This repository is backend-only. A frontend client is required to consume the API.
Warning
Configure the .env file before starting the application. Missing environment variables may prevent authentication or media handling from functioning correctly.
Warning
Seed commands are intended for development environments only and should not be executed on production databases.
Note
UUID primary keys are used throughout the project instead of integer IDs.
Note
API documentation is available through the integrated Swagger/OpenAPI endpoints after running the server.