Skip to main content

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, or phone-bank
  • label, address, lat, lng, and optional isVirtual
  • assignedOrganizerIds: canvasser/staff IDs from platform/lib/canvassers-store.ts
  • supplies: standard counts plus custom campaign-specific supply counts
  • launchDates: dated windows for blockwalks and phone banks
  • recurrence: none, daily, or weekly
  • phone-bank-only fields like dialerMode and expectedCalls
  • 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:

  1. assigned staff/canvassers who can be deployed from that office
  2. standard inventory counts: literature, clipboards, phones/headsets/dialer seats
  3. 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.