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