🐳 28/03 - 06:27 - Can you change the video to a screen recording of different tasks happening in a dashboard by ai agents in a businness format like github.com/paperclipai/paperclip
Browse files- index.html +242 -84
index.html
CHANGED
|
@@ -414,68 +414,123 @@
|
|
| 414 |
</section>
|
| 415 |
|
| 416 |
<!-- Video Demo Section -->
|
| 417 |
-
<section id="video" class="py-24 bg-
|
| 418 |
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
| 419 |
<div class="text-center mb-12">
|
| 420 |
-
<h2 class="text-3xl md:text-4xl font-bold mb-4">
|
| 421 |
-
<p class="text-slate-
|
| 422 |
</div>
|
| 423 |
|
| 424 |
-
<div class="video-container shadow-2xl aspect-video relative group">
|
| 425 |
-
<!--
|
| 426 |
-
<
|
| 427 |
-
<
|
| 428 |
-
|
| 429 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 430 |
|
| 431 |
-
<!--
|
| 432 |
-
<div id="video-overlay" class="absolute inset-0 bg-black/
|
| 433 |
-
<div class="play-button">
|
| 434 |
-
<i data-lucide="play" class="w-8 h-8 text-
|
| 435 |
</div>
|
| 436 |
</div>
|
| 437 |
|
| 438 |
-
<!--
|
| 439 |
-
<div class="absolute bottom-0 left-0 right-0 p-4 bg-gradient-to-t from-black/
|
| 440 |
<div class="flex items-center space-x-4 text-white">
|
| 441 |
-
<button onclick="
|
| 442 |
-
<i data-lucide="play" id="play-icon" class="w-6 h-6"></i>
|
| 443 |
</button>
|
| 444 |
-
<div class="flex-1 h-1 bg-white/
|
| 445 |
-
<div id="
|
| 446 |
</div>
|
| 447 |
-
<span id="
|
| 448 |
-
<button onclick="
|
| 449 |
-
<i data-lucide="volume-2" id="volume-icon" class="w-5 h-5"></i>
|
| 450 |
-
</button>
|
| 451 |
-
<button onclick="fullscreen()" class="hover:text-sky-400 transition-colors">
|
| 452 |
-
<i data-lucide="maximize" class="w-5 h-5"></i>
|
| 453 |
</button>
|
| 454 |
</div>
|
| 455 |
</div>
|
| 456 |
</div>
|
| 457 |
|
| 458 |
<div class="grid md:grid-cols-3 gap-6 mt-12">
|
| 459 |
-
<div class="
|
| 460 |
-
<div class="w-12 h-12 bg-sky-
|
| 461 |
-
<i data-lucide="
|
| 462 |
</div>
|
| 463 |
-
<h3 class="font-semibold text-lg mb-2">
|
| 464 |
-
<p class="text-slate-
|
| 465 |
</div>
|
| 466 |
-
<div class="
|
| 467 |
-
<div class="w-12 h-12 bg-violet-
|
| 468 |
-
<i data-lucide="
|
| 469 |
</div>
|
| 470 |
-
<h3 class="font-semibold text-lg mb-2">
|
| 471 |
-
<p class="text-slate-
|
| 472 |
</div>
|
| 473 |
-
<div class="
|
| 474 |
-
<div class="w-12 h-12 bg-emerald-
|
| 475 |
-
<i data-lucide="shield-check" class="w-6 h-6 text-emerald-
|
| 476 |
</div>
|
| 477 |
-
<h3 class="font-semibold text-lg mb-2">
|
| 478 |
-
<p class="text-slate-
|
| 479 |
</div>
|
| 480 |
</div>
|
| 481 |
</div>
|
|
@@ -753,68 +808,171 @@
|
|
| 753 |
return new Promise(resolve => setTimeout(resolve, ms));
|
| 754 |
}
|
| 755 |
|
| 756 |
-
//
|
| 757 |
-
|
| 758 |
-
|
| 759 |
-
|
| 760 |
-
const
|
| 761 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 762 |
|
| 763 |
-
function
|
| 764 |
-
if (
|
| 765 |
-
|
| 766 |
-
overlay.classList.add('hidden');
|
| 767 |
-
playIcon.setAttribute('data-lucide', 'pause');
|
| 768 |
} else {
|
| 769 |
-
|
| 770 |
-
overlay.classList.remove('hidden');
|
| 771 |
-
playIcon.setAttribute('data-lucide', 'play');
|
| 772 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 773 |
lucide.createIcons();
|
| 774 |
}
|
| 775 |
|
| 776 |
-
function
|
| 777 |
-
|
| 778 |
-
const
|
| 779 |
-
|
| 780 |
-
|
| 781 |
-
|
| 782 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 783 |
}
|
|
|
|
| 784 |
lucide.createIcons();
|
| 785 |
}
|
| 786 |
|
| 787 |
-
function
|
| 788 |
-
|
| 789 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 790 |
}
|
| 791 |
}
|
| 792 |
|
| 793 |
-
function
|
|
|
|
| 794 |
const rect = e.currentTarget.getBoundingClientRect();
|
| 795 |
const pos = (e.clientX - rect.left) / rect.width;
|
| 796 |
-
|
| 797 |
}
|
| 798 |
|
| 799 |
-
|
| 800 |
-
const
|
| 801 |
-
|
| 802 |
-
|
| 803 |
-
|
| 804 |
-
|
| 805 |
-
|
| 806 |
-
});
|
| 807 |
-
|
| 808 |
-
video.addEventListener('ended', () => {
|
| 809 |
-
overlay.classList.remove('hidden');
|
| 810 |
-
playIcon.setAttribute('data-lucide', 'play');
|
| 811 |
lucide.createIcons();
|
| 812 |
-
});
|
| 813 |
-
|
| 814 |
-
function formatTime(seconds) {
|
| 815 |
-
const mins = Math.floor(seconds / 60);
|
| 816 |
-
const secs = Math.floor(seconds % 60);
|
| 817 |
-
return `${mins}:${secs.toString().padStart(2, '0')}`;
|
| 818 |
}
|
| 819 |
|
| 820 |
// Feature Tabs
|
|
|
|
| 414 |
</section>
|
| 415 |
|
| 416 |
<!-- Video Demo Section -->
|
| 417 |
+
<section id="video" class="py-24 bg-slate-900">
|
| 418 |
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
| 419 |
<div class="text-center mb-12">
|
| 420 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4 text-white">AI Agents at Work</h2>
|
| 421 |
+
<p class="text-slate-400 text-lg max-w-2xl mx-auto">Watch AI agents autonomously handle tasks across your business dashboard—processing emails, updating CRMs, and coordinating with your team in real-time.</p>
|
| 422 |
</div>
|
| 423 |
|
| 424 |
+
<div class="video-container shadow-2xl aspect-video relative group bg-slate-800 rounded-2xl overflow-hidden border border-slate-700">
|
| 425 |
+
<!-- Dashboard Screen Recording Mock -->
|
| 426 |
+
<div id="dashboard-demo" class="w-full h-full bg-slate-900 relative overflow-hidden">
|
| 427 |
+
<!-- Dashboard Header -->
|
| 428 |
+
<div class="absolute top-0 left-0 right-0 h-14 bg-slate-800 border-b border-slate-700 flex items-center px-6 z-20">
|
| 429 |
+
<div class="flex items-center space-x-3">
|
| 430 |
+
<div class="w-8 h-8 bg-gradient-to-br from-violet-500 to-fuchsia-500 rounded-lg flex items-center justify-center">
|
| 431 |
+
<i data-lucide="bot" class="w-4 h-4 text-white"></i>
|
| 432 |
+
</div>
|
| 433 |
+
<span class="text-white font-semibold">FlowSync AI Dashboard</span>
|
| 434 |
+
</div>
|
| 435 |
+
<div class="ml-auto flex items-center space-x-4">
|
| 436 |
+
<div class="flex items-center space-x-2 px-3 py-1.5 bg-emerald-500/20 rounded-full border border-emerald-500/30">
|
| 437 |
+
<span class="w-2 h-2 rounded-full bg-emerald-400 animate-pulse"></span>
|
| 438 |
+
<span class="text-emerald-400 text-xs font-medium">4 Agents Active</span>
|
| 439 |
+
</div>
|
| 440 |
+
<div class="w-8 h-8 rounded-full bg-slate-700"></div>
|
| 441 |
+
</div>
|
| 442 |
+
</div>
|
| 443 |
+
|
| 444 |
+
<!-- Dashboard Content -->
|
| 445 |
+
<div class="absolute top-14 left-0 right-0 bottom-0 flex">
|
| 446 |
+
<!-- Sidebar -->
|
| 447 |
+
<div class="w-64 bg-slate-800/50 border-r border-slate-700 p-4 hidden md:block">
|
| 448 |
+
<div class="space-y-2">
|
| 449 |
+
<div class="flex items-center space-x-3 px-3 py-2 bg-sky-500/20 rounded-lg border border-sky-500/30">
|
| 450 |
+
<i data-lucide="layout-dashboard" class="w-4 h-4 text-sky-400"></i>
|
| 451 |
+
<span class="text-sky-400 text-sm font-medium">Active Tasks</span>
|
| 452 |
+
</div>
|
| 453 |
+
<div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
|
| 454 |
+
<i data-lucide="users" class="w-4 h-4"></i>
|
| 455 |
+
<span class="text-sm">Team</span>
|
| 456 |
+
</div>
|
| 457 |
+
<div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
|
| 458 |
+
<i data-lucide="git-branch" class="w-4 h-4"></i>
|
| 459 |
+
<span class="text-sm">Workflows</span>
|
| 460 |
+
</div>
|
| 461 |
+
<div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
|
| 462 |
+
<i data-lucide="bar-chart-3" class="w-4 h-4"></i>
|
| 463 |
+
<span class="text-sm">Analytics</span>
|
| 464 |
+
</div>
|
| 465 |
+
</div>
|
| 466 |
+
</div>
|
| 467 |
+
|
| 468 |
+
<!-- Main Content Area -->
|
| 469 |
+
<div class="flex-1 p-6 overflow-hidden">
|
| 470 |
+
<!-- Task Feed -->
|
| 471 |
+
<div class="max-w-3xl mx-auto space-y-3" id="agent-task-feed">
|
| 472 |
+
<!-- Tasks will be animated here -->
|
| 473 |
+
</div>
|
| 474 |
+
</div>
|
| 475 |
+
</div>
|
| 476 |
+
|
| 477 |
+
<!-- AI Agent Activity Overlay -->
|
| 478 |
+
<div class="absolute bottom-4 right-4 bg-slate-800/90 backdrop-blur border border-slate-700 rounded-xl p-4 shadow-2xl max-w-xs z-30">
|
| 479 |
+
<div class="flex items-center space-x-3 mb-3">
|
| 480 |
+
<div class="w-2 h-2 rounded-full bg-violet-400 animate-pulse"></div>
|
| 481 |
+
<span class="text-white text-sm font-medium">AI Agent Activity</span>
|
| 482 |
+
</div>
|
| 483 |
+
<div id="agent-status-text" class="text-slate-400 text-xs leading-relaxed">
|
| 484 |
+
Monitoring incoming tasks...
|
| 485 |
+
</div>
|
| 486 |
+
</div>
|
| 487 |
+
</div>
|
| 488 |
|
| 489 |
+
<!-- Play Overlay (shown when paused) -->
|
| 490 |
+
<div id="video-overlay" class="absolute inset-0 bg-black/60 flex items-center justify-center cursor-pointer z-40" onclick="toggleDashboardDemo()">
|
| 491 |
+
<div class="play-button bg-white/95 hover:bg-white hover:scale-110 transition-all">
|
| 492 |
+
<i data-lucide="play" class="w-8 h-8 text-slate-900 ml-1"></i>
|
| 493 |
</div>
|
| 494 |
</div>
|
| 495 |
|
| 496 |
+
<!-- Dashboard Controls -->
|
| 497 |
+
<div class="absolute bottom-0 left-0 right-0 p-4 bg-gradient-to-t from-black/90 to-transparent z-30">
|
| 498 |
<div class="flex items-center space-x-4 text-white">
|
| 499 |
+
<button onclick="toggleDashboardDemo()" class="hover:text-sky-400 transition-colors">
|
| 500 |
+
<i data-lucide="play" id="dashboard-play-icon" class="w-6 h-6"></i>
|
| 501 |
</button>
|
| 502 |
+
<div class="flex-1 h-1 bg-white/20 rounded-full overflow-hidden cursor-pointer" onclick="seekDashboardDemo(event)">
|
| 503 |
+
<div id="dashboard-progress" class="h-full bg-violet-500 w-0 transition-all duration-300"></div>
|
| 504 |
</div>
|
| 505 |
+
<span id="dashboard-time" class="text-sm font-medium text-slate-300">0:00 / 0:45</span>
|
| 506 |
+
<button onclick="toggleDashboardMute()" class="hover:text-sky-400 transition-colors">
|
| 507 |
+
<i data-lucide="volume-2" id="dashboard-volume-icon" class="w-5 h-5"></i>
|
|
|
|
|
|
|
|
|
|
| 508 |
</button>
|
| 509 |
</div>
|
| 510 |
</div>
|
| 511 |
</div>
|
| 512 |
|
| 513 |
<div class="grid md:grid-cols-3 gap-6 mt-12">
|
| 514 |
+
<div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-sky-500/50 transition-colors">
|
| 515 |
+
<div class="w-12 h-12 bg-sky-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
|
| 516 |
+
<i data-lucide="bot" class="w-6 h-6 text-sky-400"></i>
|
| 517 |
</div>
|
| 518 |
+
<h3 class="font-semibold text-lg mb-2 text-white">AI Agents Work 24/7</h3>
|
| 519 |
+
<p class="text-slate-400 text-sm">Autonomous agents handle tasks round-the-clock without supervision</p>
|
| 520 |
</div>
|
| 521 |
+
<div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-violet-500/50 transition-colors">
|
| 522 |
+
<div class="w-12 h-12 bg-violet-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
|
| 523 |
+
<i data-lucide="workflow" class="w-6 h-6 text-violet-400"></i>
|
| 524 |
</div>
|
| 525 |
+
<h3 class="font-semibold text-lg mb-2 text-white">Multi-Step Reasoning</h3>
|
| 526 |
+
<p class="text-slate-400 text-sm">Agents break down complex tasks and execute across multiple tools</p>
|
| 527 |
</div>
|
| 528 |
+
<div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-emerald-500/50 transition-colors">
|
| 529 |
+
<div class="w-12 h-12 bg-emerald-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
|
| 530 |
+
<i data-lucide="shield-check" class="w-6 h-6 text-emerald-400"></i>
|
| 531 |
</div>
|
| 532 |
+
<h3 class="font-semibold text-lg mb-2 text-white">Human-in-the-Loop</h3>
|
| 533 |
+
<p class="text-slate-400 text-sm">Smart escalation to humans when critical decisions are needed</p>
|
| 534 |
</div>
|
| 535 |
</div>
|
| 536 |
</div>
|
|
|
|
| 808 |
return new Promise(resolve => setTimeout(resolve, ms));
|
| 809 |
}
|
| 810 |
|
| 811 |
+
// AI Dashboard Demo Logic
|
| 812 |
+
let demoRunning = false;
|
| 813 |
+
let demoInterval;
|
| 814 |
+
let currentTask = 0;
|
| 815 |
+
const totalDemoTime = 45000; // 45 seconds
|
| 816 |
+
|
| 817 |
+
const agentTasks = [
|
| 818 |
+
{ agent: 'Email Agent', action: 'Received new inquiry from client@acme.com', icon: 'mail', color: 'sky', time: 0 },
|
| 819 |
+
{ agent: 'Classifier AI', action: 'Categorized as "High-Priority Lead"', icon: 'sparkles', color: 'violet', time: 2000 },
|
| 820 |
+
{ agent: 'CRM Agent', action: 'Created lead in Salesforce with extracted details', icon: 'database', color: 'blue', time: 4000 },
|
| 821 |
+
{ agent: 'Slack Agent', action: 'Notified sales team in #new-leads channel', icon: 'message-square', color: 'emerald', time: 6000 },
|
| 822 |
+
{ agent: 'Calendar Agent', action: 'Checked availability and scheduled follow-up', icon: 'calendar', color: 'orange', time: 8000 },
|
| 823 |
+
{ agent: 'Email Agent', action: 'Sent personalized response to client', icon: 'send', color: 'sky', time: 10000 },
|
| 824 |
+
{ agent: 'Analytics Agent', action: 'Updated conversion tracking dashboard', icon: 'bar-chart-2', color: 'fuchsia', time: 12000 },
|
| 825 |
+
{ agent: 'Email Agent', action: 'Received support ticket #2847', icon: 'ticket', color: 'sky', time: 15000 },
|
| 826 |
+
{ agent: 'Classifier AI', action: 'Identified as "Technical Issue - Escalate"', icon: 'alert-triangle', color: 'violet', time: 17000 },
|
| 827 |
+
{ agent: 'Support Agent', action: 'Assigned to senior engineer Sarah Chen', icon: 'user-check', color: 'rose', time: 19000 },
|
| 828 |
+
{ agent: 'GitHub Agent', action: 'Created issue with logs and reproduction steps', icon: 'github', color: 'slate', time: 21000 },
|
| 829 |
+
{ agent: 'Slack Agent', action: 'Alerted engineering team with priority flag', icon: 'bell', color: 'emerald', time: 23000 },
|
| 830 |
+
{ agent: 'Docs Agent', action: 'Searched knowledge base for similar issues', icon: 'search', color: 'amber', time: 25000 },
|
| 831 |
+
{ agent: 'Email Agent', action: 'Sent acknowledgment to customer with ETA', icon: 'clock', color: 'sky', time: 27000 },
|
| 832 |
+
{ agent: 'Invoice Agent', action: 'Processed monthly subscription renewals (47)', icon: 'credit-card', color: 'cyan', time: 30000 },
|
| 833 |
+
{ agent: 'Finance AI', action: 'Flagged 3 accounts for payment retry', icon: 'alert-circle', color: 'yellow', time: 32000 },
|
| 834 |
+
{ agent: 'Stripe Agent', action: 'Updated payment methods for expired cards', icon: 'refresh-cw', color: 'indigo', time: 34000 },
|
| 835 |
+
{ agent: 'Slack Agent', action: 'Reported revenue metrics to #finance', icon: 'trending-up', color: 'emerald', time: 36000 },
|
| 836 |
+
{ agent: 'Sync Agent', action: 'Reconciled data across 12 connected platforms', icon: 'sync', color: 'teal', time: 38000 },
|
| 837 |
+
{ agent: 'Maintenance', action: 'Optimizing workflows... Demo complete', icon: 'check-circle', color: 'emerald', time: 42000 }
|
| 838 |
+
];
|
| 839 |
|
| 840 |
+
function toggleDashboardDemo() {
|
| 841 |
+
if (demoRunning) {
|
| 842 |
+
pauseDashboardDemo();
|
|
|
|
|
|
|
| 843 |
} else {
|
| 844 |
+
playDashboardDemo();
|
|
|
|
|
|
|
| 845 |
}
|
| 846 |
+
}
|
| 847 |
+
|
| 848 |
+
function playDashboardDemo() {
|
| 849 |
+
demoRunning = true;
|
| 850 |
+
document.getElementById('video-overlay').classList.add('hidden');
|
| 851 |
+
document.getElementById('dashboard-play-icon').setAttribute('data-lucide', 'pause');
|
| 852 |
+
lucide.createIcons();
|
| 853 |
+
|
| 854 |
+
const startTime = Date.now();
|
| 855 |
+
|
| 856 |
+
demoInterval = setInterval(() => {
|
| 857 |
+
const elapsed = Date.now() - startTime;
|
| 858 |
+
const progress = Math.min((elapsed / totalDemoTime) * 100, 100);
|
| 859 |
+
document.getElementById('dashboard-progress').style.width = `${progress}%`;
|
| 860 |
+
|
| 861 |
+
// Update time display
|
| 862 |
+
const currentSecs = Math.floor(elapsed / 1000);
|
| 863 |
+
const totalSecs = Math.floor(totalDemoTime / 1000);
|
| 864 |
+
document.getElementById('dashboard-time').textContent =
|
| 865 |
+
`${Math.floor(currentSecs/60)}:${(currentSecs%60).toString().padStart(2,'0')} / ${Math.floor(totalSecs/60)}:${(totalSecs%60).toString().padStart(2,'0')}`;
|
| 866 |
+
|
| 867 |
+
// Check for tasks to show
|
| 868 |
+
agentTasks.forEach((task, index) => {
|
| 869 |
+
if (elapsed >= task.time && !task.shown) {
|
| 870 |
+
task.shown = true;
|
| 871 |
+
showAgentTask(task, index);
|
| 872 |
+
updateAgentStatus(task);
|
| 873 |
+
}
|
| 874 |
+
});
|
| 875 |
+
|
| 876 |
+
if (elapsed >= totalDemoTime) {
|
| 877 |
+
pauseDashboardDemo();
|
| 878 |
+
// Reset for replay
|
| 879 |
+
setTimeout(() => {
|
| 880 |
+
agentTasks.forEach(t => t.shown = false);
|
| 881 |
+
document.getElementById('agent-task-feed').innerHTML = '';
|
| 882 |
+
currentTask = 0;
|
| 883 |
+
}, 2000);
|
| 884 |
+
}
|
| 885 |
+
}, 100);
|
| 886 |
+
}
|
| 887 |
+
|
| 888 |
+
function pauseDashboardDemo() {
|
| 889 |
+
demoRunning = false;
|
| 890 |
+
clearInterval(demoInterval);
|
| 891 |
+
document.getElementById('video-overlay').classList.remove('hidden');
|
| 892 |
+
document.getElementById('dashboard-play-icon').setAttribute('data-lucide', 'play');
|
| 893 |
lucide.createIcons();
|
| 894 |
}
|
| 895 |
|
| 896 |
+
function showAgentTask(task, index) {
|
| 897 |
+
const feed = document.getElementById('agent-task-feed');
|
| 898 |
+
const taskEl = document.createElement('div');
|
| 899 |
+
|
| 900 |
+
const colorMap = {
|
| 901 |
+
sky: 'bg-sky-500/20 border-sky-500/30 text-sky-400',
|
| 902 |
+
violet: 'bg-violet-500/20 border-violet-500/30 text-violet-400',
|
| 903 |
+
blue: 'bg-blue-500/20 border-blue-500/30 text-blue-400',
|
| 904 |
+
emerald: 'bg-emerald-500/20 border-emerald-500/30 text-emerald-400',
|
| 905 |
+
orange: 'bg-orange-500/20 border-orange-500/30 text-orange-400',
|
| 906 |
+
fuchsia: 'bg-fuchsia-500/20 border-fuchsia-500/30 text-fuchsia-400',
|
| 907 |
+
rose: 'bg-rose-500/20 border-rose-500/30 text-rose-400',
|
| 908 |
+
slate: 'bg-slate-500/20 border-slate-500/30 text-slate-400',
|
| 909 |
+
amber: 'bg-amber-500/20 border-amber-500/30 text-amber-400',
|
| 910 |
+
cyan: 'bg-cyan-500/20 border-cyan-500/30 text-cyan-400',
|
| 911 |
+
yellow: 'bg-yellow-500/20 border-yellow-500/30 text-yellow-400',
|
| 912 |
+
indigo: 'bg-indigo-500/20 border-indigo-500/30 text-indigo-400',
|
| 913 |
+
teal: 'bg-teal-500/20 border-teal-500/30 text-teal-400'
|
| 914 |
+
};
|
| 915 |
+
|
| 916 |
+
const colorClass = colorMap[task.color] || colorMap.sky;
|
| 917 |
+
|
| 918 |
+
taskEl.className = `flex items-center space-x-4 p-4 rounded-xl border ${colorClass} transform translate-y-4 opacity-0 transition-all duration-500 animate-slide-up`;
|
| 919 |
+
taskEl.innerHTML = `
|
| 920 |
+
<div class="w-10 h-10 rounded-lg bg-white/10 flex items-center justify-center flex-shrink-0">
|
| 921 |
+
<i data-lucide="${task.icon}" class="w-5 h-5"></i>
|
| 922 |
+
</div>
|
| 923 |
+
<div class="flex-1 min-w-0">
|
| 924 |
+
<div class="flex items-center space-x-2 mb-1">
|
| 925 |
+
<span class="font-semibold text-sm">${task.agent}</span>
|
| 926 |
+
<span class="text-xs opacity-60">• Just now</span>
|
| 927 |
+
</div>
|
| 928 |
+
<p class="text-sm opacity-90 truncate">${task.action}</p>
|
| 929 |
+
</div>
|
| 930 |
+
<div class="w-2 h-2 rounded-full bg-current animate-pulse"></div>
|
| 931 |
+
`;
|
| 932 |
+
|
| 933 |
+
feed.insertBefore(taskEl, feed.firstChild);
|
| 934 |
+
|
| 935 |
+
// Animate in
|
| 936 |
+
setTimeout(() => {
|
| 937 |
+
taskEl.classList.remove('translate-y-4', 'opacity-0');
|
| 938 |
+
}, 50);
|
| 939 |
+
|
| 940 |
+
// Keep only last 5 tasks visible
|
| 941 |
+
while (feed.children.length > 5) {
|
| 942 |
+
feed.removeChild(feed.lastChild);
|
| 943 |
}
|
| 944 |
+
|
| 945 |
lucide.createIcons();
|
| 946 |
}
|
| 947 |
|
| 948 |
+
function updateAgentStatus(task) {
|
| 949 |
+
const statusText = document.getElementById('agent-status-text');
|
| 950 |
+
statusText.textContent = `${task.agent} is ${task.action.toLowerCase()}...`;
|
| 951 |
+
|
| 952 |
+
// Flash the activity indicator
|
| 953 |
+
const indicator = document.querySelector('.bg-violet-400');
|
| 954 |
+
if (indicator) {
|
| 955 |
+
indicator.classList.remove('animate-pulse');
|
| 956 |
+
void indicator.offsetWidth; // Trigger reflow
|
| 957 |
+
indicator.classList.add('animate-pulse');
|
| 958 |
}
|
| 959 |
}
|
| 960 |
|
| 961 |
+
function seekDashboardDemo(e) {
|
| 962 |
+
// Visual feedback only - in real implementation would seek to position
|
| 963 |
const rect = e.currentTarget.getBoundingClientRect();
|
| 964 |
const pos = (e.clientX - rect.left) / rect.width;
|
| 965 |
+
document.getElementById('dashboard-progress').style.width = `${pos * 100}%`;
|
| 966 |
}
|
| 967 |
|
| 968 |
+
function toggleDashboardMute() {
|
| 969 |
+
const icon = document.getElementById('dashboard-volume-icon');
|
| 970 |
+
if (icon.getAttribute('data-lucide') === 'volume-2') {
|
| 971 |
+
icon.setAttribute('data-lucide', 'volume-x');
|
| 972 |
+
} else {
|
| 973 |
+
icon.setAttribute('data-lucide', 'volume-2');
|
| 974 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 975 |
lucide.createIcons();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 976 |
}
|
| 977 |
|
| 978 |
// Feature Tabs
|