Coordinator attendee roster + CSV export on the event page#504
Merged
Conversation
Adds a "Manage attendees" panel to the event detail view, visible only to the event creator or an admin. It's the in-app replacement for the Google Form / spreadsheet that coordinators use today: the full list of who RSVP'd — registered members (with email) and account-less guests — plus a one-tap CSV export. Lives on the event page itself (native full screen, mobile-web route, and the desktop explore side panel), not in the separate admin portal. - backend: GET /events/:id/roster — gated to creator-or-admin; merges event_attendees (email + join date) with non-upgraded event_guest_rsvps; returns counts. New db.getEventRoster(). - frontend: shared <EventAttendeeRoster> (native + web) — list, counts, Export CSV (web: file download; native: OS share sheet). New api.getEventRoster(). - wired into events/[id].tsx, events/[id].web.tsx, and EventDetailPanel.web.tsx (new canManage prop, passed from explore). - tests: roster returns members+guests to creator, 403 for non-coordinator, admin can view any, 404 for unknown event. Note: /getEventUsers is public and exposes attendee email/phone/DOB via userRowToApi — pre-existing PII leak, flagged for a separate fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploying chinmaya-janata with
|
| Latest commit: |
65f419e
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://4690b249.project-janatha.pages.dev |
| Branch Preview URL: | https://feat-event-admin-roster.project-janatha.pages.dev |
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a "Manage attendees" panel to the event detail view, visible only to the event creator or an admin. It's the in-app replacement for the Google Form / spreadsheet coordinators use today — exactly what Siddharth described in his demo ("uses a Google Spreadsheet; asks name, email, phone").
It lives on the event page itself (per request), not in the separate admin portal: native full-screen, mobile-web route, and the desktop explore side panel.
What it shows
.csvfile; native: OS share sheetChanges
GET /events/:id/roster— gated to creator-or-admin (mirrors the/updateEventgate). Mergesevent_attendees(email + join date) with non-upgradedevent_guest_rsvps, returnscounts. Newdb.getEventRoster().<EventAttendeeRoster>component (native + web) +api.getEventRoster(). Wired intoevents/[id].tsx,events/[id].web.tsx, andEventDetailPanel.web.tsx(newcanManageprop, passed from explore).403for a non-coordinator; admin can view any roster;404for unknown event.Scope notes
/getEventUsersis public (no auth) anduserRowToApireturnsemail,phoneNumber,dateOfBirth— so attendee PII is currently exposed to anyone. Not touched here; flagged for its own fix.Test plan
npm run typecheck(backend + frontend) cleannpm run testbackend — 435 passing (incl. 4 new roster tests)