From 53b623fb205503dc5abe8aac1094677ed06c747f Mon Sep 17 00:00:00 2001
From: Matt
Date: Thu, 4 Jun 2026 16:53:21 +0200
Subject: [PATCH] feat(applicant): My Logistics card
(hotel/flights/visa+nationality) + confirm-page dashboard link
Co-Authored-By: Claude Sonnet 4.6
---
src/app/(applicant)/applicant/page.tsx | 4 +
.../finalist/confirm/[token]/page.tsx | 6 +-
.../applicant/my-logistics-card.tsx | 291 ++++++++++++++++++
3 files changed, 300 insertions(+), 1 deletion(-)
create mode 100644 src/components/applicant/my-logistics-card.tsx
diff --git a/src/app/(applicant)/applicant/page.tsx b/src/app/(applicant)/applicant/page.tsx
index 476fdbd..76e17d4 100644
--- a/src/app/(applicant)/applicant/page.tsx
+++ b/src/app/(applicant)/applicant/page.tsx
@@ -19,6 +19,7 @@ import { CompetitionTimelineSidebar } from '@/components/applicant/competition-t
import { MentoringRequestCard } from '@/components/applicant/mentoring-request-card'
import { MentorConversationCard } from '@/components/applicant/mentor-conversation-card'
import { AttendingMembersCard } from '@/components/applicant/attending-members-card'
+import { MyLogisticsCard } from '@/components/applicant/my-logistics-card'
import { LunchBanner } from '@/components/applicant/lunch-banner'
import { ExternalAttendeesStrip } from '@/components/applicant/external-attendees-strip'
import { AnimatedCard } from '@/components/shared/animated-container'
@@ -414,6 +415,9 @@ export default function ApplicantDashboardPage() {
{/* Grand finale attendee roster (auto-hides until confirmation status is CONFIRMED) */}
+ {/* Grand-finale logistics: hotel, flight, visa (auto-hides when not a confirmed finalist) */}
+
+
{/* Conversation with assigned mentor (auto-hides when no mentor assigned) */}
diff --git a/src/app/(public)/finalist/confirm/[token]/page.tsx b/src/app/(public)/finalist/confirm/[token]/page.tsx
index c541cc1..812b947 100644
--- a/src/app/(public)/finalist/confirm/[token]/page.tsx
+++ b/src/app/(public)/finalist/confirm/[token]/page.tsx
@@ -1,6 +1,7 @@
'use client'
import { Suspense, use, useEffect, useMemo, useState } from 'react'
+import Link from 'next/link'
import { trpc } from '@/lib/trpc/client'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { Button } from '@/components/ui/button'
@@ -180,8 +181,11 @@ function FinalistConfirmContent({ token }: { token: string }) {
We'll be in touch shortly with travel and lunch logistics. You can edit your team
- selection from your project page closer to the event.
+ selection and view hotel, flight, and visa details from your dashboard.