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.
- Membership payment QR (PR #43): Members can now display a QR code on the events page after paying membership fees; execs scan the code to quickly mark payments as received.
- Passport backend connection (PR #62): The Passport page now loads live profile and membership data from the backend, so members can edit core profile details and see current membership and exec-role status in one place.
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, #51)
- 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 system (
/admin/applications/review, PR #51): VPs and Presidents can review applications within their scope (Presidents see all, VPs see their subteam positions); set status (In Review, Interviewing, Wanted, Not Wanted for VPs; Presidents can also set Offer Sent, Accepted/Declined Offer, Rejection Sent); mobile-responsive with side panel for details. - Hiring dashboard (
/admin/applications/hiring, PR #51): Presidents can view all applicants and their position selections with current status; update offer/rejection status; preview new exec team composition; finalize roles to promote accepted applicants to admin/exec and demote previous execs to member. - Hiring finalization communications (PR #64): Presidents now provide an all-hands When2Meet link during team finalization, and new execs automatically receive a welcome email with onboarding and Discord next steps.
- Nav: Admin dropdown (Applications, Review, Hiring) for admins; mobile support.
Membership management (PR #43, #59)
- QR code verification: Execs can scan member payment QR codes to automatically open the payment confirmation modal for that member; QR codes deep-link to the members page with auto-action.
- Automated payment processing (PR #59): Membership payments made through WUSA Online Shop are automatically detected and marked as paid; members receive email confirmation when their payment is successfully processed.
Application flow (PR #100, #145, #48)
- 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); resume status check on page load (PR #48).
- Post-submit: No edit; redirect to Submitted; “No Application Found” page for users without an application (PR #145). Improved redirect handling for already-submitted applications (PR #48).
- Steps: Teams (optional) → MLH (required) → Review & Submit.
- Step persistence (PR #48): Application progress now saved in localStorage; users return to their last completed step instead of restarting.
Backend & API
- Services:
AdminApplicationService,AdminReviewService,HiringService(PR #51);DashboardService/DashboardRepository;ApplicationService.getAllUserEmails();ResumeService(upload replace, getUserResume, getSignedResumeUrl);FileService.createSignedUrl();GitHubService(PR #41) for managing org teams, template repos, and workflow dispatches. - Repos:
AdminApplicationRepository,AdminReviewRepository,HiringRepository(PR #51),DashboardRepository; review assignment, leaderboard, stats, reviewer scores; question CRUD with VP scope filtering (PR #41). - Endpoints:
GET /api/admin/dashboard,/admin/applications,/admin/applications/[id],/api/applications/random,GET /api/applications/resumes(resume status, PR #48),POST /api/review/submit,GET /api/users/emails;POST /api/applications/resumes(replace),PATCH /api/applications(better errors);GET /api/applications/review,PATCH /api/applications/review/[id](VP-scoped review, PR #51);GET /api/applications/hiring,PATCH /api/applications/hiring/selections/[id],GET /api/applications/hiring/team,POST /api/applications/hiring/finalize(President-only hiring, PR #51);GET /api/github/teams,GET /api/github/templates,POST /api/github/foundry/launch(PR #41);GET /api/applications/review/questions,POST /api/applications/review/questions,PATCH /api/applications/review/questions/[id],DELETE /api/applications/review/questions/[id](PR #41). - Auth:
/admin/**requires admin; superadmin-only:/admin/assign,/admin/dashboard,/admin/leaderboard; President-only:/admin/applications/hiring,/api/applications/hiring/**(PR #51); VP-only:/admin/applications/review,/api/applications/review/**,/applications/questionswith subteam-based question scope (PR #41).
Onboarding (PR #42)
- Exec onboarding form (
/onboarding): Multi-step form for new exec members; collects profile info (name, email, role, term type), headshot upload with consent, socials (Discord, Instagram), and data science competency level; submissions linked to term and stored inexec_form_submissionstable. - Onboarding form API (PR #63): Execs can now load active term details, role options, and prior submissions, then submit or update onboarding data through secure API endpoints. This makes onboarding progress reusable instead of requiring users to re-enter everything.
- Onboarding review dashboard (PR #70): VPs and Presidents can open
/onboarding/reviewto browse team submissions, filter/search records, and inspect each profile in a detail panel. - Onboarding exports (PR #70): Leadership can export onboarding records to CSV and download custom team headshots as a ZIP for the selected term.
Nexus (PR #41)
- Nexus navigation: New admin section for developer tools with three modules: Foundry (project generator), Optics (project monitoring), and Archive (project history).
- Foundry project generator (
/nexus/foundry): Multi-step form to launch new projects via GitHub Actions; select project type (Next.js, Express, FastAPI), database (PostgreSQL with Neon/Supabase or MongoDB), optional Redis and S3 storage; auto-generates repository from templates and configures team access. - GitHub integration: Fetches organization teams and template repositories; triggers workflow dispatches to nexus-foundry repo; admins can provision complete project infrastructure with single form submission.
Application questions dashboard (PR #41, #48)
- Questions bank (
/applications/questions): VP-only dashboard to create, edit, and delete application questions; assign questions to specific positions; text or textarea types with optional character limits, placeholders, and help text. - VP access control: VPs can only edit questions for their subteam positions; Presidents have full access to all questions across all positions.
- Enhanced question management (PR #48): VPs can now view read-only details of questions outside their scope; Presidents can filter questions by position or general category; improved dialog modes (view/edit/create) with proper validation and disabled states.
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;getQuestionScopeForUser()(PR #41) resolves VP permissions and subteam-scoped position access. - 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;questionsandposition_questionstables (PR #41) for dynamic application forms. - 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. - GitHub API integration (PR #41): GitHubService with org team listing, template repository discovery, and workflow dispatch for automated project provisioning.
- Membership webhook (PR #59):
POST /api/webhooks/membershipendpoint verifies WUSA receipt emails via Resend inbound webhooks; automatically parses transaction details and updates membership status with email notifications. - Broadcast audience cleanup (PR #64): Recipient lists used for admin email broadcasts are now automatically cleaned up after sends, helping keep campaign segments accurate for future outreach.
From merged PRs tagged W26.