Build Event Management Admin Panel & Review Queue
Overview
Create comprehensive admin interface for managing event proposals, approvals, publishing, and attendee moderation.
Scope
Admin queue for pending event proposals (awaiting approval)
Event detail view with title, description, date, time, location, capacity, organizer
Approve/reject events with optional feedback
Publish approved events to main event directory
Moderation tools: manage RSVP list, remove attendees if needed
Analytics dashboard: RSVPs, actual attendance, feedback
Acceptance Criteria
Pending events load from Firestore events collection filtered by status == 'draft'
Event detail view shows: title, description, date/time, location, capacity, category, organizer
Approve button: updates event status to published, sets publishedAt timestamp
Reject button: updates status to rejected, sends email to organizer with feedback
Event appears in main /events directory immediately after approval
Can view full RSVP list with attendee details
Remove attendee: allows admin to remove bad actors from RSVP
Cancel event: sends notification to all attendees with reason
View event analytics: RSVP count, actual attendees, repeat attendees
Duplicate event prevention: check for similar events (same date/location)
Admin-only access verified (403 for non-admins)
Audit log: record all approvals, rejections, cancellations with admin ID and timestamp
Empty state: when no pending events
Related Files
app/admin/events/page.tsx — create if missing
lib/services/events.ts — add approval/rejection/moderation functions
app/events/page.tsx — filter to show only published events
Event Data Model
events {
title: string
description: string
category: string
date: timestamp
endDate: timestamp
location: { city: string, address: string, coordinates?: { lat, lng } }
capacity: number
organizer: { id: string, name: string, email: string }
status: "draft" | "published" | "cancelled" | "rejected"
createdAt: timestamp
publishedAt?: timestamp
cancelledAt?: timestamp
rsvpList: string[] (array of user IDs)
attendedList: string[] (confirmed attendees)
feedback: string[] (optional feedback from attendees)
rejectionReason?: string
}
Email Templates
Approval: "Your event '[Title]' is now live! View it here: [link]"
Rejection: "Your event '[Title]' was not approved. Reason: [feedback]. Resubmit with adjustments: [link]"
Cancellation to attendees: "The event '[Title]' on [date] has been cancelled. Reason: [reason]"
Future Enhancements
Automated event recommendations based on attendee interests
Post-event survey and feedback collection
Recurring event support
Virtual event support (Zoom integration)
Why This Matters
Ensures event quality and prevents spam
Enables community events at scale
Improves attendee trust and experience
Community engagement driver
Build Event Management Admin Panel & Review Queue
Overview
Create comprehensive admin interface for managing event proposals, approvals, publishing, and attendee moderation.
Scope
Acceptance Criteria
eventscollection filtered bystatus == 'draft'published, setspublishedAttimestamprejected, sends email to organizer with feedback/eventsdirectory immediately after approvalRelated Files
app/admin/events/page.tsx— create if missinglib/services/events.ts— add approval/rejection/moderation functionsapp/events/page.tsx— filter to show only published eventsEvent Data Model
Email Templates
Future Enhancements
Why This Matters