@builderos/create-agent-os 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +39 -0
  2. package/bin/cli.js +133 -0
  3. package/package.json +40 -0
  4. package/src/template/App.tsx +68 -0
  5. package/src/template/agent-os/commands/create-tasks/1-get-spec-requirements.md +19 -0
  6. package/src/template/agent-os/commands/create-tasks/2-create-tasks-list.md +234 -0
  7. package/src/template/agent-os/commands/create-tasks/create-tasks.md +254 -0
  8. package/src/template/agent-os/commands/design-screen/design-screen.md +32 -0
  9. package/src/template/agent-os/commands/design-shell/design-shell.md +34 -0
  10. package/src/template/agent-os/commands/design-tokens/design-tokens.md +36 -0
  11. package/src/template/agent-os/commands/export-product/export-product.md +44 -0
  12. package/src/template/agent-os/commands/implement-tasks/1-determine-tasks.md +13 -0
  13. package/src/template/agent-os/commands/implement-tasks/2-implement-tasks.md +63 -0
  14. package/src/template/agent-os/commands/implement-tasks/3-verify-implementation.md +113 -0
  15. package/src/template/agent-os/commands/implement-tasks/implement-tasks.md +207 -0
  16. package/src/template/agent-os/commands/initialize-design/initialize-design.md +54 -0
  17. package/src/template/agent-os/commands/orchestrate-tasks/orchestrate-tasks.md +180 -0
  18. package/src/template/agent-os/commands/plan-product/1-product-concept.md +53 -0
  19. package/src/template/agent-os/commands/plan-product/2-create-mission.md +78 -0
  20. package/src/template/agent-os/commands/plan-product/3-create-roadmap.md +73 -0
  21. package/src/template/agent-os/commands/plan-product/4-create-tech-stack.md +46 -0
  22. package/src/template/agent-os/commands/plan-product/plan-product.md +241 -0
  23. package/src/template/agent-os/commands/sample-data/sample-data.md +51 -0
  24. package/src/template/agent-os/commands/scaffold-implementation/scaffold-implementation.md +36 -0
  25. package/src/template/agent-os/commands/screenshot-design/screenshot-design.md +21 -0
  26. package/src/template/agent-os/commands/shape-spec/1-initialize-spec.md +95 -0
  27. package/src/template/agent-os/commands/shape-spec/2-shape-spec.md +300 -0
  28. package/src/template/agent-os/commands/shape-spec/shape-spec.md +40 -0
  29. package/src/template/agent-os/commands/write-spec/write-spec.md +134 -0
  30. package/src/template/agent-os/config.yml +13 -0
  31. package/src/template/agent-os/product/mission.md +29 -0
  32. package/src/template/agent-os/product/roadmap.md +9 -0
  33. package/src/template/agent-os/product/tech-stack.md +14 -0
  34. package/src/template/agent-os/specs/README.md +1 -0
  35. package/src/template/agent-os/standards/backend/api.md +10 -0
  36. package/src/template/agent-os/standards/backend/migrations.md +9 -0
  37. package/src/template/agent-os/standards/backend/models.md +10 -0
  38. package/src/template/agent-os/standards/backend/queries.md +9 -0
  39. package/src/template/agent-os/standards/frontend/accessibility.md +10 -0
  40. package/src/template/agent-os/standards/frontend/components.md +11 -0
  41. package/src/template/agent-os/standards/frontend/css.md +7 -0
  42. package/src/template/agent-os/standards/frontend/responsive.md +11 -0
  43. package/src/template/agent-os/standards/global/coding-style.md +10 -0
  44. package/src/template/agent-os/standards/global/commenting.md +5 -0
  45. package/src/template/agent-os/standards/global/conventions.md +11 -0
  46. package/src/template/agent-os/standards/global/error-handling.md +9 -0
  47. package/src/template/agent-os/standards/global/tech-stack.md +31 -0
  48. package/src/template/agent-os/standards/global/validation.md +11 -0
  49. package/src/template/agent-os/standards/testing/test-writing.md +9 -0
  50. package/src/template/agent-os-ui/README.md +73 -0
  51. package/src/template/agent-os-ui/package-lock.json +5028 -0
  52. package/src/template/agent-os-ui/package.json +52 -0
  53. package/src/template/agent-os-ui/postcss.config.js +6 -0
  54. package/src/template/agent-os-ui/src/components/AgentShell.tsx +31 -0
  55. package/src/template/agent-os-ui/src/components/AgentSidebar.tsx +65 -0
  56. package/src/template/agent-os-ui/src/components/GuidanceCard.tsx +75 -0
  57. package/src/template/agent-os-ui/src/components/MarkdownViewer.tsx +25 -0
  58. package/src/template/agent-os-ui/src/components/PromptButton.tsx +28 -0
  59. package/src/template/agent-os-ui/src/components/StatusItem.tsx +45 -0
  60. package/src/template/agent-os-ui/src/components/ThemeToggle.tsx +72 -0
  61. package/src/template/agent-os-ui/src/index.ts +11 -0
  62. package/src/template/agent-os-ui/src/style.css +3 -0
  63. package/src/template/agent-os-ui/tailwind.config.js +50 -0
  64. package/src/template/agent-os-ui/tsconfig.json +33 -0
  65. package/src/template/agent-os-ui/vite.config.ts +32 -0
  66. package/src/template/control-center/backend/backend.log +2 -0
  67. package/src/template/control-center/backend/index.js +228 -0
  68. package/src/template/control-center/backend/package-lock.json +951 -0
  69. package/src/template/control-center/backend/package.json +19 -0
  70. package/src/template/control-center/frontend/README.md +73 -0
  71. package/src/template/control-center/frontend/eslint.config.js +23 -0
  72. package/src/template/control-center/frontend/index.html +21 -0
  73. package/src/template/control-center/frontend/package-lock.json +5752 -0
  74. package/src/template/control-center/frontend/package.json +42 -0
  75. package/src/template/control-center/frontend/public/runtime-config.json +11 -0
  76. package/src/template/control-center/frontend/public/vite.svg +1 -0
  77. package/src/template/control-center/frontend/src/App.css +42 -0
  78. package/src/template/control-center/frontend/src/App.tsx +738 -0
  79. package/src/template/control-center/frontend/src/assets/react.svg +1 -0
  80. package/src/template/control-center/frontend/src/components/ThemeToggle.tsx +64 -0
  81. package/src/template/control-center/frontend/src/components/ui/ToastContext.tsx +81 -0
  82. package/src/template/control-center/frontend/src/index.css +194 -0
  83. package/src/template/control-center/frontend/src/main.tsx +14 -0
  84. package/src/template/control-center/frontend/src/vite-env.d.ts +1 -0
  85. package/src/template/control-center/frontend/tsconfig.app.json +28 -0
  86. package/src/template/control-center/frontend/tsconfig.json +7 -0
  87. package/src/template/control-center/frontend/tsconfig.node.json +26 -0
  88. package/src/template/control-center/frontend/vite.config.ts +22 -0
  89. package/src/template/design/.claude/commands/design-os/data-model.md +122 -0
  90. package/src/template/design/.claude/commands/design-os/design-screen.md +309 -0
  91. package/src/template/design/.claude/commands/design-os/design-shell.md +238 -0
  92. package/src/template/design/.claude/commands/design-os/design-tokens.md +166 -0
  93. package/src/template/design/.claude/commands/design-os/export-product.md +1105 -0
  94. package/src/template/design/.claude/commands/design-os/product-roadmap.md +121 -0
  95. package/src/template/design/.claude/commands/design-os/product-vision.md +99 -0
  96. package/src/template/design/.claude/commands/design-os/sample-data.md +263 -0
  97. package/src/template/design/.claude/commands/design-os/screenshot-design.md +112 -0
  98. package/src/template/design/.claude/commands/design-os/shape-section.md +138 -0
  99. package/src/template/design/.claude/skills/frontend-design/SKILL.md +42 -0
  100. package/src/template/design/.github/CODE_OF_CONDUCT.md +5 -0
  101. package/src/template/design/.github/CONTRIBUTING.md +51 -0
  102. package/src/template/design/.github/ISSUE_TEMPLATE/config.yml +22 -0
  103. package/src/template/design/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  104. package/src/template/design/.github/SECURITY.yml +5 -0
  105. package/src/template/design/.github/SUPPORT.md +19 -0
  106. package/src/template/design/.github/workflows/pr-decline.yml +135 -0
  107. package/src/template/design/.github/workflows/stale.yml +25 -0
  108. package/src/template/design/CHANGELOG.md +13 -0
  109. package/src/template/design/LICENSE +21 -0
  110. package/src/template/design/README.md +54 -0
  111. package/src/template/design/agents.md +218 -0
  112. package/src/template/design/claude.md +1 -0
  113. package/src/template/design/components.json +22 -0
  114. package/src/template/design/docs/codebase-implementation.md +153 -0
  115. package/src/template/design/docs/design-section.md +135 -0
  116. package/src/template/design/docs/export.md +149 -0
  117. package/src/template/design/docs/getting-started.md +59 -0
  118. package/src/template/design/docs/index.md +56 -0
  119. package/src/template/design/docs/product-planning.md +113 -0
  120. package/src/template/design/docs/requirements.md +22 -0
  121. package/src/template/design/docs/usage.md +62 -0
  122. package/src/template/design/eslint.config.js +23 -0
  123. package/src/template/design/index.html +21 -0
  124. package/src/template/design/package-lock.json +5473 -0
  125. package/src/template/design/package.json +47 -0
  126. package/src/template/design/product-plan.zip +0 -0
  127. package/src/template/design/public/vite.svg +1 -0
  128. package/src/template/design/src/assets/react.svg +1 -0
  129. package/src/template/design/src/components/AppLayout.tsx +95 -0
  130. package/src/template/design/src/components/DataCard.tsx +139 -0
  131. package/src/template/design/src/components/DataModelPage.tsx +120 -0
  132. package/src/template/design/src/components/DesignPage.tsx +284 -0
  133. package/src/template/design/src/components/EmptyState.tsx +155 -0
  134. package/src/template/design/src/components/ExportPage.tsx +344 -0
  135. package/src/template/design/src/components/NextPhaseButton.tsx +33 -0
  136. package/src/template/design/src/components/PhaseNav.tsx +152 -0
  137. package/src/template/design/src/components/PhaseWarningBanner.tsx +81 -0
  138. package/src/template/design/src/components/ProductOverviewCard.tsx +102 -0
  139. package/src/template/design/src/components/ProductPage.tsx +97 -0
  140. package/src/template/design/src/components/ScreenDesignPage.tsx +370 -0
  141. package/src/template/design/src/components/ScreenDesignsCard.tsx +49 -0
  142. package/src/template/design/src/components/SectionPage.tsx +256 -0
  143. package/src/template/design/src/components/SectionsCard.tsx +47 -0
  144. package/src/template/design/src/components/SectionsPage.tsx +181 -0
  145. package/src/template/design/src/components/ShellCard.tsx +85 -0
  146. package/src/template/design/src/components/ShellDesignPage.tsx +242 -0
  147. package/src/template/design/src/components/SpecCard.tsx +121 -0
  148. package/src/template/design/src/components/StepIndicator.tsx +75 -0
  149. package/src/template/design/src/components/ThemeToggle.tsx +86 -0
  150. package/src/template/design/src/components/ui/ToastContext.tsx +81 -0
  151. package/src/template/design/src/components/ui/avatar.tsx +53 -0
  152. package/src/template/design/src/components/ui/badge.tsx +46 -0
  153. package/src/template/design/src/components/ui/button.tsx +60 -0
  154. package/src/template/design/src/components/ui/card.tsx +92 -0
  155. package/src/template/design/src/components/ui/collapsible.tsx +48 -0
  156. package/src/template/design/src/components/ui/dialog.tsx +143 -0
  157. package/src/template/design/src/components/ui/dropdown-menu.tsx +255 -0
  158. package/src/template/design/src/components/ui/input.tsx +21 -0
  159. package/src/template/design/src/components/ui/label.tsx +22 -0
  160. package/src/template/design/src/components/ui/progress.tsx +24 -0
  161. package/src/template/design/src/components/ui/scroll-area.tsx +18 -0
  162. package/src/template/design/src/components/ui/select.tsx +67 -0
  163. package/src/template/design/src/components/ui/separator.tsx +28 -0
  164. package/src/template/design/src/components/ui/sheet.tsx +137 -0
  165. package/src/template/design/src/components/ui/skeleton.tsx +13 -0
  166. package/src/template/design/src/components/ui/switch.tsx +46 -0
  167. package/src/template/design/src/components/ui/table.tsx +116 -0
  168. package/src/template/design/src/components/ui/tabs.tsx +64 -0
  169. package/src/template/design/src/index.css +284 -0
  170. package/src/template/design/src/lib/data-model-loader.ts +91 -0
  171. package/src/template/design/src/lib/design-system-loader.ts +101 -0
  172. package/src/template/design/src/lib/product-loader.ts +221 -0
  173. package/src/template/design/src/lib/router.tsx +52 -0
  174. package/src/template/design/src/lib/section-loader.ts +272 -0
  175. package/src/template/design/src/lib/shell-loader.ts +175 -0
  176. package/src/template/design/src/lib/utils.ts +6 -0
  177. package/src/template/design/src/main.tsx +15 -0
  178. package/src/template/design/src/sections/.gitkeep +0 -0
  179. package/src/template/design/src/sections/ai-orchestration-engine-oai/OrchestrationEngine.tsx +348 -0
  180. package/src/template/design/src/sections/core-platform-shell/AppShell.tsx +403 -0
  181. package/src/template/design/src/sections/gemini-live-integration/GeminiIntegration.tsx +332 -0
  182. package/src/template/design/src/sections/interactive-2d-canvas/WhiteboardCanvas.tsx +334 -0
  183. package/src/template/design/src/sections/participation-equity-tracker/EquityTracker.tsx +383 -0
  184. package/src/template/design/src/sections/persistent-memory-system/PersistentMemory.tsx +308 -0
  185. package/src/template/design/src/sections/real-time-communication-layer/VideoSession.tsx +342 -0
  186. package/src/template/design/src/sections/visual-intelligence-agents/VisualAgents.tsx +311 -0
  187. package/src/template/design/src/types/product.ts +97 -0
  188. package/src/template/design/src/types/section.ts +33 -0
  189. package/src/template/design/tsconfig.app.json +34 -0
  190. package/src/template/design/tsconfig.json +13 -0
  191. package/src/template/design/tsconfig.node.json +26 -0
  192. package/src/template/design/vite.config.ts +18 -0
  193. package/src/template/package.json +27 -0
  194. package/src/template/vite.config.ts +16 -0
@@ -0,0 +1,383 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ Users,
4
+ BarChart3,
5
+ AlertTriangle,
6
+ Mic,
7
+ MessageSquare,
8
+ Smile,
9
+ Hand,
10
+ Clock,
11
+ MoreHorizontal,
12
+ TrendingUp,
13
+ TrendingDown
14
+ } from 'lucide-react';
15
+ import { Card, CardContent, CardHeader, CardTitle, CardDescription, CardFooter } from '@/components/ui/card';
16
+ import { Button } from '@/components/ui/button';
17
+ import { Badge } from '@/components/ui/badge';
18
+ import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
19
+ import { ScrollArea } from '@/components/ui/scroll-area';
20
+ import { Progress } from '@/components/ui/progress';
21
+ import { Separator } from '@/components/ui/separator';
22
+ import { cn } from '@/lib/utils';
23
+
24
+ // Mock Data Types
25
+ interface SpiderData {
26
+ speaking: number;
27
+ chatting: number;
28
+ reacting: number;
29
+ interrupting: number;
30
+ }
31
+
32
+ interface Participant {
33
+ id: string;
34
+ name: string;
35
+ avatarUrl: string;
36
+ speakingTime: string;
37
+ speakingPercentage: number;
38
+ status: 'dominating' | 'active' | 'quiet';
39
+ lastSpoken: string;
40
+ spiderData: SpiderData;
41
+ }
42
+
43
+ interface Alert {
44
+ id: string;
45
+ type: 'dominance' | 'disengagement';
46
+ severity: 'high' | 'medium' | 'low';
47
+ message: string;
48
+ suggestion: string;
49
+ }
50
+
51
+ const MOCK_DATA = {
52
+ "sessionMetrics": {
53
+ "equityScore": 72,
54
+ "totalSpeakingTime": "00:45:20",
55
+ "status": "imbalanced"
56
+ },
57
+ "participants": [
58
+ {
59
+ "id": "u1",
60
+ "name": "Sarah Chen",
61
+ "avatarUrl": "https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah",
62
+ "speakingTime": "00:22:15",
63
+ "speakingPercentage": 49,
64
+ "status": "dominating",
65
+ "lastSpoken": "2s ago",
66
+ "spiderData": {
67
+ "speaking": 90,
68
+ "chatting": 20,
69
+ "reacting": 30,
70
+ "interrupting": 65
71
+ }
72
+ },
73
+ {
74
+ "id": "u2",
75
+ "name": "David Kim",
76
+ "avatarUrl": "https://api.dicebear.com/7.x/avataaars/svg?seed=David",
77
+ "speakingTime": "00:15:30",
78
+ "speakingPercentage": 34,
79
+ "status": "active",
80
+ "lastSpoken": "2m ago",
81
+ "spiderData": {
82
+ "speaking": 60,
83
+ "chatting": 40,
84
+ "reacting": 50,
85
+ "interrupting": 10
86
+ }
87
+ },
88
+ {
89
+ "id": "u3",
90
+ "name": "Maria Garcia",
91
+ "avatarUrl": "https://api.dicebear.com/7.x/avataaars/svg?seed=Maria",
92
+ "speakingTime": "00:05:00",
93
+ "speakingPercentage": 11,
94
+ "status": "quiet",
95
+ "lastSpoken": "15m ago",
96
+ "spiderData": {
97
+ "speaking": 20,
98
+ "chatting": 80,
99
+ "reacting": 90,
100
+ "interrupting": 0
101
+ }
102
+ },
103
+ {
104
+ "id": "u4",
105
+ "name": "James Wilson",
106
+ "avatarUrl": "https://api.dicebear.com/7.x/avataaars/svg?seed=James",
107
+ "speakingTime": "00:02:35",
108
+ "speakingPercentage": 6,
109
+ "status": "quiet",
110
+ "lastSpoken": "22m ago",
111
+ "spiderData": {
112
+ "speaking": 10,
113
+ "chatting": 10,
114
+ "reacting": 20,
115
+ "interrupting": 0
116
+ }
117
+ }
118
+ ] as Participant[],
119
+ "alerts": [
120
+ {
121
+ "id": "a1",
122
+ "type": "dominance",
123
+ "severity": "high",
124
+ "message": "Sarah Chen has spoken for 49% of the session.",
125
+ "suggestion": "Prompt specific input from James or Maria."
126
+ },
127
+ {
128
+ "id": "a2",
129
+ "type": "disengagement",
130
+ "severity": "medium",
131
+ "message": "James Wilson has been silent for >20 mins.",
132
+ "suggestion": "Check in via chat or direct question."
133
+ }
134
+ ] as Alert[]
135
+ };
136
+
137
+ // SVG Radar Chart Component
138
+ const RadarChart = ({ data, color }: { data: SpiderData, color: string }) => {
139
+ const size = 100;
140
+ const center = size / 2;
141
+ const scale = size / 2 - 5; // padding
142
+
143
+ const metrics = ['speaking', 'chatting', 'reacting', 'interrupting'];
144
+ const points = metrics.map((metric, i) => {
145
+ const value = (data as any)[metric] / 100;
146
+ const angle = (Math.PI / 2) + (2 * Math.PI * i) / metrics.length;
147
+ const r = value * scale;
148
+ const x = center + r * Math.cos(angle);
149
+ const y = center - r * Math.sin(angle);
150
+ return `${x},${y}`;
151
+ }).join(' ');
152
+
153
+ const gridPoints = [0.25, 0.5, 0.75, 1].map(level => {
154
+ return metrics.map((_, i) => {
155
+ const angle = (Math.PI / 2) + (2 * Math.PI * i) / metrics.length;
156
+ const r = level * scale;
157
+ const x = center + r * Math.cos(angle);
158
+ const y = center - r * Math.sin(angle);
159
+ return `${x},${y}`;
160
+ }).join(' ');
161
+ });
162
+
163
+ return (
164
+ <svg width={size} height={size} className="overflow-visible">
165
+ {/* Grid */}
166
+ {gridPoints.map((points, i) => (
167
+ <polygon key={i} points={points} fill="none" stroke="currentColor" className="text-stone-100 dark:text-stone-800" strokeWidth="1" />
168
+ ))}
169
+ {/* Axis Lines */}
170
+ {metrics.map((_, i) => {
171
+ const angle = (Math.PI / 2) + (2 * Math.PI * i) / metrics.length;
172
+ const x = center + scale * Math.cos(angle);
173
+ const y = center - scale * Math.sin(angle);
174
+ return <line key={i} x1={center} y1={center} x2={x} y2={y} stroke="currentColor" className="text-stone-100 dark:text-stone-800" strokeWidth="1" />
175
+ })}
176
+
177
+ {/* Data Polygon */}
178
+ <polygon points={points} fill={color} fillOpacity="0.2" stroke={color} strokeWidth="2" />
179
+ </svg>
180
+ );
181
+ };
182
+
183
+ export default function EquityTracker() {
184
+ const [selectedMetric, setSelectedMetric] = useState('speaking');
185
+
186
+ return (
187
+ <div className="flex h-screen w-full bg-stone-50 dark:bg-stone-950 font-sans p-6 overflow-hidden">
188
+
189
+ <div className="grid grid-cols-12 gap-6 w-full max-w-7xl mx-auto h-full">
190
+
191
+ {/* Left Column: Metrics & List */}
192
+ <div className="col-span-8 flex flex-col gap-6 h-full">
193
+
194
+ {/* Header Stats */}
195
+ <div className="grid grid-cols-3 gap-4 shrink-0">
196
+ <Card className="bg-white dark:bg-stone-900 border-stone-200 dark:border-stone-800">
197
+ <CardContent className="p-4 flex items-center justify-between">
198
+ <div>
199
+ <p className="text-xs text-stone-500 uppercase font-semibold">Equity Score</p>
200
+ <div className="flex items-baseline gap-2 mt-1">
201
+ <span className="text-3xl font-bold text-stone-900 dark:text-stone-100">{MOCK_DATA.sessionMetrics.equityScore}</span>
202
+ <span className="text-xs text-amber-500 font-medium">Imbalanced</span>
203
+ </div>
204
+ </div>
205
+ <div className="h-10 w-10 rounded-full bg-amber-50 dark:bg-amber-900/20 text-amber-600 flex items-center justify-center">
206
+ <Users size={20} />
207
+ </div>
208
+ </CardContent>
209
+ </Card>
210
+ <Card className="bg-white dark:bg-stone-900 border-stone-200 dark:border-stone-800">
211
+ <CardContent className="p-4 flex items-center justify-between">
212
+ <div>
213
+ <p className="text-xs text-stone-500 uppercase font-semibold">Total Airtime</p>
214
+ <div className="flex items-baseline gap-2 mt-1">
215
+ <span className="text-3xl font-bold text-stone-900 dark:text-stone-100">45m</span>
216
+ <span className="text-xs text-stone-400">20s</span>
217
+ </div>
218
+ </div>
219
+ <div className="h-10 w-10 rounded-full bg-indigo-50 dark:bg-indigo-900/20 text-indigo-600 flex items-center justify-center">
220
+ <Clock size={20} />
221
+ </div>
222
+ </CardContent>
223
+ </Card>
224
+ <Card className="bg-white dark:bg-stone-900 border-stone-200 dark:border-stone-800">
225
+ <CardContent className="p-4 flex items-center justify-between">
226
+ <div>
227
+ <p className="text-xs text-stone-500 uppercase font-semibold">Active Alerts</p>
228
+ <div className="flex items-baseline gap-2 mt-1">
229
+ <span className="text-3xl font-bold text-red-600 dark:text-red-500">{MOCK_DATA.alerts.length}</span>
230
+ <span className="text-xs text-stone-400">Intervention needed</span>
231
+ </div>
232
+ </div>
233
+ <div className="h-10 w-10 rounded-full bg-red-50 dark:bg-red-900/20 text-red-600 flex items-center justify-center">
234
+ <AlertTriangle size={20} />
235
+ </div>
236
+ </CardContent>
237
+ </Card>
238
+ </div>
239
+
240
+ {/* Participants Table */}
241
+ <Card className="flex-1 bg-white dark:bg-stone-900 border-stone-200 dark:border-stone-800 flex flex-col min-h-0">
242
+ <CardHeader className="pb-3 border-b border-stone-100 dark:border-stone-800">
243
+ <div className="flex items-center justify-between">
244
+ <div>
245
+ <CardTitle>Session Participants</CardTitle>
246
+ <CardDescription>Real-time analysis of contribution dynamics</CardDescription>
247
+ </div>
248
+ <div className="flex gap-2">
249
+ <Button variant="outline" size="sm" className="gap-2">
250
+ <BarChart3 size={14} /> View Trends
251
+ </Button>
252
+ </div>
253
+ </div>
254
+ </CardHeader>
255
+ <ScrollArea className="flex-1">
256
+ <div className="divide-y divide-stone-100 dark:divide-stone-800">
257
+ {MOCK_DATA.participants.map((participant) => (
258
+ <div key={participant.id} className="p-4 flex items-center gap-4 hover:bg-stone-50 dark:hover:bg-stone-800/50 transition-colors">
259
+ {/* Avatar & Info */}
260
+ <div className="flex items-center gap-3 w-48 shrink-0">
261
+ <Avatar className="h-10 w-10 border border-stone-200 dark:border-stone-700">
262
+ <AvatarImage src={participant.avatarUrl} />
263
+ <AvatarFallback>{participant.name[0]}</AvatarFallback>
264
+ </Avatar>
265
+ <div>
266
+ <p className="font-medium text-sm text-stone-900 dark:text-stone-100">{participant.name}</p>
267
+ <p className="text-xs text-stone-500 flex items-center gap-1">
268
+ {participant.status === 'active' && <span className="w-1.5 h-1.5 rounded-full bg-emerald-500" />}
269
+ {participant.status === 'dominating' && <span className="w-1.5 h-1.5 rounded-full bg-red-500" />}
270
+ {participant.status === 'quiet' && <span className="w-1.5 h-1.5 rounded-full bg-stone-300" />}
271
+ {participant.status.charAt(0).toUpperCase() + participant.status.slice(1)}
272
+ </p>
273
+ </div>
274
+ </div>
275
+
276
+ {/* Airtime Bar */}
277
+ <div className="flex-1">
278
+ <div className="flex justify-between text-xs mb-1.5">
279
+ <span className="text-stone-500">Speaking Time</span>
280
+ <span className="font-mono font-medium">{participant.speakingTime} ({participant.speakingPercentage}%)</span>
281
+ </div>
282
+ <Progress
283
+ value={participant.speakingPercentage}
284
+ className="h-2"
285
+ indicatorClassName={cn(
286
+ participant.status === 'dominating' ? "bg-red-500" :
287
+ participant.status === 'quiet' ? "bg-stone-300" :
288
+ "bg-indigo-500"
289
+ )}
290
+ />
291
+ </div>
292
+
293
+ {/* Mini Spider Chart */}
294
+ <div className="w-16 h-16 shrink-0 flex items-center justify-center opacity-75">
295
+ <RadarChart
296
+ data={participant.spiderData}
297
+ color={
298
+ participant.status === 'dominating' ? '#ef4444' :
299
+ participant.status === 'active' ? '#6366f1' : '#a8a29e'
300
+ }
301
+ />
302
+ </div>
303
+
304
+ {/* Interactive Metrics */}
305
+ <div className="flex gap-2 shrink-0">
306
+ <Badge variant="secondary" className="gap-1 font-normal text-stone-500">
307
+ <MessageSquare size={12} /> {participant.spiderData.chatting}%
308
+ </Badge>
309
+ <Badge variant="secondary" className="gap-1 font-normal text-stone-500">
310
+ <Smile size={12} /> {participant.spiderData.reacting}%
311
+ </Badge>
312
+ </div>
313
+
314
+ </div>
315
+ ))}
316
+ </div>
317
+ </ScrollArea>
318
+ </Card>
319
+ </div>
320
+
321
+ {/* Right Column: Alerts & Suggestions */}
322
+ <div className="col-span-4 flex flex-col gap-6 h-full">
323
+ <Card className="bg-amber-50/50 dark:bg-amber-950/20 border-amber-200 dark:border-amber-900 h-1/2 flex flex-col">
324
+ <CardHeader>
325
+ <CardTitle className="text-amber-700 dark:text-amber-500 flex items-center gap-2">
326
+ <AlertTriangle size={18} /> Engagement Alerts
327
+ </CardTitle>
328
+ </CardHeader>
329
+ <ScrollArea className="flex-1 px-6 pb-6">
330
+ <div className="space-y-3">
331
+ {MOCK_DATA.alerts.map((alert) => (
332
+ <div key={alert.id} className="bg-white dark:bg-amber-950/40 p-3 rounded-lg border border-amber-100 dark:border-amber-900/50 shadow-sm">
333
+ <div className="flex items-start justify-between mb-1">
334
+ <Badge variant="outline" className={cn(
335
+ "text-[10px] uppercase border-0 font-bold px-1.5 py-0.5",
336
+ alert.severity === 'high' ? "bg-red-100 text-red-700" : "bg-amber-100 text-amber-700"
337
+ )}>
338
+ {alert.type}
339
+ </Badge>
340
+ <span className="text-[10px] text-stone-400">Just now</span>
341
+ </div>
342
+ <p className="text-sm font-medium text-stone-800 dark:text-stone-200 mb-2 leading-snug">
343
+ {alert.message}
344
+ </p>
345
+ <div className="bg-amber-50 dark:bg-amber-900/20 p-2 rounded text-xs text-amber-800 dark:text-amber-400 border border-amber-100 dark:border-amber-900/30">
346
+ Draft Prompt: "{alert.suggestion}"
347
+ </div>
348
+ <Button size="sm" className="w-full mt-2 bg-white text-amber-600 hover:text-amber-700 hover:bg-amber-50 border border-amber-200 shadow-sm">
349
+ Intervene
350
+ </Button>
351
+ </div>
352
+ ))}
353
+ </div>
354
+ </ScrollArea>
355
+ </Card>
356
+
357
+ <Card className="h-1/2 flex flex-col bg-white dark:bg-stone-900 border-stone-200 dark:border-stone-800">
358
+ <CardHeader>
359
+ <CardTitle className="text-stone-700 dark:text-stone-300 flex items-center gap-2">
360
+ <TrendingUp size={18} /> Participation Tips
361
+ </CardTitle>
362
+ </CardHeader>
363
+ <CardContent className="text-sm text-stone-600 dark:text-stone-400 space-y-4">
364
+ <p>
365
+ To improve the Equity Score (72), consider:
366
+ </p>
367
+ <ul className="list-disc pl-4 space-y-2">
368
+ <li>Asking James for his opinion on the backend architecture.</li>
369
+ <li>Using a "Round Robin" structure for the next topic.</li>
370
+ <li>Reminding the group about the "One voice at a time" norm.</li>
371
+ </ul>
372
+ </CardContent>
373
+ <CardFooter>
374
+ <Button variant="secondary" className="w-full">
375
+ Apply "Round Robin" Mode
376
+ </Button>
377
+ </CardFooter>
378
+ </Card>
379
+ </div>
380
+ </div>
381
+ </div>
382
+ );
383
+ }