From Single Technician to Multi-Region
Pink Slips NSW is expanding. One calendar showing all technicians creates chaos. We needed multi-technician support without breaking the drag-and-drop scheduling.
Guy Walker has been the sole technician for Pink Slips NSW, operating out of the Sutherland Shire. But the business is growing. New technicians are being onboarded in Gosford, Newcastle, Lismore, Tweed Heads, Dubbo, and Canberra. Each one needs their own calendar view, their own job management, their own schedule.
The existing single-calendar system showed all events overlapping on one view. With multiple technicians, it became completely unusable. You couldn't tell whose job was whose. The visual was a mess of overlapping colored blocks.
Multi-Technician Calendar System
Pink Slips NSW Case Study
How we scaled from one technician to six regions


The Expansion
The Problem
One calendar showing all technicians = overlapping events, confusion, and an unusable system at scale.


The challenge wasn't just adding a filter dropdown. Each technician has different work hours, different home addresses (for travel time calculations), and different capacity limits. We needed a complete technician management system that integrates with the existing calendar and dashboard.
What We Built
Technician Management Page
Full CRUD operations for technicians. Name, email, phone, home address, work hours, max jobs per day, max travel time, active status.
Calendar Filtering
Dropdown to select technician. Events filtered by technicianId. Auto-selects Guy Walker as default. Dropped leads auto-assigned to selected technician.
Dashboard Filtering
Technician dropdown in dashboard header. Filters pipeline stages by calendar event assignments. Shows only leads assigned to selected technician.
Integrated Unscheduled Panel
Moved unscheduled leads inside the calendar card. Compact lead cards with customer name, vehicle, urgency, suburb.
Smart Conflict Detection
Refined overlap detection. Only triggers shift modal for actual time conflicts, not just events later in the day.
The Solution
- 1
Technician selector dropdown
- 2
Filtered calendar views
- 3
Drag-and-drop scheduling
- 4
Auto-assign on drop


The technician management page uses the same card-based UI pattern as the rest of the admin interface. Each technician record includes everything needed for intelligent scheduling: home address for travel time calculations, work hours for availability windows, and capacity limits to prevent overbooking.
Technician Record
- Name, email, phone
- Home address (travel calc)
- Work hours (start/end)
- Max jobs per day
- Max travel minutes
- Active/inactive status
Calendar Features
- Dropdown filter in header
- Events filtered by technicianId
- Auto-assign on drag-drop
- Smart conflict detection
- Integrated unscheduled panel
- No more overlap chaos
From single to multi-technician system


The Five Bugs We Encountered
Building features is the easy part. Debugging is where the real time goes. 90 minutes of our 4-hour session was spent fixing these five issues.
Google Places Autocomplete Closing Dialogs
What happened:
When adding a new technician, clicking on an address suggestion from the Google Places autocomplete dropdown would close the entire "Add Technician" dialog, losing all entered data.
Why it happened:
The Google Places dropdown (.pac-container) renders outside the dialog's DOM tree, directly on document.body. Radix UI's "click outside to close" behavior was triggered.
Solution:
<DialogContent
onPointerDownOutside={(e) => {
const target = e.target as HTMLElement;
if (target.closest('.pac-container')) {
e.preventDefault();
}
}}
>Tech Challenges Solved
- 1
Google Places + Radix Dialog conflict
- 2
Null vs undefined field handling
- 3
Travel time constraints
- 4
Calendar event filtering


"Failed to Fetch" When Dropping Leads
Sending technicianId: null instead of omitting the field. Server validation rejected it.
"Failed to Update Calendar Event"
Added technicianId to insert schema but forgot the update schema. Always update ALL schemas when adding fields.
Dashboard Filter Not Working
Checking lead_purchases.assigned_technician_id (all NULL) instead ofcalendar_events.technician_id (correct data).
Shift Modal Triggering Unnecessarily
Logic checked for events "after" drop time, not actual overlap. Fixed with proper time-range intersection check.
Before vs After
Single calendar, manual coordination
Per-technician views, automated assignment


Database Changes
New Table: technicians
Modified Tables
Current Metrics
Each technician sees only their jobs. Admin sees everyone. Same database, different views.
— Jordan James


Lessons Learned
5 Key Takeaways
- Track assignments where they happen - Technician assignment was on calendar_events, not lead_purchases.
- Radix UI + third-party dropdowns need special handling - Use onPointerDownOutside to prevent dialog closures.
- Update ALL schemas when adding fields - Both insert AND update schemas. Missing one causes confusing errors.
- Null vs undefined matters - Sending field: null is different from omitting the field.
- Test happy paths too - The shift modal bug wasn't caught because testing focused on conflicts.
Time Investment
The bug fixes took the most time (90 minutes for 5 bugs). The Google Places dialog issue alone took about 30 minutes to diagnose.
Pink Slips NSW Series
Social Media Carousel
8 cards • Download as ZIP (images) or PDF (LinkedIn)
Multi-Technician Calendar System
Pink Slips NSW Case Study
How we scaled from one technician to six regions


The Problem
One calendar showing all technicians = overlapping events, confusion, and an unusable system at scale.


The Solution
- 1
Technician selector dropdown
- 2
Filtered calendar views
- 3
Drag-and-drop scheduling
- 4
Auto-assign on drop


From single to multi-technician system


Tech Challenges Solved
- 1
Google Places + Radix Dialog conflict
- 2
Null vs undefined field handling
- 3
Travel time constraints
- 4
Calendar event filtering


Before vs After
Single calendar, manual coordination
Per-technician views, automated assignment


Each technician sees only their jobs. Admin sees everyone. Same database, different views.
— Jordan James


Need a Custom Calendar System?
We build AI-powered scheduling systems that scale with your team


Related Services
Get Development Insights
Follow the Pink Slips NSW journey. Weekly insights on calendar systems, automation, and scaling service businesses with AI.
Subscribe NowReady to Scale
The multi-technician system is now live. Pink Slips NSW can scale to any number of technicians without the calendar becoming unusable. Each technician sees only their jobs, and the drag-and-drop scheduling still works perfectly.
Four hours of development. Five bugs squashed. One business ready to scale.
Need a Custom Calendar System?
We build AI-powered scheduling systems that scale with your team. Multi-technician support, travel time calculations, smart conflict detection—all customized for your workflow.
Frequently Asked Questions
How does the technician filtering work?
Why did Google Places autocomplete cause dialog issues?
What's the difference between null vs omitting a field?
{ technicianId: null }, the server receives the field with a null value and may validate it differently than if the field wasn't sent at all. Many validation schemas treat "field is null" differently from "field is missing." For optional fields, it's often safer to omit them entirely rather than sending null.How do you handle travel time between jobs?
Share This Article
Spread the knowledge
