Loading…

Dashboard

Everything the county party is working on, at a glance.
Checking…
to election
?
Not viewing as anyone
Pick your name below

Upcoming events

Next things on the calendar across the party.
DateEventTypeLocationRSVPs

GOTV pace

Doors, calls, and texts so far, by precinct.
PrecinctDoorsCallsTexts
Add a committee
Committees don't change often — set them up here, then track their actions and data requests over in the Actions tab.
Add an action
DescriptionCommitteeLinked toOwnerWhenStatus

Progress toward goals

Doors knocked, calls made, and texts sent against each precinct's targets.
PrecinctRegisteredDoorsCallsTexts
Add a key date
DateDescription
Add a precinct
NamePolling placeAreaRegisteredDemRepNPDoors goalCalls goalTexts goal
Schedule a shift
DateTypePrecinctPlannedActual
Per-precinct turf-cutting status, by priority — modeled on the county's own GOTV Turf Tracker spreadsheet. Everything calculates from each precinct's own registration data: base list (registered Democrats, plus No Party when that box is checked) → target voters (× your coverage goal) → turfs to cut (÷ voters per turf). Coverage goal and turf size are set in Settings. Click "generate" on a turf count to stub out that many individual turfs, then expand to assign and track them.
Add a turf plan
PrecinctPriorityPriority noteUniverseBase listTarget votersTurfs to cutStatusWeekendDate completed

Early Voting

The county’s daily early-voting report, every modality — mail absentee, in-person office, satellite, health-care facility. Import each day’s file and this builds the daily report the committee sends candidates and eBoard, flags early indicators, drafts the brief, and exports the ballot-chase list.
Import today’s county report
The Elections Office’s daily AbsenteeDetails export (.xlsx) or a CSV in the same layout. Each file is a cumulative snapshot; importing replaces the election’s current list and records that day’s totals for the trend.

Community Outreach

Neighbor-to-neighbor relational organizing: Ambassadors keep an ongoing conversation going with the people on their list. Rename this program under Settings.

Ambassadors

AmbassadorPeopleOn trackNeeds a noteCoverage
Literature and party materials on hand — lit pieces, yard signs, buttons, office stock. Set a reorder point per item and anything at or below it flags low.
Add an item
ItemCategoryOn handReorder atStatusLocation

Events

Trainings, canvass kickoffs, fundraisers, meetings, rallies.
Add an event
DateNameTypeLocationRSVPsAttendedNew sign-ups
Add a data source
NameTypeSourceRecordsLast synced

Election data coverage

What Fieldbook actually has for each election, computed live from the loaded datasets — so this stays current as new data gets ingested. A missing Demographics cell means the county's "turnout by demographics" report (age / gender / party, per precinct — the report the 2024 General's data came from) hasn't been obtained for that election yet: request it from the County Auditor's office, then it loads with ingest_demographics.py. A missing Primary stats cell on a primary means the party-turnout report (eligible/ballots by party, party changes) is the one to ask for.
ElectionPrecinct resultsParty turnoutDemographicsPrimary stats

Seat coverage audit

Which seats should have a race in each loaded cycle (projected from every seat's term end and term length in the Seats registry) versus which ones the results actually cover — so "this race is missing from the file" is finally distinguishable from "that seat simply wasn't up that year." Seats listed as missing are, by name, the exact asks for the County Auditor when requesting a cycle's data. Judicial retention and special-district seats aren't auditable this way and are excluded.
CycleSeats expectedCoveredMissing
Every committee generates data, and every committee needs data from Data & Analytics — the county bylaws have D&A "gather data and make it available to other committees as needed." This is where those requests land so nothing gets lost in a hallway conversation.
Log a data request
RequestFromRequested byNeeded byPriorityStatus

Fieldbook precinct map Beta

Real base map (OpenStreetMap, via Leaflet) centered on Dubuque County, shaded and labeled with the county's own official precinct boundaries, city limits, all 99 Iowa county lines, and every elected-official district that covers Dubuque County (Iowa House 64/65/67/71/72, Senate 32/33/34/36, U.S. Congressional District 2) — loaded automatically from the county, state, and Census Bureau's live GIS systems, no manual overlay needed for these. Click a boundary for its name and current officeholder (cross-checked against Fieldbook's own Seats data, not the state's own unreliable name field).
Fieldbook precinct map

Display & shading

Export & print

External resources

State & congressional district maps

Official Iowa Legislature maps — statewide, with every district shown (not per-district files, since the state doesn't publish those separately).

Admin

Loads fresh on every visit; click to force a re-fetch of the live boundary layers plus a re-sync from Seats/precinct data.

Election Rolladex — 2016–2025 precinct results

Admin-only (pending RBAC)
At a glance
Drives precinct-level results & turnout, turnout by race, and the split-ticket estimate below.
Precinct-level results & turnout
Other tools
Turnout by race
How many people who cast a ballot in this election actually voted in each race — a big gap from the top race means real roll-off (people skipped it). Countywide participation % isn't shown for races split across multiple districts (like Iowa House), since those aren't on every ballot countywide.
RaceVotes castRoll-off vs. top of ticket% of countywide ballots
Split-ticket estimate
This is a precinct-level estimate, not a measure of any individual voter — ballots are anonymous, so there's no way to know if one specific person split their ticket. What this shows instead: for each precinct, how dominant the leading candidate's vote share was in one race compared to the other, in the same election. A big gap suggests real crossover happened somewhere in that precinct — it just can't say who (and doesn't necessarily mean a different party won each race, since two different races always have two different candidates running by definition).
PrecinctRace A leaderRace B leaderShare gap
Read-only — the party-support side of each campaign: status, race, and real funding. Candidates are added and their full record (office, district, contact, funding code) is edited from Development → Leadership Pipeline → Candidate, where their journey through the pipeline already lives.
NameOfficeSeatStatus
Read-only — every seat that touches Dubuque County, who holds it now, and whether it's on the 2026 ballot. Seats are added and edited from Development → Leadership Pipeline → Elected Official, where that stage of the pipeline already lives.
SeatCategoryCurrent holderPartyUp this year?
Fundraising goals for our own bench — Democratic and Independent people who are currently a Candidate, Nominee, or Elected Official. Not for the other side: goals here are about what the party is asking our own prospects to raise, not tracking an opponent. A goal follows the person across stages, so setting it once as a Candidate carries through to Nominee and Elected Official. Set anywhere below; saves automatically like everywhere else in Fieldbook. "Real DR-2 raised" is that committee's all-time total on file, not scoped to just this cycle — Iowa's own disclosure data doesn't cleanly separate cycles for a committee that's stayed active across more than one race.
NameStageOffice / seatGoalReal DR-2 raised (all-time, this committee)Progress
Real historical results and DR-2 fundraising for one seat, cycle by cycle — vote totals, who won, whether the better-funded candidate was the one who won, and (for the last 5 General Election cycles on file) a recency-weighted votes-needed-to-win figure and weekly organizing target. Descriptive, historical figures — not an opponent-aware prediction or a substitute for a real campaign plan. Coverage depends on what's matched in the Election Rolladex and on file in the Iowa committee registry — county races, statewide races, and numbered legislative/city-ward seats match; at-large County Supervisor and School Board races don't resolve to one seat and won't show history here. Fundraising totals are each committee's all-time total on file, not split out per cycle — for a candidate who's run more than once, the same total shows up next to every one of their cycles below.
YearElectionCandidatesOut-raised & won?Absentee split
Eboard+ only — this section is stripped server-side for member-tier logins. A dated log of what's worth knowing about campaigns and people, ours and theirs: positive entries are ammunition to amplify (endorsements, wins, good press), negative entries are opposition research (votes, quotes, conflicts — with the source, so it holds up when used). Opposition figures live in the shared People roster like everyone else; entries link to them there.
Add an entry
PersonTypeDateNoteSourceFiles
People early in the pipeline — first-time volunteers, folks in training, committee members, precinct captains. Add anyone new here; moving them between sections just means editing their Stage below.
Add a person
NameStageRole / interestContactParty2026 race
Currently running in a primary. Once a Candidate wins their primary and becomes a Nominee, they move to Nominees below. This is also where a candidate's full record lives — office, district, funding code, contact, and status — moved here from Campaigns so it's edited right where their journey already is; that section now just shows the read-only, party-support side of it (funding, current status).
Add a candidate
Matches each tracked candidate's linked Seat to its race in the Election Rolladex and sets Won/Lost from the real result — only for candidates whose status isn't already decided (never overwrites a manual call). Requires that race's results to actually be in the Rolladex yet.
NameOfficeDistrictPartySeatStatusPhoneEmailGeneralSworn in
Nominees — won their primary and are next in line to become an Elected Official if they win the general. Set someone's Stage to Nominee (on their Candidate record) to move them here.
NameStageRole / interestContactParty2026 race
The Seats registry — every seat that touches Dubuque County, who holds it now, and whether it's on the 2026 ballot. This is where a person actually becomes (or stops being) an Elected Official: link/unlink them as a Seat's current holder below, and their designation and every other view of this stays in sync automatically. Moved here from Campaigns so it's edited right where their journey through the pipeline already is; that section now just shows the read-only, party-support side of it.
Add / edit a seat Admin-only
SeatCategoryCurrent holderPartyOfficeholder's partyUp this year?Next elections
Eboard, non-profit/union leaders, elected officials, and other community relationships worth keeping — everyone with an active Community Leader or Elected Official designation. Eboard+ can edit Community Leader entries directly here; Elected Official rows stay edit-via-Seats since those are kept in sync automatically. Republicans are hidden by default — this list is about building non-partisan community relationships.
NameTypeRole / detailSeatPartySince

Fundraising

Progress toward the county party's goal.
"Logged manually" and the goal/% track only the hand-entered log below — a separate, informal record kept so it can never be silently overwritten by the automatic DR-2 sync. "Real DR-2 total" is the county party's own actual reported contributions (further down this page); the two aren't added together, so double-check which one you mean before citing a fundraising number.
Log a donation

Import / export

Import a CSV of donations in bulk (columns: Date, Donor, Amount, Method, Designation, Notes — same order as the export). Export downloads everything currently in the table.
DateDonorAmountMethodDesignation

Real reported contributions Iowa DR-2, official record

Itemized contributions reported to the Iowa Ethics and Campaign Disclosure Board — the county party's own committee plus every Seat/Candidate with a committee code on file, refreshed automatically from the state's own public dataset, separate from the manual log above so neither can overwrite the other. This is already public record, searchable by anyone on the state's site, so amounts here aren't masked the way the manual log's can be.
DateContributorAmountLocationCandidate / Committee

People (master roster)

Every person in Fieldbook starts here — organizing starts with volunteerism, so this is the one shared roster (not a separate volunteer list): identity, contact info, and home precinct in one place, linked from Candidates, Officials, Leaders, and Team Members instead of those cross-referencing each other by name. Add a Designation below (Executive Board, Candidate, Elected Official, etc.) once someone takes on a role — a person can hold several at once, and closing one out (set an end date) keeps history instead of overwriting it. Elected Official rows tied to a Seat sync automatically from the Seats registry (Development → Leadership Pipeline → Elected Official) — edit those from there, not here. Nominee rows sync the same way from a Candidate's status (Development → Leadership Pipeline → Candidate) — edit those there, not here.
Add a person
Add a designation
NamePhoneEmailPrecinctPartyLeadershipLinked asCurrent designationsInterest tags

Designation history

PersonTypeDetailStartStatus
Community Engagement's action items — Neighbor-to-Neighbor outreach, community presence, house parties, and everything else this committee owns. Manage the committee's profile (theme, needs/delivers, notes) under Party Committees.
DescriptionOwnerWhenStatus
Marketing isn't a formally chartered committee yet — this work currently runs under Data & Analytics. This is a working space for it: log and track marketing actions here, and manage the committee's profile (theme, needs/delivers, notes) under Party Committees.
DescriptionOwnerWhenStatus

Settings

Party details, election date, appearance, and your data file.
Party details
Team members & roles
Everyone using Fieldbook logs in with their own username and password now (see "Your login & security" below for your own account). Two independent settings per person here: Tier (Committee member or Eboard — Eboard can add candidates, leaders, officials, and volunteers) and Admin rights (a separate yes/no flag, not a tier — any member, Eboard or not, can have it; it's needed to edit Seats, Committees, or Team Members). Adding someone here creates their profile and permissions — an Admin still needs to set up their actual login for them (self-service invites aren't built yet).
Add a team member
NameRoleAdminContact
Team member logins
A team member profile above isn't the same thing as a login — use this to set one up, or help someone back in if they're locked out.
NameLoginTwo-factor
Your login & security
Two-factor authentication adds a 6-digit code from an authenticator app (Google Authenticator, Authy, 1Password, etc.) as a second step when logging in — recommended for anyone with Admin rights.
Off
Appearance
Follow your system theme, or force light/dark.
Brand
Roadmap / backlog
Bigger ideas and deferred fixes worth remembering — not urgent, just not forgotten.
Add a roadmap item
ItemAreaStatus
Your data file
Checking connection…
Export downloads a backup any time; Import loads one back in — useful for handing the file to someone else or moving to a new machine, even when autosave is on.
Import an outreach list
Bring a VAN or CSV canvass list into the outreach program. Matched by VANID: someone already in the program is updated in place, never duplicated, and blank columns in the file leave existing values alone. Names come from First Name / Last Name columns when the file has them; a single Name column is split automatically, and anything the split can’t be sure about is held back for you to confirm before it saves.
Activity log
Every add, edit, and delete across the app — who did it, and what changed. Most recent first.

About Fieldbook

What is running right now. Releases are cut with release.py (bumps VERSION, rotates CHANGELOG.md, tags vX.Y.Z); pushing main deploys.