Events Wireframes

Purpose

Events are the campaign's in-person and virtual touchpoints — rallies, town halls, fundraisers, trainings, canvass launches, phone banks, and virtual meetings. These wireframes cover the full event lifecycle: creation, promotion, RSVP management, day-of check-in, and post-event follow-up.

The core UX challenge: events serve wildly different personas. The Volunteer Coordinator creates and manages events on desktop. Supporters RSVP on their phones through a public page. Team Leads check people in at a venue with spotty wifi. The check-in tool must work offline, on a cheap phone, held in one hand while greeting someone with the other.

Public-facing event pages (EVT-006, EVT-007) and supporter event history (SUP-008) are wireframed in supporter/supporter-portal.md. This document covers admin-side screens plus the check-in tool.

Scope

ID Screen Personas Offline Mobile Section
EVT-001 Event List OA, VC, V, TL, S No Yes Events
EVT-002 Event Create/Edit OA, VC No Desktop Events
EVT-003 Event Detail OA, VC, V, TL, S No Yes Events
EVT-004 Event RSVP Management OA, VC No Yes RSVPs
EVT-005 Event Check-in Tool OA, VC, TL Yes Primary Check-in
EVT-006 Event RSVP Form (Public) S, Public No Primary Public (cross-ref)
EVT-007 Event Page (Public) Public No Primary Public (cross-ref)
EVT-008 Event Metrics OA, VC No Desktop Analytics
EVT-009 Virtual Event Setup OA, VC No Desktop Events
EVT-010 Post-Event Survey Builder OA, VC No Desktop Post-Event

Events Navigation Context

EVENTS (Volunteer Coordinator sidebar)
  Events              → EVT-001
  Check-in            → EVT-005 (selection)
  Post-Event          → EVT-010 (selection)

EVENTS (Volunteer / Team Lead sidebar)
  Events              → EVT-001 (view-only, filtered to their RSVPs)

EVT-001: Event List

Browse upcoming and past events. Persona-adaptive — the Volunteer Coordinator sees all events with management actions; Volunteers see events they've RSVP'd to or can attend.

Desktop — Admin View (OA, VC)

┌──────────────────────────────────────────────────────────────────────────────┐
│  Events                                                    [+ New Event]    │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  [Upcoming]  [Past]  [Draft]  [All]                                         │
│                                                                              │
│  🔍 Search events...                                                        │
│  Filters: [Type ▾]  [Date Range ▾]  [Status ▾]                             │
│                                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                                                                      │   │
│  │  Rally at Plaza del Mercado                                          │   │
│  │  📅 Mar 5, 2026 · 6:00 PM — 9:00 PM                                 │   │
│  │  📍 Plaza del Mercado, San Juan                                      │   │
│  │  Type: Rally                                                         │   │
│  │  👥 142 RSVPs · Capacity: 500 · ☑ Public                            │   │
│  │                                                              [Edit]  │   │
│  │                                                                      │   │
│  ├──────────────────────────────────────────────────────────────────────┤   │
│  │                                                                      │   │
│  │  Town Hall: Healthcare Access                                        │   │
│  │  📅 Mar 12, 2026 · 7:00 PM — 9:00 PM                                │   │
│  │  📍 Centro Comunal, Bayamón                                          │   │
│  │  Type: Town Hall                                                     │   │
│  │  👥 67 RSVPs · Capacity: 150 · ☑ Public                             │   │
│  │                                                              [Edit]  │   │
│  │                                                                      │   │
│  ├──────────────────────────────────────────────────────────────────────┤   │
│  │                                                                      │   │
│  │  Volunteer Training — March                                          │   │
│  │  📅 Mar 8, 2026 · 10:00 AM — 12:00 PM                               │   │
│  │  🖥 Virtual (Zoom)                                                   │   │
│  │  Type: Training                                                      │   │
│  │  👥 28 RSVPs · Capacity: 50 · 🔒 Invite-only                       │   │
│  │                                                              [Edit]  │   │
│  │                                                                      │   │
│  ├──────────────────────────────────────────────────────────────────────┤   │
│  │                                                                      │   │
│  │  Spring Fundraiser Dinner                                    ✎ Draft │   │
│  │  📅 Apr 10, 2026 · 7:00 PM — 10:00 PM                               │   │
│  │  📍 Hotel El Convento, San Juan                                      │   │
│  │  Type: Fundraiser                                                    │   │
│  │  👥 0 RSVPs · Capacity: 200                                         │   │
│  │                                                              [Edit]  │   │
│  │                                                                      │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  Showing 1-4 of 12                                                           │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Mobile — Volunteer/Supporter View

┌────────────────────────────┐
│  Events                    │
├────────────────────────────┤
│                            │
│  [Upcoming] [My RSVPs]     │
│                            │
│  THIS WEEK                 │
│                            │
│  ┌──────────────────────┐  │
│  │ Rally at Plaza del   │  │
│  │ Mercado              │  │
│  │ 📅 Mar 5 · 6:00 PM   │  │
│  │ 📍 San Juan           │  │
│  │ 👥 142 going          │  │
│  │ ✓ You're going       │  │
│  ├──────────────────────┤  │
│  │ Volunteer Training   │  │
│  │ 📅 Mar 8 · 10:00 AM  │  │
│  │ 🖥 Virtual (Zoom)    │  │
│  │ 👥 28 going           │  │
│  │ [RSVP]               │  │
│  └──────────────────────┘  │
│                            │
│  NEXT WEEK                 │
│                            │
│  ┌──────────────────────┐  │
│  │ Town Hall: Health..  │  │
│  │ 📅 Mar 12 · 7:00 PM  │  │
│  │ 📍 Bayamón            │  │
│  │ 👥 67 going           │  │
│  │ [RSVP]               │  │
│  └──────────────────────┘  │
│                            │
└────────────────────────────┘

Event Types

Type Icon Typical context
Rally 📢 Large public gathering, outdoor
Town Hall 🏛 Public policy discussion, Q&A
Fundraiser 💰 Dinner, gala, fundraising event
Training 📚 Volunteer training, onboarding
Canvass Launch 🚶 Starting point for canvassing shift
Phone Bank 📞 Group phone bank session
Virtual 🖥 Online meeting via external provider
Other 📌 General event

Interaction

  • Row click → opens EVT-003 Event Detail
  • "+ New Event" → opens EVT-002 Create
  • Status tabs: Upcoming (future + today), Past (ended), Draft (not published), All
  • Volunteer/Supporter view: no Edit buttons, no Draft tab, "My RSVPs" tab filters to events they've RSVP'd to, inline RSVP button on cards
  • Capacity indicator: when near capacity (>80%), shows amber "Filling up" badge. When full: "Waitlist" badge

States

  • Empty (Admin): "No events yet. Events help you organize rallies, trainings, fundraisers, and more." [Create Event]
  • Empty (Volunteer): "No upcoming events. Check back soon for new events in your area."

EVT-002: Event Create/Edit

Create or edit an event. Sections expand progressively — required fields first, optional details below.

Desktop

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Events    New Event                            [Save Draft]  [Publish]   │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  DETAILS                                                                     │
│  ───────                                                                     │
│                                                                              │
│  Event name *                                                                │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Rally at Plaza del Mercado                                          │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  Event type *                                                                │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Rally                                                          [▾]  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  Date *                         Start time *        End time *               │
│  ┌────────────────────┐        ┌──────────┐        ┌──────────┐            │
│  │ Mar 5, 2026        │        │ 6:00 PM  │        │ 9:00 PM  │            │
│  └────────────────────┘        └──────────┘        └──────────┘            │
│                                                                              │
│  ☐ Multi-day event                                                           │
│                                                                              │
│  Description *                                                               │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Join us for a community rally featuring live music, speakers,       │   │
│  │ food vendors, and a celebration of our campaign progress.           │   │
│  │                                                                      │   │
│  │ Featured speakers:                                                   │   │
│  │ • Ana Martínez, Candidate for District 5                            │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│  Rich text editor (bold, italic, lists, links)                               │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  LOCATION                                                                    │
│  ────────                                                                    │
│                                                                              │
│  ● In-person   ○ Virtual   ○ Hybrid                                         │
│                                                                              │
│  Venue name *                                                                │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Plaza del Mercado                                                   │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  Address *                                                                   │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Calle Dos Hermanos, San Juan, PR 00907                              │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  [Map preview showing pin at venue address]                         │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  ▸ RSVP SETTINGS                                                             │
│  ▸ PROMOTION                                                                 │
│  ▸ STAFF & ROLES                                                             │
│  ▸ MEDIA                                                                     │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Collapsed Sections

RSVP SETTINGS:

│  RSVP type                                                                   │
│  ● Open (anyone can RSVP)                                                    │
│  ○ Invite-only (only invited contacts can RSVP)                              │
│  ○ Approval-required (RSVPs go to review queue)                              │
│                                                                              │
│  Capacity                                                                    │
│  ┌──────────┐  ☐ Enable waitlist when full                                  │
│  │ 500      │                                                                │
│  └──────────┘                                                                │
│                                                                              │
│  RSVP fields (in addition to name and email):                                │
│  ☐ Phone number                                                              │
│  ☐ Number of guests (max: [ 4 ])                                            │
│  ☐ Dietary restrictions (text field)                                         │
│  ☐ Custom question: ┌──────────────────────────────────┐                    │
│                      │                                  │                    │
│                      └──────────────────────────────────┘                    │
│                                                                              │
│  Reminders                                                                   │
│  ☑ 24 hours before (Email)                                                   │
│  ☑ 2 hours before (SMS, if phone provided)                                   │
│  ☐ 1 week before                                                             │

PROMOTION:

│  Public event page                                                           │
│  ☑ Create a public event page (shareable link)                               │
│  URL: greengrass.io/partido-verde/events/rally-plaza-mercado                 │
│  [Copy Link]                                                                 │
│                                                                              │
│  Hero image                                                                  │
│  ┌─────────────────────────────────┐                                        │
│  │    📷 Upload Image              │                                        │
│  │    Recommended: 1200 × 628px    │                                        │
│  └─────────────────────────────────┘                                        │
│                                                                              │
│  Calendar export                                                             │
│  ☑ Show "Add to Calendar" button on event page (iCal, Google Calendar)       │
│                                                                              │
│  ▸ Send invitations (opens segment selector + channel picker)                │
│  ▸ Share on social media (opens SOCIAL-002 pre-filled)                       │

STAFF & ROLES:

│  Event manager *        ┌──────────────────────────────────────┐            │
│                         │ Ana Reyes (You)                 [▾]  │            │
│                         └──────────────────────────────────────┘            │
│                                                                              │
│  Check-in staff                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Ana Reyes, Jorge Vega, + Search team members...                     │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│  These staff can access the check-in tool (EVT-005) for this event.         │
│                                                                              │
│  Fundraising                                                                 │
│  ☐ Enable cash donation collection at this event                             │
│    Links to FUND-010 Cash Donation Recording                                 │

MEDIA:

│  Additional images (gallery)                                                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐                  │
│  │ + Upload │  │          │  │          │  │          │                  │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘                  │
│                                                                              │
│  Post-event photos (available after event)                                   │
│  ☐ Allow attendees to upload photos (via portal)                             │

Virtual Location Variant

When "Virtual" is selected, the location section changes:

│  LOCATION                                                                    │
│  ────────                                                                    │
│                                                                              │
│  ○ In-person   ● Virtual   ○ Hybrid                                         │
│                                                                              │
│  Video platform *                                                            │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Zoom                                                           [▾]  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│  Options: Zoom, Google Meet, Jitsi, Microsoft Teams, Custom URL              │
│                                                                              │
│  Meeting link *                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ https://zoom.us/j/1234567890?pwd=abc123                             │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  ☑ Generate unique link per registrant (enables attendance tracking)         │
│  ⓘ Each registrant receives a personalized link. When they join,             │
│    attendance is automatically recorded.                                     │
│                                                                              │
│  [Configure Virtual Event Settings →]  (→ EVT-009)                           │

Interaction

  • Save Draft: saves without publishing. Event not visible to attendees
  • Publish: makes event live. If public page is enabled, page goes live. If invitations are configured, sends them
  • Edit published event: changes apply immediately. If date/time changes, option to notify existing RSVPs
  • Delete (overflow menu): confirmation dialog. If RSVPs exist, warning: "47 people have RSVP'd. They will be notified of cancellation." Option to send cancellation message
  • Map preview: auto-generated from address. Validates address on blur

EVT-003: Event Detail

The hub for a specific event. Shows all information, RSVPs, and actions. Persona-adaptive.

Desktop — Admin View

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Events    Rally at Plaza del Mercado          [Edit]  [Check-in →]  [⋮]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  [Hero image]                                                        │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  📅 March 5, 2026 · 6:00 PM — 9:00 PM                                      │
│  📍 Plaza del Mercado, Calle Dos Hermanos, San Juan PR                      │
│  Type: Rally · ☑ Public                                                     │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Join us for a community rally featuring live music, speakers,              │
│  food vendors, and a celebration of our campaign progress.                  │
│                                                                              │
│  Featured speakers:                                                          │
│  · Ana Martínez, Candidate for District 5                                   │
│  · Dr. Elena Torres, Healthcare Policy Director                             │
│  · Carlos Rivera, Community Organizer                                       │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  RSVPs                                                         [Manage →]   │
│  ─────                                                                       │
│                                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ RSVPs        │  │ Checked In   │  │ Capacity     │  │ Waitlisted   │   │
│  │ 142          │  │ —            │  │ 500          │  │ 0            │   │
│  │              │  │ (event not   │  │ 28% filled   │  │              │   │
│  │              │  │  started)    │  │              │  │              │   │
│  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                                              │
│  Recent RSVPs:                                                               │
│  María García · Carlos Ruiz · Lucía Fernández · +139 more                   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Staff                                                                       │
│  ─────                                                                       │
│  Manager: Ana Reyes                                                          │
│  Check-in: Ana Reyes, Jorge Vega                                            │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Links                                                                       │
│  ─────                                                                       │
│  Public page: greengrass.io/partido-verde/events/rally-plaza   [Copy]       │
│  RSVP form: greengrass.io/.../rally-plaza/rsvp                 [Copy]       │
│  [Add to Calendar]                                                           │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  ▸ Discussion (3 messages)                                                   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  [Map showing venue location]                                        │   │
│  │  [Get Directions →]                                                  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Mobile — Volunteer/Supporter View

┌────────────────────────────┐
│  ← Events             [⋮]  │
├────────────────────────────┤
│                            │
│  ┌──────────────────────┐  │
│  │  [Hero image]        │  │
│  └──────────────────────┘  │
│                            │
│  Rally at Plaza del        │
│  Mercado                   │
│                            │
│  📅 Mar 5 · 6 – 9 PM      │
│  📍 Plaza del Mercado,     │
│     San Juan               │
│  👥 142 going               │
│                            │
│  ─────────────────────     │
│                            │
│  Join us for a community   │
│  rally featuring live      │
│  music, speakers...        │
│                            │
│  ─────────────────────     │
│                            │
│  ✓ You're going            │
│  [Cancel RSVP]             │
│                            │
│  ─────────────────────     │
│                            │
│  [Add to Calendar]         │
│  [Get Directions →]        │
│  [Share Event]             │
│                            │
│  ─────────────────────     │
│                            │
│  ┌──────────────────────┐  │
│  │  [Map]               │  │
│  └──────────────────────┘  │
│                            │
└────────────────────────────┘

Post-Event Variant

After the event ends, the detail view shifts to show outcomes:

│  RSVPs & Attendance                                                          │
│  ──────────────────                                                          │
│                                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ RSVPs        │  │ Checked In   │  │ Walk-ins     │  │ Show Rate    │   │
│  │ 142          │  │ 118          │  │ 23           │  │ 83%          │   │
│  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                                              │
│  [View Metrics →]  [Send Follow-up →]  [Survey Results →]                   │

Interaction

  • "Check-in →" (admin): opens EVT-005 for this event
  • "Manage →" (RSVPs): opens EVT-004
  • Discussion: collapsible thread (uses Contextual Thread pattern). Auto-includes event staff. Other attendees don't see this thread
  • Overflow menu (⋮): Edit, Duplicate, Cancel Event, Export RSVPs, View Metrics
  • Volunteer/Supporter view: no Edit, no Staff section, no Discussion. Shows RSVP status and action buttons
  • "Share Event": native share sheet on mobile (URL + event name)

EVT-004: Event RSVP Management

Full RSVP list with management actions. Answers "who's coming, and who do I need to follow up with?"

Desktop

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Rally at Plaza del Mercado    RSVPs (142)        [Export]  [+ Add RSVP]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  [All (142)]  [Confirmed (128)]  [Waitlisted (0)]  [Cancelled (14)]        │
│                                                                              │
│  🔍 Search by name or email...                                              │
│                                                                              │
│  ☐  Name                Email                  RSVP Date   Guests  Status   │
│  ─────────────────────────────────────────────────────────────────────────   │
│  ☐  María García        maria@email.com        Mar 1       +1      ✓ Conf   │
│  ☐  Carlos Ruiz         carlos@email.com       Mar 1       —       ✓ Conf   │
│  ☐  Lucía Fernández     lucia@email.com        Mar 2       +2      ✓ Conf   │
│  ☐  Pedro Martínez      pedro@email.com        Mar 2       —       ✓ Conf   │
│  ☐  Ana Vega            ana@email.com          Mar 3       —       ✗ Canc   │
│  ☐  Raj Patel           raj@email.com          Mar 3       +1      ✓ Conf   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│  Total attending (including guests): 162                                     │
│                                                                              │
│  Bulk actions: [Send Message]  [Export Selected]  [Cancel RSVPs]            │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Approval-Required Variant

When the event uses approval-required RSVPs, an additional tab and workflow appears:

│  [All (142)]  [Pending (8)]  [Approved (128)]  [Declined (6)]              │
│                                                                              │
│  ─── Pending Approval ───                                                    │
│                                                                              │
│  ☐  Jorge Torres        jorge@email.com        Mar 3       —       ◷ Pend   │
│      [✓ Approve]  [✗ Decline]                                               │
│  ☐  Lisa Chen           lisa@email.com         Mar 3       +1      ◷ Pend   │
│      [✓ Approve]  [✗ Decline]                                               │
│                                                                              │
│  [Approve All Pending (8)]                                                   │

Mobile

┌────────────────────────────┐
│  ← RSVPs (142)       [⋮]  │
├────────────────────────────┤
│                            │
│  [All] [Conf.] [Waitl.] ▾ │
│                            │
│  🔍 Search...              │
│                            │
│  ┌──────────────────────┐  │
│  │ María García    ✓    │  │
│  │ maria@email.com      │  │
│  │ Mar 1 · +1 guest     │  │
│  ├──────────────────────┤  │
│  │ Carlos Ruiz     ✓    │  │
│  │ carlos@email.com     │  │
│  │ Mar 1                │  │
│  ├──────────────────────┤  │
│  │ Ana Vega        ✗    │  │
│  │ ana@email.com        │  │
│  │ Mar 3 · Cancelled    │  │
│  └──────────────────────┘  │
│                            │
│  162 total (incl. guests)  │
│                            │
└────────────────────────────┘

Interaction

  • "+ Add RSVP": manually add a contact (search CRM or enter name + email). For walk-ins registered before the event
  • Export: CSV with all RSVP data. Includes guest counts, custom question responses
  • "Send Message": compose a message to selected or all RSVPs (opens COMM-005 pre-filled with this audience)
  • Row click: opens contact record (CRM-002) in detail panel
  • Guest count: shows total attending including guest +N counts
  • Cancelled tab: shows cancellations with date/time for tracking drop-off patterns

States

  • Empty: "No RSVPs yet. Share the event link to start collecting RSVPs." [Copy Event Link]

EVT-005: Event Check-in Tool

Mobile-first check-in for event day. Works offline. Uses the Check-in Tool pattern.

Mobile (Primary)

┌────────────────────────────┐
│  Check-in                  │
│  Rally at Plaza del Merc.  │
├────────────────────────────┤
│                            │
│  ┌──────────────────────┐  │
│  │  118 of 142 ✓        │  │
│  │  ████████████████░░░ │  │
│  │  83% checked in       │  │
│  └──────────────────────┘  │
│                            │
│  ┌──────────────────────┐  │
│  │ 🔍 Search name...    │  │
│  └──────────────────────┘  │
│                            │
│  ┌──────────────────────┐  │
│  │ ☐ Diallo, Amina      │  │
│  ├──────────────────────┤  │
│  │ ☐ Fernández, Lucía   │  │
│  │   +2 guests          │  │
│  ├──────────────────────┤  │
│  │ ✓ García, María      │  │
│  │   +1 guest  6:12 PM  │  │
│  ├──────────────────────┤  │
│  │ ✓ Martínez, Pedro    │  │
│  │   6:05 PM            │  │
│  ├──────────────────────┤  │
│  │ ☐ Patel, Raj         │  │
│  │   +1 guest           │  │
│  ├──────────────────────┤  │
│  │ ✓ Ruiz, Carlos       │  │
│  │   6:01 PM            │  │
│  └──────────────────────┘  │
│                            │
│  ─────────────────────     │
│                            │
│  [📷 Scan QR Code]        │
│                            │
│  [+ Walk-in]               │
│                            │
│  ─────────────────────     │
│  ◌ Offline — will sync     │
│    when connected          │
│                            │
└────────────────────────────┘

QR Scan Mode

┌────────────────────────────┐
│  ← Check-in    118 of 142 │
├────────────────────────────┤
│                            │
│  ┌──────────────────────┐  │
│  │                      │  │
│  │                      │  │
│  │    [Camera view]     │  │
│  │                      │  │
│  │    ┌────────────┐    │  │
│  │    │            │    │  │
│  │    │  QR frame  │    │  │
│  │    │            │    │  │
│  │    └────────────┘    │  │
│  │                      │  │
│  │                      │  │
│  └──────────────────────┘  │
│                            │
│  Point camera at RSVP      │
│  QR code                   │
│                            │
│  ─────────────────────     │
│                            │
│  ┌──────────────────────┐  │
│  │  ✓ María García      │  │
│  │    Checked in 6:12 PM│  │
│  │                 [Undo]│  │
│  └──────────────────────┘  │
│                            │
│  [Switch to List View]     │
│                            │
└────────────────────────────┘

Walk-in Registration

┌────────────────────────────┐
│  ← Check-in    Walk-in     │
├────────────────────────────┤
│                            │
│  Name *                    │
│  ┌──────────────────────┐  │
│  │                      │  │
│  └──────────────────────┘  │
│                            │
│  Email                     │
│  ┌──────────────────────┐  │
│  │                      │  │
│  └──────────────────────┘  │
│                            │
│  Phone                     │
│  ┌──────────────────────┐  │
│  │                      │  │
│  └──────────────────────┘  │
│                            │
│  ☐ Opt in to future        │
│    event notifications     │
│                            │
│  [Register & Check In]     │
│                            │
└────────────────────────────┘

Interaction

  • Tap to check in: tapping an unchecked name marks them as checked in with timestamp. Brief haptic feedback (on capable devices). Checkmark animates in
  • Undo: checked-in names show "Undo" for 10 seconds after check-in. After that, undo requires long-press → confirmation
  • QR scan: uses device camera (Capacitor Camera API). Scans attendee QR code (included in RSVP confirmation email). Auto-checks in on successful scan. Shows name confirmation briefly
  • Search: type-ahead, first-letter jump. Essential for large events
  • Walk-in: registers a new attendee not on the RSVP list. Creates or matches CRM contact. Checked in immediately
  • Guest check-in: tapping a name with guests shows "+N guests" — tap again to confirm guest count arriving (may be fewer than RSVP'd)
  • Offline: full RSVP list downloaded before event. All check-ins stored locally. Sync indicator shows status. Multiple staff can check in simultaneously — conflicts resolved by timestamp
  • Counter: always visible. Updates in real time

Touch Target Specs

  • Name rows: 56px minimum height, full-width tap area
  • Checkbox area: 48px × 48px minimum
  • QR scan button: 56px height, full-width
  • Walk-in button: 48px height

States

  • Empty (no RSVPs): "No RSVPs for this event yet. You can still use Walk-in to register attendees."
  • All checked in: "All 142 RSVPs checked in! 🎉" (counter shows 142 of 142)
  • Sync complete: "All check-in data synced" (green indicator)

EVT-006 & EVT-007: Public Event Pages

Cross-reference: The public event RSVP form (EVT-006) and public event page (EVT-007) are wireframed in supporter/supporter-portal.md. They use the (public) layout group — no app shell, no login required, tenant-branded.

EVT-006 is the RSVP form embedded within or linked from the public event page. EVT-007 is the full public event page with description, location map, share buttons, and RSVP form.


EVT-008: Event Metrics

Post-event analytics. Answers "how did the event go?" and "how does it compare to our other events?"

Desktop

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Events    Rally at Plaza del Mercado — Metrics               [Export]    │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  Event Summary                                                               │
│  ─────────────                                                               │
│                                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ RSVPs        │  │ Attended     │  │ Walk-ins     │  │ Show Rate    │   │
│  │ 142          │  │ 118          │  │ 23           │  │ 83%          │   │
│  │              │  │              │  │              │  │ (avg: 72%)   │   │
│  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Attendance Breakdown                                                        │
│  ─────────────────────                                                       │
│                                                                              │
│  RSVP'd and attended:        118  (83%)                                      │
│  RSVP'd, did not attend:     24   (17%)                                      │
│  Walk-ins:                   23                                              │
│  Total attendance:           141                                             │
│  Total including guests:     162                                             │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  RSVP Source                                                                 │
│  ───────────                                                                 │
│                                                                              │
│  Source              RSVPs    % of Total                                      │
│  ─────────────────────────────────────────                                   │
│  Public event page   82       57.7%                                          │
│  Email invitation    38       26.8%                                          │
│  SMS invitation      12       8.5%                                           │
│  Social media link   7        4.9%                                           │
│  Direct / other      3        2.1%                                           │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Check-in Timeline                                                           │
│  ─────────────────                                                           │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  25 ┤              ╱╲                                                │   │
│  │     │            ╱    ╲                                              │   │
│  │  20 ┤          ╱        ╲                                            │   │
│  │     │        ╱            ╲                                          │   │
│  │  15 ┤      ╱                ╲                                        │   │
│  │     │    ╱                    ╲         ╱╲                           │   │
│  │  10 ┤  ╱                        ╲     ╱    ╲                         │   │
│  │     │╱                            ╲  ╱      ╲                       │   │
│  │   5 ┤                              ╲╱        ╲──                    │   │
│  │     │                                                                │   │
│  │   0 ┼──────────────────────────────────────────────                  │   │
│  │      5:30  6:00  6:30  7:00  7:30  8:00  8:30                      │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│  Peak arrival: 6:00 – 6:15 PM (28 check-ins)                                │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Fundraising (if applicable)                                                 │
│  ───────────────────────────                                                 │
│  Cash collected at event: $480 (6 donations)                                 │
│  Online donations during event: $350 (4 donations)                           │
│  [View Donations →]                                                          │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  CRM Impact                                                                  │
│  ──────────                                                                  │
│  New contacts created (walk-ins):  18                                        │
│  Existing contacts updated:        123                                       │
│  Event attendance tagged:          141 contacts                              │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Post-Event Actions                                                          │
│  ──────────────────                                                          │
│  [Send Thank-You to Attendees]  [Send Follow-up to No-Shows]               │
│  [Send Survey]  [View Survey Results]                                        │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Comparison to Similar Events                                                │
│  ────────────────────────────                                                │
│  Event                   RSVPs  Attended  Show%   Walk-ins                   │
│  Rally — Plaza (this)    142    118       83%     23                          │
│  Rally — Bayamón Feb     98     72        73%     15                          │
│  Rally — Ponce Jan       120    89        74%     12                          │
│  Average (rallies)       120    93        72%     17                          │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Interaction

  • Export: PDF report for stakeholder sharing. Includes all sections
  • "Send Thank-You": opens COMM-005 or COMM-002 pre-filled with attendee list
  • "Send Follow-up to No-Shows": sends to RSVPs who didn't check in. Pre-filled message template
  • "Send Survey": opens EVT-010 survey builder or sends previously configured survey
  • Check-in timeline chart: shows arrival pattern. Useful for planning event start time and logistics
  • Comparison table: auto-populated with events of the same type. Helps track trends

States

  • Pre-event: metrics screen shows RSVP data only. Attendance sections say "Available after event"
  • No survey: "Send Survey" button instead of "View Survey Results"

EVT-009: Virtual Event Setup

Additional configuration for virtual events. Extends EVT-002 with video platform integration details.

Desktop

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Edit Event    Virtual Event Settings                                     │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  Video Platform                                                              │
│  ──────────────                                                              │
│                                                                              │
│  Platform *                                                                  │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Zoom                                                           [▾]  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│  Options: Zoom, Google Meet, Jitsi, Microsoft Teams, Custom URL              │
│                                                                              │
│  Meeting link *                                                              │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ https://zoom.us/j/1234567890?pwd=abc123                             │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  Meeting password (if separate from link)                                    │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ ••••••                                                              │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Attendance Tracking                                                         │
│  ────────────────────                                                        │
│                                                                              │
│  ☑ Generate unique join link per registrant                                  │
│  ⓘ Each registrant receives a personalized link in their RSVP confirmation. │
│    When they join, attendance is automatically recorded.                      │
│                                                                              │
│  ☐ Require registration before joining                                       │
│  ⓘ If enabled, the meeting link is hidden until the user RSVPs.             │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Reminder Settings                                                           │
│  ─────────────────                                                           │
│                                                                              │
│  ☑ Include join link in reminders                                            │
│  ☑ Send "starting now" notification at event time                            │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Recording                                                                   │
│  ─────────                                                                   │
│                                                                              │
│  ☐ Share recording link with attendees after event                           │
│  ☐ Share recording link with no-show RSVPs                                   │
│                                                                              │
│  Recording URL (add after event):                                            │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                                                                      │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
│  [Save]                                                                      │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Interaction

  • Accessed from EVT-002's "Configure Virtual Event Settings →" link
  • Unique link generation: when enabled, the system appends a tracking parameter to the meeting URL per registrant
  • Recording URL: added post-event. When saved with recording checkboxes enabled, triggers automated follow-up emails with recording link
  • Platform selection: determines which integration is used for attendance tracking

EVT-010: Post-Event Survey Builder

Create surveys to send to attendees after an event. Simple form builder optimized for event feedback.

Desktop

┌──────────────────────────────────────────────────────────────────────────────┐
│  ← Event Metrics    Post-Event Survey                [Preview]  [Send ▾]    │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  Event: Rally at Plaza del Mercado                                           │
│  Audience: 141 attendees (118 RSVP + 23 walk-ins)                           │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Survey Questions                                                            │
│  ────────────────                                                            │
│                                                                              │
│  1. How would you rate the event overall? *            [Rating ▾]           │
│     ☆ ☆ ☆ ☆ ☆ (1–5 stars)                                                  │
│     [✗ Remove]  [⇅ Drag to reorder]                                        │
│                                                                              │
│  2. What did you enjoy most?                           [Multi-select ▾]     │
│     ☐ Speakers    ☐ Music    ☐ Food                                         │
│     ☐ Networking  ☐ Information  ☐ Atmosphere                               │
│     [+ Add option]                                                           │
│     [✗ Remove]  [⇅]                                                        │
│                                                                              │
│  3. How likely are you to attend future events? *      [Rating ▾]           │
│     1 ──────●────── 10                                                       │
│     (1 = Not at all, 10 = Definitely)                                        │
│     [✗ Remove]  [⇅]                                                        │
│                                                                              │
│  4. Would you like to volunteer with us?               [Single select ▾]    │
│     ○ Yes, sign me up!                                                       │
│     ○ Maybe, tell me more                                                    │
│     ○ Not right now                                                          │
│     [✗ Remove]  [⇅]                                                        │
│                                                                              │
│  5. Any other feedback?                                [Free text ▾]        │
│     ┌──────────────────────────────────────────────────┐                    │
│     │ (Long text response area)                        │                    │
│     └──────────────────────────────────────────────────┘                    │
│     [✗ Remove]  [⇅]                                                        │
│                                                                              │
│  [+ Add Question]                                                            │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Question types: Rating (stars), Rating (scale), Single select,              │
│  Multi-select, Free text, Yes/No                                             │
│                                                                              │
│  ─────────────────────────────────────────────────────────────────────────   │
│                                                                              │
│  Delivery                                                                    │
│  ────────                                                                    │
│  Send to: ● All attendees (141)  ○ RSVP attendees only (118)               │
│  Channel: ● Email  ○ SMS (link to survey)                                   │
│                                                                              │
│  Message:                                                                    │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │ Thank you for attending Rally at Plaza del Mercado! We'd love       │   │
│  │ your feedback to help make future events even better.               │   │
│  │                                                                      │   │
│  │ [Take the Survey — 2 minutes]                                       │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Survey Results View

After responses come in, the survey shows aggregate results:

│  Survey Results — 47 responses (33% response rate)                           │
│  ──────────────                                                              │
│                                                                              │
│  1. Overall rating                    Avg: 4.3 / 5.0 ★                      │
│     ★★★★★  18 (38%)  ██████████████████████████████████████                │
│     ★★★★☆  21 (45%)  ████████████████████████████████████████████          │
│     ★★★☆☆   6 (13%)  █████████████                                         │
│     ★★☆☆☆   2 (4%)   ████                                                  │
│     ★☆☆☆☆   0 (0%)                                                         │
│                                                                              │
│  2. What did you enjoy most?                                                 │
│     Speakers         31 (66%)  ████████████████████████████████████          │
│     Atmosphere       28 (60%)  ██████████████████████████████████            │
│     Networking       22 (47%)  ██████████████████████████                    │
│     Music            19 (40%)  ██████████████████████                        │
│     Food             15 (32%)  █████████████████                             │
│     Information      12 (26%)  ██████████████                                │
│                                                                              │
│  3. Likelihood to attend future events    Avg: 8.2 / 10                     │
│     ███████████████████████████████████████████████████████████████████ 8.2  │
│                                                                              │
│  4. Would you like to volunteer?                                             │
│     Yes, sign me up!     12 (26%)  → [View contacts →]                      │
│     Maybe, tell me more  18 (38%)  → [View contacts →]                      │
│     Not right now        17 (36%)                                            │
│                                                                              │
│  5. Other feedback — 23 responses  [View All →]                              │
│     "Great energy! Would love to see more community..."                      │
│     "The speakers were inspiring. Please have more events..."               │
│     "Parking was difficult — consider a shuttle next time"                   │
│                                                                              │
│  [Export Results]                                                             │

Interaction

  • Question types: dropdown to change type. Each type renders appropriate input controls
  • Drag to reorder: questions can be reordered via drag handle
  • "+ Add Question": appends a new question with type selector
  • Required toggle: asterisk (*) marks required questions
  • Preview: opens survey as respondent will see it (mobile-optimized)
  • Send dropdown: "Send Now", "Schedule", "Save Draft"
  • Results: "View contacts →" on volunteer-interest responses links to CRM-001 filtered to those contacts
  • Export: CSV with all individual responses (anonymized option available)

States

  • Empty (no questions): default template pre-loads 3 questions (overall rating, enjoyment, future attendance)
  • No responses yet: "Survey sent to 141 attendees. No responses yet."

Empty States Summary

Screen Empty Message Action
EVT-001 (Admin) No events yet. Events help you organize rallies, trainings, fundraisers, and more. Create Event
EVT-001 (Volunteer) No upcoming events. Check back soon for new events in your area. —
EVT-004 RSVPs No RSVPs for this event yet. Share the event link to start collecting RSVPs. Copy Event Link
EVT-005 Check-in (no RSVPs) No RSVPs for this event yet. You can still use Walk-in to register attendees. —

Accessibility Notes

  • Check-in tool uses 56px minimum row height for one-handed tap operation
  • Check-in confirmation uses haptic feedback + visual checkmark + timestamp text (not just color change)
  • QR scan mode has a manual fallback (name search) for accessibility
  • Event cards use semantic structure: event name as heading, date/location as supporting text
  • RSVP status communicated via icon + text (✓ Confirmed, ✗ Cancelled, ◷ Pending)
  • Survey star ratings are keyboard-accessible with arrow keys

Design Decisions

Decision Choice Rationale
Check-in as full-screen tool Dedicated check-in mode, not embedded in event detail Check-in is a high-focus task at a busy venue. The tool needs maximum screen real estate and minimal distractions
Check-in offline-first RSVP list pre-downloaded, all check-ins local until sync Events happen in parks, community centers, rural areas. Connectivity is unreliable. Data loss is unacceptable
Walk-in as separate flow Distinct "Walk-in" button, not a modification of the RSVP list Walk-ins need a quick registration form. Mixing them into the RSVP flow would slow check-in for pre-registered attendees
Survey as lightweight builder Simple question-type builder, not a full form engine Post-event surveys should be 2-minute affairs. A complex builder encourages over-long surveys that get low response rates
Virtual as extension, not separate Virtual settings extend EVT-002, share the same event model Hybrid events need both physical and virtual details. A unified model prevents duplicate event management
Metrics comparison table Auto-populated with same-type events Showing trends helps the VC improve over time. "Was this rally better than our last rally?" is a natural question

Open Questions

  1. Multi-day events — should multi-day events be a single event with multiple date entries, or separate linked events? Single-event with date range is simpler but doesn't support per-day RSVPs
  2. Ticket types / pricing — should events support paid tickets (e.g., fundraiser dinner at $100/seat)? This overlaps with fundraising and adds payment integration to the event flow
  3. Recurring events — should there be a "recurring event" feature (e.g., weekly phone bank) that auto-creates event instances? Or is manual duplication sufficient for v1?
  4. Attendee messaging during event — should there be an in-event broadcast capability (push notification to attendees: "Session starting in 5 minutes in Room B")? Could be useful for large multi-track events but adds complexity
  5. Check-in for multiple staff simultaneously — when multiple staff check in attendees at the same event offline, how are conflicts resolved? Current plan: last-write-wins by timestamp, but dual-check-in of the same person should show a warning on sync