//Team
Events
Facts checked against official sources · September 9, 2026
Phone banks, canvass kickoffs, town halls, and house parties all run through one Events page. You publish an event with a time, a place, and an optional capacity; your volunteers sign up from the dashboard or the mobile app; the app reminds them before it starts; and when they arrive, they check in from their phone if they are within 150 meters of the pin.
Events are campaign-scoped like everything else in Culper, so the roster, the reminders, and the check-ins belong to your campaign and nobody else's. This page walks through exactly what the feature does and where attendance ends up.
What events are in Culper
An event is a dated record with a name, a category (Volunteer Event, Fundraiser, Town Hall, or Other), a description of up to 2,000 characters, a start and optional end time, a venue name, a street address, optional GPS coordinates, an optional capacity, a Private or Public flag, and a status: draft, published, canceled, or postponed.
Attached to each event is a roster of sign-ups. Each sign-up is one person, one event, with a status of signed up, canceled, attended, or no-show. A canceled sign-up stays on the roster for the record; if the person signs up again, the same row flips back rather than creating a duplicate.
The events list has a list view and a month calendar view, color-coded by category, with upcoming events on top and past or canceled events below. The dashboard home also carries an Upcoming Events widget showing the next four published events with their sign-up counts.
Creating and publishing an event
Owners and Admins create events at `/dashboard/<campaign>/events/new`. The form is six steps on one page: category, description, date and time (the end time defaults to two hours after the start), location, visibility, and capacity plus status. A live preview on the right shows the card volunteers will see. Staff and volunteers cannot create or edit events; Staff can mark attendance.
Save as a draft and volunteers cannot see it. Switch it to published, either on the form or with Publish event on the detail page, and it appears in every member's events list and in the mobile app the same minute. Published events also get an Add to calendar link that downloads a standard .ics file, so a volunteer can drop it into their phone's calendar with one tap.
Capacity is a soft limit. The roster shows sign-ups against capacity, but the product deliberately lets a manager wave an extra person through rather than turning them away automatically.
Sign-ups from web and mobile
Every member of the campaign can see published events. Volunteers see only published events; staff and managers also see drafts. A volunteer opens the event in the mobile app and taps sign up; tapping again cancels. The roster on the web detail page lists each person, their status, and the date they signed up, with running counts of signed up and checked in.
Managers can act on the roster directly: mark a person Attended or No-show after the fact, publish or unpublish, move a canceled event back to draft, or delete it. Deleting is permanent and removes the roster with it.
Database policies enforce the same rules the screens show: a volunteer can only insert or change their own sign-up, and only on a published event in a campaign they belong to; staff and above can read and update every sign-up for their campaign's events; only managers can delete.
Reminders, messages, and cancellations
About an hour before a published event starts, a scheduled job sends a push notification to everyone signed up ("Event reminder: Phone bank starts at 6:00 PM, Campaign HQ"). The job runs every 15 minutes and stamps each event once, so nobody gets two reminders even if it runs again. Reminders are push only, so they reach volunteers who have the app installed with notifications allowed.
For anything else, the detail page has Send message: a title up to 80 characters and a body up to 240, pushed immediately to every active sign-up. It is built for the cases that come up on the day: venue changed, weather call, last call for walkers.
Postpone and Cancel event each take an optional reason, and postpone takes an optional new date. On confirm, every signed-up person with an email on file gets an email with the event name, the original date, the reason, and (for postponements) the new date, and the manager sees how many were notified.
GPS check-in
When a signed-up volunteer opens an event that has coordinates, the app asks for foreground location permission once, takes a single location fix, and evaluates three rules. The event must have coordinates. The current time must fall between 30 minutes before the start and 30 minutes after the end (or four hours after the start if no end time is set). And the volunteer must be within 150 meters of the pin, tuned for "they walked into the building" rather than "they are in the neighborhood."
If all three pass, the app shows how far they are from the pin and a Check in button; tapping it sets their sign-up to attended and shows "Checked in. Thanks for showing up." If any rule fails, the app explains which one, so a volunteer in the parking lot across the street knows to walk closer, and one who arrives an hour early knows to wait.
Check-in happens on the volunteer's own row, so the same database policy that lets them sign up lets them check in. Managers can still mark attendance by hand for anyone who did not use the app.
Where attendance shows up
Attendance lives on the event roster. The detail page shows the checked-in count next to the signed-up count and each person's status, so the morning after a phone bank you can see the eight who signed up, the six who checked in, and the two you marked as no-shows. The volunteer sees their own status on the event in the app, and the events list in the app shows attendance counts per event.
That roster is the record. Attendance does not currently write onto voter records, and it does not feed the leaderboard, which counts doors knocked, responses, and signs. If you want a supporter's attendance reflected on their contact or voter record, that is a manual step today.
How a local campaign uses it
Tuesday phone bank, city council. You create a Volunteer Event at HQ with a capacity of 10, paste the coordinates from a map, and publish it a week out. Eight volunteers sign up from the app. An hour before start they each get a push. Six walk in and check in from their phones; you mark the other two as no-shows the next morning. Over four weeks that is a clean record of who actually shows up, which is who you call first for election week.
Saturday canvass kickoff, school board. You publish a 9:00 AM kickoff at the library with the parking lot's coordinates and no capacity. Twenty-five people sign up. At 8:40 the early arrivals check in; at 9:10 you send a push to the ten who have not: "We are at the north entrance, starting at 9:20." Everyone who checks in then claims a walk and heads out.
House party fundraiser, weather call. A Fundraiser event with capacity 40 fills to 32. Thunderstorms roll in the afternoon before. You postpone with a new date and a one-line reason; all 32 get the email, and the roster carries over to the new date.
Why it matters
In a local race the volunteers who show up twice are the campaign. Events give you the show-up record without a clipboard: who signed up, who arrived, and who did not, event after event. That record is what lets you spend your limited organizer hours on the people who are reliable, and it is what a door-knocking program is built on.
The cadence of a local election is short and the timelines are specific: a registration deadline, an early voting window, election day. Events with reminders are the simplest way to put a phone bank on the last day to register and a canvass on the first Saturday of early voting and have people actually turn up. For fundraisers, the campaign finance basics explain what you must record about the money; the roster records who came.
What it does not do
Limits worth knowing before you plan around the feature.
- No public RSVP page. The Public/Private flag is stored and shown as a badge, but the public campaign page and join page do not list events today.
- No ticketing or payment collection for fundraisers. Online donation processing is in development and not live.
- No recurring events or series; create each occurrence.
- No waitlist. Capacity is advisory, and managers decide whether to admit extra sign-ups.
- No QR-code check-in and no web check-in for volunteers. Check-in is GPS in the mobile app, or a manager marking attendance on the web.
- Reminders are push notifications only, roughly an hour before start. There is no SMS or email reminder.
- Attendance stays on the event roster. It does not annotate voter records or count on the leaderboard.
Works with
Events sit between recruiting and the field work itself.
- Volunteer coordination: the roles that decide who can create events, mark attendance, and sign up.
- Volunteer mobile app: where volunteers sign up, get reminders, and check in.
- Block walking: the walks volunteers claim after a canvass kickoff.
- Phone banks: the calling sessions a phone bank event brings people to.
- Yard signs and field assets: sign-placement pushes are a natural Volunteer Event.
- Dashboard and reporting: the Upcoming Events widget on the campaign home.
Frequently asked questions
Who can create an event?
Owners and Admins (the candidate and campaign_manager roles). They can also edit, publish, postpone, cancel, and delete. Staff can mark attendance on the roster but cannot create or edit events. Volunteers see published events and manage only their own sign-up.
How does GPS check-in decide someone is there?
The event needs coordinates. The app takes one location fix and checks that the time is between 30 minutes before the start and 30 minutes after the end (or four hours after the start with no end time), and that the volunteer is within 150 meters of the pin. If all three pass, a Check in button appears; tapping it marks them attended. Otherwise the app explains which rule failed.
When do reminders go out, and how?
A scheduled job runs every 15 minutes, finds published events starting in the next 60 to 75 minutes, and sends one push notification to everyone signed up. Each event is stamped after the send so it is never reminded twice. Reminders reach volunteers with the mobile app installed and notifications allowed; there is no SMS or email reminder.
Does attendance show up on the voter record or the leaderboard?
Not today. Attendance is recorded on the event roster as attended or no-show and is visible on the event page and in the app. The leaderboard counts doors knocked, responses, and signs. Reflecting attendance on a voter or contact record is a manual step.
What happens when I cancel or postpone?
The event status changes, and every signed-up person with an email on file receives an email with the event name, original date, your optional reason, and the new date if you postponed. The roster is kept. You can move a canceled or postponed event back to draft to reuse it.
Know who actually showed up
Keep reading