feat: improve VIP table display and rewrite seed service for new paradigm

- EventList VIP column: compact layout with max 2 names shown, party
  size badges, "+N more" indicator, and total passenger count
- Seed service: 20 VIPs with party sizes, 8 drivers, 8 vehicles,
  13 master events over 3 days with linked transport legs, realistic
  capacity planning and conflict-free driver/vehicle assignments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-04 00:22:59 +01:00
parent a6b639d5f4
commit 5f4c474e37
2 changed files with 826 additions and 346 deletions

View File

@@ -415,11 +415,28 @@ export function EventList() {
</span>
</td>
<td className="px-6 py-4 text-sm text-muted-foreground">
{event.vips && event.vips.length > 0
? event.vips.map(vip =>
vip.partySize > 1 ? `${vip.name} (+${vip.partySize - 1})` : vip.name
).join(', ')
: 'No VIPs assigned'}
{event.vips && event.vips.length > 0 ? (
<div className="max-w-[220px] space-y-0.5">
{event.vips.slice(0, 2).map(vip => (
<div key={vip.id} className="flex items-center gap-1 text-xs">
<span className="truncate font-medium text-foreground">{vip.name}</span>
{vip.partySize > 1 && (
<span className="shrink-0 px-1 py-0.5 rounded bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300 text-[10px] leading-none font-medium">
+{vip.partySize - 1}
</span>
)}
</div>
))}
{event.vips.length > 2 && (
<div className="text-[11px] text-primary">+{event.vips.length - 2} more</div>
)}
<div className="text-[10px] text-muted-foreground/70 pt-0.5">
{event.vips.reduce((sum, v) => sum + (v.partySize || 1), 0)} pax total
</div>
</div>
) : (
<span className="text-muted-foreground/70 italic text-xs">No VIPs</span>
)}
</td>
<td className="px-6 py-4 whitespace-nowrap text-sm text-muted-foreground">
{event.vehicle ? (