You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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).
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 withApplicantsFiltersaboveApplicantsTable,ExportButtonsin the header.ApplicantsTable component
/admin/applicants/[id].ApplicantsFilters component
?status=submitted&decision=admitted).Applicant detail page
/admin/applicants/[id]: server-fetches applicant, rendersApplicantDetailfor responses +DecisionEditorandRsvpEditorfor inline edits.ApplicantDetail component
DecisionEditor component
POST /api/v1/applicants/[id]with the new decision, optimistic update, rollback on failure, toast confirmation.RsvpEditor component
ExportButtons component
<a download href="/api/v1/export/...">.Styling
Definition of done
/admin/applicantsshows the table with mock data, all filters work, pagination works.