Solution Design Document
Salesforce B2B Portal
Relationship Management
Relationship Management
A complete Salesforce CRM implementation for a non-profit organisation — covering data model, record types, page layouts, automation, validation rules, security model, and reporting. Built in a Salesforce Developer Edition org.
5
Objects
4
Flows
4
Validation Rules
10
Reports
2
Personas
Design Principles
Standard Objects First
Standard objects were used wherever the platform met the requirement. Custom objects were created only when no standard object adequately served the business need.
Every Decision Explained
Every design choice in this solution includes a written rationale explaining why that approach was taken over the alternatives considered.
Flow Builder Only
All automation is built using Salesforce Flow Builder. No legacy Workflow Rules or Process Builder — reflecting current Salesforce best practice.
Validation at Database Level
Required fields are enforced via Validation Rules, not page layout alone — ensuring data quality cannot be bypassed via API or data import.
FLS Not Just Layout
Field-Level Security is configured at the profile level independently of page layout. Layout controls usability; FLS controls actual access.
Built to Scale
Decisions like Master-Detail on Initiative__c and two Account Record Types are made with future extensibility in mind — Roll-Up Summaries and layout splitting are ready to add without structural change.
Data Model
Standard
Account
Partner Organisations
Large & Small Record Types
Account hierarchy for departments
Large & Small Record Types
Account hierarchy for departments
Standard
Contact
Organisation Staff
Seniority, Decision-Maker flag
Contact Type (Political / Officer)
Seniority, Decision-Maker flag
Contact Type (Political / Officer)
Repurposed
Opportunity
Grants & Funding
Custom Stage pipeline
Grant Opportunity Record Type
Custom Stage pipeline
Grant Opportunity Record Type
Standard
Task
Interaction History
Follow-Up Reminders
Links to Contact & Account
Follow-Up Reminders
Links to Contact & Account
Custom
Initiative__c
Partner Initiatives
Master-Detail to Account
Lookup to Grant Opportunity
Master-Detail to Account
Lookup to Grant Opportunity
My Design Decision
I deliberately kept custom objects to a minimum — only Initiative__c was created, and only after actively considering every standard object first. Opportunity was repurposed for grants because it already has Stage, Amount, Close Date, Contact Roles, and pipeline reports built in. Creating a custom Grant object would have meant rebuilding all of that from scratch.
Record Types
Two Account Record Types classify every organisation from creation. One Opportunity Record Type controls grant-specific Stage values.
Account
Large Organisation
Councils, Housing Associations, NHS bodies. Full layout with political, officer, and departmental sections.
Account
Small Organisation
Local charities, referral agents. Shared layout — split deferred until requirements diverge.
Opportunity
Grant Opportunity
Identified → In Progress → Submitted → Awarded / Declined / Withdrawn.
Security Model
Two custom profiles. Delete is restricted to System Administrator across all objects.
| Object | FM | RR |
|---|---|---|
| Account | R C E | R C E |
| Contact | R C E | R C E |
| Opportunity | R C E | R C |
| Task | R C E | R C E |
| Initiative__c | R only | R C E |
FM = Fundraising Manager RR = Relationship Researcher
Field-Level Security
Political & Officer Structure Notes on Account — Read Only for Fundraising Manager. Grant Value and Stage on Opportunity — Read and Edit for Fundraising Manager only.
Automation — 4 Flows
All four are Record-Triggered After Save Flows built entirely in Salesforce Flow Builder. After Save is used throughout because every Flow interacts with a related record rather than updating a field on the triggering record itself.
📅
Grant Deadline Reminder
Creates a Task 3 days before a grant application deadline when Stage is not yet Submitted, Awarded, or Declined.
Opportunity · After Save
🤝
New Organisation Follow Up
Auto-creates a follow-up Task (due in 7 days) whenever a new Organisation record is added to the system.
Account · After Save · ISNEW()
🔗
Sync Primary Contact
Keeps the primary contact synced to the parent Organisation record. Prevents free-floating contacts.
Contact · After Save
📋
Update Last Interaction Date
Cross-object Flow: when a Task is marked Complete, traverses WhatId to update the Organisation’s Last Interaction Date.
Task · After Save · Cross-Object
My Design Decision — Update Last Interaction Date
This is the most technically advanced Flow I built. I chose to trigger on Task rather than Account because the interaction event happens at the Task level — when a call or meeting is logged and marked complete. The Flow traverses the WhatId relationship from the completed Task to the related Account and updates Last Interaction Date. This cross-object pattern means the Organisation record always reflects real engagement automatically, with no manual input required.
Validation Rules — 4 Rules
Account
Relationship Type Required — ISBLANK(Relationship_Type__c). Every organisation must be classified before saving. Enforced at the database level so it cannot be bypassed via API or data loader.
Opportunity
Deadline Must Be Future on Creation — AND(ISNEW(), CloseDate < TODAY()). Prevents past dates on new grant records. ISNEW() restricts to creation only — existing records with past deadlines are unaffected.
Opportunity
Submitted Date Required When Submitted — AND(ISPICKVAL(StageName,’Submitted’), ISBLANK(Application_Submitted_Date__c)). Ensures the submission date is always recorded — keeps the audit trail complete.
Initiative__c
Timescale Category Required — ISBLANK(Timescale_Category__c). Every initiative must have a timescale so it can be filtered and prioritised. Without it the initiative pipeline is incomplete.
Reports and Dashboards
10 named reports across both personas, all built using the standard Report Builder. A 6-component Fundraising Manager dashboard refreshes automatically from saved reports.
Fundraising Manager (6 Reports)
- Grant Pipeline by Stage
- Grants Due in Next 30 Days
- Pipeline Value by Timescale Category
- Awarded Grants Year to Date
- Grant Contacts — No Recent Interaction
- Initiatives by Timescale
Relationship Researcher (4 Reports)
- All Organisations by Relationship Type
- Stale Organisation Records
- Decision Makers Across Network
- Departments To Target
Fundraising Manager Dashboard — 6 Components
Total Pipeline Value (Metric) · Awarded This Year (Metric) · Pipeline by Stage (Bar Chart) · Deadlines in 30 Days (Table) · Pipeline by Timescale (Donut) · Grant Win Rate (Donut)
Full Solution Design Document
The complete SDD covers every object, field, record type, page layout, profile, FLS setting, Flow logic, validation rule formula, and report definition in full detail — including the reasoning behind every design decision and a 7-question interview preparation section.
Download Full Solution Design Document
