diff --git a/client/src/pages/DashboardPage.tsx b/client/src/pages/DashboardPage.tsx
index 1b935861..1cab4024 100644
--- a/client/src/pages/DashboardPage.tsx
+++ b/client/src/pages/DashboardPage.tsx
@@ -15,7 +15,7 @@ import { useToast } from '../components/shared/Toast'
import {
Plus, Calendar, Trash2, Edit2, Map, ChevronDown, ChevronUp,
Archive, ArchiveRestore, Clock, MapPin, Settings, X, ArrowRightLeft, Users,
- LayoutGrid, List, Copy, Bell,
+ LayoutGrid, List, Copy, Bell, CircleCheck,
} from 'lucide-react'
import { useCanDo } from '../store/permissionsStore'
@@ -311,10 +311,12 @@ function MobileTripCard({ trip, onEdit, onCopy, onDelete, onArchive, onClick, t,
{/* Countdown badge */}
{badgeText && (
-
-
+
+
{status === 'ongoing' ? (
+ ) : status === 'past' ? (
+
) : (
)}
@@ -401,10 +403,12 @@ function TripCard({ trip, onEdit, onCopy, onDelete, onArchive, onClick, t, local
{/* Status badge top-left */}
{badgeText && (
-
-
+
+
{status === 'ongoing' ? (
+ ) : status === 'past' ? (
+
) : (
)}
@@ -850,111 +854,20 @@ export default function DashboardPage(): React.ReactElement {
- {/* Mobile: Live Trip Hero */}
- {(() => {
- const liveTrip = trips.find(t => getTripStatus(t) === 'ongoing')
- if (!liveTrip) return null
- const today = new Date().toISOString().split('T')[0]
- const startDate = liveTrip.start_date || today
- const endDate = liveTrip.end_date || today
- const totalDays = Math.max(1, Math.ceil((new Date(endDate).getTime() - new Date(startDate).getTime()) / 86400000) + 1)
- const currentDay = Math.min(totalDays, Math.ceil((new Date(today).getTime() - new Date(startDate).getTime()) / 86400000) + 1)
- const daysLeft = Math.max(0, totalDays - currentDay)
- const progress = Math.round((currentDay / totalDays) * 100)
-
- return (
-
-
navigate(`/trips/${liveTrip.id}`)}
- className="relative rounded-3xl overflow-hidden cursor-pointer"
- style={{ minHeight: 340 }}
- >
- {/* Background */}
-
- {liveTrip.cover_image && (
- <>
-

-
- >
- )}
-
-
-
- {/* Content */}
-
- {/* Top badges */}
-
-
-
- {t("dashboard.mobile.liveNow")}
-
-
-
-
-
-
-
-
-
- {/* Title area */}
-
-
{liveTrip.title}
-
- {formatDateShort(liveTrip.start_date)} — {formatDateShort(liveTrip.end_date)} · {t('journey.pdf.day')} {currentDay} / {totalDays}
-
-
-
- {/* Progress */}
-
-
- {t('dashboard.mobile.tripProgress')}
- {daysLeft} days left
-
-
-
-
- {/* Stats */}
-
-
-
{liveTrip.place_count || 0}
-
Places
-
-
-
{liveTrip.shared_count || 0}
-
Buddies
-
-
-
-
-
- )
- })()}
+ {/* Mobile: Hero Trip (spotlight — ongoing or next upcoming) */}
+ {!isLoading && spotlight && (
+
+ { setEditingTrip(tr); setShowForm(true) } : undefined}
+ onCopy={can('trip_create') ? handleCopy : undefined}
+ onDelete={can('trip_delete', spotlight) ? handleDelete : undefined}
+ onArchive={can('trip_archive', spotlight) ? handleArchive : undefined}
+ onClick={tr => navigate(`/trips/${tr.id}`)}
+ />
+
+ )}
{/* Mobile: Quick Actions */}