Skip to content

Build Event Management Admin Panel & Review Queue #14

Description

@LRxDarkDevil

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions