TimelineWinter 2026

Winter 2026 Updates

Builds on Fall 2025 with new features across the main site and CxC.

Main Website (apps/web)

  • Password reset (PR #126): Forgot-password link on login; email-based reset with time-limited link; dedicated reset page with confirmation.
  • Analytics & performance monitoring (PR #38): Vercel Analytics and Speed Insights added to track page views and real-world performance metrics.

CxC App (apps/cxc)

Account & security

  • Password reset (PR #126): Same secure email-based flow as main site; forgot-password link, reset page, email verification.

Superadmin dashboard (PR #141)

  • Dashboard (/admin/dashboard): Analytics (applications, offers, RSVPs, declined); conversion rates (application→offer, offer→RSVP); status breakdown.
  • RSVP timeline: Line chart (Recharts), daily/hourly toggle, tooltips; DashboardService/DashboardRepository with getDashboardStatistics(), getRSVPTimeline(intervalHours); GET /api/admin/dashboard?interval=1|24.

Review leaderboard (PR #132)

  • Leaderboard (/admin/leaderboard): Total applications/reviews/reviewers, averages; top 3 podium; full table; reviewer detail modal (scores per category).
  • Scoring: Resume (0–3), Links (0–2), Q1 (0–7), Q2 (0–3); AdminReviewService/AdminReviewRepository; GET /api/admin/leaderboard and ?reviewerId=.
  • DB: Migration fixed reviews unique indexes; compound (application_id, reviewer_id); RLS disabled for app-level control.

Admin application management (PR #118, #100)

  • Applications table (/admin/applications): Sortable, filterable (email search), pagination (10–50 rows); columns: name, email, university, gender, reviews, date; row click → details modal (basic info, education, links, questions, team, resume, MLH).
  • Review (/admin/review): Redesigned UI; “Get New Application”; /api/applications/random for least-reviewed; score categories; reviews table, no duplicate per reviewer.
  • Nav: Admin dropdown (Applications, Review) for admins; mobile support.

Application flow (PR #100, #145)

  • Teams: Add up to 3 members via search; GET /api/users/emails; team names/emails in review.
  • Persistence: localStorage for steps and fields; restore on return; clear on submit.
  • Resume: Replace on upload; GET signed URL; private bucket; validation (10 MB, PDF/DOC/DOCX).
  • Post-submit: No edit; redirect to Submitted; “No Application Found” page for users without an application (PR #145).
  • Steps: Teams (optional) → MLH (required) → Review & Submit.

Backend & API

  • Services: AdminApplicationService, AdminReviewService; DashboardService/DashboardRepository; ApplicationService.getAllUserEmails(); ResumeService (upload replace, getUserResume, getSignedResumeUrl); FileService.createSignedUrl().
  • Repos: AdminApplicationRepository, AdminReviewRepository, DashboardRepository; review assignment, leaderboard, stats, reviewer scores.
  • Endpoints: GET /api/admin/dashboard, /admin/applications, /admin/applications/[id], /api/applications/random, /api/applications/resumes, POST /api/review/submit, GET /api/users/emails; POST /api/applications/resumes (replace), PATCH /api/applications (better errors).
  • Auth: /admin/** requires admin; superadmin-only: /admin/assign, /admin/dashboard, /admin/leaderboard; /start in protected auth routes.

Content

  • Branding (PR #114): Standardized “CXC” across components.
  • Admin events list (PR #38): Events list is now mobile-friendly; displays as cards on small screens and a table on desktop.

Design System (packages/ui)

  • Table: Full shadcn table set; used in admin applications dashboard.
  • Dialog: Close button cursor; formatting.
  • GlassSurface: useCallback fixes for hook deps.
  • Forms: FileUploadField callbacks and existingFileName; SelectField undefined handling.
  • Event calendar (PR #38): Now mobile-friendly; uses a bottom sheet on mobile and a dialog on desktop; shorter weekday labels on small screens.

Infrastructure

  • Recharts (PR #141): Added for CxC dashboard charts.
  • Auth (PR #126): AuthService.forgotPassword(), resetPassword(); AuthRepository reset/update; POST /api/auth/forgot-password, /api/auth/reset-password.
  • Utils: splitCommaSeparatedString() in core for ethnicity/experience.
  • DB: reviews table (id, application_id, reviewer_id, basic_info_score, q1_score, q2_score, reviewed_at); team_members comma-separated; app queries include team display names.
  • Storage: Private resume bucket; signed URLs (e.g. 1 hr); old resume cleanup on new upload.
  • DB (PR #35): memberships table now requires a term_id foreign key referencing public.terms, scoping each membership record to a specific term.
  • Gmail webhook (PR #38): New POST /api/webhooks/gmail endpoint receives Gmail push notifications via Google Cloud Pub/Sub, laying the groundwork for automated membership payment verification.

From merged PRs tagged W26.