Add BlackRoad CRM enhancements - validation rules, relationships, views, app, and dashboard

- Added 3 validation rules for Company__c (Require Industry, Valid Website, Positive Revenue)
- Created 8 lookup relationship fields connecting CRM objects
- Built 7 list views for Companies, Leads, Deals, Agents, Clients
- Updated 8 custom tabs with appropriate motif icons
- Created BlackRoad CRM Lightning App with unified navigation
- Added CRM Overview Dashboard with bar charts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Alexa Louise
2026-01-11 19:46:51 -06:00
parent 6d049c0e52
commit cbdbf1692b
29 changed files with 277 additions and 17 deletions

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomApplication xmlns="http://soap.sforce.com/2006/04/metadata">
<brand>
<headerColor>#000000</headerColor>
<shouldOverrideOrgTheme>true</shouldOverrideOrgTheme>
</brand>
<description>BlackRoad CRM - Unified customer relationship management for General CRM and Agency CRM</description>
<formFactors>Large</formFactors>
<isNavAutoTempTabsDisabled>false</isNavAutoTempTabsDisabled>
<isNavPersonalizationDisabled>false</isNavPersonalizationDisabled>
<isNavTabPersistenceDisabled>false</isNavTabPersistenceDisabled>
<label>BlackRoad CRM</label>
<navType>Standard</navType>
<tabs>standard-home</tabs>
<tabs>Company__c</tabs>
<tabs>Lead__c</tabs>
<tabs>Deal__c</tabs>
<tabs>Agent__c</tabs>
<tabs>Client__c</tabs>
<tabs>Policy__c</tabs>
<tabs>Listing__c</tabs>
<tabs>Commission__c</tabs>
<tabs>standard-report</tabs>
<uiType>Lightning</uiType>
</CustomApplication>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<DashboardFolder xmlns="http://soap.sforce.com/2006/04/metadata">
<accessType>Public</accessType>
<folderShares>
<accessLevel>View</accessLevel>
<sharedTo>AllInternalUsers</sharedTo>
<sharedToType>Group</sharedToType>
</folderShares>
<name>BlackRoad CRM Dashboards</name>
<publicFolderAccess>ReadWrite</publicFolderAccess>
</DashboardFolder>

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<Dashboard xmlns="http://soap.sforce.com/2006/04/metadata">
<backgroundEndColor>#FFFFFF</backgroundEndColor>
<backgroundFadeDirection>Diagonal</backgroundFadeDirection>
<backgroundStartColor>#FFFFFF</backgroundStartColor>
<dashboardType>SpecifiedUser</dashboardType>
<description>BlackRoad CRM Overview - Key metrics for General CRM and Agency CRM</description>
<isGridLayout>false</isGridLayout>
<leftSection>
<columnSize>Medium</columnSize>
<components>
<autoselectColumnsFromReport>true</autoselectColumnsFromReport>
<chartAxisRange>Auto</chartAxisRange>
<componentType>Bar</componentType>
<displayUnits>Auto</displayUnits>
<drillEnabled>false</drillEnabled>
<drillToDetailEnabled>false</drillToDetailEnabled>
<enableHover>true</enableHover>
<expandOthers>false</expandOthers>
<footer>Company Industries</footer>
<header>Companies by Industry</header>
<legendPosition>Bottom</legendPosition>
<report>BlackRoad_CRM_Reports/Companies_by_Industry</report>
<showPercentage>false</showPercentage>
<showValues>true</showValues>
<sortBy>RowLabelAscending</sortBy>
<useReportChart>false</useReportChart>
</components>
</leftSection>
<middleSection>
<columnSize>Medium</columnSize>
<components>
<autoselectColumnsFromReport>true</autoselectColumnsFromReport>
<chartAxisRange>Auto</chartAxisRange>
<componentType>Bar</componentType>
<displayUnits>Auto</displayUnits>
<drillEnabled>false</drillEnabled>
<drillToDetailEnabled>false</drillToDetailEnabled>
<enableHover>true</enableHover>
<expandOthers>false</expandOthers>
<footer>Sales Pipeline</footer>
<header>Deal Pipeline</header>
<legendPosition>Bottom</legendPosition>
<report>BlackRoad_CRM_Reports/Deal_Pipeline</report>
<showPercentage>false</showPercentage>
<showValues>true</showValues>
<sortBy>RowLabelAscending</sortBy>
<useReportChart>false</useReportChart>
</components>
</middleSection>
<rightSection>
<columnSize>Medium</columnSize>
<components>
<autoselectColumnsFromReport>true</autoselectColumnsFromReport>
<chartAxisRange>Auto</chartAxisRange>
<componentType>Bar</componentType>
<displayUnits>Auto</displayUnits>
<drillEnabled>false</drillEnabled>
<drillToDetailEnabled>false</drillToDetailEnabled>
<enableHover>true</enableHover>
<expandOthers>false</expandOthers>
<footer>Real Estate Listings</footer>
<header>Active Listings</header>
<legendPosition>Bottom</legendPosition>
<report>BlackRoad_CRM_Reports/Active_Listings</report>
<showPercentage>false</showPercentage>
<showValues>true</showValues>
<sortBy>RowLabelAscending</sortBy>
<useReportChart>false</useReportChart>
</components>
</rightSection>
<runningUser>alexa@blackroad-hub.dev</runningUser>
<textColor>#000000</textColor>
<title>CRM Overview</title>
<titleColor>#000000</titleColor>
<titleSize>12</titleSize>
</Dashboard>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>All_Agents</fullName>
<columns>NAME</columns>
<columns>CREATED_DATE</columns>
<filterScope>Everything</filterScope>
<label>All Agents</label>
</ListView>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>All_Clients</fullName>
<columns>NAME</columns>
<columns>CREATED_DATE</columns>
<filterScope>Everything</filterScope>
<label>All Clients</label>
</ListView>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Agent__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Agent</label>
<type>Lookup</type>
<referenceTo>Agent__c</referenceTo>
<relationshipLabel>Commissions</relationshipLabel>
<relationshipName>Commissions</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Listing__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Listing</label>
<type>Lookup</type>
<referenceTo>Listing__c</referenceTo>
<relationshipLabel>Commissions</relationshipLabel>
<relationshipName>Commissions</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>All_Companies</fullName>
<columns>NAME</columns>
<columns>Industry__c</columns>
<columns>Account_Status__c</columns>
<columns>Company_Size__c</columns>
<columns>Phone__c</columns>
<filterScope>Everything</filterScope>
<label>All Companies</label>
</ListView>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Customers</fullName>
<columns>NAME</columns>
<columns>Industry__c</columns>
<columns>Annual_Revenue__c</columns>
<columns>Phone__c</columns>
<filterScope>Everything</filterScope>
<filters>
<field>Account_Status__c</field>
<operation>equals</operation>
<value>Customer</value>
</filters>
<label>Customers</label>
</ListView>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Prospects</fullName>
<columns>NAME</columns>
<columns>Industry__c</columns>
<columns>Annual_Revenue__c</columns>
<columns>Phone__c</columns>
<filterScope>Everything</filterScope>
<filters>
<field>Account_Status__c</field>
<operation>equals</operation>
<value>Prospect</value>
</filters>
<label>Prospects</label>
</ListView>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<ValidationRule xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Positive_Revenue</fullName>
<active>true</active>
<description>Annual Revenue must be positive if provided</description>
<errorConditionFormula>AND(
NOT(ISBLANK(Annual_Revenue__c)),
Annual_Revenue__c &lt; 0
)</errorConditionFormula>
<errorDisplayField>Annual_Revenue__c</errorDisplayField>
<errorMessage>Annual Revenue cannot be negative</errorMessage>
</ValidationRule>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<ValidationRule xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Require_Industry_for_Customers</fullName>
<active>true</active>
<description>Industry is required when Account Status is Customer</description>
<errorConditionFormula>AND(
ISPICKVAL(Account_Status__c, "Customer"),
ISPICKVAL(Industry__c, "")
)</errorConditionFormula>
<errorDisplayField>Industry__c</errorDisplayField>
<errorMessage>Industry is required for Customer accounts</errorMessage>
</ValidationRule>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<ValidationRule xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Valid_Website_Format</fullName>
<active>true</active>
<description>Website must start with http:// or https://</description>
<errorConditionFormula>AND(
NOT(ISBLANK(Website__c)),
NOT(OR(
BEGINS(Website__c, "http://"),
BEGINS(Website__c, "https://")
))
)</errorConditionFormula>
<errorDisplayField>Website__c</errorDisplayField>
<errorMessage>Website must start with http:// or https://</errorMessage>
</ValidationRule>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Company__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Company</label>
<type>Lookup</type>
<referenceTo>Company__c</referenceTo>
<relationshipLabel>Deals</relationshipLabel>
<relationshipName>Deals</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Lead__c</fullName>
<label>Original Lead</label>
<type>Lookup</type>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Source Lead</label>
<referenceTo>Lead__c</referenceTo>
<relationshipLabel>Deals</relationshipLabel>
<relationshipName>Deals</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>All_Deals</fullName>
<columns>NAME</columns>
<columns>Company__c</columns>
<columns>Lead__c</columns>
<columns>CREATED_DATE</columns>
<filterScope>Everything</filterScope>
<label>All Deals</label>
</ListView>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Company__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Company</label>
<type>Lookup</type>
<referenceTo>Company__c</referenceTo>
<relationshipLabel>Leads</relationshipLabel>
<relationshipName>Leads</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>All_Leads</fullName>
<columns>NAME</columns>
<columns>Company__c</columns>
<columns>CREATED_DATE</columns>
<filterScope>Everything</filterScope>
<label>All Leads</label>
</ListView>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Agent__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Listing Agent</label>
<type>Lookup</type>
<referenceTo>Agent__c</referenceTo>
<relationshipLabel>Listings</relationshipLabel>
<relationshipName>Listings</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Agent__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Agent</label>
<type>Lookup</type>
<referenceTo>Agent__c</referenceTo>
<relationshipLabel>Policies</relationshipLabel>
<relationshipName>Policies</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Client__c</fullName>
<deleteConstraint>SetNull</deleteConstraint>
<externalId>false</externalId>
<label>Client</label>
<type>Lookup</type>
<referenceTo>Client__c</referenceTo>
<relationshipLabel>Policies</relationshipLabel>
<relationshipName>Policies</relationshipName>
<required>false</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</CustomField>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom63: Handsaw</motif>
<motif>Custom57: Ticket</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom41: Prospect</motif>
<motif>Custom63: Heart</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom18: Dollar</motif>
<motif>Custom64: Coins</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom20: Factory</motif>
<motif>Custom70: Building</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom18: Dollar</motif>
<motif>Custom87: Handshake</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom41: Prospect</motif>
<motif>Custom53: People</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom24: House</motif>
<motif>Custom68: Home</motif>
</CustomTab>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
<customObject>true</customObject>
<motif>Custom53: Wasp</motif>
<motif>Custom74: Safe</motif>
</CustomTab>