Objectives | Features | Demonstration | Documentation | Author
This project aims to create a simple project management system within Salesforce, leveraging standard platform features such as standard objects (Task) and Lightning Web Components (LWC), and extending the functionality with custom objects such as Projects__c and Milestones__c. The system allows you to track the lifecycle of a project, its milestones, and the tasks (to-dos) associated with each stage.
- 1. Automatic calculation of the % completion of Milestones based on tasks.
- 2. Automatic calculation of the % completion of Projects based on Milestones.
- 3. Automatic status control: “Not Started”, “In Progress” or “Completed.
- 4. Restriction with Validation Rules so that regular users cannot manually change the status of projects and milestones.
2025-05-28.18-15-35.mp4
To download the project's source code to your machine, you will first need to have Git. With Git installed, run the following command in your terminal:
git clone https://github.com/GabrielMedradoS/Project-System-Management.git
To install the dependencies and run the project you will need to have node.js, installed on your machine, which comes with npm.
Install dependencies with npm:
# npm
npm install
Execute the project:
Log in a Org Salesforce, enter in the project management app. Create your first project 🚀
The main App is Project Management, there you will see all related tabs to make your first project.
You will see a full documentation under documents | Salesforce provided in email for more details.
Package XML
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Milestones__c.Validation_Rule_Change_Status</members>
<members>Projects__c.Validation_Rule_Change_Status</members>
<name>ValidationRule</name>
</types>
<types>
<members>MilestoneTrigger</members>
<members>TaskTrigger</members>
<name>ApexTrigger</name>
</types>
<types>
<members>TaskTriggerHandler</members>
<members>TaskController</members>
<members>TaskControllerTest</members>
<members>MilestoneController</members>
<members>MilestoneControllerTest</members>
<members>MilestoneTriggerHandler</members>
<members>MilestoneWrapper</members>
<members>ProjectController</members>
<members>ProjectMilestoneTaskProcessor</members>
<members>ProjectMilestoneTaskProcessorTest</members>
<members>ProjectWrapper</members>
<members>TaskWrapper</members>
<name>ApexClass</name>
</types>
<types>
<members>Milestones__c.Milestone_Compact_Layout</members>
<members>Projects__c.Project_Compact_Layout</members>
<name>CompactLayout</name>
</types>
<types>
<members>image_branding</members>
<name>ContentAsset</name>
</types>
<types>
<members>Project_Management</members>
<name>CustomApplication</name>
</types>
<types>
<members>Activity</members>
<members>Milestones__c</members>
<members>Projects__c</members>
<members>Task</members>
<name>CustomObject</name>
</types>
<types>
<members>Milestones__c</members>
<members>Projects__c</members>
<name>CustomTab</name>
</types>
<types>
<members>Milestone_Record_Page</members>
<members>Project_Management_UtilityBar</members>
<members>Project_Record_Page</members>
<members>Task_Record_Page</members>
<members>Project_Home_Page</members>
<name>FlexiPage</name>
</types>
<types>
<members>GlobalStatusValue</members>
<name>GlobalValueSet</name>
</types>
<types>
<members>Milestones__c-Milestone Layout</members>
<members>Projects__c-Project Layout</members>
<members>Task-Project Task Layout</members>
<name>Layout</name>
</types>
<types>
<members>approvalManagementForm</members>
<members>milestoneManagmentForm</members>
<members>progressBar</members>
<members>projectOverview</members>
<members>projectManagementForm</members>
<members>tasksManagementForm</members>
<name>LightningComponentBundle</name>
</types>
<types>
<members>Projects__c.All</members>
<members>Projects__c.Completed_Projects</members>
<members>Projects__c.New_Projects</members>
<members>Projects__c.On_going_Projects</members>
<name>ListView</name>
</types>
<types>
<members>Milestone_Status_Path</members>
<members>Project_Status_Path</members>
<name>PathAssistant</name>
</types>
<version>63.0</version>
</Package>
Dependencies
{
"name": "salesforce-app",
"private": true,
"version": "1.0.0",
"description": "Project System Management",
"scripts": {
"lint": "eslint **/{aura,lwc}/**/*.js",
"test": "npm run test:unit",
"test:unit": "sfdx-lwc-jest",
"test:unit:watch": "sfdx-lwc-jest --watch",
"test:unit:debug": "sfdx-lwc-jest --debug",
"test:unit:coverage": "sfdx-lwc-jest --coverage",
"prettier": "prettier --write \"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}\"",
"prettier:verify": "prettier --check \"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}\"",
"postinstall": "husky init",
"precommit": "lint-staged",
"prepare": "husky"
},
"devDependencies": {
"@lwc/eslint-plugin-lwc": "^2.2.0",
"@lwc/engine-dom": "^8.18.0",
"@lwc/jest-preset": "^19.1.0",
"@prettier/plugin-xml": "^3.4.1",
"@salesforce/eslint-config-lwc": "^3.7.2",
"@salesforce/eslint-plugin-aura": "^2.1.0",
"@salesforce/eslint-plugin-lightning": "^1.0.0",
"@salesforce/sfdx-lwc-jest": "^7.0.1",
"eslint": "^8.57.0",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.11.0",
"husky": "^9.1.7",
"jest": "^29.7.0",
"lint-staged": "^15.5.1",
"prettier": "^3.5.3",
"prettier-plugin-apex": "^2.2.6"
},
"lint-staged": {
"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}": [
"prettier --write"
],
"**/{aura,lwc}/**/*.js": ["eslint"]
}
}
- Faça um fork desse repositório;
- Crie um branch para a sua feature:
git checkout -b minha-feature
; - Faça um commit com suas alterações:
git commit -m 'feat: Minha nova feature'
; - Faça um push para o seu branch:
git push origin minha-feature
; - Faça um pull request com sua feature;
Pull requests são sempre bem-vindos. Em caso de dúvidas ou sugestões, crie uma issue ou entre em contato comigo.
![]() |
---|
Gabriel Medrado |