Project 1: Recruitment Tracker
Full build guide, day by day, no code required
Scenario recap: An HR team tracks job openings and candidates in spreadsheets. Your job is to build a Salesforce app that manages postings, candidates, and hiring stages end to end, using only clicks, no code.
Prerequisites: Basic Object Manager and Flow familiarity | Estimated time: ~1-2 hrs/day
Data Model
Two custom objects, connected by a lookup relationship.
- Job Posting (custom object) — represents an open role
- Candidate (custom object) — represents a person applying, with a lookup to Job Posting
| Object | Field | Type |
|---|---|---|
| Job Posting | Title | Text (Name field) |
| Job Posting | Department | Picklist |
| Job Posting | Status | Picklist (Open, On Hold, Closed) |
| Job Posting | Hiring Manager | Lookup (User) |
| Candidate | Full Name | Text (Name field) |
| Candidate | Job Posting | Lookup (Job Posting) |
| Candidate | Stage | Picklist (Applied, Screening, Interview, Offer, Hired, Rejected) |
| Candidate | ||
| Candidate | Resume Link | URL |
Day 1-2: Objects and Fields
- Setup → Object Manager → Create Custom Object → name it Job Posting
- Create the fields listed above (Department, Status, Hiring Manager)
- Create a second custom object Candidate
- Add a Lookup field on Candidate pointing to Job Posting
- Add Stage, Email, and Resume Link fields on Candidate
- Add both objects to the App Launcher via a custom Lightning App called "Recruitment Tracker"
Tip: Use a Lookup, not Master-Detail, between Candidate and Job Posting here. You want Candidates to survive independently of a Job Posting for reporting history, even if a posting is later closed.
Day 3-4: Layouts, Record Types, Validation
- Build a page layout for Candidate showing Stage prominently at the top
- Add a Validation Rule: Resume Link is required once Stage is not "Applied" (prevents reps from advancing candidates without a resume on file)
- Add a Validation Rule: cannot set Stage to "Hired" unless Job Posting Status is "Open"
Day 5-6: Record-Triggered Flow
Build a Flow that notifies the Hiring Manager whenever a Candidate's Stage changes.
- Setup → Flows → New Flow → Record-Triggered Flow
- Object: Candidate, Trigger: "A record is updated", Condition: Stage field is changed
- Add a Get Records element to fetch the related Job Posting's Hiring Manager
- Add a Send Email Action to notify that Hiring Manager with the candidate name and new stage
- Set the Flow to run in "After Save" (not needed to block the save, just notify)
Day 7-8: Screen Flow for Interview Scheduling
- Create a new Screen Flow launched from the Candidate record page (Lightning App Builder)
- Screen 1: date/time picker for Interview Date, dropdown for Interviewer
- Add an element to update the Candidate record with the interview date/time
- Add a Send Email action to confirm the interview with the candidate's email
- Embed the Flow as a Quick Action button on the Candidate page layout
Day 9: Dashboard
- Build a Report: "Candidates by Stage" (summary report grouped by Stage)
- Build a Report: "Open Positions by Department" (Job Postings, filtered Status = Open)
- Create a Dashboard with a donut chart for candidate pipeline and a bar chart for open roles by department
Day 10: Document and Demo
- Write a one-page README: problem, data model diagram, automation logic, screenshots
- Record a 3 minute Loom/screen recording walking through creating a posting, adding a candidate, advancing stages, and the dashboard updating live
- Post it on LinkedIn tagging what you learned (Flow, Validation Rules, Reports)
Interview Prep: Questions You'll Get Asked
Q: Why Lookup and not Master-Detail between Candidate and Job Posting?
Because Candidates should be able to exist and be reported on even if their Job Posting record is deleted or archived; Master-Detail would cascade-delete children.
Q: Why a Record-Triggered Flow instead of a Workflow Rule?
Workflow Rules are legacy and Salesforce recommends Flow for all new automation; Flow also lets you traverse relationships (Get Records) in a single tool, which Workflow Rules can't do.
Q: How would you scale this for 10,000 candidates?
Ensure the Flow is bulk-safe (Flows are bulkified by default), add indexed fields for common filters, and consider a batch-based nightly digest instead of real-time emails if volume gets very high.
Next up: Project 2 — Automated Approval Engine
Back to all 5 projects