Skip to content

# People & Access

Manage platform user accounts and roles, and use the People CRM to get a unified view of every supporter, donor, and volunteer across all modules.

## User Management

### Creating Users

Navigate to Users (`/app/users`) and click Add User. Fill in name, email, and role. The user will receive a welcome email with login instructions.

### Roles

Role | Access | Use Case
--- | --- | ---
`SUPER_ADMIN` | Full platform access | Campaign managers
`INFLUENCE_ADMIN` | Campaigns, responses, email queue | Advocacy coordinators
`MAP_ADMIN` | Locations, areas, shifts, canvassing | Field organizers
`USER` | Volunteer portal only | Active volunteers
`TEMP` | Limited volunteer access | Shift signups (auto-created)

This table shows the most common roles. See the full role list for module-specific admin roles (`BROADCAST_ADMIN`, `CONTENT_ADMIN`, `MEDIA_ADMIN`, `PAYMENTS_ADMIN`, `EVENTS_ADMIN`, `SOCIAL_ADMIN`).

### Password Policy

Passwords must be at least 12 characters with uppercase, lowercase, and a digit. This is enforced at the API schema level.

### Deactivating Users

Edit a user from the Users page and toggle their active status. Deactivated users cannot log in but their data is preserved. Banned users have their sessions invalidated immediately.

### Service Accounts Panel

When editing a user, the Service Accounts panel shows provisioning status for each integrated service (Rocket.Chat, Gitea, Vaultwarden, Listmonk). You can provision, deprovision, or re-sync individual services per user.

## People CRM

Enable with `enablePeople` in Settings. The People module serves as the platform's CRM, aggregating data from all other modules into a unified view.

### Virtual Aggregation

The People page does not store a separate "people" table. Instead, it aggregates records in real time from seven data sources:

Source | Data
--- | ---
Users | Platform accounts (name, email, phone, last login)
Address Occupants | Named residents from the map/canvassing module
Campaign Senders | People who sent advocacy emails
Shift Signups | Volunteer shift registrants
SMS Contacts | Contacts from SMS campaign lists
Donations/Orders | Buyers from the payments module
Manual | Contacts created directly in the CRM

Records are deduplicated by normalized email or phone number, with Users taking highest priority.

### Managed Contacts

Any virtual person can be "promoted" to a managed Contact record. This creates a persistent Contact entity in the database with:

- Display name, first/last name — editable independently of the source
- Tags — custom CRM tags for segmentation and filtering
- Notes — free-text notes field
- Support level — LEVEL_1 (Strong) through LEVEL_4 (Opposition)
- Opt-out flags — email opt-out, SMS opt-out, and do-not-contact
- Sign requested — track yard sign status

### Contact Details

Each managed contact supports multiple structured data entries:

- Addresses — link to map locations with optional unit numbers and primary flag; new addresses can be auto-added to the map for geocoding
- Emails — multiple email addresses with labels (e.g., Personal, Work) and primary designation
- Phones — multiple phone numbers with labels and primary designation

### Activity Timeline

View a chronological timeline of all interactions for a person, across every module:

- Advocacy emails sent and responses submitted
- Shift signups and canvass visits
- Donations and product purchases
- SMS messages sent and received
- Video views
- Notes added and contact merges

### Duplicate Detection and Merge

The platform identifies potential duplicates by matching normalized email addresses and phone numbers across sources. The merge workflow lets you:

- Select which fields to keep from the source vs. target contact
- Merge tags, addresses, emails, and phones
- Preserve the full audit trail (merged contacts are soft-linked, not deleted)

### Connection Graph

Build a relationship graph between contacts using typed connections:

- Connection types — Household, Family, Colleague, Referred By, and Custom
- Bidirectional — connections can be one-way or mutual
- Visual graph — interactive force-directed graph visualization showing contacts as nodes and connections as edges
- Configurable depth — explore up to 3 degrees of separation

### Profile Links

Generate shareable public profile pages for contacts:

- Unique token URLs at `/profile/:token`
- Configurable expiration — 24 hours, 7 days, 30 days, 90 days, 1 year, or never
- Optional password protection — require a PIN or password to view

### Household Detection

The Household panel groups contacts who share the same physical address, making it easy to see all members of a household and their combined engagement.

### Create User from Contact

Promote a CRM contact to a full platform user account directly from the People interface, with role assignment and optional welcome email.

## Admin Routes

- `/app/users` — user CRUD, role assignment, service accounts
- `/app/people` — contact list with search, filters, source/tag filtering, and bulk actions