Field Office Operations
Field Office Operations is the shared workspace for three canvassing site types:
- Field Offices — physical campaign offices where directors assign staff/canvassers and track office inventory.
- Blockwalk Launches — staging points for turf-based canvassing events.
- Phone Banks — physical or virtual calling events.
The UI lives at platform/app/canvassing/field-offices/page.tsx and is driven by SitesManager plus the site detail sheet in platform/components/canvassing/blockwalk-launch-sheet.tsx.
Data model
Sites are stored client-side in localStorage through platform/lib/sites.ts.
Each Site includes:
kind:field-office,blockwalk, orphone-banklabel,address,lat,lng, and optionalisVirtualassignedOrganizerIds: canvasser/staff IDs fromplatform/lib/canvassers-store.tssupplies: standard counts plus custom campaign-specific supply countslaunchDates: dated windows for blockwalks and phone banksrecurrence:none,daily, orweekly- phone-bank-only fields like
dialerModeandexpectedCalls eventOutcomes: post-event logs used to compare forecasted turnout to actual turnout
migrateSite() normalizes older localStorage records so existing saved sites keep working after new fields are added.
Field Offices
Opening a Field Office shows:
- assigned staff/canvassers who can be deployed from that office
- standard inventory counts: literature, clipboards, phones/headsets/dialer seats
- custom inventory counts for campaign-specific needs such as radios, water, snacks, signs, chargers, etc.
Field Offices do not use launch windows because they represent ongoing physical offices rather than events.
Blockwalk Launches
A Blockwalk Launch combines schedule, turf, labor, and supplies in one view.
Turf
A launch can be linked to a region from Canvassing → Turf. The detail sheet finds the region whose blockwalkLaunchId matches the site ID, then sums that region's turfs and doors.
The launch uses that turf data to show:
- number of turfs
- number of doors
- source region
- map preview of assigned turf polygons
Labor forecast
The launch reads canvassing rates from platform/lib/settings-store.ts and calculates:
- doors each volunteer can attempt
- total attempts
- expected contact range
- coverage percentage of the assigned turf
- how many additional volunteers are needed if coverage is short
If launch windows are set, the forecast uses the scheduled hours. If not, it falls back to the default canvassing shift length in Settings.
Supplies readiness
The launch checks whether supplies cover the work:
- literature required = one piece per door
- clipboards required = one per expected volunteer
- turf readiness = whether there are enough cut turfs for the expected volunteer count
- custom supplies can be tracked manually
Schedule sync and turf assignment import
The schedule sync card compares assigned canvassers against their weekly availability. A canvasser counts as available when their availability covers at least one event window.
If canvassers were assigned directly to turfs in My Turf, the launch can import those assignments into the event so the staff list stays aligned with the turf assignment.
Repeatable events and outcomes
Launches can be marked one-off, daily, or weekly. After an event, the Field Director can log:
- expected extra/walk-on people
- actual extra people
- assigned staff who completed the shift
- notes about what happened
These event outcomes are stored on the site record for future learning and forecasting.
Phone Banks
Phone Banks use the same site detail sheet but focus on callers, call targets, phones, and dialer mode.
Dialer mode
A phone bank can toggle between:
- Manual dialer — uses
phoneBanking.callsPerHour - Auto-dialer — uses
phoneBanking.callsPerHourAutodialer
Both rates are configured in Settings.
Labor forecast
Phone bank forecasts use:
- assigned caller count
- scheduled hours or default phone-bank shift length
- selected dialer mode
- target calls
- configured contact-rate range
The forecast shows expected calls, expected contacts, target coverage, and the number of additional callers needed if labor is short.
Supplies readiness
Phone Banks track phones/headsets/dialer seats and flag when the count is lower than assigned callers. Literature, clipboards, and custom supplies remain available for campaigns that use them for phone-bank packets or office operations.
Schedule sync and outcomes
Phone Banks reuse the same schedule availability check and post-event outcome log as Blockwalk Launches. This lets Field Directors compare expected caller turnout with actual participation.
Validation
For the PR that introduced this feature, the focused validation was:
cd platform
npm run lint -- components/canvassing/blockwalk-launch-sheet.tsx lib/sites.ts lib/settings-store.ts
npm run build
npm run build may emit existing map/voter-data warnings when generated address coordinates are absent; those warnings are unrelated to Field Office Operations.