fraim 2.0.165 → 2.0.167

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 (55) hide show
  1. package/dist/src/ai-hub/catalog.js +20 -27
  2. package/dist/src/ai-hub/server.js +418 -2
  3. package/dist/src/ai-hub/word-sideload.js +95 -0
  4. package/dist/src/cli/commands/org.js +40 -0
  5. package/dist/src/cli/commands/test-mcp.js +171 -0
  6. package/dist/src/cli/fraim.js +2 -0
  7. package/dist/src/cli/setup/first-run.js +242 -0
  8. package/dist/src/cli/utils/org-publish.js +98 -0
  9. package/dist/src/config/ai-manager-hiring.js +121 -0
  10. package/dist/src/config/compat.js +16 -0
  11. package/dist/src/config/feature-flags.js +25 -0
  12. package/dist/src/config/persona-capability-bundles.js +273 -0
  13. package/dist/src/config/persona-hiring.js +270 -0
  14. package/dist/src/config/portfolio-slug-overrides.js +17 -0
  15. package/dist/src/config/pricing.js +37 -0
  16. package/dist/src/config/stripe.js +43 -0
  17. package/dist/src/core/config-loader.js +9 -5
  18. package/dist/src/core/config-writer.js +75 -0
  19. package/dist/src/core/fraim-config-schema.generated.js +0 -21
  20. package/dist/src/core/utils/job-aliases.js +47 -0
  21. package/dist/src/core/utils/local-registry-resolver.js +8 -1
  22. package/dist/src/core/utils/workflow-parser.js +174 -0
  23. package/index.js +1 -1
  24. package/package.json +5 -1
  25. package/public/ai-hub/index.html +81 -0
  26. package/public/ai-hub/powerpoint-taskpane/index.html +236 -236
  27. package/public/ai-hub/powerpoint-taskpane/manifest.xml +29 -29
  28. package/public/ai-hub/review.css +13 -0
  29. package/public/ai-hub/script.js +414 -4
  30. package/public/ai-hub/styles.css +56 -0
  31. package/public/first-run/styles.css +73 -73
  32. package/public/portfolio/ashley.html +523 -0
  33. package/public/portfolio/auditya.html +83 -0
  34. package/public/portfolio/banke.html +83 -0
  35. package/public/portfolio/beza.html +659 -0
  36. package/public/portfolio/careena.html +632 -0
  37. package/public/portfolio/casey.html +568 -0
  38. package/public/portfolio/celia.html +490 -0
  39. package/public/portfolio/deidre.html +642 -0
  40. package/public/portfolio/gautam.html +597 -0
  41. package/public/portfolio/hari.html +469 -0
  42. package/public/portfolio/huxley.html +1354 -0
  43. package/public/portfolio/index.html +741 -0
  44. package/public/portfolio/maestro.html +518 -0
  45. package/public/portfolio/mandy.html +590 -0
  46. package/public/portfolio/mona.html +597 -0
  47. package/public/portfolio/pam.html +887 -0
  48. package/public/portfolio/procella.html +107 -0
  49. package/public/portfolio/qasm.html +569 -0
  50. package/public/portfolio/ricardo.html +489 -0
  51. package/public/portfolio/sade.html +560 -0
  52. package/public/portfolio/sam.html +654 -0
  53. package/public/portfolio/sechar.html +580 -0
  54. package/public/portfolio/sreya.html +599 -0
  55. package/public/portfolio/swen.html +601 -0
@@ -0,0 +1,654 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="light">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>SAM · AI Sales Account Manager · FRAIM Portfolio</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root {
12
+ --accent: #ea580c;
13
+ --accent-2: #c2410c;
14
+ --accent-light: #ffedd5;
15
+ --text: #1c0600;
16
+ --text-2: #4a1500;
17
+ --muted: #87471e;
18
+ --bg: #fff7ed;
19
+ --surface: #ffffff;
20
+ --surface-2: #fff4ec;
21
+ --border: #fed7aa;
22
+ --shadow: 0 4px 24px rgba(234,88,12,.08);
23
+ --shadow-lg: 0 12px 40px rgba(234,88,12,.15);
24
+ --radius: 18px;
25
+ --radius-sm: 10px;
26
+ --green: #10b981;
27
+ --purple: #8b5cf6;
28
+ --amber: #f59e0b;
29
+ --red: #ef4444;
30
+ --code-bg: #140600;
31
+ --code-border: #2d1000;
32
+ }
33
+ [data-theme="dark"] {
34
+ --text: #fed7aa; --text-2: #fdba74; --muted: #c2a482;
35
+ --bg: #140600; --surface: #2d1000; --surface-2: #3d1800;
36
+ --border: #7c2d12; --shadow: 0 4px 24px rgba(0,0,0,.35);
37
+ --shadow-lg: 0 12px 40px rgba(0,0,0,.5); --accent-light: #7c2d12;
38
+ --code-bg: #0a0200; --code-border: #2d1000;
39
+ }
40
+ * { box-sizing: border-box; margin: 0; padding: 0; }
41
+ body { font-family: 'Inter', sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; transition: background .3s, color .3s; }
42
+ code, pre, .mono { font-family: 'JetBrains Mono', 'Fira Code', monospace; }
43
+
44
+ .site-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 14px 32px; background: var(--surface); border-bottom: 1px solid var(--border); }
45
+ .brand { display: flex; align-items: center; gap: 10px; text-decoration: none; }
46
+ .brand-logo { width: 32px; height: 32px; border-radius: 8px; background: linear-gradient(135deg, #10b981, #059669); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 14px; color: #fff; }
47
+ .brand-name { font-weight: 700; font-size: 15px; color: var(--text); }
48
+ .header-actions { display: flex; align-items: center; gap: 12px; }
49
+ .theme-btn { background: var(--surface-2); border: 1px solid var(--border); color: var(--muted); cursor: pointer; border-radius: 8px; padding: 7px 10px; font-size: 16px; }
50
+
51
+ .hero { max-width: 900px; margin: 56px auto 0; padding: 0 24px; text-align: center; }
52
+ .avatar-ring { display: inline-flex; align-items: center; justify-content: center; width: 96px; height: 96px; border-radius: 50%; background: linear-gradient(135deg, #ea580c, #f97316, #eab308); margin-bottom: 24px; box-shadow: 0 0 0 6px var(--accent-light); overflow: hidden; }
53
+ .avatar-initials { font-size: 28px; font-weight: 800; color: #fff; letter-spacing: -1px; font-family: 'JetBrains Mono', monospace; }
54
+ .role-chip { display: inline-block; background: var(--accent-light); color: #ea580c; border-radius: 999px; padding: 4px 14px; font-size: 12px; font-weight: 600; letter-spacing: .04em; margin-bottom: 16px; }
55
+ .hero h1 { font-size: clamp(32px, 5vw, 52px); font-weight: 800; color: var(--text); letter-spacing: -1.5px; line-height: 1.1; margin-bottom: 16px; }
56
+ .hero h1 span { color: var(--accent); }
57
+ .hero p { font-size: 17px; color: var(--muted); max-width: 560px; margin: 0 auto 32px; line-height: 1.7; }
58
+
59
+ .section-label { max-width: 900px; margin: 64px auto 0; padding: 0 24px; display: flex; align-items: center; gap: 12px; }
60
+ .section-label h2 { font-size: 13px; font-weight: 700; color: var(--muted); letter-spacing: .08em; text-transform: uppercase; }
61
+ .section-divider { flex: 1; height: 1px; background: var(--border); }
62
+
63
+ .cards-grid { max-width: 900px; margin: 24px auto 0; padding: 0 24px 80px; display: flex; flex-direction: column; gap: 20px; }
64
+ .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; transition: box-shadow .2s; }
65
+ .card:hover { box-shadow: var(--shadow-lg); }
66
+ .card-header { display: flex; align-items: flex-start; gap: 16px; padding: 24px; cursor: pointer; user-select: none; }
67
+ .card-icon { width: 48px; height: 48px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; }
68
+ .card-meta { flex: 1; min-width: 0; }
69
+ .card-tag { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; margin-bottom: 6px; }
70
+ .card-title { font-size: 18px; font-weight: 700; color: var(--text); line-height: 1.25; margin-bottom: 6px; }
71
+ .card-subtitle { font-size: 13px; color: var(--muted); }
72
+ .card-toggle { font-size: 22px; color: var(--muted); transition: transform .3s; flex-shrink: 0; align-self: center; }
73
+ .card.open .card-toggle { transform: rotate(90deg); }
74
+ .card-body { display: none; border-top: 1px solid var(--border); padding: 28px; }
75
+ .card.open .card-body { display: block; }
76
+
77
+ .narrative { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; margin-bottom: 28px; }
78
+ @media (max-width: 640px) { .narrative { grid-template-columns: 1fr; } }
79
+ .narrative-step { background: var(--surface-2); border-radius: var(--radius-sm); padding: 16px; }
80
+ .step-label { font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
81
+ .step-text { font-size: 13px; color: var(--text-2); line-height: 1.6; }
82
+ .artifact-label { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
83
+ .artifact-label::before { content: ''; display: block; width: 20px; height: 2px; background: var(--accent); border-radius: 2px; }
84
+ .source-ref { margin-top: 16px; font-size: 12px; color: var(--muted); }
85
+ .source-ref a { color: var(--accent); text-decoration: none; }
86
+ .source-ref a:hover { text-decoration: underline; }
87
+
88
+ /* ══ ARTIFACT 1 — Prospect List Dashboard ══ */
89
+ .prospect-dashboard {
90
+ background: var(--surface-2);
91
+ border: 1px solid var(--border);
92
+ border-radius: 14px;
93
+ overflow: hidden;
94
+ }
95
+ .prospect-table-header {
96
+ background: var(--accent);
97
+ display: grid;
98
+ grid-template-columns: 1.4fr 1fr 1fr 1.6fr 1.2fr 0.7fr;
99
+ gap: 0;
100
+ padding: 10px 16px;
101
+ }
102
+ @media (max-width: 640px) {
103
+ .prospect-table-header { grid-template-columns: 1.2fr 0.8fr 0.8fr; }
104
+ .prospect-table-header .ph-col:nth-child(n+4) { display: none; }
105
+ .prospect-row .pr-col:nth-child(n+4) { display: none; }
106
+ .prospect-row { grid-template-columns: 1.2fr 0.8fr 0.8fr; }
107
+ }
108
+ .ph-col { font-size: 10px; font-weight: 700; color: rgba(255,255,255,.9); letter-spacing: .06em; text-transform: uppercase; }
109
+ .prospect-row {
110
+ display: grid;
111
+ grid-template-columns: 1.4fr 1fr 1fr 1.6fr 1.2fr 0.7fr;
112
+ gap: 0;
113
+ padding: 10px 16px;
114
+ border-bottom: 1px solid var(--border);
115
+ align-items: center;
116
+ }
117
+ .prospect-row:last-child { border-bottom: none; }
118
+ .prospect-row:hover { background: var(--accent-light); }
119
+ .pr-col { font-size: 12px; color: var(--text-2); }
120
+ .pr-company { font-weight: 700; color: var(--text); }
121
+ .pr-signal { font-size: 11px; color: var(--muted); }
122
+ .score-bar-wrap { display: flex; align-items: center; gap: 6px; }
123
+ .score-bar-track { flex: 1; max-width: 48px; height: 6px; background: var(--border); border-radius: 3px; overflow: hidden; }
124
+ .score-bar-fill { height: 100%; border-radius: 3px; }
125
+ .score-num { font-size: 12px; font-weight: 700; }
126
+ .prospect-summary {
127
+ padding: 12px 16px;
128
+ background: var(--surface);
129
+ border-top: 1px solid var(--border);
130
+ font-size: 12px;
131
+ color: var(--muted);
132
+ display: flex;
133
+ gap: 16px;
134
+ flex-wrap: wrap;
135
+ }
136
+ .prospect-summary strong { color: var(--accent); }
137
+
138
+ /* ══ ARTIFACT 2 — Account Health Scorecard ══ */
139
+ .health-dashboard {
140
+ background: var(--surface-2);
141
+ border: 1px solid var(--border);
142
+ border-radius: 14px;
143
+ overflow: hidden;
144
+ }
145
+ .health-header {
146
+ background: var(--accent);
147
+ padding: 12px 18px;
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: space-between;
151
+ }
152
+ .health-header-title { font-size: 14px; font-weight: 700; color: #fff; }
153
+ .health-header-sub { font-size: 12px; color: rgba(255,255,255,.7); }
154
+ .health-rows { padding: 8px 0; }
155
+ .health-row {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 12px;
159
+ padding: 12px 18px;
160
+ border-bottom: 1px solid var(--border);
161
+ }
162
+ .health-row:last-child { border-bottom: none; }
163
+ .health-company { font-size: 13px; font-weight: 700; color: var(--text); width: 80px; flex-shrink: 0; }
164
+ .health-score-wrap { flex: 1; display: flex; align-items: center; gap: 8px; }
165
+ .health-score-track { flex: 1; height: 8px; background: var(--border); border-radius: 4px; overflow: hidden; }
166
+ .health-score-fill { height: 100%; border-radius: 4px; }
167
+ .health-score-num { font-size: 12px; font-weight: 700; width: 28px; text-align: right; flex-shrink: 0; }
168
+ .health-badge {
169
+ font-size: 10px;
170
+ font-weight: 700;
171
+ padding: 3px 10px;
172
+ border-radius: 999px;
173
+ letter-spacing: .04em;
174
+ white-space: nowrap;
175
+ flex-shrink: 0;
176
+ }
177
+ .badge-healthy { background: #dcfce7; color: #15803d; }
178
+ .badge-monitor { background: #fef9c3; color: #b45309; }
179
+ .badge-risk { background: #fee2e2; color: #b91c1c; }
180
+ .health-summary {
181
+ padding: 12px 18px;
182
+ background: var(--surface);
183
+ border-top: 1px solid var(--border);
184
+ font-size: 12px;
185
+ color: var(--muted);
186
+ }
187
+ .health-summary strong { color: var(--red); }
188
+
189
+ /* ══ ARTIFACT 3 — Pipeline Review Report ══ */
190
+ .pipeline-report {
191
+ background: var(--surface-2);
192
+ border: 1px solid var(--border);
193
+ border-radius: 14px;
194
+ overflow: hidden;
195
+ }
196
+ .pipeline-report-header {
197
+ background: var(--accent);
198
+ padding: 14px 20px;
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: space-between;
202
+ flex-wrap: wrap;
203
+ gap: 8px;
204
+ }
205
+ .pipeline-report-title { font-size: 14px; font-weight: 700; color: #fff; }
206
+ .pipeline-kpis { display: flex; gap: 20px; }
207
+ .pipeline-kpi { text-align: center; }
208
+ .pipeline-kpi-val { font-size: 16px; font-weight: 800; color: #fff; }
209
+ .pipeline-kpi-label { font-size: 10px; color: rgba(255,255,255,.7); text-transform: uppercase; letter-spacing: .05em; }
210
+ .pipeline-stages {
211
+ display: flex;
212
+ gap: 0;
213
+ border-bottom: 1px solid var(--border);
214
+ }
215
+ .pipeline-stage {
216
+ flex: 1;
217
+ padding: 14px 12px;
218
+ border-right: 1px solid var(--border);
219
+ text-align: center;
220
+ }
221
+ .pipeline-stage:last-child { border-right: none; }
222
+ .pipeline-stage-name { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin-bottom: 4px; }
223
+ .pipeline-stage-val { font-size: 14px; font-weight: 800; color: var(--text); }
224
+ .pipeline-stage-count { font-size: 11px; color: var(--muted); }
225
+ .pipeline-alerts { padding: 12px 18px; display: flex; gap: 10px; flex-wrap: wrap; border-bottom: 1px solid var(--border); }
226
+ .alert-badge { display: inline-flex; align-items: center; gap: 6px; background: #fef3c7; border: 1px solid #fde68a; border-radius: 6px; padding: 6px 12px; font-size: 12px; font-weight: 600; color: #92400e; }
227
+ .pipeline-deals-header {
228
+ display: grid;
229
+ grid-template-columns: 1.4fr 0.8fr 0.9fr 0.8fr 0.9fr;
230
+ padding: 8px 18px;
231
+ background: var(--surface);
232
+ border-bottom: 1px solid var(--border);
233
+ }
234
+ .pipeline-deals-header span { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); }
235
+ .pipeline-deal-row {
236
+ display: grid;
237
+ grid-template-columns: 1.4fr 0.8fr 0.9fr 0.8fr 0.9fr;
238
+ padding: 10px 18px;
239
+ border-bottom: 1px solid var(--border);
240
+ align-items: center;
241
+ }
242
+ .pipeline-deal-row:last-child { border-bottom: none; }
243
+ .pipeline-deal-row span { font-size: 12px; color: var(--text-2); }
244
+ .pipeline-deal-row .deal-company { font-weight: 700; color: var(--text); }
245
+ .pipeline-deal-row .deal-weighted { font-weight: 700; color: var(--accent); }
246
+ @media (max-width: 600px) {
247
+ .pipeline-deals-header { grid-template-columns: 1.4fr 0.8fr 0.8fr; }
248
+ .pipeline-deals-header span:nth-child(n+4) { display: none; }
249
+ .pipeline-deal-row { grid-template-columns: 1.4fr 0.8fr 0.8fr; }
250
+ .pipeline-deal-row span:nth-child(n+4) { display: none; }
251
+ .pipeline-stages { flex-wrap: wrap; }
252
+ .pipeline-stage { min-width: 50%; }
253
+ }
254
+
255
+ /* Footer */
256
+ .portfolio-footer { background: var(--surface); border-top: 1px solid var(--border); padding: 40px 24px; text-align: center; }
257
+ .footer-sub { margin-top: 20px; font-size: 12px; color: var(--muted); }
258
+ .footer-sub a { color: var(--accent); text-decoration: none; }
259
+
260
+ @media (max-width: 640px) {
261
+ .site-header { padding: 12px 16px; }
262
+ .hero { margin-top: 36px; }
263
+ .cards-grid { padding: 0 16px 60px; }
264
+ .card-header { padding: 18px; }
265
+ .card-body { padding: 18px; }
266
+ .section-label { margin-top: 40px; padding: 0 16px; }
267
+ }
268
+ </style>
269
+ </head>
270
+ <body>
271
+
272
+ <header class="site-header">
273
+ <a class="brand" href="/">
274
+ <div class="brand-logo">F</div>
275
+ <span class="brand-name">FRAIM</span>
276
+ </a>
277
+ <div class="header-actions">
278
+ <button class="theme-btn" onclick="toggleTheme()" title="Toggle dark mode">☾</button>
279
+ </div>
280
+ </header>
281
+
282
+ <section class="hero">
283
+ <div class="avatar-ring">
284
+ <img src="https://api.dicebear.com/9.x/notionists/svg?seed=SAM-sales-account&backgroundColor=d1fae5&radius=50" width="96" height="96" alt="SAM-sales-account avatar" style="border-radius:50%;">
285
+ </div>
286
+ <div class="role-chip">AI Sales Account Manager</div>
287
+ <h1>More pipeline. More signal.<br>More <span>deals closed</span>.</h1>
288
+ <p>SAM finds qualified prospects without a database subscription, spots at-risk accounts before they churn, and delivers pipeline reviews that free your VP of Sales from 90 minutes of spreadsheet work every Friday.</p>
289
+ </section>
290
+
291
+ <div class="section-label">
292
+ <h2>Selected Work</h2>
293
+ <div class="section-divider"></div>
294
+ </div>
295
+
296
+ <div class="cards-grid">
297
+
298
+ <!-- Card 1: Prospect Discovery -->
299
+ <div class="card open" id="card1">
300
+ <div class="card-header" onclick="toggleCard(1)">
301
+ <div class="card-icon" style="background:#ffedd5;">🎯</div>
302
+ <div class="card-meta">
303
+ <div class="card-tag" style="color:#ea580c;">Pipeline Development</div>
304
+ <div class="card-title">47 qualified prospects. 3 hours. No database subscription.</div>
305
+ <div class="card-subtitle">FRAIM · customer-prospect-discovery · fraim/ai-employee/jobs/</div>
306
+ </div>
307
+ <div class="card-toggle">›</div>
308
+ </div>
309
+ <div class="card-body">
310
+ <div class="narrative">
311
+ <div class="narrative-step">
312
+ <div class="step-label">Problem</div>
313
+ <div class="step-text">A Series-A B2B startup needed a qualified prospect list for a new enterprise segment — companies 500–2000 employees, Series B or later, using Salesforce. A ZoomInfo subscription for a one-time exercise costs $15,000/year.</div>
314
+ </div>
315
+ <div class="narrative-step">
316
+ <div class="step-label">What SAM Can Build</div>
317
+ <div class="step-text">SAM ran a multi-source discovery sprint: LinkedIn Advanced Search for company profile, Crunchbase for funding stage validation, G2 reviews for Salesforce usage signal, and LinkedIn for current job titles to confirm CRM ownership. Deduplicated and enriched each record with the right buyer persona.</div>
318
+ </div>
319
+ <div class="narrative-step">
320
+ <div class="step-label">Possible Outcome</div>
321
+ <div class="step-text">SAM can deliver 47 qualified prospects all meeting ICP criteria, at a cost of $129 versus the $2,400 equivalent in ZoomInfo + SDR time. You can expect around 12 to respond within 2 weeks, with 3 converting to discovery calls — the kind of pipeline density that often makes SDR headcount optional.</div>
322
+ </div>
323
+ </div>
324
+
325
+ <div class="artifact-label">Live Artifact — Prospect Intelligence Dashboard</div>
326
+
327
+ <div class="prospect-dashboard">
328
+ <div class="prospect-table-header">
329
+ <span class="ph-col">Company</span>
330
+ <span class="ph-col">Segment</span>
331
+ <span class="ph-col">Funding</span>
332
+ <span class="ph-col">CRM Signal</span>
333
+ <span class="ph-col">Buyer</span>
334
+ <span class="ph-col">Score</span>
335
+ </div>
336
+
337
+ <div class="prospect-row">
338
+ <span class="pr-col pr-company">Acme Corp</span>
339
+ <span class="pr-col">Enterprise</span>
340
+ <span class="pr-col">Series B</span>
341
+ <span class="pr-col pr-signal">★ Salesforce G2 review</span>
342
+ <span class="pr-col">Head of RevOps</span>
343
+ <span class="pr-col">
344
+ <div class="score-bar-wrap">
345
+ <div class="score-bar-track"><div class="score-bar-fill" style="width:94%; background:#10b981;"></div></div>
346
+ <span class="score-num" style="color:#10b981;">94</span>
347
+ </div>
348
+ </span>
349
+ </div>
350
+
351
+ <div class="prospect-row">
352
+ <span class="pr-col pr-company">BlueSky Tech</span>
353
+ <span class="pr-col">Enterprise</span>
354
+ <span class="pr-col">Series C</span>
355
+ <span class="pr-col pr-signal">★ Salesforce hiring</span>
356
+ <span class="pr-col">VP Sales</span>
357
+ <span class="pr-col">
358
+ <div class="score-bar-wrap">
359
+ <div class="score-bar-track"><div class="score-bar-fill" style="width:88%; background:#10b981;"></div></div>
360
+ <span class="score-num" style="color:#10b981;">88</span>
361
+ </div>
362
+ </span>
363
+ </div>
364
+
365
+ <div class="prospect-row">
366
+ <span class="pr-col pr-company">Meridian AI</span>
367
+ <span class="pr-col">Mid-Market</span>
368
+ <span class="pr-col">Series B</span>
369
+ <span class="pr-col pr-signal">★ RevOps posting</span>
370
+ <span class="pr-col">Director RevOps</span>
371
+ <span class="pr-col">
372
+ <div class="score-bar-wrap">
373
+ <div class="score-bar-track"><div class="score-bar-fill" style="width:82%; background:#10b981;"></div></div>
374
+ <span class="score-num" style="color:#10b981;">82</span>
375
+ </div>
376
+ </span>
377
+ </div>
378
+
379
+ <div class="prospect-row">
380
+ <span class="pr-col pr-company">Apex Systems</span>
381
+ <span class="pr-col">Enterprise</span>
382
+ <span class="pr-col">Series D</span>
383
+ <span class="pr-col pr-signal">★ SFDC Partner</span>
384
+ <span class="pr-col">CRO</span>
385
+ <span class="pr-col">
386
+ <div class="score-bar-wrap">
387
+ <div class="score-bar-track"><div class="score-bar-fill" style="width:91%; background:#10b981;"></div></div>
388
+ <span class="score-num" style="color:#10b981;">91</span>
389
+ </div>
390
+ </span>
391
+ </div>
392
+
393
+ <div class="prospect-row">
394
+ <span class="pr-col pr-company">TechFlow Inc</span>
395
+ <span class="pr-col">Mid-Market</span>
396
+ <span class="pr-col">Series B</span>
397
+ <span class="pr-col pr-signal">★ Salesforce admin</span>
398
+ <span class="pr-col">RevOps Mgr</span>
399
+ <span class="pr-col">
400
+ <div class="score-bar-wrap">
401
+ <div class="score-bar-track"><div class="score-bar-fill" style="width:79%; background:#f59e0b;"></div></div>
402
+ <span class="score-num" style="color:#f59e0b;">79</span>
403
+ </div>
404
+ </span>
405
+ </div>
406
+
407
+ <div class="prospect-summary">
408
+ <span><strong>47 total</strong> prospects delivered</span>
409
+ <span>·</span>
410
+ <span><strong style="color:#10b981;">12 responded</strong> to first touch</span>
411
+ <span>·</span>
412
+ <span><strong style="color:#10b981;">3 meetings booked</strong></span>
413
+ </div>
414
+ </div>
415
+
416
+ <div class="source-ref">
417
+ 📎 Source: <a href="#">FRAIM · customer-prospect-discovery · fraim/ai-employee/jobs/customer-prospect-discovery.md</a>
418
+ </div>
419
+ </div>
420
+ </div>
421
+
422
+ <!-- Card 2: CRM Account Health Review -->
423
+ <div class="card" id="card2">
424
+ <div class="card-header" onclick="toggleCard(2)">
425
+ <div class="card-icon" style="background:#fef2f2;">💊</div>
426
+ <div class="card-meta">
427
+ <div class="card-tag" style="color:#ea580c;">Account Intelligence</div>
428
+ <div class="card-title">At-risk accounts spotted 6 weeks before churn</div>
429
+ <div class="card-subtitle">FRAIM · crm-account-health-review · Salesforce accounts</div>
430
+ </div>
431
+ <div class="card-toggle">›</div>
432
+ </div>
433
+ <div class="card-body">
434
+ <div class="narrative">
435
+ <div class="narrative-step">
436
+ <div class="step-label">Problem</div>
437
+ <div class="step-text">A SaaS company's Q2 churn was 12% — 3x their target. Churn signals (declining logins, unresolved tickets, champion departures) were never monitored systematically — only discovered when renewal conversations started.</div>
438
+ </div>
439
+ <div class="narrative-step">
440
+ <div class="step-label">What SAM Can Build</div>
441
+ <div class="step-text">SAM built an account health scoring model: login frequency (40% weight), support ticket sentiment (25%), expansion vs. downgrade activity (20%), stakeholder engagement (15%). Scored all 340 accounts weekly. Flagged 23 accounts as high-risk with specific recommended actions per account.</div>
442
+ </div>
443
+ <div class="narrative-step">
444
+ <div class="step-label">Possible Outcome</div>
445
+ <div class="step-text">SAM's churn prediction model can flag accounts before they go dark, enabling proactive outreach. Of accounts flagged, around 61% typically renew — recovering ARR that would otherwise silently churn. CS teams that run SAM's model as their first Monday screen can often prevent $800K+ in annual ARR loss.</div>
446
+ </div>
447
+ </div>
448
+
449
+ <div class="artifact-label">Live Artifact — Account Health Scorecard</div>
450
+
451
+ <div class="health-dashboard">
452
+ <div class="health-header">
453
+ <span class="health-header-title">Account Health Dashboard · Weekly Snapshot</span>
454
+ <span class="health-header-sub">340 accounts scored</span>
455
+ </div>
456
+ <div class="health-rows">
457
+
458
+ <div class="health-row">
459
+ <span class="health-company">Acme Corp</span>
460
+ <div class="health-score-wrap">
461
+ <div class="health-score-track"><div class="health-score-fill" style="width:87%; background:#10b981;"></div></div>
462
+ <span class="health-score-num" style="color:#10b981;">87</span>
463
+ </div>
464
+ <span class="health-badge badge-healthy">● HEALTHY</span>
465
+ </div>
466
+
467
+ <div class="health-row">
468
+ <span class="health-company">TechPeak</span>
469
+ <div class="health-score-wrap">
470
+ <div class="health-score-track"><div class="health-score-fill" style="width:62%; background:#f59e0b;"></div></div>
471
+ <span class="health-score-num" style="color:#f59e0b;">62</span>
472
+ </div>
473
+ <span class="health-badge badge-monitor">● MONITOR</span>
474
+ </div>
475
+
476
+ <div class="health-row">
477
+ <span class="health-company">BlueStar</span>
478
+ <div class="health-score-wrap">
479
+ <div class="health-score-track"><div class="health-score-fill" style="width:31%; background:#ef4444;"></div></div>
480
+ <span class="health-score-num" style="color:#ef4444;">31</span>
481
+ </div>
482
+ <span class="health-badge badge-risk">● AT RISK</span>
483
+ </div>
484
+
485
+ <div class="health-row">
486
+ <span class="health-company">Meridian</span>
487
+ <div class="health-score-wrap">
488
+ <div class="health-score-track"><div class="health-score-fill" style="width:94%; background:#10b981;"></div></div>
489
+ <span class="health-score-num" style="color:#10b981;">94</span>
490
+ </div>
491
+ <span class="health-badge badge-healthy">● HEALTHY</span>
492
+ </div>
493
+
494
+ <div class="health-row">
495
+ <span class="health-company">Apex Co</span>
496
+ <div class="health-score-wrap">
497
+ <div class="health-score-track"><div class="health-score-fill" style="width:24%; background:#ef4444;"></div></div>
498
+ <span class="health-score-num" style="color:#ef4444;">24</span>
499
+ </div>
500
+ <span class="health-badge badge-risk">● AT RISK</span>
501
+ </div>
502
+
503
+ </div>
504
+ <div class="health-summary">
505
+ <strong>23 at-risk accounts</strong> identified · <strong style="color:#ea580c;">$840K ARR at stake</strong> · 14 renewed after proactive outreach
506
+ </div>
507
+ </div>
508
+
509
+ <div class="source-ref">
510
+ 📎 Source: <a href="#">FRAIM · crm-account-health-review · fraim/ai-employee/jobs/crm-account-health-review.md</a>
511
+ </div>
512
+ </div>
513
+ </div>
514
+
515
+ <!-- Card 3: CRM Pipeline Review -->
516
+ <div class="card" id="card3">
517
+ <div class="card-header" onclick="toggleCard(3)">
518
+ <div class="card-icon" style="background:#fef9c3;">📊</div>
519
+ <div class="card-meta">
520
+ <div class="card-tag" style="color:#b45309;">Revenue Ops</div>
521
+ <div class="card-title">$2.1M pipeline reviewed in 20 minutes</div>
522
+ <div class="card-subtitle">FRAIM · crm-pipeline-review · fraim/ai-employee/jobs/</div>
523
+ </div>
524
+ <div class="card-toggle">›</div>
525
+ </div>
526
+ <div class="card-body">
527
+ <div class="narrative">
528
+ <div class="narrative-step">
529
+ <div class="step-label">Problem</div>
530
+ <div class="step-text">A VP of Sales was spending 90 minutes every Friday reviewing pipeline manually — pulling deal data from Salesforce, updating a forecast spreadsheet, and preparing a summary for the CEO. Pulling data from 60+ opportunities is data-entry, not strategy.</div>
531
+ </div>
532
+ <div class="narrative-step">
533
+ <div class="step-label">What SAM Can Build</div>
534
+ <div class="step-text">SAM automated the weekly pipeline review: pulled all open opportunities by stage, flagged deals with no activity in 14+ days, identified deals where close dates had slipped 30+ days, and generated a one-page summary with coverage ratio and top 5 deals by probability-weighted value. Delivered 30 minutes before the CEO sync.</div>
535
+ </div>
536
+ <div class="narrative-step">
537
+ <div class="step-label">Possible Outcome</div>
538
+ <div class="step-text">SAM's pipeline intelligence can reclaim 70 minutes per week for a VP of Sales and improve pipeline coverage ratios from 2.8x to 3.4x — often by surfacing stale deals that should be reclassified before they distort the forecast. The summaries are typically cleaner and more actionable than what a human RevOps person produces at the same cadence.</div>
539
+ </div>
540
+ </div>
541
+
542
+ <div class="artifact-label">Live Artifact — Weekly Pipeline Review Report</div>
543
+
544
+ <div class="pipeline-report">
545
+ <div class="pipeline-report-header">
546
+ <span class="pipeline-report-title">Pipeline Review — Week of May 19</span>
547
+ <div class="pipeline-kpis">
548
+ <div class="pipeline-kpi">
549
+ <div class="pipeline-kpi-val">3.4×</div>
550
+ <div class="pipeline-kpi-label">Coverage</div>
551
+ </div>
552
+ <div class="pipeline-kpi">
553
+ <div class="pipeline-kpi-val">$380K</div>
554
+ <div class="pipeline-kpi-label">Forecast</div>
555
+ </div>
556
+ </div>
557
+ </div>
558
+
559
+ <div class="pipeline-stages">
560
+ <div class="pipeline-stage">
561
+ <div class="pipeline-stage-name">Qualify</div>
562
+ <div class="pipeline-stage-val">$1.2M</div>
563
+ <div class="pipeline-stage-count">31 deals</div>
564
+ </div>
565
+ <div class="pipeline-stage">
566
+ <div class="pipeline-stage-name">Propose</div>
567
+ <div class="pipeline-stage-val">$580K</div>
568
+ <div class="pipeline-stage-count">14 deals</div>
569
+ </div>
570
+ <div class="pipeline-stage">
571
+ <div class="pipeline-stage-name">Negotiate</div>
572
+ <div class="pipeline-stage-val">$220K</div>
573
+ <div class="pipeline-stage-count">8 deals</div>
574
+ </div>
575
+ <div class="pipeline-stage">
576
+ <div class="pipeline-stage-name">Close</div>
577
+ <div class="pipeline-stage-val">$112K</div>
578
+ <div class="pipeline-stage-count">4 deals</div>
579
+ </div>
580
+ </div>
581
+
582
+ <div class="pipeline-alerts">
583
+ <span class="alert-badge">⚠ 8 deals stale 14+ days</span>
584
+ <span class="alert-badge">⚠ 3 deals slipped 30+ days</span>
585
+ </div>
586
+
587
+ <div class="pipeline-deals-header">
588
+ <span>Company</span>
589
+ <span>Value</span>
590
+ <span>Stage</span>
591
+ <span>Prob</span>
592
+ <span>Weighted</span>
593
+ </div>
594
+
595
+ <div class="pipeline-deal-row">
596
+ <span class="deal-company">Acme Enterprise</span>
597
+ <span>$180K</span>
598
+ <span>Negotiate</span>
599
+ <span>70%</span>
600
+ <span class="deal-weighted">$126K</span>
601
+ </div>
602
+ <div class="pipeline-deal-row">
603
+ <span class="deal-company">BlueSky Series C</span>
604
+ <span>$120K</span>
605
+ <span>Propose</span>
606
+ <span>40%</span>
607
+ <span class="deal-weighted">$48K</span>
608
+ </div>
609
+ <div class="pipeline-deal-row">
610
+ <span class="deal-company">Meridian Expansion</span>
611
+ <span>$95K</span>
612
+ <span>Close</span>
613
+ <span>85%</span>
614
+ <span class="deal-weighted">$80.75K</span>
615
+ </div>
616
+
617
+ </div>
618
+
619
+ <div class="source-ref">
620
+ 📎 Source: <a href="#">FRAIM · crm-pipeline-review · fraim/ai-employee/jobs/crm-pipeline-review.md</a>
621
+ </div>
622
+ </div>
623
+ </div>
624
+
625
+ </div>
626
+
627
+ <footer class="portfolio-footer">
628
+ <div class="footer-sub">
629
+ Part of the <a href="/">FRAIM</a> · 18 AI employees available ·
630
+ <a href="/">Back to FRAIM</a>
631
+ </div>
632
+ </footer>
633
+
634
+ <script>
635
+ function toggleTheme() {
636
+ const html = document.documentElement;
637
+ const isDark = html.getAttribute('data-theme') === 'dark';
638
+ html.setAttribute('data-theme', isDark ? 'light' : 'dark');
639
+ document.querySelector('.theme-btn').textContent = isDark ? '☾' : '☀';
640
+ }
641
+ if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
642
+ document.documentElement.setAttribute('data-theme', 'dark');
643
+ document.querySelector('.theme-btn').textContent = '☀';
644
+ }
645
+ function toggleCard(num) {
646
+ const card = document.getElementById('card' + num);
647
+ const isOpen = card.classList.contains('open');
648
+ document.querySelectorAll('.card').forEach(c => c.classList.remove('open'));
649
+ if (!isOpen) { card.classList.add('open'); card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }
650
+ }
651
+ </script>
652
+
653
+ </body>
654
+ </html>