project-utils.ts
1 export function relativeDate(ts: number): string { 2 const diff = Date.now() - ts 3 if (diff < 60_000) return 'just now' 4 if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m ago` 5 if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h ago` 6 if (diff < 604_800_000) return `${Math.floor(diff / 86_400_000)}d ago` 7 return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' }) 8 } 9 10 export function formatHeartbeatInterval(intervalSec?: number | null): string { 11 if (!intervalSec || intervalSec <= 0) return 'Manual' 12 if (intervalSec % 3600 === 0) return `${intervalSec / 3600}h` 13 if (intervalSec % 60 === 0) return `${intervalSec / 60}m` 14 return `${intervalSec}s` 15 } 16 17 export const STATUS_STYLES: Record<string, string> = { 18 backlog: 'bg-white/[0.06] text-text-3', 19 queued: 'bg-amber-500/15 text-amber-400', 20 running: 'bg-sky-500/15 text-sky-400', 21 completed: 'bg-emerald-500/15 text-emerald-400', 22 failed: 'bg-red-500/15 text-red-400', 23 archived: 'bg-white/[0.04] text-text-3/50', 24 }