From c3df6399958025d5c5b86c98f7c3b157992c44d0 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 00:53:31 -0800 Subject: [PATCH 01/18] Judge invites! Template and template image pending change --- .../2026JudgeHubInviteTemplate.ts | 61 ++++++ app/(api)/_actions/emails/parseInviteCSV.ts | 86 ++++++++ .../emails/sendBulkJudgeHubInvites.ts | 110 ++++++++++ .../emails/sendSingleJudgeHubInvite.ts | 69 ++++++ app/(api)/_actions/emails/transporter.ts | 24 ++ .../JudgeInvites/JudgeBulkInviteForm.tsx | 205 ++++++++++++++++++ .../JudgeInvites/JudgeSingleInviteForm.tsx | 88 ++++++++ app/(pages)/admin/invite-judges/page.tsx | 31 +++ .../admin/invite-link/invite.module.scss | 5 - app/(pages)/admin/invite-link/page.tsx | 12 - app/(pages)/admin/page.tsx | 2 +- app/_types/emails.ts | 27 +++ public/email/2025_email_header.png | Bin 0 -> 199982 bytes 13 files changed, 702 insertions(+), 18 deletions(-) create mode 100644 app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts create mode 100644 app/(api)/_actions/emails/parseInviteCSV.ts create mode 100644 app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts create mode 100644 app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts create mode 100644 app/(api)/_actions/emails/transporter.ts create mode 100644 app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx create mode 100644 app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx create mode 100644 app/(pages)/admin/invite-judges/page.tsx delete mode 100644 app/(pages)/admin/invite-link/invite.module.scss delete mode 100644 app/(pages)/admin/invite-link/page.tsx create mode 100644 app/_types/emails.ts create mode 100644 public/email/2025_email_header.png diff --git a/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts b/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts new file mode 100644 index 000000000..2707bd8c2 --- /dev/null +++ b/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts @@ -0,0 +1,61 @@ +export default function judgeHubInviteTemplate( + fname: string, + inviteLink: string +) { + return ` + + + + + Judge Invitation - HackDavis 2026 + + + +
+ HackDavis 2026 +

Welcome to HackDavis 2026! πŸŽ‰

+
+

Hi ${fname},

+

We are thrilled to welcome you as a judge at HackDavis 2026! We're excited to have your expertise help our hackers bring their ideas to life.

+

Here's what you need to do:

+
    +
  • + Create your HackDavis Hub account by clicking the button below: +
    • This link is unique to you β€” do NOT share it with anyone.
    +
  • +
  • + Join our Discord at https://discord.gg/wc6QQEc to stay up to date with event details. +
  • +
+ Create Your Hub Account +

If the button doesn't work, copy and paste this link into your browser:

+

${inviteLink}

+

See you at HackDavis! ✨

+

The HackDavis Team

+
+
+ HackDavis 2026 +
+ +`; +} diff --git a/app/(api)/_actions/emails/parseInviteCSV.ts b/app/(api)/_actions/emails/parseInviteCSV.ts new file mode 100644 index 000000000..6152a7d5a --- /dev/null +++ b/app/(api)/_actions/emails/parseInviteCSV.ts @@ -0,0 +1,86 @@ +import { parse } from 'csv-parse/sync'; +import { z } from 'zod'; +import { JudgeInviteData } from '@typeDefs/emails'; + +const emailSchema = z.string().email(); + +interface ParseResult { + ok: true; + body: JudgeInviteData[]; +} + +interface ParseError { + ok: false; + error: string; +} + +export default function parseInviteCSV( + csvText: string +): ParseResult | ParseError { + try { + if (!csvText.trim()) { + return { ok: false, error: 'CSV file is empty.' }; + } + + const rows: string[][] = parse(csvText, { + trim: true, + skip_empty_lines: true, + }); + + if (rows.length === 0) { + return { ok: false, error: 'CSV file has no rows.' }; + } + + // Detect and skip header row + const firstRow = rows[0].map((cell) => cell.toLowerCase()); + const hasHeader = + firstRow.some((cell) => cell.includes('first')) || + firstRow.some((cell) => cell.includes('email')); + const dataRows = hasHeader ? rows.slice(1) : rows; + + if (dataRows.length === 0) { + return { ok: false, error: 'CSV has a header but no data rows.' }; + } + + const results: JudgeInviteData[] = []; + const errors: string[] = []; + + for (let i = 0; i < dataRows.length; i++) { + const row = dataRows[i]; + const rowNum = hasHeader ? i + 2 : i + 1; + + if (row.length < 3) { + errors.push(`Row ${rowNum}: expected 3 columns (First Name, Last Name, Email), got ${row.length}.`); + continue; + } + + const [firstName, lastName, email] = row; + + if (!firstName) { + errors.push(`Row ${rowNum}: First Name is empty.`); + continue; + } + if (!lastName) { + errors.push(`Row ${rowNum}: Last Name is empty.`); + continue; + } + + const emailResult = emailSchema.safeParse(email); + if (!emailResult.success) { + errors.push(`Row ${rowNum}: "${email}" is not a valid email address.`); + continue; + } + + results.push({ firstName, lastName, email }); + } + + if (errors.length > 0) { + return { ok: false, error: errors.join('\n') }; + } + + return { ok: true, body: results }; + } catch (e) { + const error = e as Error; + return { ok: false, error: `Failed to parse CSV: ${error.message}` }; + } +} diff --git a/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts new file mode 100644 index 000000000..aa4adb4ba --- /dev/null +++ b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts @@ -0,0 +1,110 @@ +'use server'; + +import { GetManyUsers } from '@datalib/users/getUser'; +import parseInviteCSV from './parseInviteCSV'; +import sendSingleJudgeHubInvite from './sendSingleJudgeHubInvite'; +import { + BulkJudgeInviteResponse, + JudgeInviteData, + JudgeInviteResult, +} from '@typeDefs/emails'; + +const CONCURRENCY = 10; + +export default async function sendBulkJudgeHubInvites( + csvText: string +): Promise { + // Parse and validate CSV + const parsed = parseInviteCSV(csvText); + if (!parsed.ok) { + return { + ok: false, + results: [], + successCount: 0, + failureCount: 0, + error: parsed.error, + }; + } + + const allJudges = parsed.body; + const results: JudgeInviteResult[] = []; + let successCount = 0; + let failureCount = 0; + + const totalStartTime = Date.now(); + + // Single upfront duplicate check for all emails at once + const dupStart = Date.now(); + const allEmails = allJudges.map((j) => j.email); + const existingUsers = await GetManyUsers({ email: { $in: allEmails } }); + const existingEmailSet = new Set( + existingUsers.ok ? existingUsers.body.map((u: { email: string }) => u.email) : [] + ); + console.log( + `[Bulk Judge Invites] Duplicate check (${allEmails.length} emails): ${Date.now() - dupStart}ms β€” ${existingEmailSet.size} already registered` + ); + + // Partition judges into duplicates (immediate failure) and new (to send) + const judges: JudgeInviteData[] = []; + for (const judge of allJudges) { + if (existingEmailSet.has(judge.email)) { + results.push({ email: judge.email, success: false, error: 'User already exists.' }); + failureCount++; + } else { + judges.push(judge); + } + } + + const totalBatches = Math.ceil(judges.length / CONCURRENCY); + console.log( + `[Bulk Judge Invites] Sending to ${judges.length} new judges (concurrency: ${CONCURRENCY}, ${totalBatches} batches)` + ); + + for (let i = 0; i < judges.length; i += CONCURRENCY) { + const batch: JudgeInviteData[] = judges.slice(i, i + CONCURRENCY); + const batchNum = Math.floor(i / CONCURRENCY) + 1; + const batchStartTime = Date.now(); + console.log( + `[Bulk Judge Invites] Processing batch ${batchNum}/${totalBatches} (${batch.length} judges)` + ); + + const batchResults = await Promise.allSettled( + batch.map((judge) => sendSingleJudgeHubInvite(judge, true)) + ); + + for (let j = 0; j < batchResults.length; j++) { + const result = batchResults[j]; + const email = batch[j].email; + + if (result.status === 'fulfilled' && result.value.ok) { + results.push({ email, success: true, inviteUrl: result.value.inviteUrl }); + successCount++; + } else { + const errorMsg = + result.status === 'rejected' + ? result.reason?.message ?? 'Unknown error' + : result.value.error ?? 'Unknown error'; + console.error(`[Bulk Judge Invites] βœ— Failed: ${email}`, errorMsg); + results.push({ email, success: false, error: errorMsg }); + failureCount++; + } + } + + console.log( + `[Bulk Judge Invites] Batch ${batchNum}/${totalBatches} completed in ${Date.now() - batchStartTime}ms` + ); + } + + const totalTime = Date.now() - totalStartTime; + console.log( + `[Bulk Judge Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + ); + + return { + ok: failureCount === 0, + results, + successCount, + failureCount, + error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + }; +} diff --git a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts new file mode 100644 index 000000000..d2afa94bf --- /dev/null +++ b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts @@ -0,0 +1,69 @@ +'use server'; + +import GenerateInvite from '@datalib/invite/generateInvite'; +import { GetManyUsers } from '@datalib/users/getUser'; +import { DuplicateError, HttpError } from '@utils/response/Errors'; +import judgeHubInviteTemplate from './emailFormats/2026JudgeHubInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { JudgeInviteData, SingleJudgeInviteResponse } from '@typeDefs/emails'; + +export default async function sendSingleJudgeHubInvite( + options: JudgeInviteData, + skipDuplicateCheck = false +): Promise { + const totalStart = Date.now(); + const { firstName, lastName, email } = options; + + try { + console.log(`[Judge Hub Invite] Starting invite for ${email}`); + + // Step 1: duplicate check (skipped in bulk flow β€” checked upfront there) + if (!skipDuplicateCheck) { + const dupStart = Date.now(); + const users = await GetManyUsers({ email }); + console.log(`[Judge Hub Invite] Duplicate check: ${Date.now() - dupStart}ms`); + if (users.ok && users.body.length > 0) { + throw new DuplicateError(`User with email ${email} already exists.`); + } + } + + // Step 2: generate HMAC-signed invite link + const genStart = Date.now(); + const invite = await GenerateInvite( + { email, name: `${firstName} ${lastName}`, role: 'judge' }, + 'invite' + ); + console.log(`[Judge Hub Invite] Invite generation: ${Date.now() - genStart}ms`); + if (!invite.ok || !invite.body) { + throw new HttpError(invite.error ?? 'Failed to generate invite link.'); + } + + if (!DEFAULT_SENDER) { + throw new Error('Email configuration missing: SENDER_EMAIL is not set.'); + } + + const htmlContent = judgeHubInviteTemplate(firstName, invite.body); + + // Step 3: send email + const mailStart = Date.now(); + await transporter.sendMail({ + from: DEFAULT_SENDER, + to: email, + subject: "You're Invited to HackDavis 2026 - Create Your Hub Account", + html: htmlContent, + }); + console.log(`[Judge Hub Invite] sendMail: ${Date.now() - mailStart}ms`); + + console.log( + `[Judge Hub Invite] βœ“ Done (${email}) β€” total: ${Date.now() - totalStart}ms` + ); + return { ok: true, inviteUrl: invite.body, error: null }; + } catch (e) { + const error = e as HttpError; + console.error( + `[Judge Hub Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, + error.message + ); + return { ok: false, error: error.message }; + } +} diff --git a/app/(api)/_actions/emails/transporter.ts b/app/(api)/_actions/emails/transporter.ts new file mode 100644 index 000000000..6a68e661e --- /dev/null +++ b/app/(api)/_actions/emails/transporter.ts @@ -0,0 +1,24 @@ +import nodemailer from 'nodemailer'; + +const SENDER_EMAIL = process.env.SENDER_EMAIL; +const SENDER_PWD = process.env.SENDER_PWD; + +if (!SENDER_EMAIL || !SENDER_PWD) { + const missingVars: string[] = []; + if (!SENDER_EMAIL) missingVars.push('SENDER_EMAIL'); + if (!SENDER_PWD) missingVars.push('SENDER_PWD'); + console.error('Missing Environment Variable(s): ' + missingVars.join(', ')); +} + +export const transporter = nodemailer.createTransport({ + service: 'gmail', + pool: true, + maxConnections: 10, + maxMessages: Infinity, // don't recycle connections mid-batch + auth: { + user: SENDER_EMAIL, + pass: SENDER_PWD, + }, +}); + +export const DEFAULT_SENDER = SENDER_EMAIL; diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx new file mode 100644 index 000000000..eb8a792ec --- /dev/null +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx @@ -0,0 +1,205 @@ +'use client'; + +import { ChangeEvent, useState } from 'react'; +import sendBulkJudgeHubInvites from '@actions/emails/sendBulkJudgeHubInvites'; +import { BulkJudgeInviteResponse, JudgeInviteData } from '@typeDefs/emails'; + +/** Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. */ +function previewCSV(text: string): { ok: true; rows: JudgeInviteData[] } | { ok: false; error: string } { + const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); + if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; + + const firstCells = lines[0].toLowerCase(); + const hasHeader = + firstCells.includes('first') || firstCells.includes('email'); + const dataLines = hasHeader ? lines.slice(1) : lines; + if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + + const rows: JudgeInviteData[] = []; + for (let i = 0; i < dataLines.length; i++) { + const cols = dataLines[i].split(',').map((c) => c.trim()); + if (cols.length < 3) { + return { ok: false, error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.` }; + } + rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); + } + return { ok: true, rows }; +} + +type Status = 'idle' | 'previewing' | 'sending' | 'done'; + +export default function JudgeBulkInviteForm() { + const [status, setStatus] = useState('idle'); + const [csvText, setCsvText] = useState(''); + const [preview, setPreview] = useState([]); + const [parseError, setParseError] = useState(''); + const [result, setResult] = useState(null); + + const handleFileChange = (e: ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = (ev) => { + const text = ev.target?.result as string; + setCsvText(text); + + const parsed = previewCSV(text); + if (parsed.ok) { + setPreview(parsed.rows); + setParseError(''); + setStatus('previewing'); + } else { + setParseError(parsed.error); + setPreview([]); + setStatus('idle'); + } + }; + reader.readAsText(file); + }; + + const handleSend = async () => { + setStatus('sending'); + setResult(null); + + const response = await sendBulkJudgeHubInvites(csvText); + setResult(response); + setStatus('done'); + }; + + const handleReset = () => { + setStatus('idle'); + setCsvText(''); + setPreview([]); + setParseError(''); + setResult(null); + }; + + return ( +
+ {/* File input */} +
+ + +
+ + {/* Parse error */} + {parseError && ( +
+

CSV errors:

+
{parseError}
+
+ )} + + {/* Preview table */} + {status === 'previewing' && preview.length > 0 && ( +
+

+ {preview.length} judge + {preview.length !== 1 ? 's' : ''} found. Review before sending: +

+
+
+ + + + + + + + + + {preview.map((judge, i) => ( + + + + + + ))} + +
+ First Name + + Last Name + + Email +
{judge.firstName}{judge.lastName}{judge.email}
+
+
+ +
+ )} + + {/* Sending spinner */} + {status === 'sending' && ( +
+
+ Sending invites… +
+ )} + + {/* Results */} + {status === 'done' && result && ( +
+
+
+

{result.successCount}

+

Sent

+
+
+

{result.failureCount}

+

Failed

+
+
+ + {result.failureCount > 0 && ( +
+

+ Failed invites +

+
+ {result.results + .filter((r) => !r.success) + .map((r, i) => ( +
+ {r.email} + {r.error} +
+ ))} +
+
+ )} + + +
+ )} +
+ ); +} diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx new file mode 100644 index 000000000..00a9b434f --- /dev/null +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx @@ -0,0 +1,88 @@ +'use client'; + +import { FormEvent, useState } from 'react'; +import sendSingleJudgeHubInvite from '@actions/emails/sendSingleJudgeHubInvite'; + +export default function JudgeSingleInviteForm() { + const [loading, setLoading] = useState(false); + const [inviteUrl, setInviteUrl] = useState(''); + const [error, setError] = useState(''); + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + setLoading(true); + setInviteUrl(''); + setError(''); + + const formData = new FormData(e.currentTarget); + const firstName = formData.get('firstName') as string; + const lastName = formData.get('lastName') as string; + const email = formData.get('email') as string; + + const result = await sendSingleJudgeHubInvite({ firstName, lastName, email }); + + setLoading(false); + + if (result.ok) { + setInviteUrl(result.inviteUrl ?? ''); + (e.target as HTMLFormElement).reset(); + } else { + setError(result.error ?? 'An unexpected error occurred.'); + } + }; + + return ( +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ + + + {error && ( +

+ {error} +

+ )} + {inviteUrl && ( +
+

Invite sent!

+

{inviteUrl}

+
+ )} +
+ ); +} diff --git a/app/(pages)/admin/invite-judges/page.tsx b/app/(pages)/admin/invite-judges/page.tsx new file mode 100644 index 000000000..c878b3f49 --- /dev/null +++ b/app/(pages)/admin/invite-judges/page.tsx @@ -0,0 +1,31 @@ +'use client'; + +import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; +import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; + +export default function InviteJudgesPage() { + return ( +
+

Invite Judges

+ +
+

Invite a Judge

+

+ Send a HackDavis Hub invite to a single judge by entering their details below. +

+ +
+ +
+ +
+

Bulk Invite Judges

+

+ Upload a CSV with columns First Name, Last Name, Email to + send Hub invites to multiple judges at once. +

+ +
+
+ ); +} diff --git a/app/(pages)/admin/invite-link/invite.module.scss b/app/(pages)/admin/invite-link/invite.module.scss deleted file mode 100644 index 847ca7f68..000000000 --- a/app/(pages)/admin/invite-link/invite.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.container { - min-height: 100vh; - background-color: var(--background-tertiary); - padding: 24px; -} \ No newline at end of file diff --git a/app/(pages)/admin/invite-link/page.tsx b/app/(pages)/admin/invite-link/page.tsx deleted file mode 100644 index 1e03eb424..000000000 --- a/app/(pages)/admin/invite-link/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -'use client'; - -import InviteLinkForm from '../_components/InviteLinkForm/InviteLinkForm'; -import styles from './invite.module.scss'; - -export default function AdminInviteLinkPage() { - return ( -
- -
- ); -} diff --git a/app/(pages)/admin/page.tsx b/app/(pages)/admin/page.tsx index c7a1f1b5d..e9a42d773 100644 --- a/app/(pages)/admin/page.tsx +++ b/app/(pages)/admin/page.tsx @@ -22,7 +22,7 @@ const action_links = [ body: 'Create Panels', }, { - href: '/admin/invite-link', + href: '/admin/invite-judges', body: 'Invite Judges', }, { diff --git a/app/_types/emails.ts b/app/_types/emails.ts new file mode 100644 index 000000000..9d2c29912 --- /dev/null +++ b/app/_types/emails.ts @@ -0,0 +1,27 @@ +// Judge Hub invite types +export interface JudgeInviteData { + firstName: string; + lastName: string; + email: string; +} + +export interface JudgeInviteResult { + email: string; + success: boolean; + inviteUrl?: string; + error?: string; +} + +export interface BulkJudgeInviteResponse { + ok: boolean; + results: JudgeInviteResult[]; + successCount: number; + failureCount: number; + error: string | null; +} + +export interface SingleJudgeInviteResponse { + ok: boolean; + inviteUrl?: string; + error: string | null; +} diff --git a/public/email/2025_email_header.png b/public/email/2025_email_header.png new file mode 100644 index 0000000000000000000000000000000000000000..0c829d6934273bb03a0f1e6e1d501d832c34f32a GIT binary patch literal 199982 zcmY(q1x#Gg)&@HG;DbwXcc&e+xVyVM6n87`?oM%cr?|ruC{A&AFO-1-ecYG4d;hnR z$s{K^Cws5`oh9G;PPB@WG&%|~3IG5=mz9xF0|4O7005X_AmaNKC;1+?_dj?yF##}1Nh4#wO6ovKXQ){)-+DDe(b7|Aosa%Rbi$|nYdPG#QMfMP3F4*w>X4|+0 z9s}H!XYV%+4K=f|-l(~_sHv%2ntgq{tF8AxIdxZa?L+r|Km(sf3BugoI01!lA~4PX z_<)cfJ*R)6MW6ri^trt9pA{gD`SeRPH~!ZMRX~6^w=@!@!q;T-VWh`PxP6ked&M#$ zZ|50N;NXunroMj*UqjqbQ7b#^m%3QUyj8>+cmH~OyW<+a<$g}+eemTWYd6gJGRuj% zyR&^0&>CVg5Z3bF=Qk39L9k)V&e#>Q30uw~ct zKqRl6*L-%wn5bl(4V(A-L(G5a{`Y3oShR^x8^Y$Dy?x70E}pnoA9Hoi-FHCPmkN!I z-akc=MHe19`;f+yU-95115;54lfTf-u z_8xdOmme9*{v39U>cf%*i37FPzijB}M%O>U!AXux$o{?<63od@*le&d{jaG4SF|$b zOoNvwyG59StdEYv6SMl{%uSnmDFCoDEvjD{ z6aW7>BOhjl&p^)E!;&a7Gvk?c#)O)t(y^go|6-^|h-7q+6

W`=zPqwlZC1_lNe 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≪P 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⩽OZL1BaqINE5*@eUFLm zybWpjy%21%`UQ zQiv%;iTl|c5>bZ1D%FqN24m<}tZ2tDuV|NdPQ-6#8{E>SsH~}LfttILbm*!gk-T;6 z@GA*a@-d5O%%G1fBrIXeHF5StD@~_G+Z?)kkK>&Ka_^wqBrvv!Ziq4e;2DjaIHKs- zGIbHn^-f7R_IYyMQ+gTe1o~{tK8y;fz4)kk;wNpsjSw=KRBiX~vur=u-02ei{qjW% z+{&r^Z^5z0YXq~~t8uS94Dk1x2a)e{H)Gb!7*dN*&raf0fN`T36y(R0J0lDUU%n&FhFoKwuyDatsPI84_^ zrO6nt(AD*2Gw&qeY36pDuKz&Aq!KMLPEWrsZTIpgdTP)J;(Rg99}$_wBjKS!kv}0!VAxOA`e)#>V9<$}cvnR6Y0bsKr1c zf%lR`DVDRxX=;D|F`e~Uwt5EF_mx7XlF%&2Xz#pR<4~pFV|E7nF^BIClRB|Vd^tfq zRPk+46V)tgTB$S|0?^LV2~Jf7At{(P9>J1(`I`BIy#{bsRU&53MJaur`E?(UUrwPE z)zQ&uIY+%|)RE~&S1rq5IpIfBm{Q3&^Xwn|6~qT{0)ZJ^FP9MN$lO*9-rn64U}uHR zkN7*0!Qgb_2poX%Qk7HSzExhdPGPuqar)0IIYz)v8^5aU-vKIE8G~DVJ{k*=z!wkg zp`wj$a3S&60TyM_unLXb<#Xi>Y6O<(CppO=C*BS~GxU0RR$N8N| zs!gHB*MF^S8`5MLGy1zjr@pY!PXyUIiJFPzb2h!H$xo;59=Jt;3Y_Li^~$ot9-0H? z74K&E$5{IVl|Z(*CPv2k_V6#1-p)ZGS#cm?K#+u64x&1X6CWP+$+?Fm1P7Ha6qa5h zV{jj=7Vp0COV%!ZY`68dY^beuk)e?geX89{_VnsKvG(0R&rA;>6-767I$T_vtKf}# z5{vu!g|bPw!jm##mIU=dIh;^B_nUM|0+5sF7X;Qf@8Mp2Zw#Faw|Jc#O#_j8jYO~FsRKr zVESOar>6i*#3)tT9(BVF<+XU|A)}hq`8jggxA}Qd?D0839E&=*h{M;mN3r`?>8j;g z>z5)P`*YJnZ_6hnybx5&4V_xgoW*j$_pw6wYbVG9G(waDK zDVdGZ+aZR|hw+^mu8uQ5cG1ih_EdDfH;lL@3_mLVR8Hi5k(~QXhLpjxEepak1>O3j zWsKX^+ixNiPOB^F2}qbaBK2rgyA>B}B}mipDdC%bs=Xx-{pG60sY>)s!kE~qL6efh zYdb9aeut`KZBc=Qq?)m3ao=qH%`Z%;)O)sz4odE2Hka`pMW|#s-Tj4(`>(IftD)f| z8moF=@{@|Bj|O}#DlKn36~MVl;U2s=4kqZ5Fu@zqit|ZYi+)@+Ub0X-FP?hY!|V$*6EvH zSmS|TPVlr@+5?cWb|mP1Ly-)}Nly(ig=@&kf^ijQJ3i4k7x62}%+j*p^{7A+8)#`W z4*tC>7_lcT8GA@fIIFPeP>U~1b*xaD(azHE%hF$=8;qAm?4yaQGp5Q2$-@5hQ&`c| zDw)XiL$>Pk`b(cRyQA|x z#-#B@^sI2O=|Vab*W<~jMbx<0O%+jpH;VLNYJT_wwZJPiv(d zvHJS6T7dt0w)SsaO_4&yZy%oS8tav|y4^1)Zep`8W=NoAl&J6q(I3d)%4@qHJ6M+P z4jH|#+FlaN_W3tI3RVuq==a))6mVaFyKAtNSA2m>Ju*<^U`rrVlW)=p0s$iPIZXm} z-0m-)cL&b!p$9%6P1*hnIzp2lZ^8<{7-zX9m8OILy;QiaP*UrH~U#*V9wk?^F!TShjaD@(^v=@>xySu znPOLlj9SOep_PW1uF>_UpTj%84;W9!9#``eaRXSE-k)i7`8pUTGD~(R&z}Nrr%t_v zB>dA%m_RhwqV>h(;q2oZ%J&r_cDVi6f%D(eh}|rQf$u)_KAhuw_7i0YZ5I!YVK9#O zbDZCwCu{NDjRkyxrpPxTV_B~nVo`exPEAQlQrw5W`aI=M_8OiIlZp`BQmTP4a{ZWr zkx7JZdFga%f2cCM_``yq$@QO7T@f#GI9HR6aPKa$6qJO>kcUiO`wQFLoyN)lmKLm9)qIv!sL3(kLZA(Ta2=8jSQD| zQ3{cr&eqT8Y#u#Kc~Ht0?!Voqt*x~K$+??8J#8BcFw15zgmS&@F~F&9?hrgVeOe!Q zRmrJ@0!G3Xzhhze<0Bju=@BwNvgg@GkddR`u0Q$E_T1~U>F`GZUb}e_Cx|Rjv>$@d z!BIqv)bQkAa-x1C0=T|7#(r3B>rXmLFATYkq6d%o4aG{h4gBwCf7RcC=}v=i#N=pv+@BJt;<9H{TUSdrfL$nM3--?xCvBDYjY{p9(sSbRCr5C-LtIsz z;&5|}nLos=KXZT}sW=4R9}>=*bs9L|AAIU^k8sx|pV8}-P|l{ow@@zP4TueQ7Ac9F z0EY4Hig@#5cd>oXGchk-;o31OjY~;>D_Y`vrALn_eSc?3hib94=DH*oVk6p44kEZg*MLH{Dz26eDib~d-w5;gP0PI`039cL_Lpqq4>Rjd5XFRQ}THqM$LZe zSYwoj^Ed?!EZKhbJYZ_Qp)!V146&+wXuH%mAYw$eLAiZ2e+d{ldGb$4Kr4-nJF-ej zm{p2RW!kneBPMI{{S{G0+UO`IMk0qRfm6Fcpn@vFY3Jm-n6GQ!;$a>dHYdLIIOogK z+M+mmj_Wxx$At?#@Bd-0Z!O+Kf+k_Hus;QQ?`pU{6$&;>a&!gm(Gh}@KDcUA%?zZZ z8X2#K<*k^U{h^KZ+h$cKF6B(7@kS_?!OmMDdr>U6UT_OM+8pq$9L0Kb`op&R(6GM zC^bn6C$bxFxY|CLp3Sz+n6s%1KW_}$FKmog%G1q8Is2OjUdlHKWZADw_WD%o3w znNTXrK)PY$HX96d)YpcFg9e)Mvgy5XU&~BxlE1FR1!#l$u630UD-+u-PK#FPm~749 zK5(uu_zwn~v=Ux#5e>X;ZtbL1Gd%(4`|UMW*BcdPZ!nTmB@s56O9368rTAxD8Qd}3 zn~;wRi%I}!NOm^<9)<0$tonoC&3ODUDJrgQbDx~}Gyd_Hr#Hp0kf>5d$X3NbBnM6& zMlzShoH#?dID6!@1?Hd+{|mGThg-QvAu{#g|9I@nQw7y5TkR;vjDT3bC! z6W2E{*Q=*%{ctt0aP(Ru+=LWxyg!I%WYqskWV-QSRwdolF&q^461Z5)ZmPzK zGFpSf`Ka9BoyR+895d})^Z&R2opZ*0E|w@_In=S93phCmXe>jkV`Us|Pmf2(Ct7G@ z)9&*as|l*y*j~fF9rU?}uUJ5$>{HIw)RFErP5qLkInty@)u^=on$=-muONWdCr&*T zT}lE^=G0}in$XojZH6t4v@_|*;|9tLztc@Mmyl5R-TvG2HXK80F;z(M-W>5>lO|-& zC=XQbjKr zqw_Kx+wXRORpjT;;2OwIC zqszW;+04ogv$Drb<$eb1EK0;HXj-J0Zrq4gy=)l+6EK_lf=Lma?6{KtJQ&G!A4=pv zy?UGnB5V<+WYwUunkZVKTc zCN!&V*QpeAPfl+5lIC^AOZp_%kLC046OQDB)0f36uWv?n480;O3jgAhBZn7GU;^hK z{d^vx-qGQHzIhzf-?S?Jrw{ zy&!XySW!;GgIZycg;H_Wu0LEqg+7<|B3f=(uCQiSU@wfwL~`ktY`T^bd<@f}qBVVI7Cz!1bxb`(ce zZ9`0fFK#ACe_v@z>HU~j|2>^})C{2nA8Eb zE;h7PGbuwBpB>FOXxrzxqCvx@eopw*^cJY6i13VcdLZg;w_fv&>aSG^!Swab;@d%8 z4}Nb@I1TR>=NAHR?Z zlBX9uX;_zsE5Erv<6OxZwRun`FF8@g4(RKIc8s8Y`@du+nqu;mWV{=zW2#Y6vawCW z=7C_Kq;L1Je6sEz#39^`6CMKlOY zw|jEl*Yz*b1R>cOxf{0{gwBWAox9Juad91?y-NT zcsUPfJ}VR4dgu^DG%JB`>lFT0DvctONtZO+Q0#XCUj;@qm{t8XX<8_v3MGR^obV%B zP}Z=IasV;UT$;wjeV(?o?906mM!5i8w*_0*gAZHRjSoi8+T(s9ISD)VaAm|g8X~+d zX0vftJ5^zlNZ0EHC7Mb&h)1a*7ARK>maM1RAEsNR8{DJMzD}*vbgBBDD?=ImOnY{h zZ}$emzbWT))Iqx3z90Ex={jx_mu0`$V6aqG&=m#DW{&&bn**8oNeydO{j{6_m!87# z$PvS(wKZie*6WIMPQcW}+Zt-Eq}E!%Ai)j>Y(bUp5eg^2Pmc2;E9W6RVGq3Dpe04W z`L424Z;}3gUcCEWgqV2C2H(6wsd2AHL^HorqcjbTO9BU-%Rf2s*G22iZ(hd~8Wqkk ztisX$80VJ41eg)1-vE_B26qzS&V!N{5%bmd$#TxWMbrI_(oyZi~6zmGhc{gLjCk+ z^xS!HK=VjUl!V66Y+Ot_h-!VhoWJ#INVVm5Y*kjSmhX$u-8-C#pErC$d$btneEQ!T zWW&Vv!Z#+Hnev_}C4WfJjXZXYEVVtx>57Qr${l~z($tZ&pnwTn$Fv;5Fc(*>=kE3f z{DwPNPSlu)1jI%AEgDb1+RWijjjDCrdNGwo#!8MpG8O9IN$K49%DO$HJAh?^*G7 z=8RB~CM~Y>6ou}d?JttLeYSaI>P~iy$8(f-<=-R(Uj=abSDkRr+1AeN<5*HW^qf9Q zcgrluFD)#ncjbltlEc(Po4??o*65tbdh8szAnaJ?XDs(ba@e7>ZhgY zYVM@Kl>DS!OiK{!Bg*&Jw4+YV+9ej-?~*YYouSc+Q}5$~Eq}3u$GvdvH-z|x!_}h+Q)F?(p7`|J=E=ji$fb?M9H}4jgO<#s}Y5^1vov!>K&(TTMR4Tp7x~L@1?kSw&ab1} z<&hUwf6=fA2smri#_v9609~^)4A}5%lDXa<(EuKT63Y#*NDhqfZk~M8HXqM+0a{F% zDuLndvF1;$H{in3&a-prK51OFVvLmYd*d*J_KetM+RD~Ni&H=hDTn%3vI80{)i=2| zujomcVSA*lbKIzO3|1ON{01Z`#?PKk07lZonb>nx$SKD{2g2HC0Fe>9E3{L~d~V#5 z5N!!(9@$Cr-RxSoUVTanYCc?y5NwUV&!N{81C-u<86!?7vh+#>`FOjb9b@A!JFDl` zFOOa3hx2#0f#tM75R&aW54%00Z=XGUKOb*~P|p$iQBX`COjGuCri%US_~wQ1X%<-S zDH20~V{^xg>b#{cbXMtti!2Jl$!O})^1IMKZ9I8u_7W=UvAM~tuke00-(#A$pW!*} z^I9F~yoj%U-k~yNvNj0+s-s!OAox1`MeOWw$wtR5LVaWXkFi_vlhF;z3uwkV1=-pqxg86Yj{p=ivG5-oifI*YppPzs#9S3O! zel%ZxDd;;p{U2{oT0V&hZ3+ax8o-q=+d%&_5pT$!!=i8}BQAjx-q6p5`A0?7;jUk5 z<$3%?SpSL9Z*ZUeMTpucKr-kP`2cII-4l7`oU%)Z!TN7rvFEeA5Bj;A-3!LaXnd2J zgk~Kf!(eES5`Uv;tmeY}^>R)AQI?p_D~Te@hS!=@&*8I+h+UUte(!A@g*=>sXGwtq zcU!J`wR2VhayE})zy3@pcDvryb5P-UHg$>r&J4IkSlGgq=ai|stHA5iQHWqE|Km+o zU?Hds06@P30H}nOeZTc7o>#9tq{aIQOUrKQw~Ht_+|0Y8zm=O&fQwT$S$Ys7Z@?Mv zhg~K^{e`0U={{kqmgbN!k#UMhtPKp3Hni(_dGGTt2HA&wZN2alL%&tK!#akqJqN>p z5fd}Rsd52F`1EG8A8(ej=Uhao#ngwb;mr!M+vK|g@y)%oXG=W7i$vG(*9NzPdS(2# z?xrEWATvaz{?0n^y$os~he_kAc`H1B%bC__w=!f>i6L*#YkpM7 zK!AxTJv>0pS9^modwHc}baGF&VRGZN$Ox`$egtxz( z5vPatav*j1hQZxFFLj9bWT+3^-m`Z|h@Iddty8-UabR?FYz3)S+h5(=6!}j&=4Mx> zXM;9xBk+?)wk1fXMhoSZI=rwO%v@~)rl$uum0jLLpb=Wp8SZ^ZVulSl`fEFb>FW|} z_F&VRY&_f2KRGwg!L{67(J3r8p9n_hb1w(4d*buh-vM3bUK~8`3=DGzLjcr`TEPc*>a9XEym;!LF} zs0N?WsbevBkk9^}thY}eM(c_$3RJ2zz&P&uT4V$TG!J46t|uZ~Rxnh=NkOGtnJKmrUe6l@5h zDK>GmicCo{4Wys8cGC@3OCyM8|;@M7Jb2uCo9*g&g>^dSd9C^rPSm5Ev6^ zO;q-M7J0m77kIFKp~&n>GqazUkK2emIKS?uQG9w1h0TzVcp26!0n_=*h6IyWK0qyf zmk4@VV$IN`{P~UWt22^l| zh^#?alyc=UT#jG7yTQr9OPNfnZ-DLei+6R{+zD`~G3TQWcZQ70oQ)F}s>vaXQtM4cQ&!jN-psZ2rhO$s>D z)k_6UFe{G6QRZ_|QTB(AI;g)NySeuKp}*JnW{}Ls^B7Nkc6N6?PET=x2x!;neiAf( zdtB|81grh^xWRSuxPiZzgGKvS#N)HW+g|FTFiK*c=e%(W>s$o_A_k~v2W1Eyfe|8JJ6Kz#kcA8 zoIV*LiEvZUr+~<4U@t}cd)D@%U2<^@%LmGLbHxiM)98qg9DEx5!Jr~4OuJo~W4A(h zvD=^w2!K<+BoY0El_*zfFKcm1zA`LwIKRd(Gz@*)9c~2~NE@dzb!hB6*U54n=mQ8; zfR7x>_q>N>8P)d6^N!DGhh*E}9nXH(46+p5iX_Bn^*f%mgdb(sZz8%LZsPfE)DAHl z|3y@^w$c3eMd(W!_36IrqQ&x3jcHFj({zb08>c1<7pG2l?e)YC@D>q6N#6kD55Bgk zeIbJP9V?-`(>(Oy9mU-o(sH=vEF%?Ftm$pkBSlI9NrB){;C6)dtB`HKDXf_tk zgS25f!RPtodC{r@*rOKob(?^s^}ZPY>hoOt zmHrF+*OPZi`3Us%&6)33KIziUkUGgXj111l4!mWTAecN8SKNNO9H#^02z*DMKTa2peF|Kx~|Us=zEJNG_?#kIJc zAV`MIKn1N*@QB&;iU4V(ekZtxi2`Kb*~|H-C91$Kw?zb zb7u-C*ejx!kN1}!AYr}&0@ixI^ey5Q z^1SB*IFKTKFkFDV>UcAY`E!{M)(@UZu}V3MfIzp=N-Rr&mDWD=^DbXBwNgK2=S7K{ z6ojMP9Its%%EjdkY9e5RAoR<6c_UhO8}o^<6$$I_%|g0eE^&74SIAx&40{brD|{k< z*R0iL(n=RXlkw)R?zW<=<#D+L^?qLdobVB;r1Fu_Lx8@A|i;{A%pD<+6FHY7zZ;o57Xw6=DUwfb04gblzGjXK4e<+!&9 zfv==cS*Oj4batkS6#?cJ<24x=Nl}sIHaD)0un&ei!hlJFaxTTXMpNJR7hIYNi{lq1$%nAGNn{lzTMjmLE8>^@eN)C$A9U(EOwHQPs$sH`I!d$pSYN9z3aS#(xYD;~zh|A0DOm!6(2bgD3P040T- zpH7k=sYE3>QVwVgk?3&q^N%lHa{lYIc14&JXUL0QRo-?#xJaX?#kL`9Ix0fZm?n z%p`y&j@s(@L^Sn5DNjTe)DIB~HC)?rlz%<^21Oi|i3nY{#XZ71|5O{7fw%M6)oXP0 z9d*pD6HChQ+TH8Cc)H?>6idT&F+&h__mz8orN|$42H!s)h*UhXug^toJD%)r&re=} zt8wBYtS^cIZmF9!_&9+3IRo{=vre!{2{j-=`oyyGZDYyq!zE%~)9&<@h-W|?aj3(k znWM5uMfV8De&Es~I>(L=B}5B=ThZzo@jDlZ8Eb7wO10X?NJzqR#?+V&N{eH~8 zIQB2cInu$n+NopvPP-6bPr#!EnSStC9w8D!s;Lt&AVn$GGCuXlDhV~C6#F%_&6LKH z0djgJ4>=Rb3+barYf|{br6&6*O615_K8EFlt{6ST96Tg#-EsnwWgV8d7Y%Dzr0^6? z)9X?#g%`q)Ha*3B=6bF~05yv#+<^hbt*#v>D#xB3fkfvV7KFC^m$JldTmZn^B|jdi|@x^Qav9AhGB;&6ZH0o@*M>Q5FdHsll2F&+>_T1(jSFt6lp3si;CvBsd?rP zQ&{+(<9N-@ljH7`dvv1xN+K6TL|QFAexVr|Zx)x?5M#)sNDrDtc0$>eKC(#lcN zioBjr?W+{VZgJTaODPB`BS=b82lcO)k*1Z1fuxEndVa|r9EljXW`^1jnIgfM54|zF zR@d+2UQ~zi%^`sF54qZVl<0&8@p=y5#`(ts(6zGy@+W{KR&_Fc<>T2IMizQ&m`Ef* z_j54+>~B=KJFY(-;s{3##%svN)SMv=C}gN>2D<5h%Or{VNNrHLOqo3Fn=7redH>w` zQpNRuCN-YJP#p#oEFp93TRNK$5pIDefN%ytarL4En%qdgKP(R1U+XrD>u3I)}6iLrTTsnx{kLVYKWnv&^TMm*dHI)zll4O z^^OiVwT_?M69Q=AJlO)+?Dvl>mtWHQia!#i&AIcmz3-STfFI<$1SjH2DI{|-Z7B`Q zkkQ6`kcY)ijmeRow~{xdq^F`yC@`1L;;JP_Le7T0f9e~8a6%DsQGgkezuWY|$pEQu za|@^~0PRy?f(cqiHw>+5(v*8!Gj_#93N}grU?0*kTsrReIao-?@9_q%ez$PRp*OhR|;z`Jp{IgUJ^3W@d7lhviI zqLnR&8dM}Fqb4oSsu89@y7$Xn3iUo$u5g;92qt>+be*{QbJavr>3>ZnW0Gst_=wX2 zgw?3NRK04&(&>`b0~?$#d@87yvG^Z);)4y7m850!EP43}jk9%gBO)L`OjaZasbFPS zE1Sjoi?q#AC-@PFaypf4z99ct#(+LatPw7hGD+b|$OF5)#{Cp_bM4^)vF2+SK>La9%YeX%PWOZ zuoLXLwlOs}#vs-xC;3*#9eAXh<;vUXOF%09X%)U(oc}*AKymGnh@$`=#(>%E<{hoNtB7XY~ZVr{M<> zYr}ZyzF)GqX6_vxZ5qW_bEsgBBgDIN0d)S=ogMf~refEXcpn7%iB-N|@mH)G+kS`1 zSr58YJ4Y`jqEIIlI-7()F>=slfuZWC;iT!U6W0A`e2G{NbK2e1AZq?>5NcJ^N&OVi zr`WHVII3GZsh>TWzV^8{3?~c4k+JwTeK2`=74FW7PLMx)DQai$Cmv_a(EC5ez*q29 zx4f1Eg7%GSQCNAhDwJq7AD$xL4DTZaUuG*8kvVa^&4Rmg}-tfM{~($@CH5{>{d! zCV>o7aScV7E}JS_o*b0+dSP&$*OEX9C)oS(j<-s;OA6Q?{8qiNIkIuPvDwOKMV7j$+eeqH zR~D0t^6#HsOMJFzOn9Xbk7QBZ^(_QR!Jk^bT(9A0TU{M9OIQ}a-AcRECV6j+#owxo==15bWpg5;i9$yrUoDVai6j!2eAmC1Mm4!J{df|gwLPB=57 zr^lgqiw_S-5=zBe*&H1+t@z06`2(d`pyKpsxx=Hwi368YpBL@gi8|IFjY8;(Bhz<3 zy^q62!Z?xPO?%ELkN=we44kafpbPnGXWvs4ms%WhQvQAv8P6JWS6F5%9sBNy%cxAN zz{A2a0<1`LK|}-ZVaq*UUx?Rs)`s+csC1uU{wN~1zE~za@~X)+f$r@PJ%RC*2wFtl z)Q3X>GOMI{g*RP$^oNrIPMFi@Uw~0vfNc6=PEo@G?16Hl0 zV>&S>V`Gz;Qk?*L9V?5mYT#uhK{`R!*-yPD84h7$VrtpgGLk*^9_mZ8EgiEEphgXR zOfk{>6dXTa6?M>>%<>WVx_V{72S4YVlA4IbcAU)oRELg{bId+KLf$jU-~`V%g}@R8 z1WRUmK*7O|#gQ6l6a%+O3Z4$WL&y+faXzFhHaST5z5^{^<|2 z08=dyC-^NOPU81K<=dC@dG2l!yGyD=6O3WL#AzwS%@`9F{7OziV__)xE$35veFcN@ zlvhaZZgFhTuF{qV{P$Oo9VN|j=7q)B7(mu5T#r}r%F}CB1|3KRPCDczVKKB}=b)q-nX{lGP)l4OBSP?MHQ2 z>j<&_vboI>DOHDG6tq~Hpf9aDSQ#~0!!jeqly>uy?PA~9G%l5+IIfr;YDrw|V3)P} zvibrLtg>DL`u`1B8l1nSv6uK=?pQZMFY32nQNc7TM5tSLsw+N1_I3j#%FUaQvQ)gS zU>7#B&APSPGoB;v5dA6?Hg)YoiH+=S179lpd#k$Qg`GneJz!igw?wkfB*daH?A6|Z zg$6G9_U+qRB-dv=z!QOa(Lc{(9kyW{7_ptC!1PiF-d~*@t47%}-F}zlvb{t%X(5RC zdN2MS1Ub=?F}tDT(C+1wP`J&;>Mxr3^SYaMx^;=s=sGDO#+oM^6v~4WYDx0ffoAd} zJ-ggLY}v;Rtvp;Lu@NU15#b|H;fw@)`SEJ;eF0`|)(6N!^kXGBx|U{t+XBziTj83l&Sj4-Wa>6&Ed7OTPV7QF1_dX|qW9pM=-+>Y5EoLromlUs^88-hUIu|#g>)+4bG4=% z$X7T`gdPXg?xhb#S&ar;+8@hElu_I1J3f8plux=kW}EvAJAyZ3CJc33BVNW&oS(DE zP~fy2;$4GN!)V)3mlAqMp$Q&j#8p6M57O2KXDZ%nxH)Ubo3mTlvC?hoB8NgcZ>PVA zJ@n*#Po-e4>f3lEr}Dl8|Fv>i{JU3&N;uvVk0twxe8AB3iWEIc5!lfUI8VISg8-BR z3(@zke7wc$g){GYO;}g|3r(l=Dz}TCS$;>VGTwlt{YmZ3qiW{rW*bDobTgF8CD&{4LR zmZq@Bso_kJ#90FExM*&ER6%>sNm zzoR+oMAbj&A{%B&B;#b8>)8=-@N*hrOAYJ$ zdivnV+>VEb(e^JP<+>LxO$!SP#UEMJ&%b_k`9M@uFAPgHeOZC@TN(% zUuTBX$Pl_>#|SzFclQ&vqw5u(-R~M~^{!70W36{Q+?HlkS$z%^w#y!Qu-4K0LKG(Y zh2@2k6^khgzPSBCC*GmvarWoScX@tiyfKk-3+feLK5uv2tPV6CHFv*pO8%s!Ble=G zs5m-44y2qOkM21gt|+T9``14o{rnzS#Jo?4#BaBxpt)X$XJ<5>LGhL-^zbHi;QGb3 zj`$=B?^t9V^iU$23b$+{FIvbx9AtnlRwsTwKLy!B?IwlT-Ji%=ewq|06!6y0PM`=i`QK z3kS=P#shwPU49pft)?sErfnV!K_dstj3M{Y>sfW`lI4}c6^r)klY74S>bUAok6*j` z-ZGUNYG_i>6lTK4h1 z-)GeQ{AIMxm`yWEz`jpFTQgk6D3NYe%lu91W-rKLtJS=AiHj215F=@Y@8!1ZDb4#t z{GPq#xyLU@Wx*ntX^Ar}MHeH(B_*3NESMPlVZkoPEB8Tv%8!^16T|4c*3nhm8o; z@?^gI3eR=u)NQzR^yf5y6DdYHeHG0yFa_6D74F?U^g5h>-7CiFRZDj@;`+u~&ZL+L z#`dSc3UiO`ZrTpOm$kM6Ixs#!hxMSK{8@BG19vKA~k=M($c&wlpaqH3^0 z6sxF~HC>x9km=g4PFVr!6+&UKK~?7Z&y~COm+2SCsUd_kC_t#hA-C4b7_Y_@z^X%= z-ghaVXLEOEi;8oVlJvBiw~S}q?A2qmwe@pnKOdXi<0uOV*s^sQ3H@1m*e|`RJoFAe z^zwXCJoK3JiLW}sywr5A({3jWTDy=Pl{nktaJ()gI0$D<*^m2{67Q&ZT9k8lqkCSMzL1!L#!H@hxmB|9Piq7*@DWX>2b7+2_ z+EM@Ufo(v_A~G&avZZG{(&?t@;G52-nMG9Y`iIZwBC0SHB-!9sM^`v!!c3}k^SIb_cQ zt;LlhwKmI!HCT236B@7J^nLaWaW^riXT1twQVg+o|J<%8ELwtKZ#84twrUderCX9w z!o~Qkg{+uu0S2G`{<24@u844`fT@2rxSU>40bEdCu44YebN~^kc$~o0Ae8G2r^APd zz^-XpH_9ow@A0O!cdL!~Ee1XQB&wsoAFy`l9hjEc0wR4cxe3? znTft0`eeujj=BQixW6egYVBiZ(j8ZJPN1nU6S>*7K2ESc7x?s&S8cVGj`!4?u56*d z>Zu}GgzHh^-}H;sk?XC@znev#cOzx$;+Q<8F2CXrV-L4#Tr%Y7j^et4BcH>w+{B)f zpe@VSy@V9+?S5SErW)t1 z>-wU3re14?D6h=&L$wMvYfcXP{L!zU=dPfB^z<4GQ((GL8BZd z;3yVvnA5GA^9YdSVy_kAF*5^bn?+y*t3VG9w+ofc?ps{sm`i;z?pwhf^tpI==eHA( zi6aFzQPtZR3~+2MEKp|=DtSxxm?;^nD~f^Cy-B>-Z1vY}11rPISBwH+1UQP zdF;qwJoqU0fMe)T{BIc7QF38?k_~_T=^|B5oTgdkNc6ECm{&qVIahVL?fzD5VZOZr zVz|^aVlKAK>HWZ5V`Zq9tg*3DWhv^=C9U1lv@O_&%;Y;08OA@gOo&)dV1fqrBC$j- zuZI2}8=mQ+Y zGQ_7DJuP)^vEI(BSWZ33N}ou2>R^iU=?0r$U@tl#*m8pw6lT%yvAG`upF|=$dXENC zF|QNQQYQFkc3~V$v`h{M3k6ZC)T=lEWiR_2+s5es=^nRBUac!C(f@>m6Ele`{ui2j19A7?X(2n42cwx3|&VX?QQ}*jBEVW8oa5*n3sU@$u+|) z`IfDam>rsE(<2%g;1=h39y#NF10mN(lm4A>qZpH@70*geK|#UMdCld7`{9RrVfEYS z7sguk&Qt-kxER3x95&UR5TUdu;K42Vh^1;keX%}$31G8t9{~2(bsl;6TCY|brROQP zpUU7Al6#N@M7SoY7IbF6i!P5daj*a^dM{g6IUnxS#4d-z62`9|#gLd5@Ub!|RDLAr zkByr98vWDsk2d?PA&uDULuWqHGb5;D3xSgLgROH*%mN_sJQ`M$>E;Tf3}ZP42_ zqnKf6eS|gNqWM(UTo4*ta>6U-ft6T|*!PTkH|VH|XS@x8*mUpfufFqVbD0of;rUOT zqiQ3A9@U2TFY%t%cRd&OwigT+R+{M@SgP(;3Ck=lIiYE}T;zL!J$9~JVP+EcYImw_$`6K@k9Cz(2-%!<`xa*=k=;l-nobzf?i+(>lLw`OE(el3RBnZ5QB+Q-Ym%?!qw~Ia#zO% znH1(sX;;D&kmLt^80573w zWcY$2Tau<$edQ)n7uXYx>P%a?kkn1H!mf)c3KcF%IbSPgjYP`)f!#mregM%zbS1uE zoyvsgR`C!*D1HYrZITte(Uq;7%o$(wF!T9Zy>SfG3IkcQDX;oEOJ=PYDIbey3-qVX zmz?M&FPg`3C+E)v_BqG1`bSmU^bjv1i4k9SFtQRdmq@vM5`YX!W zQnj?TvF{_scRP!cX7!TNRxe8ZE9k$hcQeh=pY&ip5cLGe?ef>bPiDVhR5aYkQlzIS zy-oST3hLrcUFD_`e16w;Lb97p+%ji#>c|I-t)6*hs*vTvn|X6(1CQ*>*F5HF@va4< zsfl~IGuhY_rsa$H4XfwwS}qUDMX6V{DUe`^aYC!#-*C5{pu@qLe;aWniGr?F91q6D z+5cN;*g|7eD;k=HhNm{vZ2^R~`uqIF`0zVMVNyqD6p2(>U6n#1zcSD=P%T#FNHi27 zJF7r#c6wfozO%Hk%5nn6bb(8!>l47FfssO7X_j#yjw5ln%X+&ds({97=t~& z7m8w~(qu{mfzO`Og=B|3acP0?ce8I$Qm7;ZW^B*o#&sQBP~00(UI$@4uM`H=tlF-2 zTLBxEBM|%aXJ1$TeNz*Hu~4U29DlPJwnh()o)Vm$o69zEF3^A#>9=s>(|FHCyKF*H zoowu!kB)`}moSbTEy9<)kMSk0&pfb?&7y-5IN3>NUEh0UyHz&KlOpwA7o?8u{f#EI z6uPisW}mmG8Yp~E&h7jM&aiQw)Q1=NXoH>`?d6c&EI!7Cv$NK*7?{~@X5Y4Dj=uL| zf7WP0%C%lgT4N5(i1TVGKOJIu=`ObIT)$urQ0TOQMizW4lC|=4mpHKjauyGE7U743 zBfN$zR4Ex~Q%@ctYb)P==kF6fke9-4XZm;&)ZrGb`oF6PjgEfxI0-m?(A0=GZiaNt zt@8ZCVzDSHqkHTkV*I)+ZEx->P^Yh6zZ3V!5<483(orj%E|}a^3vMlM%b)!^$r`Vv z-!Ke71TK)XOAVrG10cRMt&iNvjPXh~E26BZ}3I94F!>8=>mZM^py2`7EQAg)kXc2_kZ?_*?*>c5n=S$Axy1n z3xncNp)^PPO;3apTFc1?SPRt)C#3>}gFFol^mJa1rg$tZ%BXD|_yOv*TBu zt1zee3iOWnQk2TM+xSkXyLEzGrOtpO1Ht&pSguNGPCS@S5=?3l3DH-UM3o6r=NJF* zg$$hHRQ_4(1T}xIy*6yVL$x#`(?y3EN>n4VLOjw5{#tvb_uM0Y;-`(fDWSp1xC#88 zE;;{?+vG9A12A3y96;P=4pEcUy9Mu$Q1mpFv)rYXc!-Ofq#*2pGZWTRQpeAs(S{vg z_)VII?a#SZ80~AUvZ-CB$w@o4!-pu0sp9>F~v|X{LV)J5c18w-P!|~k%V=Csk z{@QQI(vGi7**e84HhjcVWi2g&3uYt!k47KUk{g`NlYhY>td{k^4wTtB$HG1y-t<{p zTBu+H`Vf{y5-H-%!0s$i|7q{{F$4c}ZCSt{nQ1netx;T7R(GXTTY&sv|8BCsAJ_Nr zbZhjLW8ZQ(XG`v6QKgW?Wp{uFP%kr?!i5Pmz~7vtvWy3LvtSP%Q_K$LFy1uv8VG^J z$FsBgaOxO+nIbkJL8t0BS)^FL%31u`Oe@>Ay|j4wN+FG_D&-}MVwLPUk=y}x3S>Q) zD$+^S=p%-Sn~j~_F(#((f~~*XmbC;z+i9_{I)DP+<28jmz1YANjzaM5zGZ|3PfqoVbV}#IF(}gwIZYHGiCHspF?hCq0FcFo2|Eqvyt2fxv~H z^MWIf?_;DHwfcctY1DE;E((X+i#}>CP9Z=2sg$hq0WsSQh43fQ*sWQO z>9o^%NUHY9bX&JO97blw(L0>g$1WNk<#G97f^*AqbKrAq?i?i8D|1obrILQTsQ+JO=dLJk0c|xncEzwjgZI@S9_8cICk7pS1 z-ew7PoBOMiOgmj)`RjV#+(&;=P1}8pd`QoYn@Ql`&-q0Y0m737eO2WEUJ4puWNZr5 zM8)~aA*)FX3sgXNtgFlQH*UQ;%kje#n&UqY`m!C8zh8REu8C+Z;?hlg>lv0px`;pj z?4j|0S^%i(w?RNzFw(&u&lKP9YJk(@RL=I4^=adTPVC?sU6aM&K~Fu}_~H4?@A3K<1PkJ=eoV4BJbemM!#vBtG9EL&F4nDm7A*_; z4XASKZ~t&-dfthTzHsb%)7+#xQzO69sm;2p*C@gA-FA(;?euZ#>|YvoO%_+RHH?V< z8dixgt&+Iw?RE_Q9&y)n?s1K-ikZYE>|m;{Af_lNDuC%Wl=s`(ceRVgsc1Tf5im2i z#0YOHksnhOaJG}A^ZpOW`i<)Fg3l@&NoBHUrR03YP31@L03|;Z%(%J8ZsL4%-xk8C zT&wL}(Phvu(0Tbq%1D=FPD7oQ0OsCXL=GqF_B>t})Pfyv6N)oLowK@Z^g6&T=P(|T zN*H;3$}HZ?pQicq1RZ1xPPJf_zuO9?8MmBBGSmWq5+gRlSp%>w(9dO8VLx%rpbaCC zI977;yQ>BAlQ-*|rH{lEph*>j*UMq{eYHloi zWJM?a`-eE`clRc0(Ye&KhV*UmVgMZ=eRW+HmG$LyPWweCbc2AuJj|`4JhT`yDi`<< zv^u4|e6bO?cI#1~2f)4;m@X~!VN?eau7kgKNX~z!4$T4+yYFXe6j3H6p!68X@fkUD z50$IZPQqE%G+85#y`&6|B&f%c0XUgP{5Fs8UrZMWUqt+I{>7X>6K+Tte6h{8L_ZAX ztjr1@hWVbHNZOq>mHJLsC*snEy_AK!0;Ze)gQ-ttuq8p50m-n#I)YsL?Ob~Twt*}O z5YKZ(a{-GuvBRsQ-@HbHZD%bv8|arbHeA%oW$d9Ab8LL9Ga5T671ggfy;uV#^ztd+ zid`F<+tPI{W*~2EpXD1;cYpN1 zE1cf2N|k(JK?$cW$KSUTJLeAC8aATWe+Fx;7Crtx(s6LGlvn^->yH#<{7yf2G*;P1 z0!)Bwh9J4#m{?Mg7;}2Tc4HIJI1bIi_U3^LfdR8Y5dM>7q6DN%j~#I5nA*8Lqg#t7 zgXj5niQWPh;{7Eu^?GJV__y95H>iD^4HE9_?2*Z|n9F-q@A8*h;-T`eY1T^KL<;g5 zpyE)j?h3BRjR7cnQ=&zy(_|7Z7k0Nw?}O_gP%F{M)WMGJDxm{T`2a2(?PciO)RAnJrFq%B-mvc2fB zQ{tcD&nY-tTJ-2FmAFNP9*!4HUtcRXj{s}pm=&9Pd|NlHXE*ikL@<;0Su}GZm_ql% zKerMRc_>@Fb2HINS^Nx|>#VFwy7an&DrQ*h=3s8wAl)5}c z&HBnr*ynnMCIcV^Ie#3^hqH|rk@h^t_#)Uz9W|i_04QyzI6Z?^2x}IKN-#ZWSrnq6|U^ z)Yc%Deh%wZKIr&OWd`?(FbS6gD>>?9kje1Qn)C?kM`2ys5B@D(Y_?YclNhbUq%X%b z9VgL732g^x0_+ea0(Xw(bPx>(u9Dd#-dqduGuj)}Ql z^+h>r5vOsRTzh+`1BTvMvXy*>J=LZ=A}S=g1V5?3!Dta=by0zvT8<(MymJeu=p9B} zE0lkabg??&-Osm$_49(Ab-mH<6 z=NkmhldF|ZC#Poi5DFyYc~O^20D!6G*h&%GSDj?Q*>)bYn6yej+YAp(VGy;^o_419 z(Cjze$M;AU#-P%9VQWj&R54T5LA4e-PD$u_v7M3B6fxt0IOqKY@Cn&hfff0s)aJObFz#$ zKqo)2E0@*I?u2J;;8kDEHw}vn4T~tIFxRs`)ae%w1zpXJdj*T;Wx#Uh&9rmk#-;-v zS^nJYJB!HOpG6CGGR2EYKUYtN4K&@{p2dn7U5LKE>kIhtNv%W!C`JliY~XUHYSN9& zrxpr2^_o{Hac!6%9jGX&r8uVf=lv;K zlb5x< z2V!%4n4%Ca4HGOJ)nPrsG|1NWm6vwleE#9%Hhnc_`u{ZYVnd^IAyPP&^53fSbP8AN zsaKCfj?Ftw#DIU1ujBV{k(*T1wAQ12=hsH|g+Jlfv52bx@FPWnDfzb_YGbOYs`Y-m z?h)_a;`!Ovhgr?>N_{RblBPgwZm10=DR@;jo6=EH^s&Y3@reWUzoR5Ubob>W2iB>- z({~}Gsm^em0EGd^$ka_)L>AYeo@+k2O4LAP-(N#pYS0*m+;5Px?5hldn}{qT<_vP9 zsAkUId5%ku*8l^grJ9$OI@PH?uv54fBn)XB4A==$krrBYW)4Vv6hH*g;l1$6s$F}Y zP4p2L_;AFCd5%?B9Weq&JekZm+Bjv?^r@asG1kHbH4KLcNJ4OIXmZ%jP%n-kMv}! z)qx?oZ`Iv)U;tbKPf{ofL~x^SQO)b!Qs@_lvaWqsE7+-$-%@Fb2XMFfz$1P+NF2fa zpO6i>7&S4L_&t)cw90<8(z$?0iYr55%gJLVq211M$L*K%X#7!9p>EgS z!M?+3_fFtmp%iuu!XQEv|1?Mlm+QAtl>Y3ybgq?vo~H)!k0>Jml2dHkY5PjtBsv|^ z3Qm_z3Vo`E-Ui~^zHlXggy6JAtggRL9(}Q6a#lktXEPP)@3WRB8r-b(zXgfG z-Th~VAZnEsGeEKzSR3jrP4DIU*w-W3-cOnc^VZNm!@~lKja-z+#vUmh=DAM%@M2*o z*L77KNkq>o?~rnawi;_9XglWEL@IxLb!uoAga<`&J-@A*do554TwsU4b}!4>+dP}_ zuuF>dJNk6yS#rM%KHodskAdKHESJ?4B5`ww&Vpav(Y6*R7+l@(Q8JiW!$a5O;~i{@ zA4+Hgz5-c)Ew$m?LC~5^vH=!)PWc_@TTI_fXZauM%!vcq+G8>!%X5)L7}@;ivX7>n zfQdYp-BnS*SY~ zxzExU(tX$|{d&6|bA&SWS&vF&ipnH62s>>Hy;A9f;Q7|dr?LE(Z+t2%2izsubBJuG zcA&847j)T)1!7^LR`U#!*r8V1cnsqAZ84v7r5%IPlJq8^`BqK#1ZFAZuR^l62HRs) z!veb=%Vvw)6@-7xmT6NKN3m0D%fX zcd945=jIE*)eMfrW>#{i#;9rscN0Unp~8262EgBt1p!|Q)E!U#99<%^l9ckpb20l>)h#~wXp+2- zBauS@Olg!=tllyQyIZnlwMO>B;=8bS+*Ln! z<&?v$gniTAIoJ#1nXSti&{=4;xYM(-4-76%TSe)P{~$0eyr(}`ey=(z$bV@+ zDsHa%Phr9Ph49TutlO7%LtE#nski~tok)sX4^hnK5kSr$XtOZfj+3dGfmvgvR{Y@^ zfrnOt6s~Xl<8ia*Y2Nht(>8dnjxo{mTah*)~ zO+n*%MOR}*SL>pJL1G0ok5QYW<`aO+INx)8miP&{5n4KAL_rw_?169Niv#_V41AkR z905uI@yG?}Gu8J*FX%u1Hmlbwu-|MVWYT1@IS(95Z3X#T%?Xt}@fWuPlU|{(+pqU0 zI^@zPg^ila5n*bq1xOo+p&hMxCFea$p3mZ?2DYrDczm-*jr=QVP~13ZKxxu0jh z3Q+ek(TL$rwyN23S2=o_6UWBEKE7K66yf&^Rsef8R9}y{{S(X84N%&EjISdz2VVEo zfgQ-1|8=wXDBckbb4VlhzA1e>u+CIl{l`DtnXw6<6@amztw8ATFfhD<8I-8G+P#E5k-! zR!+4P=h!bKbmVp*pk!7E{cWd@!sXs5(vtdh?nUh^60u^g6QrKTOc+a3SUrWQ68F%_ zZHEHe<59K`%=YPX#d1N0OIQ~#Ott@=3!I_c&r5$w=h{7*E69qC=`&AMv7t&2z@{7b z4Xd(^dn84~NE{j!7QW+03e{zq2CDjxfV>WhDtox1E7??GiO&#C;_rT6tZ{uMx|BP; z`x28cm3>bW{C&+u&Z7D`aIOD|R#B~RUZs#9ctWM0M@7K18u@)1T{4UG?l@^7-AZKN zi?-X@GS0oaq43%R_>o9iV;#n{zmVkHbvOR0m+3?a@x#g}h_s69hTBhEY`PtxgWBR8JD*vW?9?U{FOCBv3HT@|$dsaLMxG z{*3TDc+IMU%Qg zdef#zq;Di+G{7)zT>>x1lYx@K>wdX0$v(HeSo9FE3Ctb^jhq^|W!R%2!c_`prw9YN zi{}N9m#l?jP(LNq_TQ%juP`BY0j;z-trg?wsjGF`2>n?5Tt6a`V#3a{Rk_+P{;1*F zw!2lG!V8=1?1G z-2TeUR4x$}2kt92GwmIOX_hWcHt9!I=BWqd?1|uZj`6Df!}mRc=s_ zeh#INzy8E+BpF`wq871g6ka_LV&#PCAgHbQR=>KKavtGkM2|k7v#WEveSLsDC08Ni zq9&-nJtu(CnnLTDE+Rhp&aXIPmilW@Y2%_1qjCkXgxVdFkn}f!d0HVm+ zzQn3a=&WYXf$2L%%BGKzAEYG^Laan7F-fzIPJ|!l(^Dq|#$eEs!?Xjw$&i^IBuRgI zW-;zEbmzrCeTX3P={~9(H+2w7!o}6}3hf(ArZj60rwNjN*O|DYvvSwlz=s8wBkDPf z`@fay*G3zdwKr83AN(d}D~XF*&3aKvi@@X=H*>O9thAOjRUw_+jqZp7`70(-{5#tK zy1egd9IjY&aws5ls2@;E|5?8GkXGq6;W2Y@3D;>t?m&kKAO_lHzn+hr0&W3yoFj#k978xCuz!VSm_5x&ex&K~>sIW9)=X|XbG2^v ztAOOLKTp(n(Ol`F_)1^5zK<9SDmdp&ui11v1Dg%A``6a6_`0hN6;xzBQbH7SK|{fz#HK zF!(zwQhYG_6@a{>UNXSt$a)}wS0}%Fqgy0FE1yga{{OQepbaGudBRijp?i(d+W5OV z#g}-uUpPG(y@6=4K5DXcA0i}#Og8yJZ0kn4)UmEHi|c$?c21?2xKVU8GXg2>0R5qD z=p8_WF~Y9+*7Q@d6)}52Yei9!7eDRT(-0wKSCK!PzbV2k8Au0cSu*9?IzHwrRWY!B*g&4FPSoSBu;oE`5*8|*s-|zdzAFa{wbD(l>;{7?qm#pWAB4B| z;=m!coaNqI(xB;~EFTZ4{>UMQ~o^sLbg#NkNx`B$b@kRx;%W(M0p22%AfA05oo3_Oyp`pnJ z8qd;2-~sN((gAN=ofL%J^B#p0{rU6J4_yjWQ4tmv8) zc3j*zx*b{9UTp)w2nS{3WbBqzh>hqKN}{$jDL{Z7LU-|;CvfzHwELu|E9S%jgo>Lq zghzYsb04501nxsHqtk>Q#kW@y^-p{=akxq5YB*g>I3z?Iys#_Up65qL$EXs?a4QSC ze2=I4VHypAf|MBc_FW1zSs@I_15AhI(F)aLQ?X;WpVjjD)1P>7Lb9sZU@-32cN5G>vYx)DPnHnji15fEfSY$$$lihLhPCx>&Ur*@=^F?o+KV!u zSaLfsOAieA(Bf~C`wX|Yjic!ObIGtekPQQ_Vv;auwn4TIbMCYEZ^T{==3H~VLJ3Kk zCV$Ye0Axx9>LS%!G0FqwR=xfCW_-yAs5ZC@VY{iz_ccb!WO?_c1AfW?8L0!Clw1z1 zftlI#8(V5;O=xzKkT{VEkfU1c=5kn`iI1L)%_|*R$lSg*&4>i?5cu(d1a`}=1om5O zUSNb&4yJQ)zWuqC?EdyY^jc6G02{4x&zFOh$1uL>5s?f&<%o!soS|;#fcuRSYvRR~ zA7gF*YQ>f#Q-EPCHHkdQ@S}{e;&qb^FxA%5_A$AsYOP^MNdqlNgp0f7{$6EuQ;#hl zV4l&7#agm^vJic6)S)ac1-*v7ltV$(S;(zhF2xBCkn&(aIPsbu+cQD4M5XV5;gK{z z8%{9*T0wJTt%e%eCW99BNAgy9*~_->W1NYnN^B_~Z9EgyLA^Y_0dE@5y4>Br>X#;_927A=J+emG8;fa0%7z`}`G7u_*zPop;bV8SW#W6Owyx0oAx%_z!b=o>$+wrHuHC{jxc48@TJ8jdYNv0 z5N9Vw*yE(!^Z@Q*i1;`qSTpn6YJB@5Nx|=|Zg-|C#YrP!LtEdV)d`#>G;IH6xET!0 zPcgI{d~w^RG*a+e-r^r!hm1sVOBsDS;2BVoL+QnYLQ(25P*fEemmyu^-?=97F{4H6 zoq&43mkJ!M5r8g+DCd?%CTM{^#Y5yJeO+-N^xs^PSHxErnY)etsIqy-3Snuhs4b90>AH)5FPbiHKH$Vl| zV6LYGqe!gqRI;w`!b?X(HyAUKhw&TCHlz!dHCIQghbLE~kAU{_ZG$M#XYOCejoL*) zaAJ>>`b;8XP?MAV8XB4$@z}2dXt6Q6v+2-kR^PJ#W_O&{-5kOQK@xv5`wfh9(}cv< zYVzM2+cvMDB>t$8OpOECXOUjWzg^Sw9%V{tovu-eO&iNvES2F;I~@qJx^pn}$mlWQ zgMgin+mWk(>a^x{rLy?Pk`I|bKSy~lb${NUBSK`DG;N|RR3nZ zo}f*dNEYx&gA1}bU;MsnFuY4?vz6;}AgXzcMM72CvSeoA!O6aV27Vs-oMyhh?}>{w zm&CM*$2eW6afE{ZcirMCzL?WBH)y&(M&0Ef97Ci-W>b@Z4kJ^%wZGIG%@+a!wb!ef zF4{>J#|zO*t4+EV2)9YrxN9M$o!{ZvSJeUeDcjabF1^Gfae7Vo3LTy@Eb}Y_?G=2X zQKNQJY0{mc-6~&Y^KC_1e$U$`XItkIS)O@Vp51DetZjTpBkevuJ1(q-EV8-Hx&t~Y zJ259Z1DVmnf25<_AqGO#V*Z$ur~q`zGea%+!m;xdi$yla6gu2V^g9dmhypEmfJB;F zmg#XUw3QQi?m=B@0|@P-=nFK#VEJWXfok`7*(Rl8om?PsvbrhKLRZZ5E}+_Cps1LQ zq>J<5^QjmL@=d4kc)4fE)Wah7;(^0g;@jMQOz^lIbHU^eTWJZmpoBMb{}=lc--WMB zjM$#EP93fpE(M)g@}WY@hiWJh)w7AFmw0mYJUx`Q5zNAraDm#3e^s7R=~BLqGqVRh zSoa$yHhfGn!1dv4PtwGMx!zMNy>=luiL{sjFnakZI`jVOw$XdnU5CPT>?IL~e6BD( zi7$OuM2sWB-1YkG2M&BGSR?9P3*)bHGoB10MjY>}lNWwQ?I(JXu-WWMm}otI@T;I~ zZg?C~*Y?PwLF)eg>kD8l?DZ^diY{Fz?HA{RjLnDG%c`o*+V2fvl4+2;gG1;2kCi25;(fJgF+^_boFVWqbPEHrtQ6tgv+6sI<=*T-w`Dvj^v+DQS3B5s5o$V z#qKYf>$?-p%rBidG|k@OS7d(cm6`VShsc)5oLrMI`+5wFh|x2wM=T5C{%t#pNUkKkb*nIAJxk_k0Ts>y{Ta7wDg8S~q z#d~eegAg&{P%3$LWWMZF1qfq!!otBzAng+j7NiumKhuLX*b!Jq*6v zm+1M#Hv$INWxjI!Yh-*@NqL&HGRh-U0E6Q9yO^;rx9!^_N>!3r$6v@ie;N1UcOVv}afdt&?zgUjqJC z+fgjd`JcyFmNP;4FAU%k?>YI{9|;(}#lXZRGsUKri3(mDjNu*HPR=;kDWR{lH~bjg zkhvP{U}IvU@xkST3w!-M4bg|>XU~WQZRUk8GY;?mE^VfPu3^m3lklhGe2ALgdxwWA z=isB$%?OE3_pc2D-5h$ZN-e5qhYX2vg|8u>V4Qx z(^YEfeoPqG!&A!o7TVK^DvI z;^qsn-=2e>g|d^i<%(8l3+BLIs&gYGP1HpUwB(R2!RaPK387ZWU@EHPY(j|*PR~vM zO#w^+#n@Xyn#zWTcZCPpM0*ERN9M+nN- zn7jUv!?J27ue|ja)ofDGe}BpN7xWoX)dOXg(X~L-&oF4YfOT zu+{M3Xy$mB#@fyY@}s#Tu8x((Wxq!#RsN6xp{LioO_eSs)x?@|YB`zC3jCWt6?L$* zvM#Hw4M%`LL6Vw^S4Y{=2>#uw)N{sH1>|D0;^$JFf7Qcam1^vvL3RZUt%iZ^sXugz zRSVQZvO;P^eRrCKfQ`1O?A&*OL{hDNw6Eh(&MSn(= zG1K(1CBY5e>Q#RT7c^xoQy~PkcBh}J_cF|)9WoGdiknn`V^cqp`Bl%Iv;L>tQBNSY z!-+9JlE+zx^YBySk!mit1IBP5HITzB&lMKh|30XWs1K9AG^711Wmt#uOH9|OK+_#^ z!*3JnVrA^4)75rhT}BEj@M#Cl-#CvH#r5va{b_2VFCG6-iD5q_QoH8YXo^pQE0IX!g7s*HmJ}k zenj3JH|0MsOfjR2TEk(-Wt&Su)?{p6uvM_VQY4XXZc!}M<76#k3wO@Qh^l5$U5Z4E}$Eih1f|CxfIk1 zkdI^;*d<#C8qB(8syv~$C9?(TI%&6LY(1E{!C zqiYK^^*l$q-;92){cmU9ZhpVK!9_ZErSfN^4+81tSVbg4{>kFf2Lc8B4OVZdEq15n z#^Zn?EUHrdOJN}~6Pv#wlkr^zh7n5m7TgjN?^;|U5ZIOjAFZ5BZv;~|D3wc`9*@NK z0D?g_Md*n`0Fc<6cMfCtO-Y^e`3MB8Ys#y?VbmmOY3!i8SFS#ZI(~^ac zcHiFSPXbJ&Q3_VHfS|D04&Y7TKH1@AamP)|K>mNMiT12$zI_BM{habvT<^XjfcxI2XZOOW^+TyR4=I_#Fh(m zjtiy>OBLQkWn&jW65t5ByfsxLY{?h~OZ+E^$YaT`5^tM;b2wHuC3qeA8cH5eaunb^$oI8Lv7R7|CrDu?BP|8h>zkLyW_u$f^++^^HB*4+*5uj5g zGSX%Eu+(13E;eUk>J*<^Yu!{aIUeo<2kjjml-;{J{G`#)m^SCr&BZ>&sLKdO=$Ihd zO?Vgv94&1Cw0pPsR)G4DD7_$#*bh;4c&8U$dpQ3mmF5nkW0Yvl88Cbq^!Un%-Qe*A z0`1hx_G5141BPU$?er5Phpd_}?`gPGwk8T2YHf~KTka$|y2ZTa!UduM#|z~;m%qel z4*Lw=+nUHP^-8Jn@gIN_7pND1Sda#A&xtm$aSmnvm?*ajZ?N(9U(J3y#+N&4sZu&k zEcI(2e?~%Vs+j5%hg7_3UDVK>UaCfAhKERjS_=gxX$4#Q!LFLhlqNWr41fY$EpI>y z?^)h5cLDw+eHR4$BOgiV9X<33qJMgN9*Rd<0a{SvAlkGD#PsVp5;hKwKiAYd!Vay#Dy70afK;If2>crbeZXKn@LIM$f8chI6fuRV^^~0w#oxo&v8Rh@(U>S zh;u-GKB@n4MOuQsGQE{OiQ@aKq-1ixP<+goyKW{jsuK2tsjZoaHPsTqyAl1w-21Tov1cpsp06$Ek~3!7 zx!Nn(trr{n@-sdCs6Jt?#=N^n$NDovfgI{8S7d2^SFH1G+L>U%Y>3qTLUmBvdXSQnYn- zjEw)J4kGIljRtfXGxJ&6r(BA$%jUgJw=b$v@%2WGt>It#*68w>zuyo5_OyKvU~8|* zPBSvJ0}~f&^{>M|B2Oxnuh%NyNkb!;heLM8!wmyXXXopkA`S2UP=R|g!nk3~LH=zM zzsgjLfmEFMl8>VDbd8P;JrVC-$z~Hrn)wroUjc+8mAgOPs@)rq45R=u1i42Nb`VXl zQe*s^1F_iM1&BuW&N*_1RXTqp;aiYviDDYe`SN0R{&(A@mq;;Ix<;&7cGO|ROpOdl z52h~#zG6pf&EO_a=n!BJNn`Z-K|-f*zcpg4Y5%#SHs32I-~h zo_KFP2DdOH3Y{#;DW3$v%W5l!Ru%Qp>2h;;Yg?;d2$og}oqqu4+Uf`Z{~Ow*m`?6@ z!NHyv=F!=!#v8gH(&h`d5Vrz~yeklTC@=DEv_~jopnnBpJAzPt6oUt}BjmVLej1iC zPt(cg$U}f~?#N#eF&Q%>K^R7H&Le3*Q*h^^>?g`s8_Y{fMPG{LmdV2qIQX;~|6L@I20(Z%_uw+~u}h z$%BHLLn7N_Ms3l2R_i7{pU1wL39HK`|+@N8{`o>9K@B3 z84>jA#vlFufmXtx^;927qu18g{R?{;R1#F-wmYm3JiE24EutQ>s?XHT7Np%cl5rKa z-mO!^ixY=KT=*;{G7Sf6rFA~- z@JqG{PV^Dm7ok04Dl-_EU$-a*ik8d$SvARp0VCeP!zjb^7hc*-uNM|Sbe???{YASw zk^L?Ct@3acHGS8)$t?0rl?hlKg`uifC0$>zzcX;N_t2#)?h|3O$Lw8UJHUzc3Ddr< zym`t!a?7Kdm|w^yvq3rYIFCpSL>TJXX1~x9$Jm7`jZ(#BjW$vwv6@O^z)3J2HRp3Z zyuZZp^I-}rV^4)m_Ec0AWT8a5e6xRez`R`>7pFrOx4qN$%^;nwdHsx9|>@2%ZHyTdufbU&3HC;Yye}ZX7MS906zL2m|B@} z$Q0B;{Nzcnx>#yclNYtMrQK!mF4NxX{Q^RM+3Rfxj5(PLcP`xKyogBC)%Qjb*Z5o~9*i z^Jzy2+dvuKkr?3s&j4)UY19|Z4#$q8F^vvvTD2c!@L?ltUt`d`RqgfMVav$h^Wz?H zFkL~Ma$5G&yuNpCJ1QxfEo7JRw-@UwxZL!bB#*W7LNy&`g}}?Hir{gG=&SDUNE*Z} zXg`XBJzAEj)R)Vuna@}UUAu^}`(9j{m_;+@De*?Hf|iva=l+g#pJu+f_mNoUsO_5+ zGa!A(us}hV9GEPr)?vR)aaDD#w`UyijPI^sV_4;W5lzjr<&ytp!QnJ~zRr!65`MPU zw06zR&=zS1bU}yBXBd@Kflbj>SzpsU+`qHKM+_bO|9X1Mu&BQGdsq;qyM~k&kQhP) z96*|(8M+$;q`Q^wj-jQcyE}(Y5$O^Tkdj8?fB1Z#-?LwEUA&pI&)(2EJfZk9jkPjpk7|d?DC|HkR3wZQKF$d?2)N8QgkV$ zHMe_ZagbKg7b}d8O?z^XXPXr*uXc<$6LBLu7<;8O*JI{q?KkD03-7xdu*iv1b(`#* zwsyujmt!+1C?L&`&(h5QP*FPVUb^;z&HVjwr;28>Zf@?H?=h@=HJ=qS92|Ic9UdML zGO>tU*NN=D@47}RdlT7z3YD-e)Oi7qi8plDV?&7q(j1_P1CZ?7U4=~>$q-30SVbhg zv}S^sEKnS zY@)&95*25Kf>_+aY?2C0Lk9MXfD6E8opFxo8)MhpVEsmhWXKEsIpd9gen*74LIQ%$ z&c!2=k*2$)In0r)ph6;4K$K@I%n;)WDThVOHQ1DwS4`HA>89u{fKHG;wpUX<2en;pc*jPG^FUp*?_&p!o+ zf5_zSpUa`|&=3B|p*%@>TqmDrCN)rZB9v-T2Td_o<=STpv6``NC{c5BsV^P_a*U1@ zs$Qc2JY{>{kBy5rznUP5Il;!{%k8ci{1MRD7_t}W{^$3v&PKb=k=|8S#1$>56>xZ@ znVO|2T?3-%y|M9lCUiiAYQ)V1sJ)mO6kr82>TKBufJX77`%bp*GLTl))&jx_Q(j8t zin)(`x`NcYvH(CdQubKu6RhhiXj;LQ6Qb>S{OvmiXcKt)6er!`75 zLkuk>5nYrr6|qN#Mf**QwFM+k!Eytiz*Q3`A--(;%Jp?7qID<(v{qJ72 z^m^~D2}LoHv23E0(yIPAqqSOH zeu*tN!K%IL!!QqtLQ@k|C87B1&1thXza_W~*(X^*sXLfW;gZyRWXE-~Ivzf&bnWY}}z zwgGK^-#r{&p*_*dm}-N{uK2F(+9fuYe|c?Aov>(l z<}YiJRf;;Aq1Xng^VMOKipZnD{U{LI9tWeXP-KADKOFtkvl4gL4r9c-e_@XULy=ZTKUGC?$uGrNb zc=kJfdp+2_oXLlj0wX}6BUZBQ6eOFt)ma}@uS8XX->zBl{Gm#O4kL1W2KmFR-cnd< zWD|>lfGJT!e8L#HDM!V=B^@F%X3_ukZaR^bJY*8(h3tCzY-PFQ<@h0^B0y+wYM5*sd(=E$b4}tw)^F>9(M5&$T*}0CMx=I=;xw-Xxh4GOQ$jGPX^h z+SblAovCw|d)}%JJiocPNN{KocrJhtDy;tv3Zex>s-t+bA8-B&Zkr^s4AVrMdkm(M zIves9Bw_WPB%@c7;v@YG`C^mKOBuSY6MYkL+4QM}W1buvhl!9$MS=*?uU!-g8@<0; z^t2U|r{2_sISJzj1ZzY`>{dJTuUETwr|X&zSFNWNHF~QMyamNc;+F~_m4J2L80iR7 zL1on_bMu}FKr66?*V+zYKwWgKBSoQ$Bf^jQecIOFGkC*%9^WG z&1K*E1Y1tr^+FH`Y2alJPfQZIKUIpic8k&+c#g+Rt{&>PGEa<_D{Pkx15ywGLl_A^ z##9dD0=NW6-p5-jU6VUo>{zNN4yK7)cCp7k|9~nKd%XGIWa%&d3(j4?ZEUK*i5>T* ze%JZ2&j2H}?bCU&3@fIRn0-Z4YJ1x=hb=DuhdS@}$4gzGlU1tDpEIy?UCWZklSEkBS76Q?zB0#>5&EkBU0vhnw&DtSB0b2~UA0T+{-MrAD66 z*h+Oxo|VK#eX~_jff=5cBq()n^eQNHKB6d$-w5{;Nxif1_xbbgvzd9l5LLEB70X@^eys`N zYZe&EgTm`%(MnU*vSuJwGmn6vzXq@!$E_b(RYYYzb1bX=v%EkeMdh=$`w$okM+Ux> zU00!NyGOe3u6N$s1B%A5#9zJjOGE~8xYV|E=2C4(bzl+1VUwL{8dKj!SdY;Mf3Oi4 zgfE5fn2tX{_C!%ez7DqcGqwKnPqHe}oD4No8Z8%$m8jDpOl8m6+bJ0N%Pd=EOw^*I zus=~sH8qH^iw#MhK>zfa{BwE^Oc)?;J1=^-rKi%~rM|SY=K1J*)VQRy+@(=g<95Zd zrla?(>tXc@l=AO{sLpa-^WM`_NNj9uBo19`^B2<>8L>PX)mvOXj#*|Er(ETm7dK*c zQe`_lpimc7q<^BgTx!ded|FlCU2eP+dLKw$E~>%k;yxlym01RRf}rUHW-Nqhn~jj2 zl2khRVa%_uK^Ibq)(sOzQ>NV1(}&bG_4N@+q-V%Co&pCIc#=Q^kx5}B*VcbpCXkyi;C&C&DunSjm`GKn1>h?_OmzImX)v(-z ze~Lcw>tB;h93A6VPw{)qqD-~bd_yOXL^hk3b}Mw}({gN#wRgf#68_C-6_u#QOz4Rz z_!kis6%M3;BgkS9%l^#+fuR}SeK03o8?>v<>)LDc?saPaq#+XQ3jcasbzBKRAYbPX z<1G?Qd{xY4BPCKK(-|04J{$iYwx{h~_B!B**=qkA5j{E*j{dIPuuHMRVE1fN1i`$lKrf-KAMpDWk~w(lDy)=!LSZ`&fRJf+|am0--os?Q*-$PM5pN>Qb?aS|7tU z{6;N+cl*_98^Taad*lAbbLTFRWGSC!JwNbyXHyIG9oqRr+a~5SNrUciXxGrn?m6hD zRM1;u%m4P+58L<-$A~6KtR&To_f0nm*z$|zhrS?B%oM8Tqh5VnJMZeF&-VMGym3|? zIFtX!1@P)-dt)xU${T_wQz(-VwaW07j7+bN)l4>C1{!Cs^AW1bWYx(hOc=!2&6a(KOEDIuf1JnZ|Gkt`@h##4WN(zB)eE*umHgQj|j2DDs}s_0{+>3g|Z_Rz8F zrK2phzf*aCIgwA4G1C<0fc zoP3m27{1A4ZnJNCPf5iGcs~Xua_Q=30CpmwqhP@aDF@w@LRF`{FhIn8bse|i0Ny&w zvj_T*4HTL$@*s~%vgdYTnQ2RPOs@k$17d3&8~BtVJy}TJ3IQq=Ou09_x)oM(GvC{Z zvdj5~WB+NC4U8|@pZ@OIl}S@6rXU!t)dswR zW=2XMqEhL`X zhG!s+$!DfIB~M9wDRGV?2^V?v0)Q;N>vW_Tb$a%<+2vkac9sa?_-+2+=MU=6vX1)B z-#6@|n%3yQtvGH-GNugbH!_2~Kv)d4Zlay+SO`ZuW@N~@TlJ9KbQiXs= zp5PWLA6Li#OBiQ!nxHl|te-kl_h27ALw2xy({JhZmZuPP1ejURvwf!amo#O_EOBHnXYqnHPgk`}{(_g-XBN(( zRmxyQ&>{bFr*o=C+4#hzDNu$066rob!-3ZY%Uwy!pW9#8WK~s4s+-=dgYr0^oi$gE z{@B94?GWzebC5^fTNuhSxRzVJo$YM7c^<@{_7$DVW4DE)>|h=UX?-|0d^9B3@)`=0 zP!hRTj<{Cx#e0nsUc-K`+4C-y>$fR(tkR6uI_pL|#*?#@m)_pqpX@$u zo}&gi4o*+wcRjAqFCM;hw=>wMyf5PYKlWfll{xBIet)01*nC zxBuQWT6~59$e7Q!-^>X{%8k10>~LY_m#=$a z6Cvl~1_Mt+X}V6;uya%<;^UU4u$J<;ZKW@{%? zk&+$m?M2?2j;lcE@~4P4Etz{;zUl*?_{3V|5B}|?1QgC$9llcc)D02Q$NXcii>=mw z#s*1kt3+-Vgf6defAjkItXZ17UI-+n7>K0J5Q9^uk~trjsPF2KC=1s?i^#cjikj=A zoY&$LTWi;@Y5I4nbs~X20VQvgR3cO;&!!)!bEv7DDyDyR3@~a~yMBlpan>s=CUW%h z)5Tb0Kt|hoa@e@U5KUJMh8qy!??9oN!D3PMK{O-Wmwli6m}$lkZsKU=dCtZ=TvdV2 z##&ruYM4&Ry4}VYk6V0qYoRAiB#VCUT z4aSbi*h{PQ>PA1R+1fbm+wYM_^W%T|=fGG|?fa5|+)Pq_klt&BBk?qh8DkQjiy=Q+ zq)|4TosqxrY1@y#)hUn2XhK9g-6Wj}s15>qvPVtj=+ZoC#w~>oO=mjy*7sU5Wg8tl zg8-PwoHh1Z)w-u}imgh&At~uHz%*LS5}4stA)DY!gi_p1#q^g`VUWI@x)QO6V?C zXZJiMHFl`SE?$rdj@0vi04SHgr6Z`I|$Qz3Q$ z{+W-{@lybmc${IK&3`p0_r)Uack-W*7gxyF(fZf_q`^b=1EQ)27^(+>36?x>zQe_g zcJQ~ayb%ELNY94%=5mA;bB^39MPVspf)KV>+K@1d=2EB}hw!v{ZX*dVqI`k$3?cf# zCAc)4=ry}cTTf7yk$jwaD~6ktkEg2lmL3{c-B<*7kYtfb06$sk;N<<-^17af{5EBTsI&|TgpYINI*PbU!rkEE%Wz!i8pkkB*K`Py55T+QqO$H`~gxA@6XkQLI zzaJuRuC}U2XGF+l6L!d^C*8**k)8V+U><1W08I1X=e}PKfP{KLXrbIxamHzCKA{KiD(hNX z-E@M6>6a8{eVwZ}oB4m*poERvb#l&DD1 z6h|;MA;WO8Hmoto2+r^+CiFbPL+9SfK!?E4(|Ts~!+Y{R{@LxY$0NGCthf3Cgd?@; zB?Se)tX1Th8~NV-Tv`#nIGb2T255R}2d?@ltaJ6)&pleX_MM#?x3{c_pTk%-ndu_L znDX)Sr-6%Fkw(*oqO#gJ~8^jXjpTXAz~SY2=KF^js`+S z;Lz;_!%O&-c{({;GU-rKN`gV7wP1NdfD)sCIXfd#Cr=o!#EqSW8~uT1qCfZBa;7r0 zBwvrmc18z{Q9C_>;golSWgIrcFg@5&$B_fRU*&cEWnb~*>w>jv*<7{0CWS=`;~0zkSYqpg6#KQb_<>YN{k8SYWK3!E$N{-M(6h^$uSBg(6~747W;;p;RTaMbtt#B&o})96yQ2-ziX5*f z*5EN6yTS5Sv8mGdcc~dCOZq~%4%qD7nK|qo5F%mClBDt<6nFa#6l3bFyG%?vM8Y!p z(=CD;lg|OuN2cMDGB#B-$mnLOrpEP^|4r&m1+K_1+;{KL2@WHj$XMEqp1B30>n7rt zz~Ew;ZCqPofU-Gc>iMxmuc1}9zq5ETdvq-W{O}vMDcmSYj0aa9BbVZz6xALfL|mRc_zRCgq_eA6IYq+sZtY%Z^c7YR>IC`NF1sF6}+(PUVwaa>s*L&^>YgU3gN0 z3P^a`iQyT7H?2y|!`&}?5+KJ=MTgb?fgN?_5wj#GNarJ=##gq#<#d76p7<|t^_YgA5FR@Oi`#25f}{`cpOd(2n43^Cz(abT?aW>RU-eg~-(3mH!nerCl-=gZ^?pU0>* z77WL~BUH1zE(6h4Chu{8o}8^5*}Gf(KzGh80{%kSZ1cexIE~$tD;p0znGQ|-wu3q} zRNBScS85AgB_X~*Cux{FTrI$QAbiD>(P*(uZfJR-HWxHOeAhSBLh|64Fh4Y#;rdg6a zd22$wv|+L@$5wBeU-!lulk2!}Vadxya-^7VBS!_B?^Y;>2yC%C>wL%*w((>$B+o8i zhM|ZKIq?6wZk7Y$M_wGXd^kgLiVk()G$pq((T4r47MvJcB|}rz znK7Sxy2Ry8_hN*zaJC#HSq#&kqgORGEqxQKNZfKI8k9bWyp?jtgCFc9sVNicUL)mb zXS&`eIYK`+BW?6P;J>69$1AyvhZViJY^mG1gQ0ldCMEfJn6=wiU#y&Y&%oKy(QGjHl+CBRfz${S8*7@$tJ2 zFS)uNqNlMQy&+4JRWX+D;=DjA{#8A)3=d#nDd9Ngz`OCg8S!A8+PB5g!_du(?K9u& z&bHrxQC22bUQx02?}4zB&z?N|(*I86azkX{S&$-eivyu_VK*<=aD5c@BbE25EGOE>xWgm4SuTZKVSZQk$ zTE}B1TegFWeus*?@$R^Li5N|ms|ff|W5Cd;8*PE)dT9BM&WeCA2&u=6`@()&szBS| zBJVu-AuahnF@uX(9|)Hmsq{24*(Qv z^2qYUP~S9vtXa1LPG4WgRb)Lm1JVIUWd@EfB<6r@qCz9`!sdX%u{;qF3*Fu$^-YI? z!(0aBQ{v4d7@`G^UQ$w0WpU@bQBthAItr1_*A%bmrc_SUvN^liD8mv8SR6CK=;C=` zCN%oNM1Xko;WsqgCWH5YI@=ajrLJY5GqzP;#shWP-TgL^bou#ah2xGi_JX6fGY3ael_G@?9#h?XLo{JpLs_;!25>G z_%At{@t%9FSHe$d0v=EB?*?_j_TqW6#b1E$kwShj>S>t)k7kFSvG^yCcBj2m9<GjYT>V$s$0goQynr-hl^CH0lsr`}p zc&0&kcSZ+X>Ps75W%p7uNf^_)@(MG|-P{UUNuDpR!cnMWLa`EmiG_n5(1Sqy_@)mZ zQ63LT?lj*iCe55Vrvvc;i>L2cQM(xod4YvT?@jETP|N3Z*DYr1(xS)7)oc&!dj)~j zl%ym*G7Ci4f^}N2PwVQ(sZUvG>sASPA%NPF00l`DZ(kP#i0rMHpml6l?-R_@AXecS zrON{{>`pvZgiG8tY=rZ!-!xdiAH3ba5Ny!Fo;nVx{Q&saC!?qNLqqqdj)z@vPB6nOzco7LCl-_mx8NdU}Gy|7PcKUT_}vwahKj z;J34%UY8;SL7S{IC3Ku~RV8OUu@ouR7+51r%|VkY9rnda>iV(vd6!z?duj>U$97r_tY%@XsvWd`9m=y4q0VA==990*^$}Kb0=s_Chyovd}QQ`NnI>cUa&dz*TD$ z&S2iZftU;zS<1?Z7NEj%B;!5T(Z9mJme#)x?9`a&3|`QL{(ob*aJyXjti35R47QGO z9f~+Xi2EKI7*rWj5_!$6#fk|F|Mc&`TmwvlHClc?5D_hM7VZ4Ij>#8N{peqbm#WPOB+0Upca9Lh?osyl z6~O6u%7OnkA|sJMAwB*E`H}w~fddO*Vgh<8n(ol$eYeP@i{WAdw@N7zGyDt?FzwY# zfqwH_@=G2ZrOfm}MhQif1G$$YUb7VEZ(B0OumJaBwvDE?LSy^?TNvnYMiHLzrOEX_ zgy+e4#_G3(Dn;to_a0NluU=G*zmY=wVzWfr`F2}9pC8&<`YS+w+||+6JDpbz4xq6p z4n!{`76z(9zQ~m;F?SQ3JYuicJ=s#)74CRij?2 z^#3qASu_a(I3tbsw~M(P{F1~`fLVTHiB~p>IRtmj(Shwi0=^-U>8bkf@;l!cnxtdO zbgb#2?^#IWp}C26(cAm2@8#T=OilZY%FIW)=y!F(?V1}-?WRx9`2Pkep7`&eg0+K# zk&AssA`=Wk^FBPd=UA;V$jlQWkg3M%fWD)L94A||aO_yjbG6uyKMOvg3}rwYK`A8t z3cre6KL6Rsri`JzT)>c+AkUJNGz5TeS&-q;1$f$(!moEh-E3n+XNSB&!0CY#fG(P1 zkS@!7;KBXU_;-&O2red%9Ty>@k}G0Fij8E3@!)~t|9&>mpUg@hI6wY3{(7;HK$}dj zdt@{#4ciw60FU$HMa%*i0I#zKV~B%dFMj&dkf)>ph$t;8Bvyie4}2P z2zZs6OtRO-89VI>RVb85zuDK#0B#E<5HmtYD)QWaC_!^B5|bpM+e{7TZTU!7w3bbx z-LL95IOaRBh5hvvqCnOpJW?CoJoBbp*MIB&3JMzrTrilp5Tf12;9OEEvzr(fdBREF z;+G<%+eVx(?{ZL2zya>8cq6c||9^j3JhPZzG$OrHFnT{NHYRE2#!YNaW}LnsY=G2h zUZ++vRjIb8cJN*E#|b;(KK3uYP%sqEfF8)d!;i%emk0Hqy4Y=}GgX=!JJd*!(V`fq z*NRZrC|7in5b75aHCk=H$H@n`^QsfrCx~gKZ6|&B3;E}9dCK`W8&W7(j`tahCW)+r zSwgQm&4Md^1ty5gYEKjv&~7h^Wbj}mD9D=Z|OJ<;Ol<|V2_q*!x^=t2vei!pii?7lu+eTFCS$IH>;(Arns5SimPL_m(d1(Ac!T1wx z562m?B0|=(nGIF~)QP#pv%myb<0F%;<_Vsd$H_52$5c6|)V$`+Pzf0Kv-{Te zXU{MPpc0~LEGh&na!H{0gik6-h5XRK`UXq}Fcw1%A(3c6Yl+HNhlC<2{CcE6Am|eB zD^e@(>B!adJjp4ab2^P^CR;YtYRr1k3=}9H>KCF&x|TK`XD_bzawFAd({%13i@T^N z0dJ5q^_^m`h0n6D!k$Kb0OOy48&B*?uZ^`GDDil|PlZN4PvS=Wa3F-wH%K*5e7q{$ zI_ujr=Xc85PoLH`6R3${a(o*~)+`YI}1{+nJT|;Y~f4M~rb@JfDyn%TIU=>=R z7s&ol6R){*RPN7d(Ur5taXqRQp_eBCpVcSn!-?B%u(BK4H7Z~%MAuX2_^bXN5yPug zz@=7;ao&YgjK{zSyE^uA#l}m9%UwtAK3Ro#d7O&e{FO_+*&gB6Py2Lsuxar*Jvg4t z$Nbfw(cqld#|UORU^rc&e{O$n*oFM+-tgOELoYp4Z>xH9j;lL(nkySFFtL|wY-HIzwmFbs6@iu{}rbMqu%SMo?mVy5E z{$D4|uCh;W19Pc8d>-cv9SU0)Gv|n!e*3nlRjJApdwQ6Nbh-cG|L5)frD1|}mnqA! zx{}_4evMbhC(j-{wJ< zPHzTKJv<(fgfH&gujg~_;1e$7O*Q%~iXkTx{y$r$yng8XZJ{*4bFej+)J-}f7!2yt zyr6;DGNT`a%z_ksD-5=Nb<-&22=?9gwIQWDf683CzF%^{JG+hi+%RC=YXAE2WJXKZI@@xVN`%J0p0&nsGaRqeH?Cf@0p$C$3J!i6V z>~DOHs13L04A067<3=}bgy+lDGYc5~YH6o6s5q;?S13p{?~wOJ?8eI#Ugs|eWJ9>* zESYApjQ9wCtg7G8w&y!!X!UGsTe4s6UUeJM?c{TAs5@^6Q)oX_aUs`f^g)Xd_RD(RGoRK5CCO zc;C0s#HCtt(%;lI{HE)cctA=Ngjq*Iv^{IJ?}s-^g7VzO#ohVh*0oZzY{LWW-3vGHQYlrfo5ON|pLsr&W(UYuD3{(_~xNC*3--EjYLDBcmzKx%4FR z)3F0S&v^-jV8)FTO@y6#x|$0#Qqq!-J5^|G{W-DgyzZ79^zu46cCh%Kg2FWgvM|T` z(%^GDbLO+NW=M0;8m-2iP3kxtN^_)c__Uq{*o9dRAMKa@W7-B!bSegY#ru3N4smOX z%i28YJ=?-t-BS)+v#&3kuK(h4AX+JUnvk+z`ClPhc%xW5y)iz>?1^*Q^t7+UHKrEw z2(u(5$;h&F7v!;4ZDi_*XAa^TJSn+RZ5}*1$4nh6gn_Ue*|1kwTzj9^C9I#e`gAfR zTnrw(v2r*5epS*xcZ#{R(GczV#u<7!V~*n4a*L#%>Gh@@C-6Yfgn*gMDQEVsahYS^ z|4CFJQvKE}9CXv2%aZ-RNro@kYg9MhzS?;B4QNS_&Dp|}gooZ9DP3U|E;pOUq zRTTMpKb?$pwS|GFMGP& zaz?p0Jr5f5cK<=60#Y5>zV6+8{^xMdcLDdYam-}QlRThC5T4D`_$ z@3{@8xS{YQkLBd_e0=fFzr`Yk|0bI;!P{z_4G|t4n69xEf?v4_46f^rO04a60u_;+z&Um5K8Md@WlVt@e_9w*Qc|d zX)a;6PcJd~Z4;ySSo{AxRZ!jcr`i&cK)& zD+E%LQ(8q|A^Ef&zb5zxt2aI6kC%smgG<-R{e4Luc&GO_h*WA&>r~A-yxfv}1xzZ9 z@R(oiFxFZKxRUvkSju+NCLP1QxRT$~@!y=Br1RFdPfO_4FoIK-R}@QsYZp_6#!_eH zW{z%Hy$(RDb}Q9U;v1Dd5|aI)@b=Z3bIjD$1I0dD()kg|%X{?}+5JihrRm-y*LkH;=W1zMDK2r)jh z?XlAG=N_~Fvn0LfnEnmiKo zjPT|`0U)V-hMg5l@>ij5=Ug*$lH*qm#j5}9#;TeT`+{1;g8uW*jf^YuYWh@VYCqE^ zL-n~zTMD8=Al{a^@kCl2oSbwg^xlDGHW52^nW{AHt+L<`)WAP+}yNDgV!<$b3f8|6N@|P3v&) zC=bT`-wK4!HQ(sV6bsbnD{avfumiVdz@a*3(T8gC8$(VWI9=F-65roCkU#hN@8%`! z2A>(=fq$%s3l!ggn+UQvwn2R!E#)*)i!dYhf1@2W4n8a6pA`wALvWR?| z^^k(3{zd-E%Eq`}FlG}`hoE?0{$P;seY{h literal 0 HcmV?d00001 From 302ee394e2660063f30dd2685b5077a35df9d252 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 00:57:13 -0800 Subject: [PATCH 02/18] Linty lint --- app/(api)/_actions/emails/parseInviteCSV.ts | 4 +- .../emails/sendBulkJudgeHubInvites.ts | 31 ++++++++++--- .../emails/sendSingleJudgeHubInvite.ts | 16 +++++-- .../JudgeInvites/JudgeBulkInviteForm.tsx | 43 ++++++++++++++----- .../JudgeInvites/JudgeSingleInviteForm.tsx | 14 ++++-- app/(pages)/admin/invite-judges/page.tsx | 10 +++-- 6 files changed, 90 insertions(+), 28 deletions(-) diff --git a/app/(api)/_actions/emails/parseInviteCSV.ts b/app/(api)/_actions/emails/parseInviteCSV.ts index 6152a7d5a..57ba39fd4 100644 --- a/app/(api)/_actions/emails/parseInviteCSV.ts +++ b/app/(api)/_actions/emails/parseInviteCSV.ts @@ -50,7 +50,9 @@ export default function parseInviteCSV( const rowNum = hasHeader ? i + 2 : i + 1; if (row.length < 3) { - errors.push(`Row ${rowNum}: expected 3 columns (First Name, Last Name, Email), got ${row.length}.`); + errors.push( + `Row ${rowNum}: expected 3 columns (First Name, Last Name, Email), got ${row.length}.` + ); continue; } diff --git a/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts index aa4adb4ba..37d511db7 100644 --- a/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts +++ b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts @@ -38,17 +38,25 @@ export default async function sendBulkJudgeHubInvites( const allEmails = allJudges.map((j) => j.email); const existingUsers = await GetManyUsers({ email: { $in: allEmails } }); const existingEmailSet = new Set( - existingUsers.ok ? existingUsers.body.map((u: { email: string }) => u.email) : [] + existingUsers.ok + ? existingUsers.body.map((u: { email: string }) => u.email) + : [] ); console.log( - `[Bulk Judge Invites] Duplicate check (${allEmails.length} emails): ${Date.now() - dupStart}ms β€” ${existingEmailSet.size} already registered` + `[Bulk Judge Invites] Duplicate check (${allEmails.length} emails): ${ + Date.now() - dupStart + }ms β€” ${existingEmailSet.size} already registered` ); // Partition judges into duplicates (immediate failure) and new (to send) const judges: JudgeInviteData[] = []; for (const judge of allJudges) { if (existingEmailSet.has(judge.email)) { - results.push({ email: judge.email, success: false, error: 'User already exists.' }); + results.push({ + email: judge.email, + success: false, + error: 'User already exists.', + }); failureCount++; } else { judges.push(judge); @@ -77,7 +85,11 @@ export default async function sendBulkJudgeHubInvites( const email = batch[j].email; if (result.status === 'fulfilled' && result.value.ok) { - results.push({ email, success: true, inviteUrl: result.value.inviteUrl }); + results.push({ + email, + success: true, + inviteUrl: result.value.inviteUrl, + }); successCount++; } else { const errorMsg = @@ -91,13 +103,17 @@ export default async function sendBulkJudgeHubInvites( } console.log( - `[Bulk Judge Invites] Batch ${batchNum}/${totalBatches} completed in ${Date.now() - batchStartTime}ms` + `[Bulk Judge Invites] Batch ${batchNum}/${totalBatches} completed in ${ + Date.now() - batchStartTime + }ms` ); } const totalTime = Date.now() - totalStartTime; console.log( - `[Bulk Judge Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + `[Bulk Judge Invites] Complete: ${successCount} success, ${failureCount} failed in ${( + totalTime / 1000 + ).toFixed(1)}s` ); return { @@ -105,6 +121,7 @@ export default async function sendBulkJudgeHubInvites( results, successCount, failureCount, - error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + error: + failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, }; } diff --git a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts index d2afa94bf..3ca2d0af8 100644 --- a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts +++ b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts @@ -21,7 +21,9 @@ export default async function sendSingleJudgeHubInvite( if (!skipDuplicateCheck) { const dupStart = Date.now(); const users = await GetManyUsers({ email }); - console.log(`[Judge Hub Invite] Duplicate check: ${Date.now() - dupStart}ms`); + console.log( + `[Judge Hub Invite] Duplicate check: ${Date.now() - dupStart}ms` + ); if (users.ok && users.body.length > 0) { throw new DuplicateError(`User with email ${email} already exists.`); } @@ -33,7 +35,9 @@ export default async function sendSingleJudgeHubInvite( { email, name: `${firstName} ${lastName}`, role: 'judge' }, 'invite' ); - console.log(`[Judge Hub Invite] Invite generation: ${Date.now() - genStart}ms`); + console.log( + `[Judge Hub Invite] Invite generation: ${Date.now() - genStart}ms` + ); if (!invite.ok || !invite.body) { throw new HttpError(invite.error ?? 'Failed to generate invite link.'); } @@ -55,13 +59,17 @@ export default async function sendSingleJudgeHubInvite( console.log(`[Judge Hub Invite] sendMail: ${Date.now() - mailStart}ms`); console.log( - `[Judge Hub Invite] βœ“ Done (${email}) β€” total: ${Date.now() - totalStart}ms` + `[Judge Hub Invite] βœ“ Done (${email}) β€” total: ${ + Date.now() - totalStart + }ms` ); return { ok: true, inviteUrl: invite.body, error: null }; } catch (e) { const error = e as HttpError; console.error( - `[Judge Hub Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, + `[Judge Hub Invite] βœ— Failed (${email}) after ${ + Date.now() - totalStart + }ms:`, error.message ); return { ok: false, error: error.message }; diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx index eb8a792ec..a396167da 100644 --- a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx @@ -5,21 +5,32 @@ import sendBulkJudgeHubInvites from '@actions/emails/sendBulkJudgeHubInvites'; import { BulkJudgeInviteResponse, JudgeInviteData } from '@typeDefs/emails'; /** Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. */ -function previewCSV(text: string): { ok: true; rows: JudgeInviteData[] } | { ok: false; error: string } { - const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); +function previewCSV( + text: string +): { ok: true; rows: JudgeInviteData[] } | { ok: false; error: string } { + const lines = text + .split(/\r?\n/) + .map((l) => l.trim()) + .filter(Boolean); if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; const firstCells = lines[0].toLowerCase(); const hasHeader = firstCells.includes('first') || firstCells.includes('email'); const dataLines = hasHeader ? lines.slice(1) : lines; - if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + if (dataLines.length === 0) + return { ok: false, error: 'No data rows found.' }; const rows: JudgeInviteData[] = []; for (let i = 0; i < dataLines.length; i++) { const cols = dataLines[i].split(',').map((c) => c.trim()); if (cols.length < 3) { - return { ok: false, error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.` }; + return { + ok: false, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${ + cols.length + }.`, + }; } rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); } @@ -98,7 +109,9 @@ export default function JudgeBulkInviteForm() { {parseError && (

CSV errors:

-
{parseError}
+
+            {parseError}
+          
)} @@ -131,8 +144,12 @@ export default function JudgeBulkInviteForm() { key={i} className={i % 2 === 0 ? 'bg-white' : 'bg-gray-50'} > - {judge.firstName} - {judge.lastName} + + {judge.firstName} + + + {judge.lastName} + {judge.email} ))} @@ -162,11 +179,15 @@ export default function JudgeBulkInviteForm() {
-

{result.successCount}

+

+ {result.successCount} +

Sent

-

{result.failureCount}

+

+ {result.failureCount} +

Failed

@@ -184,7 +205,9 @@ export default function JudgeBulkInviteForm() { key={i} className="flex flex-col gap-0.5 px-4 py-2 border-b border-gray-100 last:border-0" > - {r.email} + + {r.email} + {r.error}
))} diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx index 00a9b434f..8b5e00d2b 100644 --- a/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx @@ -19,7 +19,11 @@ export default function JudgeSingleInviteForm() { const lastName = formData.get('lastName') as string; const email = formData.get('email') as string; - const result = await sendSingleJudgeHubInvite({ firstName, lastName, email }); + const result = await sendSingleJudgeHubInvite({ + firstName, + lastName, + email, + }); setLoading(false); @@ -35,7 +39,9 @@ export default function JudgeSingleInviteForm() {
- + -

Invite sent!

+

+ Invite sent! +

{inviteUrl}

)} diff --git a/app/(pages)/admin/invite-judges/page.tsx b/app/(pages)/admin/invite-judges/page.tsx index c878b3f49..c892ef0ba 100644 --- a/app/(pages)/admin/invite-judges/page.tsx +++ b/app/(pages)/admin/invite-judges/page.tsx @@ -11,7 +11,8 @@ export default function InviteJudgesPage() {

Invite a Judge

- Send a HackDavis Hub invite to a single judge by entering their details below. + Send a HackDavis Hub invite to a single judge by entering their + details below.

@@ -21,8 +22,11 @@ export default function InviteJudgesPage() {

Bulk Invite Judges

- Upload a CSV with columns First Name, Last Name, Email to - send Hub invites to multiple judges at once. + Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Hub invites to multiple judges at once.

From f4d23713930dc33220d777997414c2fa0e9b5dec Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 01:09:52 -0800 Subject: [PATCH 03/18] Fix image URL and error handling for sending emails --- .../emails/emailFormats/2026JudgeHubInviteTemplate.ts | 4 ++-- app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts b/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts index 2707bd8c2..dc9010166 100644 --- a/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts +++ b/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts @@ -32,7 +32,7 @@ export default function judgeHubInviteTemplate(
- HackDavis 2026 + HackDavis 2026

Welcome to HackDavis 2026! πŸŽ‰

Hi ${fname},

@@ -54,7 +54,7 @@ export default function judgeHubInviteTemplate(

The HackDavis Team

- HackDavis 2026 + HackDavis 2026
`; diff --git a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts index 3ca2d0af8..e9863a1b4 100644 --- a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts +++ b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts @@ -65,13 +65,18 @@ export default async function sendSingleJudgeHubInvite( ); return { ok: true, inviteUrl: invite.body, error: null }; } catch (e) { - const error = e as HttpError; + const errorMessage = + e instanceof Error + ? e.message + : typeof e === 'string' + ? e + : 'Unknown error'; console.error( `[Judge Hub Invite] βœ— Failed (${email}) after ${ Date.now() - totalStart }ms:`, - error.message + errorMessage ); - return { ok: false, error: error.message }; + return { ok: false, error: errorMessage }; } } From 2ee04c426a347bb8cecfcded2102606ebc39290f Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 01:15:15 -0800 Subject: [PATCH 04/18] Document browser preview csv parser --- .../admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx index a396167da..6d78a0a62 100644 --- a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx @@ -4,7 +4,11 @@ import { ChangeEvent, useState } from 'react'; import sendBulkJudgeHubInvites from '@actions/emails/sendBulkJudgeHubInvites'; import { BulkJudgeInviteResponse, JudgeInviteData } from '@typeDefs/emails'; -/** Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. */ +/** + * Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. + * Note: uses simple comma-split, so quoted fields containing commas are not supported. + * This is acceptable since judge names/emails rarely contain commas. + */ function previewCSV( text: string ): { ok: true; rows: JudgeInviteData[] } | { ok: false; error: string } { From 47aef860a289b72f9eee520e64506d7697d1aba9 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 01:15:48 -0800 Subject: [PATCH 05/18] Throw error for missing email ENV vars --- app/(api)/_actions/emails/transporter.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/(api)/_actions/emails/transporter.ts b/app/(api)/_actions/emails/transporter.ts index 6a68e661e..ada44c0a3 100644 --- a/app/(api)/_actions/emails/transporter.ts +++ b/app/(api)/_actions/emails/transporter.ts @@ -3,11 +3,15 @@ import nodemailer from 'nodemailer'; const SENDER_EMAIL = process.env.SENDER_EMAIL; const SENDER_PWD = process.env.SENDER_PWD; -if (!SENDER_EMAIL || !SENDER_PWD) { - const missingVars: string[] = []; - if (!SENDER_EMAIL) missingVars.push('SENDER_EMAIL'); - if (!SENDER_PWD) missingVars.push('SENDER_PWD'); - console.error('Missing Environment Variable(s): ' + missingVars.join(', ')); +const missingVars: string[] = []; +if (!SENDER_EMAIL) missingVars.push('SENDER_EMAIL'); +if (!SENDER_PWD) missingVars.push('SENDER_PWD'); +if (missingVars.length > 0) { + throw new Error( + `Email transporter: missing environment variable(s): ${missingVars.join( + ', ' + )}` + ); } export const transporter = nodemailer.createTransport({ From 3e8893037311bf5dfdc019625a6ba2d93f86f19b Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:08:57 -0800 Subject: [PATCH 06/18] Single mentor invite --- .../emailFormats/2026MentorInviteTemplate.ts | 60 +++++++ .../_actions/emails/sendSingleMentorInvite.ts | 64 +++++++ .../_actions/tito/createRsvpInvitation.ts | 73 ++++++++ .../tito/deleteRsvpInvitationByEmail.ts | 51 ++++++ .../tito/getOrCreateTitoInvitation.ts | 60 +++++++ app/(api)/_actions/tito/getReleases.ts | 20 +++ .../_actions/tito/getRsvpInvitationByEmail.ts | 38 ++++ app/(api)/_actions/tito/getRsvpLists.ts | 20 +++ app/(api)/_actions/tito/titoClient.ts | 38 ++++ .../MentorInvites/MentorInvitesPanel.tsx | 57 ++++++ .../MentorInvites/MentorSingleInviteForm.tsx | 168 ++++++++++++++++++ .../admin/_utils/generateInviteResultsCSV.ts | 48 +++++ app/_types/emails.ts | 21 +++ app/_types/tito.ts | 41 +++++ 14 files changed, 759 insertions(+) create mode 100644 app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts create mode 100644 app/(api)/_actions/emails/sendSingleMentorInvite.ts create mode 100644 app/(api)/_actions/tito/createRsvpInvitation.ts create mode 100644 app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts create mode 100644 app/(api)/_actions/tito/getOrCreateTitoInvitation.ts create mode 100644 app/(api)/_actions/tito/getReleases.ts create mode 100644 app/(api)/_actions/tito/getRsvpInvitationByEmail.ts create mode 100644 app/(api)/_actions/tito/getRsvpLists.ts create mode 100644 app/(api)/_actions/tito/titoClient.ts create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx create mode 100644 app/(pages)/admin/_utils/generateInviteResultsCSV.ts create mode 100644 app/_types/tito.ts diff --git a/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts b/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts new file mode 100644 index 000000000..0d51ba6e4 --- /dev/null +++ b/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts @@ -0,0 +1,60 @@ +export default function mentorInviteTemplate(fname: string, titoUrl: string) { + return ` + + + + + Mentor Invitation - HackDavis 2026 + + + +
+ HackDavis 2026 +

Congratulations from HackDavis! πŸŽ‰

+
+

Hi ${fname},

+

We are thrilled to welcome you as a mentor at HackDavis 2026! We're excited to have your expertise help our hackers bring their ideas to life.

+

Here's what we need from you:

+
+ Claim Your Mentor Ticket +

If the button doesn't work, copy and paste this link into your browser:

+

${titoUrl}

+

After claiming your ticket, you will receive a unique QR code for check-in at the event.

+

See you at HackDavis! ✨

+

The HackDavis Team

+
+
+ HackDavis 2026 +
+ +`; +} diff --git a/app/(api)/_actions/emails/sendSingleMentorInvite.ts b/app/(api)/_actions/emails/sendSingleMentorInvite.ts new file mode 100644 index 000000000..4f3a5abbb --- /dev/null +++ b/app/(api)/_actions/emails/sendSingleMentorInvite.ts @@ -0,0 +1,64 @@ +'use server'; + +import getOrCreateTitoInvitation from '@actions/tito/getOrCreateTitoInvitation'; +import mentorInviteTemplate from './emailFormats/2026MentorInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { MentorInviteData, SingleMentorInviteResponse } from '@typeDefs/emails'; + +interface MentorInviteOptions extends MentorInviteData { + rsvpListSlug: string; + releaseIds: string; +} + +export default async function sendSingleMentorInvite( + options: MentorInviteOptions +): Promise { + const totalStart = Date.now(); + const { firstName, lastName, email, rsvpListSlug, releaseIds } = options; + + try { + console.log(`[Mentor Invite] Starting invite for ${email}`); + + // Step 1: Get or create Tito invitation (with duplicate recovery) + const titoStart = Date.now(); + const titoResult = await getOrCreateTitoInvitation({ + firstName, + lastName, + email, + rsvpListSlug, + releaseIds, + }); + console.log(`[Mentor Invite] Tito: ${Date.now() - titoStart}ms`); + + if (!titoResult.ok) { + throw new Error(titoResult.error); + } + + if (!DEFAULT_SENDER) { + throw new Error('Email configuration missing: SENDER_EMAIL is not set.'); + } + + // Step 2: Send email with Tito URL + const mailStart = Date.now(); + await transporter.sendMail({ + from: DEFAULT_SENDER, + to: email, + subject: "You're Invited to Mentor at HackDavis 2026", + html: mentorInviteTemplate(firstName, titoResult.titoUrl), + }); + console.log(`[Mentor Invite] sendMail: ${Date.now() - mailStart}ms`); + + console.log( + `[Mentor Invite] βœ“ Done (${email}) β€” total: ${Date.now() - totalStart}ms` + ); + return { ok: true, titoUrl: titoResult.titoUrl, error: null }; + } catch (e) { + const errorMessage = + e instanceof Error ? e.message : typeof e === 'string' ? e : 'Unknown error'; + console.error( + `[Mentor Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, + errorMessage + ); + return { ok: false, error: errorMessage }; + } +} diff --git a/app/(api)/_actions/tito/createRsvpInvitation.ts b/app/(api)/_actions/tito/createRsvpInvitation.ts new file mode 100644 index 000000000..8e099eefc --- /dev/null +++ b/app/(api)/_actions/tito/createRsvpInvitation.ts @@ -0,0 +1,73 @@ +'use server'; + +import { ReleaseInvitation, ReleaseInvitationRequest, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +const MAX_RETRIES = 5; +const BASE_DELAY_MS = 1000; + +async function delay(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export default async function createRsvpInvitation( + data: ReleaseInvitationRequest +): Promise> { + try { + if (!data.email?.trim()) throw new Error('Email is required'); + if (!data.rsvpListSlug) throw new Error('RSVP list slug is required'); + if (!data.releaseIds?.trim()) throw new Error('Release IDs are required'); + + const releaseIdsArray = data.releaseIds + .split(',') + .map((id) => parseInt(id.trim(), 10)) + .filter((id) => !isNaN(id)); + + if (releaseIdsArray.length === 0) { + throw new Error('Invalid release IDs format. Use comma-separated numbers.'); + } + + const requestBody: { + email: string; + release_ids: number[]; + first_name?: string; + last_name?: string; + discount_code?: string; + } = { email: data.email.trim(), release_ids: releaseIdsArray }; + + if (data.firstName?.trim()) requestBody.first_name = data.firstName.trim(); + if (data.lastName?.trim()) requestBody.last_name = data.lastName.trim(); + if (data.discountCode?.trim()) requestBody.discount_code = data.discountCode.trim(); + + const url = `/rsvp_lists/${data.rsvpListSlug}/release_invitations`; + + for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { + try { + const response = await TitoRequest<{ release_invitation: ReleaseInvitation }>(url, { + method: 'POST', + body: JSON.stringify({ release_invitation: requestBody }), + }); + console.log(`[Tito] βœ“ Created invitation for ${data.email}`); + return { ok: true, body: response.release_invitation, error: null }; + } catch (err: any) { + if (err.message.includes('429') && attempt < MAX_RETRIES) { + const waitMs = err.retryAfter + ? parseFloat(err.retryAfter) * BASE_DELAY_MS + : Math.pow(2, attempt) * BASE_DELAY_MS + Math.random() * BASE_DELAY_MS; + console.warn( + `[Tito] 429 rate-limited for ${data.email}, retrying in ${Math.round(waitMs)}ms (attempt ${attempt + 1}/${MAX_RETRIES})` + ); + await delay(waitMs); + continue; + } + throw err; + } + } + + throw new Error('Tito API rate limit exceeded after 5 retries'); + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] createRsvpInvitation failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts new file mode 100644 index 000000000..7f5ed7e5c --- /dev/null +++ b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts @@ -0,0 +1,51 @@ +'use server'; + +import { ReleaseInvitation } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function deleteRsvpInvitationByEmail( + rsvpListSlug: string, + email: string +): Promise<{ ok: boolean; error: string | null }> { + try { + const normalizedEmail = email.trim().toLowerCase(); + if (!normalizedEmail) throw new Error('Email is required'); + if (!rsvpListSlug?.trim()) throw new Error('RSVP list slug is required'); + + const pageSize = 1000; + let page = 1; + let foundSlug: string | null = null; + + while (!foundSlug) { + const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; + const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const invitations = data.release_invitations ?? []; + + const match = invitations.find( + (inv) => inv.email?.toLowerCase() === normalizedEmail + ); + if (match?.slug) { + foundSlug = match.slug; + break; + } + + if (invitations.length < pageSize) break; + page++; + } + + if (!foundSlug) { + return { ok: false, error: 'No existing invitation found for this email' }; + } + + await TitoRequest(`/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, { + method: 'DELETE', + }); + + console.log(`[Tito] Deleted invitation for ${email}`); + return { ok: true, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] deleteRsvpInvitationByEmail failed:', error); + return { ok: false, error }; + } +} diff --git a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts new file mode 100644 index 000000000..b3256c4a4 --- /dev/null +++ b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts @@ -0,0 +1,60 @@ +'use server'; + +import createRsvpInvitation from './createRsvpInvitation'; +import getRsvpInvitationByEmail from './getRsvpInvitationByEmail'; +import deleteRsvpInvitationByEmail from './deleteRsvpInvitationByEmail'; +import { ReleaseInvitationRequest } from '@typeDefs/tito'; + +function isDuplicateTicketError(error: string | null | undefined): boolean { + if (!error) return false; + const normalized = error.toLowerCase(); + return ( + normalized.includes('already has a tito ticket attached') || + normalized.includes('already has a ticket attached') || + normalized.includes('email has already been taken') || + normalized.includes('has already been taken') || + (normalized.includes('"email"') && normalized.includes('already taken')) || + normalized.includes('already exists') || + (normalized.includes('already') && normalized.includes('invitation')) + ); +} + +export default async function getOrCreateTitoInvitation( + data: ReleaseInvitationRequest +): Promise<{ ok: true; titoUrl: string } | { ok: false; error: string }> { + const { email, rsvpListSlug } = data; + + let titoResponse = await createRsvpInvitation(data); + + // Duplicate recovery: reuse existing URL if possible, otherwise delete + recreate + if (!titoResponse.ok && isDuplicateTicketError(titoResponse.error)) { + console.warn(`[Tito] Duplicate detected for ${email}, attempting recovery`); + + const existingRes = await getRsvpInvitationByEmail(rsvpListSlug, email); + if (existingRes.ok && existingRes.body) { + const existingUrl = existingRes.body.unique_url ?? existingRes.body.url; + if (existingUrl) { + console.log(`[Tito] Reusing existing URL for ${email}`); + return { ok: true, titoUrl: existingUrl }; + } + } + + console.warn(`[Tito] No usable URL found, deleting and recreating for ${email}`); + const deleteRes = await deleteRsvpInvitationByEmail(rsvpListSlug, email); + if (!deleteRes.ok) { + return { ok: false, error: `Duplicate recovery failed (delete): ${deleteRes.error}` }; + } + titoResponse = await createRsvpInvitation(data); + } + + if (!titoResponse.ok || !titoResponse.body) { + return { ok: false, error: titoResponse.error ?? 'Failed to create Tito invitation' }; + } + + const titoUrl = titoResponse.body.unique_url ?? titoResponse.body.url; + if (!titoUrl) { + return { ok: false, error: 'Tito invitation created but no URL was returned' }; + } + + return { ok: true, titoUrl }; +} diff --git a/app/(api)/_actions/tito/getReleases.ts b/app/(api)/_actions/tito/getReleases.ts new file mode 100644 index 000000000..e3c66b8bd --- /dev/null +++ b/app/(api)/_actions/tito/getReleases.ts @@ -0,0 +1,20 @@ +'use server'; + +import { Release, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getReleases(): Promise> { + try { + const start = Date.now(); + const data = await TitoRequest<{ releases: Release[] }>('/releases'); + console.log(`[Tito] getReleases: ${Date.now() - start}ms`); + + const releases = data.releases ?? []; + console.log(`[Tito] Fetched ${releases.length} releases`); + return { ok: true, body: releases, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getReleases failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts new file mode 100644 index 000000000..2f169dbf7 --- /dev/null +++ b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts @@ -0,0 +1,38 @@ +'use server'; + +import { ReleaseInvitation, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getRsvpInvitationByEmail( + rsvpListSlug: string, + email: string +): Promise> { + try { + const normalizedEmail = email.trim().toLowerCase(); + if (!normalizedEmail) throw new Error('Email is required'); + if (!rsvpListSlug?.trim()) throw new Error('RSVP list slug is required'); + + const pageSize = 1000; + let page = 1; + + while (true) { + const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; + const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const invitations = data.release_invitations ?? []; + + const match = invitations.find( + (inv) => inv.email?.toLowerCase() === normalizedEmail + ); + if (match) return { ok: true, body: match, error: null }; + + if (invitations.length < pageSize) break; + page++; + } + + return { ok: false, body: null, error: 'No existing invitation found for this email' }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getRsvpInvitationByEmail failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/getRsvpLists.ts b/app/(api)/_actions/tito/getRsvpLists.ts new file mode 100644 index 000000000..4b06b3b2a --- /dev/null +++ b/app/(api)/_actions/tito/getRsvpLists.ts @@ -0,0 +1,20 @@ +'use server'; + +import { RsvpList, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getRsvpLists(): Promise> { + try { + const start = Date.now(); + const data = await TitoRequest<{ rsvp_lists: RsvpList[] }>('/rsvp_lists'); + console.log(`[Tito] getRsvpLists: ${Date.now() - start}ms`); + + const rsvpLists = data.rsvp_lists ?? []; + console.log(`[Tito] Fetched ${rsvpLists.length} RSVP lists`); + return { ok: true, body: rsvpLists, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getRsvpLists failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/titoClient.ts b/app/(api)/_actions/tito/titoClient.ts new file mode 100644 index 000000000..df5a48d46 --- /dev/null +++ b/app/(api)/_actions/tito/titoClient.ts @@ -0,0 +1,38 @@ +const TITO_API_TOKEN = process.env.TITO_API_TOKEN; +const TITO_ACCOUNT_SLUG = process.env.TITO_ACCOUNT_SLUG; +const TITO_EVENT_SLUG = process.env.TITO_EVENT_SLUG; + +export async function TitoRequest( + endpoint: string, + options: RequestInit = {} +): Promise { + if (!TITO_API_TOKEN || !TITO_ACCOUNT_SLUG || !TITO_EVENT_SLUG) { + throw new Error('Missing Tito API configuration in environment variables'); + } + + const baseUrl = `https://api.tito.io/v3/${TITO_ACCOUNT_SLUG}/${TITO_EVENT_SLUG}`; + const url = `${baseUrl}${endpoint}`; + + const response = await fetch(url, { + ...options, + headers: { + Authorization: `Token token=${TITO_API_TOKEN}`, + Accept: 'application/json', + 'Content-Type': 'application/json', + ...options.headers, + }, + }); + + if (!response.ok) { + const errorText = await response.text(); + const retryAfter = response.headers.get('Retry-After'); + const error = new Error(`Tito API ${response.status}: ${errorText}`); + if (retryAfter) (error as any).retryAfter = retryAfter; + throw error; + } + + // DELETE responses may return 204 No Content + if (response.status === 204) return {} as T; + + return response.json(); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx new file mode 100644 index 000000000..61fcc7779 --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx @@ -0,0 +1,57 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import getRsvpLists from '@actions/tito/getRsvpLists'; +import getReleases from '@actions/tito/getReleases'; +import { Release, RsvpList } from '@typeDefs/tito'; +import MentorSingleInviteForm from './MentorSingleInviteForm'; + +export default function MentorInvitesPanel() { + const [rsvpLists, setRsvpLists] = useState([]); + const [releases, setReleases] = useState([]); + const [loading, setLoading] = useState(true); + const [loadError, setLoadError] = useState(''); + + useEffect(() => { + (async () => { + const [rsvpRes, relRes] = await Promise.all([getRsvpLists(), getReleases()]); + if (!rsvpRes.ok || !rsvpRes.body) { + setLoadError(rsvpRes.error ?? 'Failed to load RSVP lists.'); + } else if (!relRes.ok || !relRes.body) { + setLoadError(relRes.error ?? 'Failed to load releases.'); + } else { + setRsvpLists(rsvpRes.body); + setReleases(relRes.body); + } + setLoading(false); + })(); + }, []); + + if (loading) { + return ( +
+
+ Loading Tito configuration… +
+ ); + } + + if (loadError) { + return ( +

+ {loadError} +

+ ); + } + + return ( +
+
+

+ Send a Tito invite to a single mentor by entering their details below. +

+ +
+
+ ); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx new file mode 100644 index 000000000..bfc234dcf --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx @@ -0,0 +1,168 @@ +'use client'; + +import { FormEvent, useState } from 'react'; +import sendSingleMentorInvite from '@actions/emails/sendSingleMentorInvite'; +import { Release, RsvpList } from '@typeDefs/tito'; + +interface Props { + rsvpLists: RsvpList[]; + releases: Release[]; +} + +export default function MentorSingleInviteForm({ rsvpLists, releases }: Props) { + const [loading, setLoading] = useState(false); + const [titoUrl, setTitoUrl] = useState(''); + const [error, setError] = useState(''); + const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedReleases, setSelectedReleases] = useState([]); + + const toggleRelease = (id: string) => + setSelectedReleases((prev) => + prev.includes(id) ? prev.filter((r) => r !== id) : [...prev, id] + ); + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + if (!selectedListSlug) { + setError('Please select an RSVP list.'); + return; + } + if (selectedReleases.length === 0) { + setError('Please select at least one release.'); + return; + } + + setLoading(true); + setTitoUrl(''); + setError(''); + + const formData = new FormData(e.currentTarget); + const result = await sendSingleMentorInvite({ + firstName: formData.get('firstName') as string, + lastName: formData.get('lastName') as string, + email: formData.get('email') as string, + rsvpListSlug: selectedListSlug, + releaseIds: selectedReleases.join(','), + }); + + setLoading(false); + + if (result.ok) { + setTitoUrl(result.titoUrl ?? ''); + (e.target as HTMLFormElement).reset(); + setSelectedReleases([]); + } else { + setError(result.error ?? 'An unexpected error occurred.'); + } + }; + + return ( + + {/* Name + Email */} +
+
+ + +
+
+ + +
+
+
+ + +
+ + {/* RSVP List */} +
+ + +
+ + {/* Releases */} +
+
+ + +
+
+ {releases.map((release) => ( + + ))} +
+
+ + + + {error && ( +

+ {error} +

+ )} + {titoUrl && ( +
+

Invite sent!

+

{titoUrl}

+
+ )} + + ); +} diff --git a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts new file mode 100644 index 000000000..42a913ed4 --- /dev/null +++ b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts @@ -0,0 +1,48 @@ +export interface InviteResultRow { + firstName: string; + lastName: string; + email: string; + titoUrl?: string; + hubUrl?: string; // populated for hacker invites; omitted for mentor-only + success: boolean; + error?: string; +} + +function escapeCell(value: string): string { + return `"${value.replace(/"/g, '""')}"`; +} + +/** + * Generates a CSV string from bulk invite results. + * @param rows Merged invite result rows (one per person). + * @param includeHub Set true for hacker invites that include a Hub URL column. + */ +export function generateInviteResultsCSV( + rows: InviteResultRow[], + includeHub = false +): string { + const headers = [ + 'Email', + 'First Name', + 'Last Name', + 'Tito Invite URL', + ...(includeHub ? ['Hub Invite URL'] : []), + 'Success', + 'Notes', + ]; + + const csvRows = rows.map((row) => { + const cells = [ + row.email, + row.firstName, + row.lastName, + row.titoUrl ?? '', + ...(includeHub ? [row.hubUrl ?? ''] : []), + row.success ? 'TRUE' : 'FALSE', + row.success ? '' : (row.error ?? 'Unknown error'), + ]; + return cells.map(escapeCell).join(','); + }); + + return [headers.join(','), ...csvRows].join('\n'); +} diff --git a/app/_types/emails.ts b/app/_types/emails.ts index 9d2c29912..8c9cc5a41 100644 --- a/app/_types/emails.ts +++ b/app/_types/emails.ts @@ -25,3 +25,24 @@ export interface SingleJudgeInviteResponse { inviteUrl?: string; error: string | null; } + +// Mentor Hub invite types + +export interface MentorInviteData { + firstName: string; + lastName: string; + email: string; +} + +export interface MentorInviteResult { + email: string; + success: boolean; + titoUrl?: string; + error?: string; +} + +export interface SingleMentorInviteResponse { + ok: boolean; + titoUrl?: string; + error: string | null; +} diff --git a/app/_types/tito.ts b/app/_types/tito.ts new file mode 100644 index 000000000..a1bc99202 --- /dev/null +++ b/app/_types/tito.ts @@ -0,0 +1,41 @@ +export interface RsvpList { + id: string; + slug: string; + title: string; + release_ids?: number[]; + question_ids?: number[]; + activity_ids?: number[]; +} + +export interface Release { + id: string; + slug: string; + title: string; + quantity?: number; +} + +export interface ReleaseInvitation { + id: string; + slug: string; + email: string; + first_name: string; + last_name: string; + url?: string; + unique_url?: string; + created_at: string; +} + +export interface ReleaseInvitationRequest { + firstName: string; + lastName: string; + email: string; + rsvpListSlug: string; + releaseIds: string; // comma-separated release IDs + discountCode?: string; +} + +export interface TitoResponse { + ok: boolean; + body: T | null; + error: string | null; +} From b8ae04b2d4a8b312acbc56dcd3e8b5e738dd7799 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:09:53 -0800 Subject: [PATCH 07/18] Bulk mentor invites and modify invites page --- .../MentorInvites/MentorBulkInviteForm.tsx | 336 ++++++++++++++++++ .../MentorInvites/MentorInvitesPanel.tsx | 34 ++ app/(pages)/admin/invite-judges/page.tsx | 35 -- app/(pages)/admin/invites/page.tsx | 71 ++++ app/(pages)/admin/page.tsx | 4 +- app/_types/emails.ts | 8 + 6 files changed, 451 insertions(+), 37 deletions(-) create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx delete mode 100644 app/(pages)/admin/invite-judges/page.tsx create mode 100644 app/(pages)/admin/invites/page.tsx diff --git a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx new file mode 100644 index 000000000..b086c70f3 --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx @@ -0,0 +1,336 @@ +'use client'; + +import { ChangeEvent, useState } from 'react'; +import sendBulkMentorInvites from '@actions/emails/sendBulkMentorInvites'; +import { BulkMentorInviteResponse, MentorInviteData } from '@typeDefs/emails'; +import { Release, RsvpList } from '@typeDefs/tito'; +import { generateInviteResultsCSV } from '../../_utils/generateInviteResultsCSV'; + +/** + * Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. + * Note: uses simple comma-split β€” quoted fields containing commas are not supported. + */ +function previewCSV( + text: string +): { ok: true; rows: MentorInviteData[] } | { ok: false; error: string } { + const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); + if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; + + const firstCells = lines[0].toLowerCase(); + const hasHeader = firstCells.includes('first') || firstCells.includes('email'); + const dataLines = hasHeader ? lines.slice(1) : lines; + if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + + const rows: MentorInviteData[] = []; + for (let i = 0; i < dataLines.length; i++) { + const cols = dataLines[i].split(',').map((c) => c.trim()); + if (cols.length < 3) { + return { + ok: false, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.`, + }; + } + rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); + } + return { ok: true, rows }; +} + +type Status = 'idle' | 'previewing' | 'sending' | 'done'; + +interface Props { + rsvpLists: RsvpList[]; + releases: Release[]; +} + +export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { + const [status, setStatus] = useState('idle'); + const [csvText, setCsvText] = useState(''); + const [preview, setPreview] = useState([]); + const [parseError, setParseError] = useState(''); + const [result, setResult] = useState(null); + const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedReleases, setSelectedReleases] = useState([]); + const [configError, setConfigError] = useState(''); + + const toggleRelease = (id: string) => + setSelectedReleases((prev) => + prev.includes(id) ? prev.filter((r) => r !== id) : [...prev, id] + ); + + const handleFileChange = (e: ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = (ev) => { + const text = ev.target?.result as string; + setCsvText(text); + const parsed = previewCSV(text); + if (parsed.ok) { + setPreview(parsed.rows); + setParseError(''); + setStatus('previewing'); + } else { + setParseError(parsed.error); + setPreview([]); + setStatus('idle'); + } + }; + reader.readAsText(file); + }; + + const handleSend = async () => { + if (!selectedListSlug) { + setConfigError('Please select an RSVP list.'); + return; + } + if (selectedReleases.length === 0) { + setConfigError('Please select at least one release.'); + return; + } + setConfigError(''); + setStatus('sending'); + setResult(null); + + const response = await sendBulkMentorInvites( + csvText, + selectedListSlug, + selectedReleases.join(',') + ); + setResult(response); + setStatus('done'); + }; + + const handleDownloadCSV = () => { + if (!result) return; + const resultMap = new Map( + result.results.map((r) => [r.email.toLowerCase(), r]) + ); + const rows = preview.map((mentor) => { + const res = resultMap.get(mentor.email.toLowerCase()); + return { + firstName: mentor.firstName, + lastName: mentor.lastName, + email: mentor.email, + titoUrl: res?.titoUrl, + success: res?.success ?? false, + error: res?.error, + }; + }); + const csv = generateInviteResultsCSV(rows); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `mentor-invites-${new Date().toISOString().split('T')[0]}.csv`; + link.click(); + URL.revokeObjectURL(url); + }; + + const handleReset = () => { + setStatus('idle'); + setCsvText(''); + setPreview([]); + setParseError(''); + setResult(null); + setConfigError(''); + setSelectedReleases([]); + }; + + return ( +
+ {/* File input */} +
+ + +
+ + {/* Parse error */} + {parseError && ( +
+

CSV errors:

+
{parseError}
+
+ )} + + {/* Preview table */} + {status === 'previewing' && preview.length > 0 && ( +
+

+ {preview.length} mentor + {preview.length !== 1 ? 's' : ''} found. Configure Tito settings and + review before sending: +

+ +
+
+ + + + + + + + + + {preview.map((mentor, i) => ( + + + + + + ))} + +
+ First Name + + Last Name + + Email +
{mentor.firstName}{mentor.lastName}{mentor.email}
+
+
+ + {/* RSVP List */} +
+ + +
+ + {/* Releases */} +
+
+ + +
+
+ {releases.map((release) => ( + + ))} +
+
+ + {configError && ( +

+ {configError} +

+ )} + + +
+ )} + + {/* Sending spinner */} + {status === 'sending' && ( +
+
+ Sending invites… +
+ )} + + {/* Results */} + {status === 'done' && result && ( +
+
+
+

{result.successCount}

+

Sent

+
+
+

{result.failureCount}

+

Failed

+
+
+ + {result.failureCount > 0 && ( +
+

+ Failed invites +

+
+ {result.results + .filter((r) => !r.success) + .map((r, i) => ( +
+ {r.email} + {r.error} +
+ ))} +
+
+ )} + +
+ + +
+
+ )} +
+ ); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx index 61fcc7779..b8fec2560 100644 --- a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx +++ b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx @@ -5,8 +5,12 @@ import getRsvpLists from '@actions/tito/getRsvpLists'; import getReleases from '@actions/tito/getReleases'; import { Release, RsvpList } from '@typeDefs/tito'; import MentorSingleInviteForm from './MentorSingleInviteForm'; +import MentorBulkInviteForm from './MentorBulkInviteForm'; + +type Mode = 'single' | 'bulk'; export default function MentorInvitesPanel() { + const [mode, setMode] = useState('single'); const [rsvpLists, setRsvpLists] = useState([]); const [releases, setReleases] = useState([]); const [loading, setLoading] = useState(true); @@ -46,12 +50,42 @@ export default function MentorInvitesPanel() { return (
+ {/* Single / Bulk toggle */} +
+ {(['single', 'bulk'] as Mode[]).map((m) => ( + + ))} +
+ + {mode === 'single' ? (

Send a Tito invite to a single mentor by entering their details below.

+ ) : ( +
+

+ Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Tito invites to multiple mentors at once. +

+ +
+ )}
); } diff --git a/app/(pages)/admin/invite-judges/page.tsx b/app/(pages)/admin/invite-judges/page.tsx deleted file mode 100644 index c892ef0ba..000000000 --- a/app/(pages)/admin/invite-judges/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; - -import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; -import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; - -export default function InviteJudgesPage() { - return ( -
-

Invite Judges

- -
-

Invite a Judge

-

- Send a HackDavis Hub invite to a single judge by entering their - details below. -

- -
- -
- -
-

Bulk Invite Judges

-

- Upload a CSV with columns{' '} - - First Name, Last Name, Email - {' '} - to send Hub invites to multiple judges at once. -

- -
-
- ); -} diff --git a/app/(pages)/admin/invites/page.tsx b/app/(pages)/admin/invites/page.tsx new file mode 100644 index 000000000..7e1aed0fc --- /dev/null +++ b/app/(pages)/admin/invites/page.tsx @@ -0,0 +1,71 @@ +'use client'; + +import { useState } from 'react'; +import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; +import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; +import MentorInvitesPanel from '../_components/MentorInvites/MentorInvitesPanel'; + +type Tab = 'judges' | 'mentors'; + +export default function InvitesPage() { + const [tab, setTab] = useState('judges'); + + return ( +
+

Invites

+ + {/* Tab bar */} +
+ {(['judges', 'mentors'] as Tab[]).map((t) => ( + + ))} +
+ + {/* Judges panel */} + {tab === 'judges' && ( +
+
+

Invite a Judge

+

+ Send a HackDavis Hub invite to a single judge by entering their + details below. +

+ +
+ +
+ +
+

Bulk Invite Judges

+

+ Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Hub invites to multiple judges at once. +

+ +
+
+ )} + + {/* Mentors panel */} + {tab === 'mentors' && ( +
+

Mentor Invites

+ +
+ )} +
+ ); +} diff --git a/app/(pages)/admin/page.tsx b/app/(pages)/admin/page.tsx index e9a42d773..e5b25fc2c 100644 --- a/app/(pages)/admin/page.tsx +++ b/app/(pages)/admin/page.tsx @@ -22,8 +22,8 @@ const action_links = [ body: 'Create Panels', }, { - href: '/admin/invite-judges', - body: 'Invite Judges', + href: '/admin/invites', + body: 'Invites', }, { href: '/admin/randomize-projects', diff --git a/app/_types/emails.ts b/app/_types/emails.ts index 8c9cc5a41..5f749368c 100644 --- a/app/_types/emails.ts +++ b/app/_types/emails.ts @@ -41,6 +41,14 @@ export interface MentorInviteResult { error?: string; } +export interface BulkMentorInviteResponse { + ok: boolean; + results: MentorInviteResult[]; + successCount: number; + failureCount: number; + error: string | null; +} + export interface SingleMentorInviteResponse { ok: boolean; titoUrl?: string; From e08f6fa872edde82fb658b61e3ae30bc88963579 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:11:28 -0800 Subject: [PATCH 08/18] New format bulk mentor invites A per-person pipeline with two independent concurrency-limited pools where each person moves from Tito to email on their own as soon as a slot is free, with no batch boundaries. --- .../_actions/emails/sendBulkMentorInvites.ts | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 app/(api)/_actions/emails/sendBulkMentorInvites.ts diff --git a/app/(api)/_actions/emails/sendBulkMentorInvites.ts b/app/(api)/_actions/emails/sendBulkMentorInvites.ts new file mode 100644 index 000000000..694285a72 --- /dev/null +++ b/app/(api)/_actions/emails/sendBulkMentorInvites.ts @@ -0,0 +1,134 @@ +'use server'; + +import parseInviteCSV from './parseInviteCSV'; +import getOrCreateTitoInvitation from '@actions/tito/getOrCreateTitoInvitation'; +import mentorInviteTemplate from './emailFormats/2026MentorInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { + BulkMentorInviteResponse, + MentorInviteData, + MentorInviteResult, +} from '@typeDefs/emails'; + +const TITO_CONCURRENCY = 20; +const EMAIL_CONCURRENCY = 10; + +/** + * Returns an async function that enforces at most `concurrency` simultaneous + * calls. Each slot is released as soon as its fn resolves/rejects, so the + * pool is always kept as full as possible β€” no batch-boundary idle time. + */ +function createLimiter(concurrency: number) { + let active = 0; + const queue: (() => void)[] = []; + + return async function run(fn: () => Promise): Promise { + if (active >= concurrency) { + await new Promise((resolve) => queue.push(resolve)); + } + active++; + try { + return await fn(); + } finally { + active--; + queue.shift()?.(); + } + }; +} + +export default async function sendBulkMentorInvites( + csvText: string, + rsvpListSlug: string, + releaseIds: string +): Promise { + const parsed = parseInviteCSV(csvText); + if (!parsed.ok) { + return { ok: false, results: [], successCount: 0, failureCount: 0, error: parsed.error }; + } + + const mentors = parsed.body as MentorInviteData[]; + + // Fail fast β€” no point creating Tito invites if email can't send + if (!DEFAULT_SENDER) { + return { + ok: false, + results: [], + successCount: 0, + failureCount: mentors.length, + error: 'Email configuration missing: SENDER_EMAIL is not set.', + }; + } + const sender = DEFAULT_SENDER; // capture for TypeScript narrowing inside async closures + + const totalStart = Date.now(); + console.log( + `[Bulk Mentor Invites] Starting ${mentors.length} mentors β€” Tito pool: ${TITO_CONCURRENCY}, Email pool: ${EMAIL_CONCURRENCY}` + ); + + const titoLimiter = createLimiter(TITO_CONCURRENCY); + const emailLimiter = createLimiter(EMAIL_CONCURRENCY); + + const results: MentorInviteResult[] = []; + let successCount = 0; + let failureCount = 0; + let completed = 0; + + await Promise.allSettled( + mentors.map(async (mentor) => { + // ── Stage 1: Tito ────────────────────────────────────────────────────── + // Slot is released as soon as Tito resolves, before email starts. + const titoResult = await titoLimiter(() => + getOrCreateTitoInvitation({ ...mentor, rsvpListSlug, releaseIds }) + ); + + if (!titoResult.ok) { + console.error(`[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, titoResult.error); + results.push({ email: mentor.email, success: false, error: titoResult.error }); + failureCount++; + console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + return; + } + + // ── Stage 2: Email ───────────────────────────────────────────────────── + // Tito slot is already free; email slot acquired independently. + // While this person waits for an email slot, other people can be running + // their Tito stage in those freed Tito slots. + try { + await emailLimiter(() => + transporter.sendMail({ + from: sender, + to: mentor.email, + subject: "You're Invited to Mentor at HackDavis 2026", + html: mentorInviteTemplate(mentor.firstName, titoResult.titoUrl), + }) + ); + results.push({ email: mentor.email, success: true, titoUrl: titoResult.titoUrl }); + successCount++; + } catch (e) { + const errorMsg = e instanceof Error ? e.message : 'Unknown error'; + console.error(`[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, errorMsg); + results.push({ + email: mentor.email, + success: false, + error: `Email send failed: ${errorMsg}`, + }); + failureCount++; + } + + console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + }) + ); + + const totalTime = Date.now() - totalStart; + console.log( + `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + ); + + return { + ok: failureCount === 0, + results, + successCount, + failureCount, + error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + }; +} From 9b2ef1dd2e761933fe14dddd38e945613fe2efcc Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 17:03:19 -0800 Subject: [PATCH 09/18] Lint fixes --- .../_actions/emails/sendBulkMentorInvites.ts | 45 +++++++++--- .../_actions/emails/sendSingleMentorInvite.ts | 6 +- .../_actions/tito/createRsvpInvitation.ts | 26 +++++-- .../tito/deleteRsvpInvitationByEmail.ts | 18 +++-- .../tito/getOrCreateTitoInvitation.ts | 19 +++-- .../_actions/tito/getRsvpInvitationByEmail.ts | 20 ++++-- app/(api)/_actions/tito/getRsvpLists.ts | 4 +- .../MentorInvites/MentorBulkInviteForm.tsx | 72 ++++++++++++++----- .../MentorInvites/MentorInvitesPanel.tsx | 8 ++- .../MentorInvites/MentorSingleInviteForm.tsx | 16 +++-- .../admin/_utils/generateInviteResultsCSV.ts | 2 +- 11 files changed, 180 insertions(+), 56 deletions(-) diff --git a/app/(api)/_actions/emails/sendBulkMentorInvites.ts b/app/(api)/_actions/emails/sendBulkMentorInvites.ts index 694285a72..6a6a46ef5 100644 --- a/app/(api)/_actions/emails/sendBulkMentorInvites.ts +++ b/app/(api)/_actions/emails/sendBulkMentorInvites.ts @@ -43,7 +43,13 @@ export default async function sendBulkMentorInvites( ): Promise { const parsed = parseInviteCSV(csvText); if (!parsed.ok) { - return { ok: false, results: [], successCount: 0, failureCount: 0, error: parsed.error }; + return { + ok: false, + results: [], + successCount: 0, + failureCount: 0, + error: parsed.error, + }; } const mentors = parsed.body as MentorInviteData[]; @@ -82,10 +88,19 @@ export default async function sendBulkMentorInvites( ); if (!titoResult.ok) { - console.error(`[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, titoResult.error); - results.push({ email: mentor.email, success: false, error: titoResult.error }); + console.error( + `[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, + titoResult.error + ); + results.push({ + email: mentor.email, + success: false, + error: titoResult.error, + }); failureCount++; - console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + console.log( + `[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}` + ); return; } @@ -102,11 +117,18 @@ export default async function sendBulkMentorInvites( html: mentorInviteTemplate(mentor.firstName, titoResult.titoUrl), }) ); - results.push({ email: mentor.email, success: true, titoUrl: titoResult.titoUrl }); + results.push({ + email: mentor.email, + success: true, + titoUrl: titoResult.titoUrl, + }); successCount++; } catch (e) { const errorMsg = e instanceof Error ? e.message : 'Unknown error'; - console.error(`[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, errorMsg); + console.error( + `[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, + errorMsg + ); results.push({ email: mentor.email, success: false, @@ -115,13 +137,17 @@ export default async function sendBulkMentorInvites( failureCount++; } - console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + console.log( + `[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}` + ); }) ); const totalTime = Date.now() - totalStart; console.log( - `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${( + totalTime / 1000 + ).toFixed(1)}s` ); return { @@ -129,6 +155,7 @@ export default async function sendBulkMentorInvites( results, successCount, failureCount, - error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + error: + failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, }; } diff --git a/app/(api)/_actions/emails/sendSingleMentorInvite.ts b/app/(api)/_actions/emails/sendSingleMentorInvite.ts index 4f3a5abbb..78a52090b 100644 --- a/app/(api)/_actions/emails/sendSingleMentorInvite.ts +++ b/app/(api)/_actions/emails/sendSingleMentorInvite.ts @@ -54,7 +54,11 @@ export default async function sendSingleMentorInvite( return { ok: true, titoUrl: titoResult.titoUrl, error: null }; } catch (e) { const errorMessage = - e instanceof Error ? e.message : typeof e === 'string' ? e : 'Unknown error'; + e instanceof Error + ? e.message + : typeof e === 'string' + ? e + : 'Unknown error'; console.error( `[Mentor Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, errorMessage diff --git a/app/(api)/_actions/tito/createRsvpInvitation.ts b/app/(api)/_actions/tito/createRsvpInvitation.ts index 8e099eefc..067a7871c 100644 --- a/app/(api)/_actions/tito/createRsvpInvitation.ts +++ b/app/(api)/_actions/tito/createRsvpInvitation.ts @@ -1,6 +1,10 @@ 'use server'; -import { ReleaseInvitation, ReleaseInvitationRequest, TitoResponse } from '@typeDefs/tito'; +import { + ReleaseInvitation, + ReleaseInvitationRequest, + TitoResponse, +} from '@typeDefs/tito'; import { TitoRequest } from './titoClient'; const MAX_RETRIES = 5; @@ -24,7 +28,9 @@ export default async function createRsvpInvitation( .filter((id) => !isNaN(id)); if (releaseIdsArray.length === 0) { - throw new Error('Invalid release IDs format. Use comma-separated numbers.'); + throw new Error( + 'Invalid release IDs format. Use comma-separated numbers.' + ); } const requestBody: { @@ -37,13 +43,16 @@ export default async function createRsvpInvitation( if (data.firstName?.trim()) requestBody.first_name = data.firstName.trim(); if (data.lastName?.trim()) requestBody.last_name = data.lastName.trim(); - if (data.discountCode?.trim()) requestBody.discount_code = data.discountCode.trim(); + if (data.discountCode?.trim()) + requestBody.discount_code = data.discountCode.trim(); const url = `/rsvp_lists/${data.rsvpListSlug}/release_invitations`; for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { try { - const response = await TitoRequest<{ release_invitation: ReleaseInvitation }>(url, { + const response = await TitoRequest<{ + release_invitation: ReleaseInvitation; + }>(url, { method: 'POST', body: JSON.stringify({ release_invitation: requestBody }), }); @@ -53,9 +62,14 @@ export default async function createRsvpInvitation( if (err.message.includes('429') && attempt < MAX_RETRIES) { const waitMs = err.retryAfter ? parseFloat(err.retryAfter) * BASE_DELAY_MS - : Math.pow(2, attempt) * BASE_DELAY_MS + Math.random() * BASE_DELAY_MS; + : Math.pow(2, attempt) * BASE_DELAY_MS + + Math.random() * BASE_DELAY_MS; console.warn( - `[Tito] 429 rate-limited for ${data.email}, retrying in ${Math.round(waitMs)}ms (attempt ${attempt + 1}/${MAX_RETRIES})` + `[Tito] 429 rate-limited for ${ + data.email + }, retrying in ${Math.round(waitMs)}ms (attempt ${ + attempt + 1 + }/${MAX_RETRIES})` ); await delay(waitMs); continue; diff --git a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts index 7f5ed7e5c..1f0909b81 100644 --- a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts +++ b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts @@ -18,7 +18,9 @@ export default async function deleteRsvpInvitationByEmail( while (!foundSlug) { const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; - const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const data = await TitoRequest<{ + release_invitations: ReleaseInvitation[]; + }>(url); const invitations = data.release_invitations ?? []; const match = invitations.find( @@ -34,12 +36,18 @@ export default async function deleteRsvpInvitationByEmail( } if (!foundSlug) { - return { ok: false, error: 'No existing invitation found for this email' }; + return { + ok: false, + error: 'No existing invitation found for this email', + }; } - await TitoRequest(`/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, { - method: 'DELETE', - }); + await TitoRequest( + `/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, + { + method: 'DELETE', + } + ); console.log(`[Tito] Deleted invitation for ${email}`); return { ok: true, error: null }; diff --git a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts index b3256c4a4..6f240954e 100644 --- a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts +++ b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts @@ -39,21 +39,32 @@ export default async function getOrCreateTitoInvitation( } } - console.warn(`[Tito] No usable URL found, deleting and recreating for ${email}`); + console.warn( + `[Tito] No usable URL found, deleting and recreating for ${email}` + ); const deleteRes = await deleteRsvpInvitationByEmail(rsvpListSlug, email); if (!deleteRes.ok) { - return { ok: false, error: `Duplicate recovery failed (delete): ${deleteRes.error}` }; + return { + ok: false, + error: `Duplicate recovery failed (delete): ${deleteRes.error}`, + }; } titoResponse = await createRsvpInvitation(data); } if (!titoResponse.ok || !titoResponse.body) { - return { ok: false, error: titoResponse.error ?? 'Failed to create Tito invitation' }; + return { + ok: false, + error: titoResponse.error ?? 'Failed to create Tito invitation', + }; } const titoUrl = titoResponse.body.unique_url ?? titoResponse.body.url; if (!titoUrl) { - return { ok: false, error: 'Tito invitation created but no URL was returned' }; + return { + ok: false, + error: 'Tito invitation created but no URL was returned', + }; } return { ok: true, titoUrl }; diff --git a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts index 2f169dbf7..1a5788c95 100644 --- a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts +++ b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts @@ -14,10 +14,13 @@ export default async function getRsvpInvitationByEmail( const pageSize = 1000; let page = 1; + let hasMorePages = true; - while (true) { + while (hasMorePages) { const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; - const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const data = await TitoRequest<{ + release_invitations: ReleaseInvitation[]; + }>(url); const invitations = data.release_invitations ?? []; const match = invitations.find( @@ -25,11 +28,18 @@ export default async function getRsvpInvitationByEmail( ); if (match) return { ok: true, body: match, error: null }; - if (invitations.length < pageSize) break; - page++; + if (invitations.length < pageSize) { + hasMorePages = false; + } else { + page++; + } } - return { ok: false, body: null, error: 'No existing invitation found for this email' }; + return { + ok: false, + body: null, + error: 'No existing invitation found for this email', + }; } catch (e) { const error = e instanceof Error ? e.message : 'Unknown error'; console.error('[Tito] getRsvpInvitationByEmail failed:', error); diff --git a/app/(api)/_actions/tito/getRsvpLists.ts b/app/(api)/_actions/tito/getRsvpLists.ts index 4b06b3b2a..027ebcc80 100644 --- a/app/(api)/_actions/tito/getRsvpLists.ts +++ b/app/(api)/_actions/tito/getRsvpLists.ts @@ -3,7 +3,9 @@ import { RsvpList, TitoResponse } from '@typeDefs/tito'; import { TitoRequest } from './titoClient'; -export default async function getRsvpLists(): Promise> { +export default async function getRsvpLists(): Promise< + TitoResponse +> { try { const start = Date.now(); const data = await TitoRequest<{ rsvp_lists: RsvpList[] }>('/rsvp_lists'); diff --git a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx index b086c70f3..a082489bf 100644 --- a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx +++ b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx @@ -13,13 +13,18 @@ import { generateInviteResultsCSV } from '../../_utils/generateInviteResultsCSV' function previewCSV( text: string ): { ok: true; rows: MentorInviteData[] } | { ok: false; error: string } { - const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); + const lines = text + .split(/\r?\n/) + .map((l) => l.trim()) + .filter(Boolean); if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; const firstCells = lines[0].toLowerCase(); - const hasHeader = firstCells.includes('first') || firstCells.includes('email'); + const hasHeader = + firstCells.includes('first') || firstCells.includes('email'); const dataLines = hasHeader ? lines.slice(1) : lines; - if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + if (dataLines.length === 0) + return { ok: false, error: 'No data rows found.' }; const rows: MentorInviteData[] = []; for (let i = 0; i < dataLines.length; i++) { @@ -27,7 +32,9 @@ function previewCSV( if (cols.length < 3) { return { ok: false, - error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.`, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${ + cols.length + }.`, }; } rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); @@ -48,7 +55,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { const [preview, setPreview] = useState([]); const [parseError, setParseError] = useState(''); const [result, setResult] = useState(null); - const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedListSlug, setSelectedListSlug] = useState( + rsvpLists[0]?.slug ?? '' + ); const [selectedReleases, setSelectedReleases] = useState([]); const [configError, setConfigError] = useState(''); @@ -122,7 +131,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; - link.download = `mentor-invites-${new Date().toISOString().split('T')[0]}.csv`; + link.download = `mentor-invites-${ + new Date().toISOString().split('T')[0] + }.csv`; link.click(); URL.revokeObjectURL(url); }; @@ -160,7 +171,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {parseError && (

CSV errors:

-
{parseError}
+
+            {parseError}
+          
)} @@ -191,10 +204,19 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {preview.map((mentor, i) => ( - - {mentor.firstName} - {mentor.lastName} - {mentor.email} + + + {mentor.firstName} + + + {mentor.lastName} + + + {mentor.email} + ))} @@ -204,7 +226,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {/* RSVP List */}
- + - {selectedReleases.length === releases.length ? 'Deselect all' : 'Select all'} + {selectedReleases.length === releases.length + ? 'Deselect all' + : 'Select all'}
@@ -138,7 +144,9 @@ export default function MentorSingleInviteForm({ rsvpLists, releases }: Props) { className="w-4 h-4 accent-[#005271]" /> {release.title} - {release.id} + + {release.id} + ))}
diff --git a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts index 42a913ed4..401ec3a77 100644 --- a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts +++ b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts @@ -39,7 +39,7 @@ export function generateInviteResultsCSV( row.titoUrl ?? '', ...(includeHub ? [row.hubUrl ?? ''] : []), row.success ? 'TRUE' : 'FALSE', - row.success ? '' : (row.error ?? 'Unknown error'), + row.success ? '' : row.error ?? 'Unknown error', ]; return cells.map(escapeCell).join(','); }); From 95ceb87cc3736eaa47d13697019be24446973973 Mon Sep 17 00:00:00 2001 From: michelleyeoh <74385095+michelleyeoh@users.noreply.github.com> Date: Fri, 27 Feb 2026 21:53:04 -0800 Subject: [PATCH 10/18] update cached client (#408) --- __tests__/mongoClient.test.ts | 58 ++++++++++++++++++++++++ app/(api)/_utils/mongodb/mongoClient.mjs | 34 ++++++++++++-- 2 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 __tests__/mongoClient.test.ts diff --git a/__tests__/mongoClient.test.ts b/__tests__/mongoClient.test.ts new file mode 100644 index 000000000..67b49bd6d --- /dev/null +++ b/__tests__/mongoClient.test.ts @@ -0,0 +1,58 @@ +/** @jest-environment node */ +import { getClient, resetClient } from '@utils/mongodb/mongoClient.mjs'; +import { MongoClient } from 'mongodb'; + +describe('getClient', () => { + beforeEach(async () => { + await resetClient(); + jest.restoreAllMocks(); + }); + + it('should throw an error if MONGODB_URI is missing', async () => { + const originalUri = process.env.MONGODB_URI; + delete process.env.MONGODB_URI; + + await resetClient(); + + await expect(getClient()).rejects.toThrow( + 'Missing MONGODB_URI environment variable.' + ); + + process.env.MONGODB_URI = originalUri; + }); + + it('should return the same instance on multiple calls', async () => { + const mockDb = { db: jest.fn() }; + const spy = jest + .spyOn(MongoClient.prototype, 'connect') + .mockResolvedValue(mockDb as any); + + const c1 = await getClient(); + const c2 = await getClient(); + + expect(c1).toBe(c2); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should dedupe concurrent callers using cachedPromise', async () => { + const mockDb = { db: jest.fn() }; + const spy = jest + .spyOn(MongoClient.prototype, 'connect') + .mockResolvedValue(mockDb as any); + const [c1, c2] = await Promise.all([getClient(), getClient()]); + expect(c1).toBe(c2); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should retry after a failed connection', async () => { + const spy = jest + .spyOn(MongoClient.prototype, 'connect') + .mockRejectedValueOnce(new Error('Network Fail')) + .mockResolvedValueOnce({ db: jest.fn() } as any); + + await expect(getClient()).rejects.toThrow('Network Fail'); + + await expect(getClient()).resolves.toBeDefined(); + expect(spy).toHaveBeenCalledTimes(2); + }); +}); diff --git a/app/(api)/_utils/mongodb/mongoClient.mjs b/app/(api)/_utils/mongodb/mongoClient.mjs index 33bcfaaf5..615b4bca5 100644 --- a/app/(api)/_utils/mongodb/mongoClient.mjs +++ b/app/(api)/_utils/mongodb/mongoClient.mjs @@ -1,15 +1,41 @@ import { MongoClient } from 'mongodb'; -const uri = process.env.MONGODB_URI; let cachedClient = null; +let cachedPromise = null; export async function getClient() { + const uri = process.env.MONGODB_URI; + if (!uri) { + throw new Error('Missing MONGODB_URI environment variable.'); + } + if (cachedClient) { return cachedClient; } - const client = new MongoClient(uri); - cachedClient = client; - return cachedClient; + + if (!cachedPromise) { + const client = new MongoClient(uri); + cachedPromise = client + .connect() + .then((connectedClient) => { + cachedClient = connectedClient; + return connectedClient; + }) + .catch((error) => { + client.close().catch(() => {}); + cachedPromise = null; + cachedClient = null; + throw error; + }); + } + + return cachedPromise; +} + +// Helper function for testing +export async function resetClient() { + cachedClient = null; + cachedPromise = null; } export async function getDatabase() { From 032967d90589cdd19d69d521afa3a3020d1059e0 Mon Sep 17 00:00:00 2001 From: michelleyeoh <74385095+michelleyeoh@users.noreply.github.com> Date: Sun, 1 Mar 2026 10:32:20 -0800 Subject: [PATCH 11/18] hackers choice done (#410) --- .../HomeJudging/HackersChoiceAwards.tsx | 31 ++++- .../hackers-choice/hackers_choice_mascots.svg | 110 ++++++++++++++++++ 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 public/hackers/hackers-choice/hackers_choice_mascots.svg diff --git a/app/(pages)/(hackers)/_components/HomeJudging/HackersChoiceAwards.tsx b/app/(pages)/(hackers)/_components/HomeJudging/HackersChoiceAwards.tsx index 34a3edad2..c5a786470 100644 --- a/app/(pages)/(hackers)/_components/HomeJudging/HackersChoiceAwards.tsx +++ b/app/(pages)/(hackers)/_components/HomeJudging/HackersChoiceAwards.tsx @@ -1,3 +1,32 @@ +import Image from 'next/image'; +import hackers_choice_mascots from 'public/hackers/hackers-choice/hackers_choice_mascots.svg'; +import TextCard from '../HomeHacking/_components/TextCard'; + export default function HackerChoiceAward() { - return
Hacker Choice Award
; + return ( +
+
+
+ cow and frog hackdavis mascots cheering +
+
+ +
+
+
+ ); } diff --git a/public/hackers/hackers-choice/hackers_choice_mascots.svg b/public/hackers/hackers-choice/hackers_choice_mascots.svg new file mode 100644 index 000000000..f2ff5325e --- /dev/null +++ b/public/hackers/hackers-choice/hackers_choice_mascots.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From eb7fa5ce2a7e9613d9e8b3ad6f0ef3c6c147da3f Mon Sep 17 00:00:00 2001 From: Sandeep Reehal <126985041+ReehalS@users.noreply.github.com> Date: Mon, 2 Mar 2026 19:40:50 -0800 Subject: [PATCH 12/18] Judge email invites (#406) * Judge invites! * Fix image URL and error handling for sending emails * Document browser preview csv parser * Throw error for missing email ENV vars * cleaned code and updated email * fixed email template --------- Co-authored-by: michelleyeoh Co-authored-by: michelleyeoh <74385095+michelleyeoh@users.noreply.github.com> --- .../2026JudgeHubInviteTemplate.ts | 79 ++++++ app/(api)/_actions/emails/parseInviteCSV.ts | 88 +++++++ .../emails/sendBulkJudgeHubInvites.ts | 96 ++++++++ .../emails/sendSingleJudgeHubInvite.ts | 66 +++++ app/(api)/_actions/emails/transporter.ts | 28 +++ .../InviteLinkForm/InviteLinkForm.tsx | 2 +- .../JudgeInvites/JudgeBulkInviteForm.tsx | 232 ++++++++++++++++++ .../JudgeInvites/JudgeSingleInviteForm.tsx | 96 ++++++++ .../{invite-link => invite-hackers}/page.tsx | 5 +- app/(pages)/admin/invite-judges/page.tsx | 35 +++ .../admin/invite-link/invite.module.scss | 5 - app/(pages)/admin/page.tsx | 6 +- app/_types/emails.ts | 27 ++ public/email/2025_email_footer.png | Bin 0 -> 199982 bytes public/email/2025_email_header.png | Bin 0 -> 39901 bytes 15 files changed, 755 insertions(+), 10 deletions(-) create mode 100644 app/(api)/_actions/emails/emailTemplates/2026JudgeHubInviteTemplate.ts create mode 100644 app/(api)/_actions/emails/parseInviteCSV.ts create mode 100644 app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts create mode 100644 app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts create mode 100644 app/(api)/_actions/emails/transporter.ts create mode 100644 app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx create mode 100644 app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx rename app/(pages)/admin/{invite-link => invite-hackers}/page.tsx (52%) create mode 100644 app/(pages)/admin/invite-judges/page.tsx delete mode 100644 app/(pages)/admin/invite-link/invite.module.scss create mode 100644 app/_types/emails.ts create mode 100644 public/email/2025_email_footer.png create mode 100644 public/email/2025_email_header.png diff --git a/app/(api)/_actions/emails/emailTemplates/2026JudgeHubInviteTemplate.ts b/app/(api)/_actions/emails/emailTemplates/2026JudgeHubInviteTemplate.ts new file mode 100644 index 000000000..db6eda9e9 --- /dev/null +++ b/app/(api)/_actions/emails/emailTemplates/2026JudgeHubInviteTemplate.ts @@ -0,0 +1,79 @@ +export default function judgeHubInviteTemplate( + fname: string, + inviteLink: string +) { + const EMAIL_SUBJECT = '[ACTION REQUIRED] HackDavis 2026 Judging App Invite'; + const HEADER_IMAGE_URL = `${process.env.BASE_URL}/email/2025_email_header.png`; + const FOOTER_IMAGE_URL = `${process.env.BASE_URL}/email/2025_email_footer.png`; + const MEETING_RECORDING_URL = + 'https://drive.google.com/file/d/1Lit5fvhev2q8mkv2QyDgTgeh3cfLeX9l/view?usp=sharing'; + const JUDGING_GUIDE_URL = + 'https://www.notion.so/hackdavis/HackDavis-2025-Judging-Guide-1c32d37fcae880b1ba3aeb0a9a7841b7?pvs=4'; + const INVITATION_TO_REGISTER_GUIDE_URL = + 'https://www.notion.so/hackdavis/HackDavis-2025-Judging-Guide-1c32d37fcae880b1ba3aeb0a9a7841b7?pvs=4#1cb2d37fcae880b6a5f4e3d793349bf6'; + const DISCORD_SERVER_URL = 'https://discord.gg/wc6QQEc'; + + return ` + + + + + ${EMAIL_SUBJECT} + + + +
+ HackDavis 2026 header +

Welcome to HackDavis 2026! πŸŽ‰

+
+

Hi ${fname},

+
+

Thank you again for joining us as a judge, we’re thrilled to have you on board! Here are some key resources from our virtual orientation:

+

πŸ”Ή Meeting Recording: ${MEETING_RECORDING_URL}

+

πŸ”Ή Judging Guide: ${JUDGING_GUIDE_URL}

+

You are requested to carefully review the judging guide and familiarize yourself with its content before the event for a smooth judging experience. Kindly do not share the Judging Guide with anyone outside the judging team.

+
+

IMPORTANT NEXT STEP: Create an account on our Judging Application

+

⚠️ The Judging Application is a key prerequisite for the day of the event! Please carefully review the Invitation to Register section of the Judging Guide before proceeding to create your account.

+

Please use the following unique invite link below to create your judge account. Do NOT share it with anyone else.

+

πŸ‘‰ Invite Link: ${inviteLink}

+
+

OPTIONAL: Join our Discord

+

We’ll be using Discord server as our main space for announcements and support during the event. Joining is totally optional for judges, but it’s a great way to:

+

πŸ”Ή Get quick answers from the team

+

πŸ”Ή Stay in the loop on event updates

+

πŸ”Ή Connect with other judges & participants

+

πŸ‘‰ Discord Server: ${DISCORD_SERVER_URL}

+
+

Lastly, we are grateful for your thoughtful feedback during the orientation. As suggested, we will be sharing more details soon about the prize tracks and their eligibility criteria and rubrics to help you get a sense of the tracks ahead of time.

+

Please feel free to reach out if you have any questions or concerns. Looking forward to seeing you at the event!

+
+

Thank you,

+

The HackDavis Team

+
+
+ HackDavis 2026 footer +
+ +`; +} diff --git a/app/(api)/_actions/emails/parseInviteCSV.ts b/app/(api)/_actions/emails/parseInviteCSV.ts new file mode 100644 index 000000000..57ba39fd4 --- /dev/null +++ b/app/(api)/_actions/emails/parseInviteCSV.ts @@ -0,0 +1,88 @@ +import { parse } from 'csv-parse/sync'; +import { z } from 'zod'; +import { JudgeInviteData } from '@typeDefs/emails'; + +const emailSchema = z.string().email(); + +interface ParseResult { + ok: true; + body: JudgeInviteData[]; +} + +interface ParseError { + ok: false; + error: string; +} + +export default function parseInviteCSV( + csvText: string +): ParseResult | ParseError { + try { + if (!csvText.trim()) { + return { ok: false, error: 'CSV file is empty.' }; + } + + const rows: string[][] = parse(csvText, { + trim: true, + skip_empty_lines: true, + }); + + if (rows.length === 0) { + return { ok: false, error: 'CSV file has no rows.' }; + } + + // Detect and skip header row + const firstRow = rows[0].map((cell) => cell.toLowerCase()); + const hasHeader = + firstRow.some((cell) => cell.includes('first')) || + firstRow.some((cell) => cell.includes('email')); + const dataRows = hasHeader ? rows.slice(1) : rows; + + if (dataRows.length === 0) { + return { ok: false, error: 'CSV has a header but no data rows.' }; + } + + const results: JudgeInviteData[] = []; + const errors: string[] = []; + + for (let i = 0; i < dataRows.length; i++) { + const row = dataRows[i]; + const rowNum = hasHeader ? i + 2 : i + 1; + + if (row.length < 3) { + errors.push( + `Row ${rowNum}: expected 3 columns (First Name, Last Name, Email), got ${row.length}.` + ); + continue; + } + + const [firstName, lastName, email] = row; + + if (!firstName) { + errors.push(`Row ${rowNum}: First Name is empty.`); + continue; + } + if (!lastName) { + errors.push(`Row ${rowNum}: Last Name is empty.`); + continue; + } + + const emailResult = emailSchema.safeParse(email); + if (!emailResult.success) { + errors.push(`Row ${rowNum}: "${email}" is not a valid email address.`); + continue; + } + + results.push({ firstName, lastName, email }); + } + + if (errors.length > 0) { + return { ok: false, error: errors.join('\n') }; + } + + return { ok: true, body: results }; + } catch (e) { + const error = e as Error; + return { ok: false, error: `Failed to parse CSV: ${error.message}` }; + } +} diff --git a/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts new file mode 100644 index 000000000..ac8949ba7 --- /dev/null +++ b/app/(api)/_actions/emails/sendBulkJudgeHubInvites.ts @@ -0,0 +1,96 @@ +'use server'; + +import { GetManyUsers } from '@datalib/users/getUser'; +import parseInviteCSV from './parseInviteCSV'; +import sendSingleJudgeHubInvite from './sendSingleJudgeHubInvite'; +import { + BulkJudgeInviteResponse, + JudgeInviteData, + JudgeInviteResult, +} from '@typeDefs/emails'; + +const CONCURRENCY = 10; + +export default async function sendBulkJudgeHubInvites( + csvText: string +): Promise { + // Parse and validate CSV + const parsed = parseInviteCSV(csvText); + if (!parsed.ok) { + return { + ok: false, + results: [], + successCount: 0, + failureCount: 0, + error: parsed.error, + }; + } + + const allJudges = parsed.body; + const results: JudgeInviteResult[] = []; + let successCount = 0; + let failureCount = 0; + + // Single upfront duplicate check for all emails at once + const allEmails = allJudges.map((j) => j.email); + const existingUsers = await GetManyUsers({ email: { $in: allEmails } }); + const existingEmailSet = new Set( + existingUsers.ok + ? existingUsers.body.map((u: { email: string }) => u.email) + : [] + ); + + // Partition judges into duplicates (immediate failure) and new (to send) + const judges: JudgeInviteData[] = []; + for (const judge of allJudges) { + if (existingEmailSet.has(judge.email)) { + results.push({ + email: judge.email, + success: false, + error: 'User already exists.', + }); + failureCount++; + } else { + judges.push(judge); + } + } + + for (let i = 0; i < judges.length; i += CONCURRENCY) { + const batch: JudgeInviteData[] = judges.slice(i, i + CONCURRENCY); + + const batchResults = await Promise.allSettled( + batch.map((judge) => sendSingleJudgeHubInvite(judge, true)) + ); + + for (let j = 0; j < batchResults.length; j++) { + const result = batchResults[j]; + const email = batch[j].email; + + if (result.status === 'fulfilled' && result.value.ok) { + results.push({ + email, + success: true, + inviteUrl: result.value.inviteUrl, + }); + successCount++; + } else { + const errorMsg = + result.status === 'rejected' + ? result.reason?.message ?? 'Unknown error' + : result.value.error ?? 'Unknown error'; + console.error(`[Bulk Judge Invites] βœ— Failed: ${email}`, errorMsg); + results.push({ email, success: false, error: errorMsg }); + failureCount++; + } + } + } + + return { + ok: failureCount === 0, + results, + successCount, + failureCount, + error: + failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + }; +} diff --git a/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts new file mode 100644 index 000000000..31104b7cb --- /dev/null +++ b/app/(api)/_actions/emails/sendSingleJudgeHubInvite.ts @@ -0,0 +1,66 @@ +'use server'; + +import GenerateInvite from '@datalib/invite/generateInvite'; +import { GetManyUsers } from '@datalib/users/getUser'; +import { DuplicateError, HttpError } from '@utils/response/Errors'; +import judgeHubInviteTemplate from './emailTemplates/2026JudgeHubInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { JudgeInviteData, SingleJudgeInviteResponse } from '@typeDefs/emails'; + +const EMAIL_SUBJECT = '[ACTION REQUIRED] HackDavis 2025 Judging App Invite'; + +export default async function sendSingleJudgeHubInvite( + options: JudgeInviteData, + skipDuplicateCheck = false +): Promise { + const totalStart = Date.now(); + const { firstName, lastName, email } = options; + + try { + // Step 1: duplicate check (skipped in bulk flow β€” checked upfront there) + if (!skipDuplicateCheck) { + const users = await GetManyUsers({ email }); + if (users.ok && users.body.length > 0) { + throw new DuplicateError(`User with email ${email} already exists.`); + } + } + + // Step 2: generate HMAC-signed invite link + const invite = await GenerateInvite( + { email, name: `${firstName} ${lastName}`, role: 'judge' }, + 'invite' + ); + if (!invite.ok || !invite.body) { + throw new HttpError(invite.error ?? 'Failed to generate invite link.'); + } + + if (!DEFAULT_SENDER) { + throw new Error('Email configuration missing: SENDER_EMAIL is not set.'); + } + + const htmlContent = judgeHubInviteTemplate(firstName, invite.body); + + // Step 3: send email + await transporter.sendMail({ + from: DEFAULT_SENDER, + to: email, + subject: EMAIL_SUBJECT, + html: htmlContent, + }); + return { ok: true, inviteUrl: invite.body, error: null }; + } catch (e) { + const errorMessage = + e instanceof Error + ? e.message + : typeof e === 'string' + ? e + : 'Unknown error'; + console.error( + `[Judge Hub Invite] βœ— Failed (${email}) after ${ + Date.now() - totalStart + }ms:`, + errorMessage + ); + return { ok: false, error: errorMessage }; + } +} diff --git a/app/(api)/_actions/emails/transporter.ts b/app/(api)/_actions/emails/transporter.ts new file mode 100644 index 000000000..ada44c0a3 --- /dev/null +++ b/app/(api)/_actions/emails/transporter.ts @@ -0,0 +1,28 @@ +import nodemailer from 'nodemailer'; + +const SENDER_EMAIL = process.env.SENDER_EMAIL; +const SENDER_PWD = process.env.SENDER_PWD; + +const missingVars: string[] = []; +if (!SENDER_EMAIL) missingVars.push('SENDER_EMAIL'); +if (!SENDER_PWD) missingVars.push('SENDER_PWD'); +if (missingVars.length > 0) { + throw new Error( + `Email transporter: missing environment variable(s): ${missingVars.join( + ', ' + )}` + ); +} + +export const transporter = nodemailer.createTransport({ + service: 'gmail', + pool: true, + maxConnections: 10, + maxMessages: Infinity, // don't recycle connections mid-batch + auth: { + user: SENDER_EMAIL, + pass: SENDER_PWD, + }, +}); + +export const DEFAULT_SENDER = SENDER_EMAIL; diff --git a/app/(pages)/admin/_components/InviteLinkForm/InviteLinkForm.tsx b/app/(pages)/admin/_components/InviteLinkForm/InviteLinkForm.tsx index 81259b06c..7fa5376a7 100644 --- a/app/(pages)/admin/_components/InviteLinkForm/InviteLinkForm.tsx +++ b/app/(pages)/admin/_components/InviteLinkForm/InviteLinkForm.tsx @@ -47,7 +47,7 @@ export default function InviteLinkForm() { return ( <>
-

Invite a User

+

Invite a User [to be deprecated & replaced]

{error}

diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx new file mode 100644 index 000000000..6d78a0a62 --- /dev/null +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeBulkInviteForm.tsx @@ -0,0 +1,232 @@ +'use client'; + +import { ChangeEvent, useState } from 'react'; +import sendBulkJudgeHubInvites from '@actions/emails/sendBulkJudgeHubInvites'; +import { BulkJudgeInviteResponse, JudgeInviteData } from '@typeDefs/emails'; + +/** + * Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. + * Note: uses simple comma-split, so quoted fields containing commas are not supported. + * This is acceptable since judge names/emails rarely contain commas. + */ +function previewCSV( + text: string +): { ok: true; rows: JudgeInviteData[] } | { ok: false; error: string } { + const lines = text + .split(/\r?\n/) + .map((l) => l.trim()) + .filter(Boolean); + if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; + + const firstCells = lines[0].toLowerCase(); + const hasHeader = + firstCells.includes('first') || firstCells.includes('email'); + const dataLines = hasHeader ? lines.slice(1) : lines; + if (dataLines.length === 0) + return { ok: false, error: 'No data rows found.' }; + + const rows: JudgeInviteData[] = []; + for (let i = 0; i < dataLines.length; i++) { + const cols = dataLines[i].split(',').map((c) => c.trim()); + if (cols.length < 3) { + return { + ok: false, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${ + cols.length + }.`, + }; + } + rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); + } + return { ok: true, rows }; +} + +type Status = 'idle' | 'previewing' | 'sending' | 'done'; + +export default function JudgeBulkInviteForm() { + const [status, setStatus] = useState('idle'); + const [csvText, setCsvText] = useState(''); + const [preview, setPreview] = useState([]); + const [parseError, setParseError] = useState(''); + const [result, setResult] = useState(null); + + const handleFileChange = (e: ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = (ev) => { + const text = ev.target?.result as string; + setCsvText(text); + + const parsed = previewCSV(text); + if (parsed.ok) { + setPreview(parsed.rows); + setParseError(''); + setStatus('previewing'); + } else { + setParseError(parsed.error); + setPreview([]); + setStatus('idle'); + } + }; + reader.readAsText(file); + }; + + const handleSend = async () => { + setStatus('sending'); + setResult(null); + + const response = await sendBulkJudgeHubInvites(csvText); + setResult(response); + setStatus('done'); + }; + + const handleReset = () => { + setStatus('idle'); + setCsvText(''); + setPreview([]); + setParseError(''); + setResult(null); + }; + + return ( +
+ {/* File input */} +
+ + +
+ + {/* Parse error */} + {parseError && ( +
+

CSV errors:

+
+            {parseError}
+          
+
+ )} + + {/* Preview table */} + {status === 'previewing' && preview.length > 0 && ( +
+

+ {preview.length} judge + {preview.length !== 1 ? 's' : ''} found. Review before sending: +

+
+
+ + + + + + + + + + {preview.map((judge, i) => ( + + + + + + ))} + +
+ First Name + + Last Name + + Email +
+ {judge.firstName} + + {judge.lastName} + {judge.email}
+
+
+ +
+ )} + + {/* Sending spinner */} + {status === 'sending' && ( +
+
+ Sending invites… +
+ )} + + {/* Results */} + {status === 'done' && result && ( +
+
+
+

+ {result.successCount} +

+

Sent

+
+
+

+ {result.failureCount} +

+

Failed

+
+
+ + {result.failureCount > 0 && ( +
+

+ Failed invites +

+
+ {result.results + .filter((r) => !r.success) + .map((r, i) => ( +
+ + {r.email} + + {r.error} +
+ ))} +
+
+ )} + + +
+ )} +
+ ); +} diff --git a/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx new file mode 100644 index 000000000..8b5e00d2b --- /dev/null +++ b/app/(pages)/admin/_components/JudgeInvites/JudgeSingleInviteForm.tsx @@ -0,0 +1,96 @@ +'use client'; + +import { FormEvent, useState } from 'react'; +import sendSingleJudgeHubInvite from '@actions/emails/sendSingleJudgeHubInvite'; + +export default function JudgeSingleInviteForm() { + const [loading, setLoading] = useState(false); + const [inviteUrl, setInviteUrl] = useState(''); + const [error, setError] = useState(''); + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + setLoading(true); + setInviteUrl(''); + setError(''); + + const formData = new FormData(e.currentTarget); + const firstName = formData.get('firstName') as string; + const lastName = formData.get('lastName') as string; + const email = formData.get('email') as string; + + const result = await sendSingleJudgeHubInvite({ + firstName, + lastName, + email, + }); + + setLoading(false); + + if (result.ok) { + setInviteUrl(result.inviteUrl ?? ''); + (e.target as HTMLFormElement).reset(); + } else { + setError(result.error ?? 'An unexpected error occurred.'); + } + }; + + return ( + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ + + + {error && ( +

+ {error} +

+ )} + {inviteUrl && ( +
+

+ Invite sent! +

+

{inviteUrl}

+
+ )} + + ); +} diff --git a/app/(pages)/admin/invite-link/page.tsx b/app/(pages)/admin/invite-hackers/page.tsx similarity index 52% rename from app/(pages)/admin/invite-link/page.tsx rename to app/(pages)/admin/invite-hackers/page.tsx index 1e03eb424..e042ca6cd 100644 --- a/app/(pages)/admin/invite-link/page.tsx +++ b/app/(pages)/admin/invite-hackers/page.tsx @@ -1,11 +1,10 @@ 'use client'; import InviteLinkForm from '../_components/InviteLinkForm/InviteLinkForm'; -import styles from './invite.module.scss'; -export default function AdminInviteLinkPage() { +export default function InviteJudgesPage() { return ( -
+
); diff --git a/app/(pages)/admin/invite-judges/page.tsx b/app/(pages)/admin/invite-judges/page.tsx new file mode 100644 index 000000000..c892ef0ba --- /dev/null +++ b/app/(pages)/admin/invite-judges/page.tsx @@ -0,0 +1,35 @@ +'use client'; + +import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; +import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; + +export default function InviteJudgesPage() { + return ( +
+

Invite Judges

+ +
+

Invite a Judge

+

+ Send a HackDavis Hub invite to a single judge by entering their + details below. +

+ +
+ +
+ +
+

Bulk Invite Judges

+

+ Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Hub invites to multiple judges at once. +

+ +
+
+ ); +} diff --git a/app/(pages)/admin/invite-link/invite.module.scss b/app/(pages)/admin/invite-link/invite.module.scss deleted file mode 100644 index 847ca7f68..000000000 --- a/app/(pages)/admin/invite-link/invite.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.container { - min-height: 100vh; - background-color: var(--background-tertiary); - padding: 24px; -} \ No newline at end of file diff --git a/app/(pages)/admin/page.tsx b/app/(pages)/admin/page.tsx index c7a1f1b5d..cd139d2f1 100644 --- a/app/(pages)/admin/page.tsx +++ b/app/(pages)/admin/page.tsx @@ -22,9 +22,13 @@ const action_links = [ body: 'Create Panels', }, { - href: '/admin/invite-link', + href: '/admin/invite-judges', body: 'Invite Judges', }, + { + href: '/admin/invite-hackers', + body: 'Invite Hackers', + }, { href: '/admin/randomize-projects', body: 'Randomize Projects', diff --git a/app/_types/emails.ts b/app/_types/emails.ts new file mode 100644 index 000000000..9d2c29912 --- /dev/null +++ b/app/_types/emails.ts @@ -0,0 +1,27 @@ +// Judge Hub invite types +export interface JudgeInviteData { + firstName: string; + lastName: string; + email: string; +} + +export interface JudgeInviteResult { + email: string; + success: boolean; + inviteUrl?: string; + error?: string; +} + +export interface BulkJudgeInviteResponse { + ok: boolean; + results: JudgeInviteResult[]; + successCount: number; + failureCount: number; + error: string | null; +} + +export interface SingleJudgeInviteResponse { + ok: boolean; + inviteUrl?: string; + error: string | null; +} diff --git a/public/email/2025_email_footer.png b/public/email/2025_email_footer.png new file mode 100644 index 0000000000000000000000000000000000000000..0c829d6934273bb03a0f1e6e1d501d832c34f32a GIT binary patch literal 199982 zcmY(q1x#Gg)&@HG;DbwXcc&e+xVyVM6n87`?oM%cr?|ruC{A&AFO-1-ecYG4d;hnR z$s{K^Cws5`oh9G;PPB@WG&%|~3IG5=mz9xF0|4O7005X_AmaNKC;1+?_dj?yF##}1Nh4#wO6ovKXQ){)-+DDe(b7|Aosa%Rbi$|nYdPG#QMfMP3F4*w>X4|+0 z9s}H!XYV%+4K=f|-l(~_sHv%2ntgq{tF8AxIdxZa?L+r|Km(sf3BugoI01!lA~4PX z_<)cfJ*R)6MW6ri^trt9pA{gD`SeRPH~!ZMRX~6^w=@!@!q;T-VWh`PxP6ked&M#$ zZ|50N;NXunroMj*UqjqbQ7b#^m%3QUyj8>+cmH~OyW<+a<$g}+eemTWYd6gJGRuj% zyR&^0&>CVg5Z3bF=Qk39L9k)V&e#>Q30uw~ct zKqRl6*L-%wn5bl(4V(A-L(G5a{`Y3oShR^x8^Y$Dy?x70E}pnoA9Hoi-FHCPmkN!I z-akc=MHe19`;f+yU-95115;54lfTf-u z_8xdOmme9*{v39U>cf%*i37FPzijB}M%O>U!AXux$o{?<63od@*le&d{jaG4SF|$b zOoNvwyG59StdEYv6SMl{%uSnmDFCoDEvjD{ z6aW7>BOhjl&p^)E!;&a7Gvk?c#)O)t(y^go|6-^|h-7q+6

W`=zPqwlZC1_lNe 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≪P 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⩽OZL1BaqINE5*@eUFLm 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 literal 0 HcmV?d00001 diff --git a/public/email/2025_email_header.png b/public/email/2025_email_header.png new file mode 100644 index 0000000000000000000000000000000000000000..07f7bc97e720e504d96e6173bc17e0ec6ea61a32 GIT binary patch literal 39901 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�M-EU)GrV#b@}na`)2-mNsyeotxw(yC{T6+7mLwBiu+|0R zBwUjZ&0EXBON_A-wiBP6O>6EnEj5get1egoOuqjB58u!`mrXfggw53p_^Crw1|)hJ zRu~;{(f52Vx&7u&RiC;1na@+E!O<#+%u#FJ9*hDy4eDuRGuSJA|9m*Pz-=xir@hW8 znt=;#IGA%cdvEWdFAl4+`&3&;q0{*Je|qBXH-#M z>{J1Ut-r%_q*nAB=JNx|gA7dK~6kMu@F<+)RqQ2kC1M{+D zKYU5Pm&ansP4k|)4GO_qdH%^u)MgW5sIPtYkKXfO#+znxx}mq{ApWbXP1Mz*q6t4M zp4re_xpTP1(Y&GmtUvKtEWxw;-%Okyj7M5C`nJ)zJsCV4v zVSs2#N~enuU7TXQFVW}b)?ozZ!Q76UTAxl74bkm9)E;*RFi>$a7Z# z0fAkLgp3SYzqG2VLFFDbKPnB4%gzkX&CeGSmy|pYQkDJu)HR<;^j8_R$heCJ<8Ui0 zj6gRc;E6ck8Tlo@J#jWrOY4yf@+L#cSFH%`Fv&|Xf}YR`63G+KGj@W^Qiopk zXGJow@WF)PZ&|Q^jIy7cRE*7c?mf&#rn`I@E=j*pR8+J(3A+ z>)W!;k&%nF%-v-PKSCxsQNZYI0o!!@TZ(JM?Pb$_IYkwjwN8*=$S+y@&sup>|20NH zN;dlEYWXw&4f{V807;FX_vO!g(EmN<02Ii7FZd7nmVV8H{}=C#8^?6t&Sfc_f{EWe PX|S%Afo7GuWAy(36!*AU literal 0 HcmV?d00001 From fd07861dc48e5f4ab89041852fa9f5d7bf63c9cc Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:08:57 -0800 Subject: [PATCH 13/18] Single mentor invite --- .../emailFormats/2026MentorInviteTemplate.ts | 60 +++++++ .../_actions/emails/sendSingleMentorInvite.ts | 64 +++++++ .../_actions/tito/createRsvpInvitation.ts | 73 ++++++++ .../tito/deleteRsvpInvitationByEmail.ts | 51 ++++++ .../tito/getOrCreateTitoInvitation.ts | 60 +++++++ app/(api)/_actions/tito/getReleases.ts | 20 +++ .../_actions/tito/getRsvpInvitationByEmail.ts | 38 ++++ app/(api)/_actions/tito/getRsvpLists.ts | 20 +++ app/(api)/_actions/tito/titoClient.ts | 38 ++++ .../MentorInvites/MentorInvitesPanel.tsx | 57 ++++++ .../MentorInvites/MentorSingleInviteForm.tsx | 168 ++++++++++++++++++ .../admin/_utils/generateInviteResultsCSV.ts | 48 +++++ app/_types/emails.ts | 21 +++ app/_types/tito.ts | 41 +++++ 14 files changed, 759 insertions(+) create mode 100644 app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts create mode 100644 app/(api)/_actions/emails/sendSingleMentorInvite.ts create mode 100644 app/(api)/_actions/tito/createRsvpInvitation.ts create mode 100644 app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts create mode 100644 app/(api)/_actions/tito/getOrCreateTitoInvitation.ts create mode 100644 app/(api)/_actions/tito/getReleases.ts create mode 100644 app/(api)/_actions/tito/getRsvpInvitationByEmail.ts create mode 100644 app/(api)/_actions/tito/getRsvpLists.ts create mode 100644 app/(api)/_actions/tito/titoClient.ts create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx create mode 100644 app/(pages)/admin/_utils/generateInviteResultsCSV.ts create mode 100644 app/_types/tito.ts diff --git a/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts b/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts new file mode 100644 index 000000000..0d51ba6e4 --- /dev/null +++ b/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts @@ -0,0 +1,60 @@ +export default function mentorInviteTemplate(fname: string, titoUrl: string) { + return ` + + + + + Mentor Invitation - HackDavis 2026 + + + + + +`; +} diff --git a/app/(api)/_actions/emails/sendSingleMentorInvite.ts b/app/(api)/_actions/emails/sendSingleMentorInvite.ts new file mode 100644 index 000000000..4f3a5abbb --- /dev/null +++ b/app/(api)/_actions/emails/sendSingleMentorInvite.ts @@ -0,0 +1,64 @@ +'use server'; + +import getOrCreateTitoInvitation from '@actions/tito/getOrCreateTitoInvitation'; +import mentorInviteTemplate from './emailFormats/2026MentorInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { MentorInviteData, SingleMentorInviteResponse } from '@typeDefs/emails'; + +interface MentorInviteOptions extends MentorInviteData { + rsvpListSlug: string; + releaseIds: string; +} + +export default async function sendSingleMentorInvite( + options: MentorInviteOptions +): Promise { + const totalStart = Date.now(); + const { firstName, lastName, email, rsvpListSlug, releaseIds } = options; + + try { + console.log(`[Mentor Invite] Starting invite for ${email}`); + + // Step 1: Get or create Tito invitation (with duplicate recovery) + const titoStart = Date.now(); + const titoResult = await getOrCreateTitoInvitation({ + firstName, + lastName, + email, + rsvpListSlug, + releaseIds, + }); + console.log(`[Mentor Invite] Tito: ${Date.now() - titoStart}ms`); + + if (!titoResult.ok) { + throw new Error(titoResult.error); + } + + if (!DEFAULT_SENDER) { + throw new Error('Email configuration missing: SENDER_EMAIL is not set.'); + } + + // Step 2: Send email with Tito URL + const mailStart = Date.now(); + await transporter.sendMail({ + from: DEFAULT_SENDER, + to: email, + subject: "You're Invited to Mentor at HackDavis 2026", + html: mentorInviteTemplate(firstName, titoResult.titoUrl), + }); + console.log(`[Mentor Invite] sendMail: ${Date.now() - mailStart}ms`); + + console.log( + `[Mentor Invite] βœ“ Done (${email}) β€” total: ${Date.now() - totalStart}ms` + ); + return { ok: true, titoUrl: titoResult.titoUrl, error: null }; + } catch (e) { + const errorMessage = + e instanceof Error ? e.message : typeof e === 'string' ? e : 'Unknown error'; + console.error( + `[Mentor Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, + errorMessage + ); + return { ok: false, error: errorMessage }; + } +} diff --git a/app/(api)/_actions/tito/createRsvpInvitation.ts b/app/(api)/_actions/tito/createRsvpInvitation.ts new file mode 100644 index 000000000..8e099eefc --- /dev/null +++ b/app/(api)/_actions/tito/createRsvpInvitation.ts @@ -0,0 +1,73 @@ +'use server'; + +import { ReleaseInvitation, ReleaseInvitationRequest, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +const MAX_RETRIES = 5; +const BASE_DELAY_MS = 1000; + +async function delay(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export default async function createRsvpInvitation( + data: ReleaseInvitationRequest +): Promise> { + try { + if (!data.email?.trim()) throw new Error('Email is required'); + if (!data.rsvpListSlug) throw new Error('RSVP list slug is required'); + if (!data.releaseIds?.trim()) throw new Error('Release IDs are required'); + + const releaseIdsArray = data.releaseIds + .split(',') + .map((id) => parseInt(id.trim(), 10)) + .filter((id) => !isNaN(id)); + + if (releaseIdsArray.length === 0) { + throw new Error('Invalid release IDs format. Use comma-separated numbers.'); + } + + const requestBody: { + email: string; + release_ids: number[]; + first_name?: string; + last_name?: string; + discount_code?: string; + } = { email: data.email.trim(), release_ids: releaseIdsArray }; + + if (data.firstName?.trim()) requestBody.first_name = data.firstName.trim(); + if (data.lastName?.trim()) requestBody.last_name = data.lastName.trim(); + if (data.discountCode?.trim()) requestBody.discount_code = data.discountCode.trim(); + + const url = `/rsvp_lists/${data.rsvpListSlug}/release_invitations`; + + for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { + try { + const response = await TitoRequest<{ release_invitation: ReleaseInvitation }>(url, { + method: 'POST', + body: JSON.stringify({ release_invitation: requestBody }), + }); + console.log(`[Tito] βœ“ Created invitation for ${data.email}`); + return { ok: true, body: response.release_invitation, error: null }; + } catch (err: any) { + if (err.message.includes('429') && attempt < MAX_RETRIES) { + const waitMs = err.retryAfter + ? parseFloat(err.retryAfter) * BASE_DELAY_MS + : Math.pow(2, attempt) * BASE_DELAY_MS + Math.random() * BASE_DELAY_MS; + console.warn( + `[Tito] 429 rate-limited for ${data.email}, retrying in ${Math.round(waitMs)}ms (attempt ${attempt + 1}/${MAX_RETRIES})` + ); + await delay(waitMs); + continue; + } + throw err; + } + } + + throw new Error('Tito API rate limit exceeded after 5 retries'); + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] createRsvpInvitation failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts new file mode 100644 index 000000000..7f5ed7e5c --- /dev/null +++ b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts @@ -0,0 +1,51 @@ +'use server'; + +import { ReleaseInvitation } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function deleteRsvpInvitationByEmail( + rsvpListSlug: string, + email: string +): Promise<{ ok: boolean; error: string | null }> { + try { + const normalizedEmail = email.trim().toLowerCase(); + if (!normalizedEmail) throw new Error('Email is required'); + if (!rsvpListSlug?.trim()) throw new Error('RSVP list slug is required'); + + const pageSize = 1000; + let page = 1; + let foundSlug: string | null = null; + + while (!foundSlug) { + const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; + const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const invitations = data.release_invitations ?? []; + + const match = invitations.find( + (inv) => inv.email?.toLowerCase() === normalizedEmail + ); + if (match?.slug) { + foundSlug = match.slug; + break; + } + + if (invitations.length < pageSize) break; + page++; + } + + if (!foundSlug) { + return { ok: false, error: 'No existing invitation found for this email' }; + } + + await TitoRequest(`/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, { + method: 'DELETE', + }); + + console.log(`[Tito] Deleted invitation for ${email}`); + return { ok: true, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] deleteRsvpInvitationByEmail failed:', error); + return { ok: false, error }; + } +} diff --git a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts new file mode 100644 index 000000000..b3256c4a4 --- /dev/null +++ b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts @@ -0,0 +1,60 @@ +'use server'; + +import createRsvpInvitation from './createRsvpInvitation'; +import getRsvpInvitationByEmail from './getRsvpInvitationByEmail'; +import deleteRsvpInvitationByEmail from './deleteRsvpInvitationByEmail'; +import { ReleaseInvitationRequest } from '@typeDefs/tito'; + +function isDuplicateTicketError(error: string | null | undefined): boolean { + if (!error) return false; + const normalized = error.toLowerCase(); + return ( + normalized.includes('already has a tito ticket attached') || + normalized.includes('already has a ticket attached') || + normalized.includes('email has already been taken') || + normalized.includes('has already been taken') || + (normalized.includes('"email"') && normalized.includes('already taken')) || + normalized.includes('already exists') || + (normalized.includes('already') && normalized.includes('invitation')) + ); +} + +export default async function getOrCreateTitoInvitation( + data: ReleaseInvitationRequest +): Promise<{ ok: true; titoUrl: string } | { ok: false; error: string }> { + const { email, rsvpListSlug } = data; + + let titoResponse = await createRsvpInvitation(data); + + // Duplicate recovery: reuse existing URL if possible, otherwise delete + recreate + if (!titoResponse.ok && isDuplicateTicketError(titoResponse.error)) { + console.warn(`[Tito] Duplicate detected for ${email}, attempting recovery`); + + const existingRes = await getRsvpInvitationByEmail(rsvpListSlug, email); + if (existingRes.ok && existingRes.body) { + const existingUrl = existingRes.body.unique_url ?? existingRes.body.url; + if (existingUrl) { + console.log(`[Tito] Reusing existing URL for ${email}`); + return { ok: true, titoUrl: existingUrl }; + } + } + + console.warn(`[Tito] No usable URL found, deleting and recreating for ${email}`); + const deleteRes = await deleteRsvpInvitationByEmail(rsvpListSlug, email); + if (!deleteRes.ok) { + return { ok: false, error: `Duplicate recovery failed (delete): ${deleteRes.error}` }; + } + titoResponse = await createRsvpInvitation(data); + } + + if (!titoResponse.ok || !titoResponse.body) { + return { ok: false, error: titoResponse.error ?? 'Failed to create Tito invitation' }; + } + + const titoUrl = titoResponse.body.unique_url ?? titoResponse.body.url; + if (!titoUrl) { + return { ok: false, error: 'Tito invitation created but no URL was returned' }; + } + + return { ok: true, titoUrl }; +} diff --git a/app/(api)/_actions/tito/getReleases.ts b/app/(api)/_actions/tito/getReleases.ts new file mode 100644 index 000000000..e3c66b8bd --- /dev/null +++ b/app/(api)/_actions/tito/getReleases.ts @@ -0,0 +1,20 @@ +'use server'; + +import { Release, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getReleases(): Promise> { + try { + const start = Date.now(); + const data = await TitoRequest<{ releases: Release[] }>('/releases'); + console.log(`[Tito] getReleases: ${Date.now() - start}ms`); + + const releases = data.releases ?? []; + console.log(`[Tito] Fetched ${releases.length} releases`); + return { ok: true, body: releases, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getReleases failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts new file mode 100644 index 000000000..2f169dbf7 --- /dev/null +++ b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts @@ -0,0 +1,38 @@ +'use server'; + +import { ReleaseInvitation, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getRsvpInvitationByEmail( + rsvpListSlug: string, + email: string +): Promise> { + try { + const normalizedEmail = email.trim().toLowerCase(); + if (!normalizedEmail) throw new Error('Email is required'); + if (!rsvpListSlug?.trim()) throw new Error('RSVP list slug is required'); + + const pageSize = 1000; + let page = 1; + + while (true) { + const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; + const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const invitations = data.release_invitations ?? []; + + const match = invitations.find( + (inv) => inv.email?.toLowerCase() === normalizedEmail + ); + if (match) return { ok: true, body: match, error: null }; + + if (invitations.length < pageSize) break; + page++; + } + + return { ok: false, body: null, error: 'No existing invitation found for this email' }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getRsvpInvitationByEmail failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/getRsvpLists.ts b/app/(api)/_actions/tito/getRsvpLists.ts new file mode 100644 index 000000000..4b06b3b2a --- /dev/null +++ b/app/(api)/_actions/tito/getRsvpLists.ts @@ -0,0 +1,20 @@ +'use server'; + +import { RsvpList, TitoResponse } from '@typeDefs/tito'; +import { TitoRequest } from './titoClient'; + +export default async function getRsvpLists(): Promise> { + try { + const start = Date.now(); + const data = await TitoRequest<{ rsvp_lists: RsvpList[] }>('/rsvp_lists'); + console.log(`[Tito] getRsvpLists: ${Date.now() - start}ms`); + + const rsvpLists = data.rsvp_lists ?? []; + console.log(`[Tito] Fetched ${rsvpLists.length} RSVP lists`); + return { ok: true, body: rsvpLists, error: null }; + } catch (e) { + const error = e instanceof Error ? e.message : 'Unknown error'; + console.error('[Tito] getRsvpLists failed:', error); + return { ok: false, body: null, error }; + } +} diff --git a/app/(api)/_actions/tito/titoClient.ts b/app/(api)/_actions/tito/titoClient.ts new file mode 100644 index 000000000..df5a48d46 --- /dev/null +++ b/app/(api)/_actions/tito/titoClient.ts @@ -0,0 +1,38 @@ +const TITO_API_TOKEN = process.env.TITO_API_TOKEN; +const TITO_ACCOUNT_SLUG = process.env.TITO_ACCOUNT_SLUG; +const TITO_EVENT_SLUG = process.env.TITO_EVENT_SLUG; + +export async function TitoRequest( + endpoint: string, + options: RequestInit = {} +): Promise { + if (!TITO_API_TOKEN || !TITO_ACCOUNT_SLUG || !TITO_EVENT_SLUG) { + throw new Error('Missing Tito API configuration in environment variables'); + } + + const baseUrl = `https://api.tito.io/v3/${TITO_ACCOUNT_SLUG}/${TITO_EVENT_SLUG}`; + const url = `${baseUrl}${endpoint}`; + + const response = await fetch(url, { + ...options, + headers: { + Authorization: `Token token=${TITO_API_TOKEN}`, + Accept: 'application/json', + 'Content-Type': 'application/json', + ...options.headers, + }, + }); + + if (!response.ok) { + const errorText = await response.text(); + const retryAfter = response.headers.get('Retry-After'); + const error = new Error(`Tito API ${response.status}: ${errorText}`); + if (retryAfter) (error as any).retryAfter = retryAfter; + throw error; + } + + // DELETE responses may return 204 No Content + if (response.status === 204) return {} as T; + + return response.json(); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx new file mode 100644 index 000000000..61fcc7779 --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx @@ -0,0 +1,57 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import getRsvpLists from '@actions/tito/getRsvpLists'; +import getReleases from '@actions/tito/getReleases'; +import { Release, RsvpList } from '@typeDefs/tito'; +import MentorSingleInviteForm from './MentorSingleInviteForm'; + +export default function MentorInvitesPanel() { + const [rsvpLists, setRsvpLists] = useState([]); + const [releases, setReleases] = useState([]); + const [loading, setLoading] = useState(true); + const [loadError, setLoadError] = useState(''); + + useEffect(() => { + (async () => { + const [rsvpRes, relRes] = await Promise.all([getRsvpLists(), getReleases()]); + if (!rsvpRes.ok || !rsvpRes.body) { + setLoadError(rsvpRes.error ?? 'Failed to load RSVP lists.'); + } else if (!relRes.ok || !relRes.body) { + setLoadError(relRes.error ?? 'Failed to load releases.'); + } else { + setRsvpLists(rsvpRes.body); + setReleases(relRes.body); + } + setLoading(false); + })(); + }, []); + + if (loading) { + return ( +
+
+ Loading Tito configuration… +
+ ); + } + + if (loadError) { + return ( +

+ {loadError} +

+ ); + } + + return ( +
+
+

+ Send a Tito invite to a single mentor by entering their details below. +

+ +
+
+ ); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx new file mode 100644 index 000000000..bfc234dcf --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorSingleInviteForm.tsx @@ -0,0 +1,168 @@ +'use client'; + +import { FormEvent, useState } from 'react'; +import sendSingleMentorInvite from '@actions/emails/sendSingleMentorInvite'; +import { Release, RsvpList } from '@typeDefs/tito'; + +interface Props { + rsvpLists: RsvpList[]; + releases: Release[]; +} + +export default function MentorSingleInviteForm({ rsvpLists, releases }: Props) { + const [loading, setLoading] = useState(false); + const [titoUrl, setTitoUrl] = useState(''); + const [error, setError] = useState(''); + const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedReleases, setSelectedReleases] = useState([]); + + const toggleRelease = (id: string) => + setSelectedReleases((prev) => + prev.includes(id) ? prev.filter((r) => r !== id) : [...prev, id] + ); + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + if (!selectedListSlug) { + setError('Please select an RSVP list.'); + return; + } + if (selectedReleases.length === 0) { + setError('Please select at least one release.'); + return; + } + + setLoading(true); + setTitoUrl(''); + setError(''); + + const formData = new FormData(e.currentTarget); + const result = await sendSingleMentorInvite({ + firstName: formData.get('firstName') as string, + lastName: formData.get('lastName') as string, + email: formData.get('email') as string, + rsvpListSlug: selectedListSlug, + releaseIds: selectedReleases.join(','), + }); + + setLoading(false); + + if (result.ok) { + setTitoUrl(result.titoUrl ?? ''); + (e.target as HTMLFormElement).reset(); + setSelectedReleases([]); + } else { + setError(result.error ?? 'An unexpected error occurred.'); + } + }; + + return ( +
+ {/* Name + Email */} +
+
+ + +
+
+ + +
+
+
+ + +
+ + {/* RSVP List */} +
+ + +
+ + {/* Releases */} +
+
+ + +
+
+ {releases.map((release) => ( + + ))} +
+
+ + + + {error && ( +

+ {error} +

+ )} + {titoUrl && ( +
+

Invite sent!

+

{titoUrl}

+
+ )} +
+ ); +} diff --git a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts new file mode 100644 index 000000000..42a913ed4 --- /dev/null +++ b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts @@ -0,0 +1,48 @@ +export interface InviteResultRow { + firstName: string; + lastName: string; + email: string; + titoUrl?: string; + hubUrl?: string; // populated for hacker invites; omitted for mentor-only + success: boolean; + error?: string; +} + +function escapeCell(value: string): string { + return `"${value.replace(/"/g, '""')}"`; +} + +/** + * Generates a CSV string from bulk invite results. + * @param rows Merged invite result rows (one per person). + * @param includeHub Set true for hacker invites that include a Hub URL column. + */ +export function generateInviteResultsCSV( + rows: InviteResultRow[], + includeHub = false +): string { + const headers = [ + 'Email', + 'First Name', + 'Last Name', + 'Tito Invite URL', + ...(includeHub ? ['Hub Invite URL'] : []), + 'Success', + 'Notes', + ]; + + const csvRows = rows.map((row) => { + const cells = [ + row.email, + row.firstName, + row.lastName, + row.titoUrl ?? '', + ...(includeHub ? [row.hubUrl ?? ''] : []), + row.success ? 'TRUE' : 'FALSE', + row.success ? '' : (row.error ?? 'Unknown error'), + ]; + return cells.map(escapeCell).join(','); + }); + + return [headers.join(','), ...csvRows].join('\n'); +} diff --git a/app/_types/emails.ts b/app/_types/emails.ts index 9d2c29912..8c9cc5a41 100644 --- a/app/_types/emails.ts +++ b/app/_types/emails.ts @@ -25,3 +25,24 @@ export interface SingleJudgeInviteResponse { inviteUrl?: string; error: string | null; } + +// Mentor Hub invite types + +export interface MentorInviteData { + firstName: string; + lastName: string; + email: string; +} + +export interface MentorInviteResult { + email: string; + success: boolean; + titoUrl?: string; + error?: string; +} + +export interface SingleMentorInviteResponse { + ok: boolean; + titoUrl?: string; + error: string | null; +} diff --git a/app/_types/tito.ts b/app/_types/tito.ts new file mode 100644 index 000000000..a1bc99202 --- /dev/null +++ b/app/_types/tito.ts @@ -0,0 +1,41 @@ +export interface RsvpList { + id: string; + slug: string; + title: string; + release_ids?: number[]; + question_ids?: number[]; + activity_ids?: number[]; +} + +export interface Release { + id: string; + slug: string; + title: string; + quantity?: number; +} + +export interface ReleaseInvitation { + id: string; + slug: string; + email: string; + first_name: string; + last_name: string; + url?: string; + unique_url?: string; + created_at: string; +} + +export interface ReleaseInvitationRequest { + firstName: string; + lastName: string; + email: string; + rsvpListSlug: string; + releaseIds: string; // comma-separated release IDs + discountCode?: string; +} + +export interface TitoResponse { + ok: boolean; + body: T | null; + error: string | null; +} From 4e25ab9c87cb8964bdf69ed689bfdfaecd683690 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:09:53 -0800 Subject: [PATCH 14/18] Bulk mentor invites and modify invites page --- .../MentorInvites/MentorBulkInviteForm.tsx | 336 ++++++++++++++++++ .../MentorInvites/MentorInvitesPanel.tsx | 34 ++ app/(pages)/admin/invite-judges/page.tsx | 35 -- app/(pages)/admin/invites/page.tsx | 71 ++++ app/(pages)/admin/page.tsx | 4 +- app/_types/emails.ts | 8 + 6 files changed, 451 insertions(+), 37 deletions(-) create mode 100644 app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx delete mode 100644 app/(pages)/admin/invite-judges/page.tsx create mode 100644 app/(pages)/admin/invites/page.tsx diff --git a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx new file mode 100644 index 000000000..b086c70f3 --- /dev/null +++ b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx @@ -0,0 +1,336 @@ +'use client'; + +import { ChangeEvent, useState } from 'react'; +import sendBulkMentorInvites from '@actions/emails/sendBulkMentorInvites'; +import { BulkMentorInviteResponse, MentorInviteData } from '@typeDefs/emails'; +import { Release, RsvpList } from '@typeDefs/tito'; +import { generateInviteResultsCSV } from '../../_utils/generateInviteResultsCSV'; + +/** + * Browser-safe CSV preview parser (no Node.js deps). Full validation runs server-side. + * Note: uses simple comma-split β€” quoted fields containing commas are not supported. + */ +function previewCSV( + text: string +): { ok: true; rows: MentorInviteData[] } | { ok: false; error: string } { + const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); + if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; + + const firstCells = lines[0].toLowerCase(); + const hasHeader = firstCells.includes('first') || firstCells.includes('email'); + const dataLines = hasHeader ? lines.slice(1) : lines; + if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + + const rows: MentorInviteData[] = []; + for (let i = 0; i < dataLines.length; i++) { + const cols = dataLines[i].split(',').map((c) => c.trim()); + if (cols.length < 3) { + return { + ok: false, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.`, + }; + } + rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); + } + return { ok: true, rows }; +} + +type Status = 'idle' | 'previewing' | 'sending' | 'done'; + +interface Props { + rsvpLists: RsvpList[]; + releases: Release[]; +} + +export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { + const [status, setStatus] = useState('idle'); + const [csvText, setCsvText] = useState(''); + const [preview, setPreview] = useState([]); + const [parseError, setParseError] = useState(''); + const [result, setResult] = useState(null); + const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedReleases, setSelectedReleases] = useState([]); + const [configError, setConfigError] = useState(''); + + const toggleRelease = (id: string) => + setSelectedReleases((prev) => + prev.includes(id) ? prev.filter((r) => r !== id) : [...prev, id] + ); + + const handleFileChange = (e: ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = (ev) => { + const text = ev.target?.result as string; + setCsvText(text); + const parsed = previewCSV(text); + if (parsed.ok) { + setPreview(parsed.rows); + setParseError(''); + setStatus('previewing'); + } else { + setParseError(parsed.error); + setPreview([]); + setStatus('idle'); + } + }; + reader.readAsText(file); + }; + + const handleSend = async () => { + if (!selectedListSlug) { + setConfigError('Please select an RSVP list.'); + return; + } + if (selectedReleases.length === 0) { + setConfigError('Please select at least one release.'); + return; + } + setConfigError(''); + setStatus('sending'); + setResult(null); + + const response = await sendBulkMentorInvites( + csvText, + selectedListSlug, + selectedReleases.join(',') + ); + setResult(response); + setStatus('done'); + }; + + const handleDownloadCSV = () => { + if (!result) return; + const resultMap = new Map( + result.results.map((r) => [r.email.toLowerCase(), r]) + ); + const rows = preview.map((mentor) => { + const res = resultMap.get(mentor.email.toLowerCase()); + return { + firstName: mentor.firstName, + lastName: mentor.lastName, + email: mentor.email, + titoUrl: res?.titoUrl, + success: res?.success ?? false, + error: res?.error, + }; + }); + const csv = generateInviteResultsCSV(rows); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `mentor-invites-${new Date().toISOString().split('T')[0]}.csv`; + link.click(); + URL.revokeObjectURL(url); + }; + + const handleReset = () => { + setStatus('idle'); + setCsvText(''); + setPreview([]); + setParseError(''); + setResult(null); + setConfigError(''); + setSelectedReleases([]); + }; + + return ( +
+ {/* File input */} +
+ + +
+ + {/* Parse error */} + {parseError && ( +
+

CSV errors:

+
{parseError}
+
+ )} + + {/* Preview table */} + {status === 'previewing' && preview.length > 0 && ( +
+

+ {preview.length} mentor + {preview.length !== 1 ? 's' : ''} found. Configure Tito settings and + review before sending: +

+ +
+
+ + + + + + + + + + {preview.map((mentor, i) => ( + + + + + + ))} + +
+ First Name + + Last Name + + Email +
{mentor.firstName}{mentor.lastName}{mentor.email}
+
+
+ + {/* RSVP List */} +
+ + +
+ + {/* Releases */} +
+
+ + +
+
+ {releases.map((release) => ( + + ))} +
+
+ + {configError && ( +

+ {configError} +

+ )} + + +
+ )} + + {/* Sending spinner */} + {status === 'sending' && ( +
+
+ Sending invites… +
+ )} + + {/* Results */} + {status === 'done' && result && ( +
+
+
+

{result.successCount}

+

Sent

+
+
+

{result.failureCount}

+

Failed

+
+
+ + {result.failureCount > 0 && ( +
+

+ Failed invites +

+
+ {result.results + .filter((r) => !r.success) + .map((r, i) => ( +
+ {r.email} + {r.error} +
+ ))} +
+
+ )} + +
+ + +
+
+ )} +
+ ); +} diff --git a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx index 61fcc7779..b8fec2560 100644 --- a/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx +++ b/app/(pages)/admin/_components/MentorInvites/MentorInvitesPanel.tsx @@ -5,8 +5,12 @@ import getRsvpLists from '@actions/tito/getRsvpLists'; import getReleases from '@actions/tito/getReleases'; import { Release, RsvpList } from '@typeDefs/tito'; import MentorSingleInviteForm from './MentorSingleInviteForm'; +import MentorBulkInviteForm from './MentorBulkInviteForm'; + +type Mode = 'single' | 'bulk'; export default function MentorInvitesPanel() { + const [mode, setMode] = useState('single'); const [rsvpLists, setRsvpLists] = useState([]); const [releases, setReleases] = useState([]); const [loading, setLoading] = useState(true); @@ -46,12 +50,42 @@ export default function MentorInvitesPanel() { return (
+ {/* Single / Bulk toggle */} +
+ {(['single', 'bulk'] as Mode[]).map((m) => ( + + ))} +
+ + {mode === 'single' ? (

Send a Tito invite to a single mentor by entering their details below.

+ ) : ( +
+

+ Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Tito invites to multiple mentors at once. +

+ +
+ )}
); } diff --git a/app/(pages)/admin/invite-judges/page.tsx b/app/(pages)/admin/invite-judges/page.tsx deleted file mode 100644 index c892ef0ba..000000000 --- a/app/(pages)/admin/invite-judges/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; - -import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; -import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; - -export default function InviteJudgesPage() { - return ( -
-

Invite Judges

- -
-

Invite a Judge

-

- Send a HackDavis Hub invite to a single judge by entering their - details below. -

- -
- -
- -
-

Bulk Invite Judges

-

- Upload a CSV with columns{' '} - - First Name, Last Name, Email - {' '} - to send Hub invites to multiple judges at once. -

- -
-
- ); -} diff --git a/app/(pages)/admin/invites/page.tsx b/app/(pages)/admin/invites/page.tsx new file mode 100644 index 000000000..7e1aed0fc --- /dev/null +++ b/app/(pages)/admin/invites/page.tsx @@ -0,0 +1,71 @@ +'use client'; + +import { useState } from 'react'; +import JudgeSingleInviteForm from '../_components/JudgeInvites/JudgeSingleInviteForm'; +import JudgeBulkInviteForm from '../_components/JudgeInvites/JudgeBulkInviteForm'; +import MentorInvitesPanel from '../_components/MentorInvites/MentorInvitesPanel'; + +type Tab = 'judges' | 'mentors'; + +export default function InvitesPage() { + const [tab, setTab] = useState('judges'); + + return ( +
+

Invites

+ + {/* Tab bar */} +
+ {(['judges', 'mentors'] as Tab[]).map((t) => ( + + ))} +
+ + {/* Judges panel */} + {tab === 'judges' && ( +
+
+

Invite a Judge

+

+ Send a HackDavis Hub invite to a single judge by entering their + details below. +

+ +
+ +
+ +
+

Bulk Invite Judges

+

+ Upload a CSV with columns{' '} + + First Name, Last Name, Email + {' '} + to send Hub invites to multiple judges at once. +

+ +
+
+ )} + + {/* Mentors panel */} + {tab === 'mentors' && ( +
+

Mentor Invites

+ +
+ )} +
+ ); +} diff --git a/app/(pages)/admin/page.tsx b/app/(pages)/admin/page.tsx index cd139d2f1..cb69ab440 100644 --- a/app/(pages)/admin/page.tsx +++ b/app/(pages)/admin/page.tsx @@ -22,8 +22,8 @@ const action_links = [ body: 'Create Panels', }, { - href: '/admin/invite-judges', - body: 'Invite Judges', + href: '/admin/invites', + body: 'Invites', }, { href: '/admin/invite-hackers', diff --git a/app/_types/emails.ts b/app/_types/emails.ts index 8c9cc5a41..5f749368c 100644 --- a/app/_types/emails.ts +++ b/app/_types/emails.ts @@ -41,6 +41,14 @@ export interface MentorInviteResult { error?: string; } +export interface BulkMentorInviteResponse { + ok: boolean; + results: MentorInviteResult[]; + successCount: number; + failureCount: number; + error: string | null; +} + export interface SingleMentorInviteResponse { ok: boolean; titoUrl?: string; From e0aaf45a20895b30076e4cf63673b0a6e3521f47 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 02:11:28 -0800 Subject: [PATCH 15/18] New format bulk mentor invites A per-person pipeline with two independent concurrency-limited pools where each person moves from Tito to email on their own as soon as a slot is free, with no batch boundaries. --- .../_actions/emails/sendBulkMentorInvites.ts | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 app/(api)/_actions/emails/sendBulkMentorInvites.ts diff --git a/app/(api)/_actions/emails/sendBulkMentorInvites.ts b/app/(api)/_actions/emails/sendBulkMentorInvites.ts new file mode 100644 index 000000000..694285a72 --- /dev/null +++ b/app/(api)/_actions/emails/sendBulkMentorInvites.ts @@ -0,0 +1,134 @@ +'use server'; + +import parseInviteCSV from './parseInviteCSV'; +import getOrCreateTitoInvitation from '@actions/tito/getOrCreateTitoInvitation'; +import mentorInviteTemplate from './emailFormats/2026MentorInviteTemplate'; +import { DEFAULT_SENDER, transporter } from './transporter'; +import { + BulkMentorInviteResponse, + MentorInviteData, + MentorInviteResult, +} from '@typeDefs/emails'; + +const TITO_CONCURRENCY = 20; +const EMAIL_CONCURRENCY = 10; + +/** + * Returns an async function that enforces at most `concurrency` simultaneous + * calls. Each slot is released as soon as its fn resolves/rejects, so the + * pool is always kept as full as possible β€” no batch-boundary idle time. + */ +function createLimiter(concurrency: number) { + let active = 0; + const queue: (() => void)[] = []; + + return async function run(fn: () => Promise): Promise { + if (active >= concurrency) { + await new Promise((resolve) => queue.push(resolve)); + } + active++; + try { + return await fn(); + } finally { + active--; + queue.shift()?.(); + } + }; +} + +export default async function sendBulkMentorInvites( + csvText: string, + rsvpListSlug: string, + releaseIds: string +): Promise { + const parsed = parseInviteCSV(csvText); + if (!parsed.ok) { + return { ok: false, results: [], successCount: 0, failureCount: 0, error: parsed.error }; + } + + const mentors = parsed.body as MentorInviteData[]; + + // Fail fast β€” no point creating Tito invites if email can't send + if (!DEFAULT_SENDER) { + return { + ok: false, + results: [], + successCount: 0, + failureCount: mentors.length, + error: 'Email configuration missing: SENDER_EMAIL is not set.', + }; + } + const sender = DEFAULT_SENDER; // capture for TypeScript narrowing inside async closures + + const totalStart = Date.now(); + console.log( + `[Bulk Mentor Invites] Starting ${mentors.length} mentors β€” Tito pool: ${TITO_CONCURRENCY}, Email pool: ${EMAIL_CONCURRENCY}` + ); + + const titoLimiter = createLimiter(TITO_CONCURRENCY); + const emailLimiter = createLimiter(EMAIL_CONCURRENCY); + + const results: MentorInviteResult[] = []; + let successCount = 0; + let failureCount = 0; + let completed = 0; + + await Promise.allSettled( + mentors.map(async (mentor) => { + // ── Stage 1: Tito ────────────────────────────────────────────────────── + // Slot is released as soon as Tito resolves, before email starts. + const titoResult = await titoLimiter(() => + getOrCreateTitoInvitation({ ...mentor, rsvpListSlug, releaseIds }) + ); + + if (!titoResult.ok) { + console.error(`[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, titoResult.error); + results.push({ email: mentor.email, success: false, error: titoResult.error }); + failureCount++; + console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + return; + } + + // ── Stage 2: Email ───────────────────────────────────────────────────── + // Tito slot is already free; email slot acquired independently. + // While this person waits for an email slot, other people can be running + // their Tito stage in those freed Tito slots. + try { + await emailLimiter(() => + transporter.sendMail({ + from: sender, + to: mentor.email, + subject: "You're Invited to Mentor at HackDavis 2026", + html: mentorInviteTemplate(mentor.firstName, titoResult.titoUrl), + }) + ); + results.push({ email: mentor.email, success: true, titoUrl: titoResult.titoUrl }); + successCount++; + } catch (e) { + const errorMsg = e instanceof Error ? e.message : 'Unknown error'; + console.error(`[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, errorMsg); + results.push({ + email: mentor.email, + success: false, + error: `Email send failed: ${errorMsg}`, + }); + failureCount++; + } + + console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + }) + ); + + const totalTime = Date.now() - totalStart; + console.log( + `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + ); + + return { + ok: failureCount === 0, + results, + successCount, + failureCount, + error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + }; +} From fd85880a8ccfcab98d3d92f61db6a97c9d6a52d3 Mon Sep 17 00:00:00 2001 From: reehals Date: Thu, 26 Feb 2026 17:03:19 -0800 Subject: [PATCH 16/18] Lint fixes --- .../_actions/emails/sendBulkMentorInvites.ts | 45 +++++++++--- .../_actions/emails/sendSingleMentorInvite.ts | 6 +- .../_actions/tito/createRsvpInvitation.ts | 26 +++++-- .../tito/deleteRsvpInvitationByEmail.ts | 18 +++-- .../tito/getOrCreateTitoInvitation.ts | 19 +++-- .../_actions/tito/getRsvpInvitationByEmail.ts | 20 ++++-- app/(api)/_actions/tito/getRsvpLists.ts | 4 +- .../MentorInvites/MentorBulkInviteForm.tsx | 72 ++++++++++++++----- .../MentorInvites/MentorInvitesPanel.tsx | 8 ++- .../MentorInvites/MentorSingleInviteForm.tsx | 16 +++-- .../admin/_utils/generateInviteResultsCSV.ts | 2 +- 11 files changed, 180 insertions(+), 56 deletions(-) diff --git a/app/(api)/_actions/emails/sendBulkMentorInvites.ts b/app/(api)/_actions/emails/sendBulkMentorInvites.ts index 694285a72..6a6a46ef5 100644 --- a/app/(api)/_actions/emails/sendBulkMentorInvites.ts +++ b/app/(api)/_actions/emails/sendBulkMentorInvites.ts @@ -43,7 +43,13 @@ export default async function sendBulkMentorInvites( ): Promise { const parsed = parseInviteCSV(csvText); if (!parsed.ok) { - return { ok: false, results: [], successCount: 0, failureCount: 0, error: parsed.error }; + return { + ok: false, + results: [], + successCount: 0, + failureCount: 0, + error: parsed.error, + }; } const mentors = parsed.body as MentorInviteData[]; @@ -82,10 +88,19 @@ export default async function sendBulkMentorInvites( ); if (!titoResult.ok) { - console.error(`[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, titoResult.error); - results.push({ email: mentor.email, success: false, error: titoResult.error }); + console.error( + `[Bulk Mentor Invites] βœ— Tito failed: ${mentor.email}`, + titoResult.error + ); + results.push({ + email: mentor.email, + success: false, + error: titoResult.error, + }); failureCount++; - console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + console.log( + `[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}` + ); return; } @@ -102,11 +117,18 @@ export default async function sendBulkMentorInvites( html: mentorInviteTemplate(mentor.firstName, titoResult.titoUrl), }) ); - results.push({ email: mentor.email, success: true, titoUrl: titoResult.titoUrl }); + results.push({ + email: mentor.email, + success: true, + titoUrl: titoResult.titoUrl, + }); successCount++; } catch (e) { const errorMsg = e instanceof Error ? e.message : 'Unknown error'; - console.error(`[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, errorMsg); + console.error( + `[Bulk Mentor Invites] βœ— Email failed: ${mentor.email}`, + errorMsg + ); results.push({ email: mentor.email, success: false, @@ -115,13 +137,17 @@ export default async function sendBulkMentorInvites( failureCount++; } - console.log(`[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}`); + console.log( + `[Bulk Mentor Invites] Progress: ${++completed}/${mentors.length}` + ); }) ); const totalTime = Date.now() - totalStart; console.log( - `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${(totalTime / 1000).toFixed(1)}s` + `[Bulk Mentor Invites] Complete: ${successCount} success, ${failureCount} failed in ${( + totalTime / 1000 + ).toFixed(1)}s` ); return { @@ -129,6 +155,7 @@ export default async function sendBulkMentorInvites( results, successCount, failureCount, - error: failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, + error: + failureCount > 0 ? `${failureCount} invite(s) failed to send.` : null, }; } diff --git a/app/(api)/_actions/emails/sendSingleMentorInvite.ts b/app/(api)/_actions/emails/sendSingleMentorInvite.ts index 4f3a5abbb..78a52090b 100644 --- a/app/(api)/_actions/emails/sendSingleMentorInvite.ts +++ b/app/(api)/_actions/emails/sendSingleMentorInvite.ts @@ -54,7 +54,11 @@ export default async function sendSingleMentorInvite( return { ok: true, titoUrl: titoResult.titoUrl, error: null }; } catch (e) { const errorMessage = - e instanceof Error ? e.message : typeof e === 'string' ? e : 'Unknown error'; + e instanceof Error + ? e.message + : typeof e === 'string' + ? e + : 'Unknown error'; console.error( `[Mentor Invite] βœ— Failed (${email}) after ${Date.now() - totalStart}ms:`, errorMessage diff --git a/app/(api)/_actions/tito/createRsvpInvitation.ts b/app/(api)/_actions/tito/createRsvpInvitation.ts index 8e099eefc..067a7871c 100644 --- a/app/(api)/_actions/tito/createRsvpInvitation.ts +++ b/app/(api)/_actions/tito/createRsvpInvitation.ts @@ -1,6 +1,10 @@ 'use server'; -import { ReleaseInvitation, ReleaseInvitationRequest, TitoResponse } from '@typeDefs/tito'; +import { + ReleaseInvitation, + ReleaseInvitationRequest, + TitoResponse, +} from '@typeDefs/tito'; import { TitoRequest } from './titoClient'; const MAX_RETRIES = 5; @@ -24,7 +28,9 @@ export default async function createRsvpInvitation( .filter((id) => !isNaN(id)); if (releaseIdsArray.length === 0) { - throw new Error('Invalid release IDs format. Use comma-separated numbers.'); + throw new Error( + 'Invalid release IDs format. Use comma-separated numbers.' + ); } const requestBody: { @@ -37,13 +43,16 @@ export default async function createRsvpInvitation( if (data.firstName?.trim()) requestBody.first_name = data.firstName.trim(); if (data.lastName?.trim()) requestBody.last_name = data.lastName.trim(); - if (data.discountCode?.trim()) requestBody.discount_code = data.discountCode.trim(); + if (data.discountCode?.trim()) + requestBody.discount_code = data.discountCode.trim(); const url = `/rsvp_lists/${data.rsvpListSlug}/release_invitations`; for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { try { - const response = await TitoRequest<{ release_invitation: ReleaseInvitation }>(url, { + const response = await TitoRequest<{ + release_invitation: ReleaseInvitation; + }>(url, { method: 'POST', body: JSON.stringify({ release_invitation: requestBody }), }); @@ -53,9 +62,14 @@ export default async function createRsvpInvitation( if (err.message.includes('429') && attempt < MAX_RETRIES) { const waitMs = err.retryAfter ? parseFloat(err.retryAfter) * BASE_DELAY_MS - : Math.pow(2, attempt) * BASE_DELAY_MS + Math.random() * BASE_DELAY_MS; + : Math.pow(2, attempt) * BASE_DELAY_MS + + Math.random() * BASE_DELAY_MS; console.warn( - `[Tito] 429 rate-limited for ${data.email}, retrying in ${Math.round(waitMs)}ms (attempt ${attempt + 1}/${MAX_RETRIES})` + `[Tito] 429 rate-limited for ${ + data.email + }, retrying in ${Math.round(waitMs)}ms (attempt ${ + attempt + 1 + }/${MAX_RETRIES})` ); await delay(waitMs); continue; diff --git a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts index 7f5ed7e5c..1f0909b81 100644 --- a/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts +++ b/app/(api)/_actions/tito/deleteRsvpInvitationByEmail.ts @@ -18,7 +18,9 @@ export default async function deleteRsvpInvitationByEmail( while (!foundSlug) { const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; - const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const data = await TitoRequest<{ + release_invitations: ReleaseInvitation[]; + }>(url); const invitations = data.release_invitations ?? []; const match = invitations.find( @@ -34,12 +36,18 @@ export default async function deleteRsvpInvitationByEmail( } if (!foundSlug) { - return { ok: false, error: 'No existing invitation found for this email' }; + return { + ok: false, + error: 'No existing invitation found for this email', + }; } - await TitoRequest(`/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, { - method: 'DELETE', - }); + await TitoRequest( + `/rsvp_lists/${rsvpListSlug}/release_invitations/${foundSlug}`, + { + method: 'DELETE', + } + ); console.log(`[Tito] Deleted invitation for ${email}`); return { ok: true, error: null }; diff --git a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts index b3256c4a4..6f240954e 100644 --- a/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts +++ b/app/(api)/_actions/tito/getOrCreateTitoInvitation.ts @@ -39,21 +39,32 @@ export default async function getOrCreateTitoInvitation( } } - console.warn(`[Tito] No usable URL found, deleting and recreating for ${email}`); + console.warn( + `[Tito] No usable URL found, deleting and recreating for ${email}` + ); const deleteRes = await deleteRsvpInvitationByEmail(rsvpListSlug, email); if (!deleteRes.ok) { - return { ok: false, error: `Duplicate recovery failed (delete): ${deleteRes.error}` }; + return { + ok: false, + error: `Duplicate recovery failed (delete): ${deleteRes.error}`, + }; } titoResponse = await createRsvpInvitation(data); } if (!titoResponse.ok || !titoResponse.body) { - return { ok: false, error: titoResponse.error ?? 'Failed to create Tito invitation' }; + return { + ok: false, + error: titoResponse.error ?? 'Failed to create Tito invitation', + }; } const titoUrl = titoResponse.body.unique_url ?? titoResponse.body.url; if (!titoUrl) { - return { ok: false, error: 'Tito invitation created but no URL was returned' }; + return { + ok: false, + error: 'Tito invitation created but no URL was returned', + }; } return { ok: true, titoUrl }; diff --git a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts index 2f169dbf7..1a5788c95 100644 --- a/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts +++ b/app/(api)/_actions/tito/getRsvpInvitationByEmail.ts @@ -14,10 +14,13 @@ export default async function getRsvpInvitationByEmail( const pageSize = 1000; let page = 1; + let hasMorePages = true; - while (true) { + while (hasMorePages) { const url = `/rsvp_lists/${rsvpListSlug}/release_invitations?page[size]=${pageSize}&page[number]=${page}`; - const data = await TitoRequest<{ release_invitations: ReleaseInvitation[] }>(url); + const data = await TitoRequest<{ + release_invitations: ReleaseInvitation[]; + }>(url); const invitations = data.release_invitations ?? []; const match = invitations.find( @@ -25,11 +28,18 @@ export default async function getRsvpInvitationByEmail( ); if (match) return { ok: true, body: match, error: null }; - if (invitations.length < pageSize) break; - page++; + if (invitations.length < pageSize) { + hasMorePages = false; + } else { + page++; + } } - return { ok: false, body: null, error: 'No existing invitation found for this email' }; + return { + ok: false, + body: null, + error: 'No existing invitation found for this email', + }; } catch (e) { const error = e instanceof Error ? e.message : 'Unknown error'; console.error('[Tito] getRsvpInvitationByEmail failed:', error); diff --git a/app/(api)/_actions/tito/getRsvpLists.ts b/app/(api)/_actions/tito/getRsvpLists.ts index 4b06b3b2a..027ebcc80 100644 --- a/app/(api)/_actions/tito/getRsvpLists.ts +++ b/app/(api)/_actions/tito/getRsvpLists.ts @@ -3,7 +3,9 @@ import { RsvpList, TitoResponse } from '@typeDefs/tito'; import { TitoRequest } from './titoClient'; -export default async function getRsvpLists(): Promise> { +export default async function getRsvpLists(): Promise< + TitoResponse +> { try { const start = Date.now(); const data = await TitoRequest<{ rsvp_lists: RsvpList[] }>('/rsvp_lists'); diff --git a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx index b086c70f3..a082489bf 100644 --- a/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx +++ b/app/(pages)/admin/_components/MentorInvites/MentorBulkInviteForm.tsx @@ -13,13 +13,18 @@ import { generateInviteResultsCSV } from '../../_utils/generateInviteResultsCSV' function previewCSV( text: string ): { ok: true; rows: MentorInviteData[] } | { ok: false; error: string } { - const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean); + const lines = text + .split(/\r?\n/) + .map((l) => l.trim()) + .filter(Boolean); if (lines.length === 0) return { ok: false, error: 'CSV is empty.' }; const firstCells = lines[0].toLowerCase(); - const hasHeader = firstCells.includes('first') || firstCells.includes('email'); + const hasHeader = + firstCells.includes('first') || firstCells.includes('email'); const dataLines = hasHeader ? lines.slice(1) : lines; - if (dataLines.length === 0) return { ok: false, error: 'No data rows found.' }; + if (dataLines.length === 0) + return { ok: false, error: 'No data rows found.' }; const rows: MentorInviteData[] = []; for (let i = 0; i < dataLines.length; i++) { @@ -27,7 +32,9 @@ function previewCSV( if (cols.length < 3) { return { ok: false, - error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${cols.length}.`, + error: `Row ${hasHeader ? i + 2 : i + 1}: expected 3 columns, got ${ + cols.length + }.`, }; } rows.push({ firstName: cols[0], lastName: cols[1], email: cols[2] }); @@ -48,7 +55,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { const [preview, setPreview] = useState([]); const [parseError, setParseError] = useState(''); const [result, setResult] = useState(null); - const [selectedListSlug, setSelectedListSlug] = useState(rsvpLists[0]?.slug ?? ''); + const [selectedListSlug, setSelectedListSlug] = useState( + rsvpLists[0]?.slug ?? '' + ); const [selectedReleases, setSelectedReleases] = useState([]); const [configError, setConfigError] = useState(''); @@ -122,7 +131,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; - link.download = `mentor-invites-${new Date().toISOString().split('T')[0]}.csv`; + link.download = `mentor-invites-${ + new Date().toISOString().split('T')[0] + }.csv`; link.click(); URL.revokeObjectURL(url); }; @@ -160,7 +171,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {parseError && (

CSV errors:

-
{parseError}
+
+            {parseError}
+          
)} @@ -191,10 +204,19 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {preview.map((mentor, i) => ( - - {mentor.firstName} - {mentor.lastName} - {mentor.email} + + + {mentor.firstName} + + + {mentor.lastName} + + + {mentor.email} + ))} @@ -204,7 +226,9 @@ export default function MentorBulkInviteForm({ rsvpLists, releases }: Props) { {/* RSVP List */}
- + - {selectedReleases.length === releases.length ? 'Deselect all' : 'Select all'} + {selectedReleases.length === releases.length + ? 'Deselect all' + : 'Select all'}
@@ -138,7 +144,9 @@ export default function MentorSingleInviteForm({ rsvpLists, releases }: Props) { className="w-4 h-4 accent-[#005271]" /> {release.title} - {release.id} + + {release.id} + ))}
diff --git a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts index 42a913ed4..401ec3a77 100644 --- a/app/(pages)/admin/_utils/generateInviteResultsCSV.ts +++ b/app/(pages)/admin/_utils/generateInviteResultsCSV.ts @@ -39,7 +39,7 @@ export function generateInviteResultsCSV( row.titoUrl ?? '', ...(includeHub ? [row.hubUrl ?? ''] : []), row.success ? 'TRUE' : 'FALSE', - row.success ? '' : (row.error ?? 'Unknown error'), + row.success ? '' : row.error ?? 'Unknown error', ]; return cells.map(escapeCell).join(','); }); From a4fc269f51691e7f0ae82b23d6d08ac681297911 Mon Sep 17 00:00:00 2001 From: reehals Date: Mon, 2 Mar 2026 19:50:25 -0800 Subject: [PATCH 17/18] Revert "Merge branch '376-mentor-email-invites' of https://github.com/HackDavis/hackdavis-hub into 376-mentor-email-invites" This reverts commit 458d2dbc1c17af85e19d43f1606147934c1212e7, reversing changes made to fd85880a8ccfcab98d3d92f61db6a97c9d6a52d3. --- .../2026JudgeHubInviteTemplate.ts | 61 ------------------- app/(pages)/admin/invite-hackers/page.tsx | 11 ++++ app/(pages)/admin/page.tsx | 4 ++ 3 files changed, 15 insertions(+), 61 deletions(-) delete mode 100644 app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts create mode 100644 app/(pages)/admin/invite-hackers/page.tsx diff --git a/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts b/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts deleted file mode 100644 index dc9010166..000000000 --- a/app/(api)/_actions/emails/emailFormats/2026JudgeHubInviteTemplate.ts +++ /dev/null @@ -1,61 +0,0 @@ -export default function judgeHubInviteTemplate( - fname: string, - inviteLink: string -) { - return ` - - - - - Judge Invitation - HackDavis 2026 - - - -
- HackDavis 2026 -

Welcome to HackDavis 2026! πŸŽ‰

-
-

Hi ${fname},

-

We are thrilled to welcome you as a judge at HackDavis 2026! We're excited to have your expertise help our hackers bring their ideas to life.

-

Here's what you need to do:

-
    -
  • - Create your HackDavis Hub account by clicking the button below: -
    • This link is unique to you β€” do NOT share it with anyone.
    -
  • -
  • - Join our Discord at https://discord.gg/wc6QQEc to stay up to date with event details. -
  • -
- Create Your Hub Account -

If the button doesn't work, copy and paste this link into your browser:

-

${inviteLink}

-

See you at HackDavis! ✨

-

The HackDavis Team

-
-
- HackDavis 2026 -
- -`; -} diff --git a/app/(pages)/admin/invite-hackers/page.tsx b/app/(pages)/admin/invite-hackers/page.tsx new file mode 100644 index 000000000..e042ca6cd --- /dev/null +++ b/app/(pages)/admin/invite-hackers/page.tsx @@ -0,0 +1,11 @@ +'use client'; + +import InviteLinkForm from '../_components/InviteLinkForm/InviteLinkForm'; + +export default function InviteJudgesPage() { + return ( +
+ +
+ ); +} diff --git a/app/(pages)/admin/page.tsx b/app/(pages)/admin/page.tsx index e5b25fc2c..cb69ab440 100644 --- a/app/(pages)/admin/page.tsx +++ b/app/(pages)/admin/page.tsx @@ -25,6 +25,10 @@ const action_links = [ href: '/admin/invites', body: 'Invites', }, + { + href: '/admin/invite-hackers', + body: 'Invite Hackers', + }, { href: '/admin/randomize-projects', body: 'Randomize Projects', From 40ce0ddcf2a6efd424be6a40f26341bd30b4c922 Mon Sep 17 00:00:00 2001 From: reehals Date: Mon, 2 Mar 2026 20:32:59 -0800 Subject: [PATCH 18/18] Move mentor invites to new folder and add vars --- .../2026MentorInviteTemplate.ts | 13 +++++++++---- app/(api)/_actions/emails/sendBulkMentorInvites.ts | 2 +- app/(api)/_actions/emails/sendSingleMentorInvite.ts | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) rename app/(api)/_actions/emails/{emailFormats => emailTemplates}/2026MentorInviteTemplate.ts (84%) diff --git a/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts b/app/(api)/_actions/emails/emailTemplates/2026MentorInviteTemplate.ts similarity index 84% rename from app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts rename to app/(api)/_actions/emails/emailTemplates/2026MentorInviteTemplate.ts index 0d51ba6e4..47b3a8e67 100644 --- a/app/(api)/_actions/emails/emailFormats/2026MentorInviteTemplate.ts +++ b/app/(api)/_actions/emails/emailTemplates/2026MentorInviteTemplate.ts @@ -1,10 +1,15 @@ export default function mentorInviteTemplate(fname: string, titoUrl: string) { + const EMAIL_SUBJECT = 'Mentor Invitation - HackDavis 2026'; + const HEADER_IMAGE_URL = `${process.env.BASE_URL}/email/2025_email_header.png`; + const FOOTER_IMAGE_URL = `${process.env.BASE_URL}/email/2025_email_footer.png`; + const DISCORD_SERVER_URL = 'https://discord.gg/wc6QQEc'; + return ` - Mentor Invitation - HackDavis 2026 + ${EMAIL_SUBJECT}
+ HackDavis 2026 +

Congratulations from HackDavis! πŸŽ‰

+
+

Hi ${fname},

+

We are thrilled to welcome you as a mentor at HackDavis 2026! We're excited to have your expertise help our hackers bring their ideas to life.

+

Here's what we need from you:

+
+ Claim Your Mentor Ticket +

If the button doesn't work, copy and paste this link into your browser:

+

${titoUrl}

+

After claiming your ticket, you will receive a unique QR code for check-in at the event.

+

See you at HackDavis! ✨

+

The HackDavis Team

+
+
+ HackDavis 2026 +