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/DashboardRepositorywithgetDashboardStatistics(),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/leaderboardand?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/randomfor least-reviewed; score categories;reviewstable, 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;/startin 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();AuthRepositoryreset/update;POST /api/auth/forgot-password,/api/auth/reset-password. - Utils:
splitCommaSeparatedString()in core for ethnicity/experience. - DB:
reviewstable (id, application_id, reviewer_id, basic_info_score, q1_score, q2_score, reviewed_at);team_memberscomma-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):
membershipstable now requires aterm_idforeign key referencingpublic.terms, scoping each membership record to a specific term. - Gmail webhook (PR #38): New
POST /api/webhooks/gmailendpoint receives Gmail push notifications via Google Cloud Pub/Sub, laying the groundwork for automated membership payment verification.
From merged PRs tagged W26.