The directory
Everyone the office has heard from, in one table: name, email, open cases (in red when open), meetings, visits, portal status (verified ✓ / invited / unverified), voter-matched check, and last activity. Four channel tiles — cases, meetings, visits, portal — double as filters; search covers name, email, and phone, with an open-cases-only toggle.
Alongside individuals, involved parties — the organizations, agencies, and businesses the office deals with — get records of their own, searchable from the same ⌘K palette. The directory exists so the same person never becomes three duplicate rows across three channels. Before creating anything, search — the kiosk visit from June and the portal case from July are usually the same Sandra Okafor.
Records & timelines
A row opens the constituent record: contact details, linked cases, and a full activity timeline — every case filed, meeting requested, kiosk sign-in, newsletter subscription, and portal message, in order.
The timeline is the answer to “have we talked to this person before?” — read it before you call back. Two minutes of scroll saves the constituent from telling the story a fourth time, and that is most of what good constituent service feels like from the other side.
Voter-file matching
Records show a voter-matched check, not campaign data. Matching is explicit: link a record to the voter file, mark it non-voter, or leave it unknown — each state visible in the table so staff stop re-searching.
Campaign history — support level, contact events, volunteer flags — appears inside a case only when the record is voter-linked and a role grants the view_campaign_history permission, and every view of it is audit-logged. The default is off; most offices leave it that way for most roles.
Portal invites
Invite a constituent to the portal from their record — one click, verified by email. The action is disabled while the portal is off, and pending invites are visible in Admin alongside accounts and sessions.
Invite people who already have an open case first; they have a reason to sign in, and the portal's first impression is their own case moving. Mass invitations to the whole directory mostly generate unverified accounts.
Involved parties
Not everyone in the directory is a constituent. The people and organizations the office works through — state and federal agencies, municipal and county offices, community organizations, press — get their own records under the Involved parties sub-tab, each with its contacts and a full history of the office's dealings with it. The office builds this directory once and reuses it: the caseworker who reaches the same benefits office every week isn't re-typing the phone number.
The history is read-only here — you see every case that ran through an agency and every call logged to it — but you always add a contact from inside the case it belongs to (see Casework). So the party record answers “what's our relationship with this agency?” while each case keeps “what did we do for this constituent” intact.