Skip to content

Ticket 6: Admin Applicants Table & Review — frontend implementation #470

@adityapat24

Description

@adityapat24

Goal

The applicants table and detail page are fully built and interactive. Filtering, sorting, pagination, and inline edits all work against mocked endpoints.

Tasks

Applicants list page

  • /admin/applicants: page with ApplicantsFilters above ApplicantsTable, ExportButtons in the header.
    • What this accomplishes: One screen contains everything an admin needs to review applicants.

ApplicantsTable component

  • shadcn DataTable with columns: name, email, status, decision, RSVP, submitted-at.
  • Column headers are clickable to toggle sort direction.
  • Rows are clickable, navigate to /admin/applicants/[id].
  • Pagination controls at the bottom (prev / next / page numbers).
    • What this accomplishes: Admins can scan, sort, and dive in. With 1000+ applicants, pagination keeps the page fast.
  • Loading skeleton while data is fetching, empty state when no results.
    • What this accomplishes: Page feels responsive and handles edge cases.

ApplicantsFilters component

  • Status dropdown, decision dropdown, RSVP dropdown, text search for name/email.
  • Filter state syncs with URL query params (?status=submitted&decision=admitted).
    • What this accomplishes: Admins can bookmark or share a filtered view by URL. Refresh doesn't lose filter state.
  • "Clear filters" button when any filter is active.
    • What this accomplishes: One click back to the full list.

Applicant detail page

  • /admin/applicants/[id]: server-fetches applicant, renders ApplicantDetail for responses + DecisionEditor and RsvpEditor for inline edits.
  • "Back to list" link at the top preserving filter state.
    • What this accomplishes: Admins can drill in to review an application and pop back to where they were.

ApplicantDetail component

  • All application responses displayed in read-only form, organized into the same sections as the application.
  • File upload responses show as filename with a "Download" link (uses Ticket 4's download endpoint).
    • What this accomplishes: Admins see the full submission in a readable format, including resumes.

DecisionEditor component

  • shadcn Select with decision options (admitted, waitlisted, declined, undecided).
  • On change, calls POST /api/v1/applicants/[id] with the new decision, optimistic update, rollback on failure, toast confirmation.
    • What this accomplishes: One-click decision changes. The admin doesn't need to hit a "save" button.

RsvpEditor component

  • Same pattern as DecisionEditor but for RSVP status.

ExportButtons component

  • Two buttons: "Export applications CSV" and "Export RSVPs CSV."
  • Each triggers a download via an <a download href="/api/v1/export/...">.
    • What this accomplishes: Admins can pull data into Excel for offline analysis or sponsor reports.

Styling

  • Tables are dense but readable. Wide enough for the data without horizontal scroll on standard laptops.

Definition of done

  • /admin/applicants shows the table with mock data, all filters work, pagination works.
  • Clicking a row opens the detail page with mock data.
  • Inline editors call their endpoints (501 for now) and show optimistic-update + rollback behavior.
  • Export buttons trigger downloads (the response will be a 501 right now, but the click flow is real).

Metadata

Metadata

Assignees

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions