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.
- package/dist/src/ai-hub/catalog.js +20 -27
- package/dist/src/ai-hub/server.js +418 -2
- package/dist/src/ai-hub/word-sideload.js +95 -0
- package/dist/src/cli/commands/org.js +40 -0
- package/dist/src/cli/commands/test-mcp.js +171 -0
- package/dist/src/cli/fraim.js +2 -0
- package/dist/src/cli/setup/first-run.js +242 -0
- package/dist/src/cli/utils/org-publish.js +98 -0
- package/dist/src/config/ai-manager-hiring.js +121 -0
- package/dist/src/config/compat.js +16 -0
- package/dist/src/config/feature-flags.js +25 -0
- package/dist/src/config/persona-capability-bundles.js +273 -0
- package/dist/src/config/persona-hiring.js +270 -0
- package/dist/src/config/portfolio-slug-overrides.js +17 -0
- package/dist/src/config/pricing.js +37 -0
- package/dist/src/config/stripe.js +43 -0
- package/dist/src/core/config-loader.js +9 -5
- package/dist/src/core/config-writer.js +75 -0
- package/dist/src/core/fraim-config-schema.generated.js +0 -21
- package/dist/src/core/utils/job-aliases.js +47 -0
- package/dist/src/core/utils/local-registry-resolver.js +8 -1
- package/dist/src/core/utils/workflow-parser.js +174 -0
- package/index.js +1 -1
- package/package.json +5 -1
- package/public/ai-hub/index.html +81 -0
- package/public/ai-hub/powerpoint-taskpane/index.html +236 -236
- package/public/ai-hub/powerpoint-taskpane/manifest.xml +29 -29
- package/public/ai-hub/review.css +13 -0
- package/public/ai-hub/script.js +414 -4
- package/public/ai-hub/styles.css +56 -0
- package/public/first-run/styles.css +73 -73
- package/public/portfolio/ashley.html +523 -0
- package/public/portfolio/auditya.html +83 -0
- package/public/portfolio/banke.html +83 -0
- package/public/portfolio/beza.html +659 -0
- package/public/portfolio/careena.html +632 -0
- package/public/portfolio/casey.html +568 -0
- package/public/portfolio/celia.html +490 -0
- package/public/portfolio/deidre.html +642 -0
- package/public/portfolio/gautam.html +597 -0
- package/public/portfolio/hari.html +469 -0
- package/public/portfolio/huxley.html +1354 -0
- package/public/portfolio/index.html +741 -0
- package/public/portfolio/maestro.html +518 -0
- package/public/portfolio/mandy.html +590 -0
- package/public/portfolio/mona.html +597 -0
- package/public/portfolio/pam.html +887 -0
- package/public/portfolio/procella.html +107 -0
- package/public/portfolio/qasm.html +569 -0
- package/public/portfolio/ricardo.html +489 -0
- package/public/portfolio/sade.html +560 -0
- package/public/portfolio/sam.html +654 -0
- package/public/portfolio/sechar.html +580 -0
- package/public/portfolio/sreya.html +599 -0
- package/public/portfolio/swen.html +601 -0
|
@@ -0,0 +1,518 @@
|
|
|
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>MAESTRO · Full-Brained AI Employee · 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: #10b981;
|
|
13
|
+
--accent-2: #059669;
|
|
14
|
+
--accent-light: #d1fae5;
|
|
15
|
+
--text: #0a2240;
|
|
16
|
+
--text-2: #334155;
|
|
17
|
+
--muted: #64748b;
|
|
18
|
+
--bg: #f0fdf4;
|
|
19
|
+
--surface: #ffffff;
|
|
20
|
+
--surface-2: #f8fafc;
|
|
21
|
+
--border: #e2e8f0;
|
|
22
|
+
--shadow: 0 4px 24px rgba(10,34,64,.08);
|
|
23
|
+
--shadow-lg: 0 12px 40px rgba(10,34,64,.14);
|
|
24
|
+
--radius: 18px;
|
|
25
|
+
--radius-sm: 10px;
|
|
26
|
+
--amber: #f59e0b;
|
|
27
|
+
--red: #ef4444;
|
|
28
|
+
--purple: #8b5cf6;
|
|
29
|
+
--code-bg: #0f172a;
|
|
30
|
+
--code-border: #1e293b;
|
|
31
|
+
}
|
|
32
|
+
[data-theme="dark"] {
|
|
33
|
+
--text: #e2e8f0; --text-2: #cbd5e1; --muted: #94a3b8;
|
|
34
|
+
--bg: #071410; --surface: #0b1f18; --surface-2: #0f2920;
|
|
35
|
+
--border: #164430; --shadow: 0 4px 24px rgba(0,0,0,.35);
|
|
36
|
+
--shadow-lg: 0 12px 40px rgba(0,0,0,.5); --accent-light: #064e3b;
|
|
37
|
+
--code-bg: #03100c; --code-border: #0b1f18;
|
|
38
|
+
}
|
|
39
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
40
|
+
body { font-family: 'Inter', sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; transition: background .3s, color .3s; }
|
|
41
|
+
code, pre, .mono { font-family: 'JetBrains Mono', 'Fira Code', monospace; }
|
|
42
|
+
|
|
43
|
+
.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); }
|
|
44
|
+
.brand { display: flex; align-items: center; gap: 10px; text-decoration: none; }
|
|
45
|
+
.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; }
|
|
46
|
+
.brand-name { font-weight: 700; font-size: 15px; color: var(--text); }
|
|
47
|
+
.header-actions { display: flex; align-items: center; gap: 12px; }
|
|
48
|
+
.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; }
|
|
49
|
+
|
|
50
|
+
.hero { max-width: 900px; margin: 56px auto 0; padding: 0 24px; text-align: center; }
|
|
51
|
+
.avatar-ring { display: inline-flex; align-items: center; justify-content: center; width: 96px; height: 96px; border-radius: 50%; background: linear-gradient(135deg, #10b981, #6366f1, #f59e0b, #ef4444, #0ea5e9); margin-bottom: 24px; box-shadow: 0 0 0 6px var(--accent-light); overflow: hidden; }
|
|
52
|
+
.avatar-initials { font-size: 28px; font-weight: 800; color: #fff; letter-spacing: -1px; font-family: 'JetBrains Mono', monospace; }
|
|
53
|
+
.role-chip { display: inline-block; background: var(--accent-light); color: var(--accent-2); border-radius: 999px; padding: 4px 14px; font-size: 12px; font-weight: 600; letter-spacing: .04em; margin-bottom: 16px; }
|
|
54
|
+
.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; }
|
|
55
|
+
.hero h1 span { color: var(--accent); }
|
|
56
|
+
.hero p { font-size: 17px; color: var(--muted); max-width: 560px; margin: 0 auto 32px; line-height: 1.7; }
|
|
57
|
+
|
|
58
|
+
.section-label { max-width: 900px; margin: 64px auto 0; padding: 0 24px; display: flex; align-items: center; gap: 12px; }
|
|
59
|
+
.section-label h2 { font-size: 13px; font-weight: 700; color: var(--muted); letter-spacing: .08em; text-transform: uppercase; }
|
|
60
|
+
.section-divider { flex: 1; height: 1px; background: var(--border); }
|
|
61
|
+
|
|
62
|
+
.cards-grid { max-width: 900px; margin: 24px auto 0; padding: 0 24px 80px; display: flex; flex-direction: column; gap: 20px; }
|
|
63
|
+
.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; transition: box-shadow .2s; }
|
|
64
|
+
.card:hover { box-shadow: var(--shadow-lg); }
|
|
65
|
+
.card-header { display: flex; align-items: flex-start; gap: 16px; padding: 24px; cursor: pointer; user-select: none; }
|
|
66
|
+
.card-icon { width: 48px; height: 48px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; }
|
|
67
|
+
.card-meta { flex: 1; min-width: 0; }
|
|
68
|
+
.card-tag { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; margin-bottom: 6px; }
|
|
69
|
+
.card-title { font-size: 18px; font-weight: 700; color: var(--text); line-height: 1.25; margin-bottom: 6px; }
|
|
70
|
+
.card-subtitle { font-size: 13px; color: var(--muted); }
|
|
71
|
+
.card-toggle { font-size: 22px; color: var(--muted); transition: transform .3s; flex-shrink: 0; align-self: center; }
|
|
72
|
+
.card.open .card-toggle { transform: rotate(90deg); }
|
|
73
|
+
.card-body { display: none; border-top: 1px solid var(--border); padding: 28px; }
|
|
74
|
+
.card.open .card-body { display: block; }
|
|
75
|
+
|
|
76
|
+
.card-context { font-size: 13px; color: var(--muted); font-style: italic; margin-bottom: 20px; line-height: 1.6; border-left: 3px solid var(--accent-light); padding-left: 14px; }
|
|
77
|
+
|
|
78
|
+
.narrative { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; margin-bottom: 28px; }
|
|
79
|
+
@media (max-width: 640px) { .narrative { grid-template-columns: 1fr; } }
|
|
80
|
+
.narrative-step { background: var(--surface-2); border-radius: var(--radius-sm); padding: 16px; }
|
|
81
|
+
.step-label { font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
|
|
82
|
+
.step-text { font-size: 13px; color: var(--text-2); line-height: 1.6; }
|
|
83
|
+
.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; }
|
|
84
|
+
.artifact-label::before { content: ''; display: block; width: 20px; height: 2px; background: var(--accent); border-radius: 2px; }
|
|
85
|
+
.source-ref { margin-top: 16px; font-size: 12px; color: var(--muted); }
|
|
86
|
+
.source-ref a { color: var(--accent); text-decoration: none; }
|
|
87
|
+
.source-ref a:hover { text-decoration: underline; }
|
|
88
|
+
|
|
89
|
+
/* ══ ARTIFACT 1 — Capability Wheel ══ */
|
|
90
|
+
.cap-wheel-wrap {
|
|
91
|
+
background: var(--surface-2);
|
|
92
|
+
border: 1px solid var(--border);
|
|
93
|
+
border-radius: 14px;
|
|
94
|
+
padding: 24px;
|
|
95
|
+
text-align: center;
|
|
96
|
+
}
|
|
97
|
+
.cap-wheel-svg { width: 100%; max-width: 480px; height: auto; }
|
|
98
|
+
|
|
99
|
+
/* ══ ARTIFACT 2 — Launch Timeline ══ */
|
|
100
|
+
.timeline-wrap {
|
|
101
|
+
background: var(--surface-2);
|
|
102
|
+
border: 1px solid var(--border);
|
|
103
|
+
border-radius: 14px;
|
|
104
|
+
padding: 24px;
|
|
105
|
+
}
|
|
106
|
+
.timeline { position: relative; padding-left: 32px; display: flex; flex-direction: column; gap: 0; }
|
|
107
|
+
.timeline::before {
|
|
108
|
+
content: ''; position: absolute; left: 10px; top: 10px; bottom: 10px;
|
|
109
|
+
width: 2px; background: var(--border); border-radius: 2px;
|
|
110
|
+
}
|
|
111
|
+
.tl-item { display: flex; align-items: flex-start; gap: 14px; padding: 12px 0; position: relative; }
|
|
112
|
+
.tl-dot {
|
|
113
|
+
width: 20px; height: 20px; border-radius: 50%;
|
|
114
|
+
position: absolute; left: -32px; top: 14px;
|
|
115
|
+
display: flex; align-items: center; justify-content: center;
|
|
116
|
+
font-size: 9px; color: #fff; font-weight: 800;
|
|
117
|
+
flex-shrink: 0; z-index: 1;
|
|
118
|
+
}
|
|
119
|
+
.tl-time { font-size: 11px; font-weight: 700; color: var(--muted); font-family: 'JetBrains Mono', monospace; min-width: 52px; flex-shrink: 0; padding-top: 2px; }
|
|
120
|
+
.tl-badge { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 11px; font-weight: 700; margin-right: 8px; flex-shrink: 0; }
|
|
121
|
+
.tl-text { font-size: 13px; color: var(--text-2); line-height: 1.5; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
|
|
122
|
+
|
|
123
|
+
/* ══ ARTIFACT 3 — SOC2 Control Matrix ══ */
|
|
124
|
+
.soc2-wrap {
|
|
125
|
+
border: 1px solid var(--border);
|
|
126
|
+
border-radius: 14px;
|
|
127
|
+
overflow: hidden;
|
|
128
|
+
}
|
|
129
|
+
.soc2-table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
130
|
+
.soc2-table th {
|
|
131
|
+
background: var(--surface-2);
|
|
132
|
+
padding: 10px 14px;
|
|
133
|
+
text-align: left;
|
|
134
|
+
font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
|
|
135
|
+
color: var(--muted);
|
|
136
|
+
border-bottom: 1px solid var(--border);
|
|
137
|
+
}
|
|
138
|
+
.soc2-table td { padding: 10px 14px; border-bottom: 1px solid var(--border); color: var(--text-2); }
|
|
139
|
+
.soc2-table tr:last-child td { border-bottom: none; }
|
|
140
|
+
.soc2-table tr:hover td { background: var(--surface-2); }
|
|
141
|
+
.ctrl-code { font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 700; color: var(--text); }
|
|
142
|
+
.owner-badge { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 11px; font-weight: 700; }
|
|
143
|
+
.status-dot-green { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: #10b981; margin-right: 4px; vertical-align: middle; }
|
|
144
|
+
.evidence-text { font-size: 12px; color: var(--muted); }
|
|
145
|
+
|
|
146
|
+
/* Footer */
|
|
147
|
+
.portfolio-footer { background: var(--surface); border-top: 1px solid var(--border); padding: 40px 24px; text-align: center; }
|
|
148
|
+
.footer-sub { margin-top: 20px; font-size: 12px; color: var(--muted); }
|
|
149
|
+
.footer-sub a { color: var(--accent); text-decoration: none; }
|
|
150
|
+
|
|
151
|
+
@media (max-width: 640px) {
|
|
152
|
+
.site-header { padding: 12px 16px; }
|
|
153
|
+
.hero { margin-top: 36px; }
|
|
154
|
+
.cards-grid { padding: 0 16px 60px; }
|
|
155
|
+
.card-header { padding: 18px; }
|
|
156
|
+
.card-body { padding: 18px; }
|
|
157
|
+
.section-label { margin-top: 40px; padding: 0 16px; }
|
|
158
|
+
.soc2-table th, .soc2-table td { padding: 8px 10px; }
|
|
159
|
+
.soc2-wrap { overflow-x: auto; }
|
|
160
|
+
}
|
|
161
|
+
</style>
|
|
162
|
+
</head>
|
|
163
|
+
<body>
|
|
164
|
+
|
|
165
|
+
<header class="site-header">
|
|
166
|
+
<a class="brand" href="/">
|
|
167
|
+
<div class="brand-logo">F</div>
|
|
168
|
+
<span class="brand-name">FRAIM</span>
|
|
169
|
+
</a>
|
|
170
|
+
<div class="header-actions">
|
|
171
|
+
<button class="theme-btn" onclick="toggleTheme()" title="Toggle dark mode">☾</button>
|
|
172
|
+
</div>
|
|
173
|
+
</header>
|
|
174
|
+
|
|
175
|
+
<section class="hero">
|
|
176
|
+
<div class="avatar-ring">
|
|
177
|
+
<img src="https://api.dicebear.com/9.x/notionists/svg?seed=MAESTRO-founder-mode&backgroundColor=fde68a&radius=50" width="96" height="96" alt="MAESTRO-founder-mode avatar" style="border-radius:50%;">
|
|
178
|
+
</div>
|
|
179
|
+
<div class="role-chip">Full-Brained AI Employee</div>
|
|
180
|
+
<h1>Every FRAIM skill.<br>Every FRAIM job. <span>One hire.</span></h1>
|
|
181
|
+
<p>Every FRAIM skill. Every FRAIM job. One hire.</p>
|
|
182
|
+
</section>
|
|
183
|
+
|
|
184
|
+
<div class="section-label">
|
|
185
|
+
<h2>Selected Work</h2>
|
|
186
|
+
<div class="section-divider"></div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="cards-grid">
|
|
190
|
+
|
|
191
|
+
<!-- Card 1: Full-Stack Product Launch -->
|
|
192
|
+
<div class="card open" id="card1">
|
|
193
|
+
<div class="card-header" onclick="toggleCard(1)">
|
|
194
|
+
<div class="card-icon" style="background:#d1fae5;">🚀</div>
|
|
195
|
+
<div class="card-meta">
|
|
196
|
+
<div class="card-tag" style="color:#10b981;">Cross-Functional Delivery</div>
|
|
197
|
+
<div class="card-title">Spec → design → code → shipped in one session</div>
|
|
198
|
+
<div class="card-subtitle">FRAIM · feat/455-portfolio-pages · full-stack-execution</div>
|
|
199
|
+
</div>
|
|
200
|
+
<div class="card-toggle">›</div>
|
|
201
|
+
</div>
|
|
202
|
+
<div class="card-body">
|
|
203
|
+
<div class="card-context">A bootstrapped founder needed to launch FRAIM's public employee portfolio from zero — requiring product spec, UX design, engineering, QA, and security review.</div>
|
|
204
|
+
|
|
205
|
+
<div class="narrative">
|
|
206
|
+
<div class="narrative-step">
|
|
207
|
+
<div class="step-label">Problem</div>
|
|
208
|
+
<div class="step-text">Hiring specialists for a one-time launch means 5 separate onboarding conversations, 5 context-transfer sessions, and 5 billing relationships. For a bootstrapped company, the coordination cost often exceeds the work cost.</div>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="narrative-step">
|
|
211
|
+
<div class="step-label">What MAESTRO Did</div>
|
|
212
|
+
<div class="step-text">MAESTRO ran the full lifecycle: PaM wrote the feature spec with 9 requirements and a validated HTML mock, hUXley built three interactive portfolio artifacts, SWEn implemented 4 production HTML pages with auth middleware changes and 7 E2E tests, QAsm validated all pages via Playwright, and SEChar ran the security review. MAESTRO orchestrated sequencing, resolved one spec/design conflict, and merged the PR.</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="narrative-step">
|
|
215
|
+
<div class="step-label">The Outcome</div>
|
|
216
|
+
<div class="step-text">Complete portfolio pages for hUXley, PaM, and SWEn shipped in a single session. Zero regressions. Security: 0 findings. All R1–R9 requirements met.</div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div class="artifact-label">Live Artifact — MAESTRO Capability Wheel</div>
|
|
221
|
+
|
|
222
|
+
<div class="cap-wheel-wrap">
|
|
223
|
+
<svg class="cap-wheel-svg" viewBox="0 0 480 340" xmlns="http://www.w3.org/2000/svg">
|
|
224
|
+
<!-- Connection lines from center to satellites -->
|
|
225
|
+
<line x1="240" y1="170" x2="120" y2="60" stroke="#6366f1" stroke-width="1.5" opacity="0.5"/>
|
|
226
|
+
<line x1="240" y1="170" x2="360" y2="60" stroke="#10b981" stroke-width="1.5" opacity="0.5"/>
|
|
227
|
+
<line x1="240" y1="170" x2="420" y2="170" stroke="#0ea5e9" stroke-width="1.5" opacity="0.5"/>
|
|
228
|
+
<line x1="240" y1="170" x2="360" y2="280" stroke="#10b981" stroke-width="1.5" opacity="0.5"/>
|
|
229
|
+
<line x1="240" y1="170" x2="120" y2="280" stroke="#ef4444" stroke-width="1.5" opacity="0.5"/>
|
|
230
|
+
<line x1="240" y1="170" x2="60" y2="170" stroke="#f59e0b" stroke-width="1.5" opacity="0.5"/>
|
|
231
|
+
|
|
232
|
+
<!-- MAESTRO center circle — rainbow gradient -->
|
|
233
|
+
<defs>
|
|
234
|
+
<radialGradient id="maestroGrad" cx="50%" cy="50%" r="50%">
|
|
235
|
+
<stop offset="0%" stop-color="#10b981"/>
|
|
236
|
+
<stop offset="33%" stop-color="#6366f1"/>
|
|
237
|
+
<stop offset="66%" stop-color="#f59e0b"/>
|
|
238
|
+
<stop offset="100%" stop-color="#ef4444"/>
|
|
239
|
+
</radialGradient>
|
|
240
|
+
</defs>
|
|
241
|
+
<circle cx="240" cy="170" r="56" fill="url(#maestroGrad)" opacity="0.92"/>
|
|
242
|
+
<text x="240" y="164" font-size="15" fill="#fff" font-family="Inter,sans-serif" font-weight="800" text-anchor="middle">MAESTRO</text>
|
|
243
|
+
<text x="240" y="181" font-size="9" fill="rgba(255,255,255,.8)" font-family="Inter,sans-serif" text-anchor="middle">18 employees</text>
|
|
244
|
+
<text x="240" y="193" font-size="9" fill="rgba(255,255,255,.8)" font-family="Inter,sans-serif" text-anchor="middle">200+ jobs</text>
|
|
245
|
+
|
|
246
|
+
<!-- PaM — indigo -->
|
|
247
|
+
<circle cx="120" cy="60" r="36" fill="#6366f1" opacity="0.9"/>
|
|
248
|
+
<text x="120" y="56" font-size="13" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">PaM</text>
|
|
249
|
+
<text x="120" y="70" font-size="10" fill="#e0e7ff" font-family="Inter,sans-serif" text-anchor="middle">Spec ✓</text>
|
|
250
|
+
|
|
251
|
+
<!-- hUXley — green -->
|
|
252
|
+
<circle cx="360" cy="60" r="36" fill="#10b981" opacity="0.9"/>
|
|
253
|
+
<text x="360" y="56" font-size="11" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">hUXley</text>
|
|
254
|
+
<text x="360" y="70" font-size="10" fill="#d1fae5" font-family="Inter,sans-serif" text-anchor="middle">Design ✓</text>
|
|
255
|
+
|
|
256
|
+
<!-- SWEn — sky -->
|
|
257
|
+
<circle cx="420" cy="170" r="36" fill="#0ea5e9" opacity="0.9"/>
|
|
258
|
+
<text x="420" y="166" font-size="13" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">SWEn</text>
|
|
259
|
+
<text x="420" y="180" font-size="10" fill="#e0f2fe" font-family="Inter,sans-serif" text-anchor="middle">Code ✓</text>
|
|
260
|
+
|
|
261
|
+
<!-- QAsm — emerald -->
|
|
262
|
+
<circle cx="360" cy="280" r="36" fill="#10b981" opacity="0.75"/>
|
|
263
|
+
<text x="360" y="276" font-size="13" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">QAsm</text>
|
|
264
|
+
<text x="360" y="290" font-size="10" fill="#d1fae5" font-family="Inter,sans-serif" text-anchor="middle">QA ✓</text>
|
|
265
|
+
|
|
266
|
+
<!-- SEChar — red -->
|
|
267
|
+
<circle cx="120" cy="280" r="36" fill="#ef4444" opacity="0.85"/>
|
|
268
|
+
<text x="120" y="276" font-size="11" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">SEChar</text>
|
|
269
|
+
<text x="120" y="290" font-size="10" fill="#fee2e2" font-family="Inter,sans-serif" text-anchor="middle">Security ✓</text>
|
|
270
|
+
|
|
271
|
+
<!-- AshLey — amber -->
|
|
272
|
+
<circle cx="60" cy="170" r="36" fill="#f59e0b" opacity="0.9"/>
|
|
273
|
+
<text x="60" y="166" font-size="11" fill="#fff" font-family="Inter,sans-serif" font-weight="700" text-anchor="middle">AshLey</text>
|
|
274
|
+
<text x="60" y="180" font-size="10" fill="#fef3c7" font-family="Inter,sans-serif" text-anchor="middle">Comms ✓</text>
|
|
275
|
+
</svg>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<div class="source-ref">
|
|
279
|
+
📎 Source: <a href="#">FRAIM · feat/455-portfolio-pages · all employees</a>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
|
|
284
|
+
<!-- Card 2: Business Idea to Revenue in 72 Hours -->
|
|
285
|
+
<div class="card" id="card2">
|
|
286
|
+
<div class="card-header" onclick="toggleCard(2)">
|
|
287
|
+
<div class="card-icon" style="background:#d1fae5;">⚡</div>
|
|
288
|
+
<div class="card-meta">
|
|
289
|
+
<div class="card-tag" style="color:#10b981;">Zero-to-One Velocity</div>
|
|
290
|
+
<div class="card-title">Idea validated, entity formed, product live</div>
|
|
291
|
+
<div class="card-subtitle">FRAIM · business-launch-workflow · end-to-end</div>
|
|
292
|
+
</div>
|
|
293
|
+
<div class="card-toggle">›</div>
|
|
294
|
+
</div>
|
|
295
|
+
<div class="card-body">
|
|
296
|
+
<div class="card-context">A solo founder had a validated problem hypothesis but no company, no product, no legal entity — just conviction and a weekend.</div>
|
|
297
|
+
|
|
298
|
+
<div class="narrative">
|
|
299
|
+
<div class="narrative-step">
|
|
300
|
+
<div class="step-label">Problem</div>
|
|
301
|
+
<div class="step-text">Starting a company from scratch has 30+ discrete tasks across legal, finance, product, marketing, and ops. Most founders get stuck switching contexts between Stripe, Clerky, Figma, GitHub, and their bank — each switch costs hours.</div>
|
|
302
|
+
</div>
|
|
303
|
+
<div class="narrative-step">
|
|
304
|
+
<div class="step-label">What MAESTRO Can Build</div>
|
|
305
|
+
<div class="step-text">MAESTRO handled every domain in sequence: BeZa validated market sizing and drafted a one-page business plan; CELiA filed the Delaware LLC and EIN; hUXley built the landing page; SWEn deployed it; GauTaM set up the GTM stack; AshLey configured the founder's calendar and meeting templates. Each output fed the next without manual handoff.</div>
|
|
306
|
+
</div>
|
|
307
|
+
<div class="narrative-step">
|
|
308
|
+
<div class="step-label">Possible Outcome</div>
|
|
309
|
+
<div class="step-text">With MAESTRO orchestrating, a solo founder can expect a live product, a legal entity, a Stripe integration, and paying beta users within 72 hours — at a cost of $249, less than one hour of a law firm's time for just the legal work alone.</div>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<div class="artifact-label">Live Artifact — 72-Hour Launch Timeline</div>
|
|
314
|
+
|
|
315
|
+
<div class="timeline-wrap">
|
|
316
|
+
<div class="timeline">
|
|
317
|
+
|
|
318
|
+
<div class="tl-item">
|
|
319
|
+
<div class="tl-dot" style="background:#6366f1;">1</div>
|
|
320
|
+
<div class="tl-time">Hour 0</div>
|
|
321
|
+
<div class="tl-text">
|
|
322
|
+
<span class="tl-badge" style="background:#e0e7ff;color:#4338ca;">BeZa</span>
|
|
323
|
+
Market sizing complete ✓
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<div class="tl-item">
|
|
328
|
+
<div class="tl-dot" style="background:#8b5cf6;">2</div>
|
|
329
|
+
<div class="tl-time">Hour 4</div>
|
|
330
|
+
<div class="tl-text">
|
|
331
|
+
<span class="tl-badge" style="background:#ede9fe;color:#6d28d9;">CELiA</span>
|
|
332
|
+
Delaware LLC filed ✓
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<div class="tl-item">
|
|
337
|
+
<div class="tl-dot" style="background:#10b981;">3</div>
|
|
338
|
+
<div class="tl-time">Hour 12</div>
|
|
339
|
+
<div class="tl-text">
|
|
340
|
+
<span class="tl-badge" style="background:#d1fae5;color:#065f46;">hUXley</span>
|
|
341
|
+
Landing page live ✓
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
|
|
345
|
+
<div class="tl-item">
|
|
346
|
+
<div class="tl-dot" style="background:#0ea5e9;">4</div>
|
|
347
|
+
<div class="tl-time">Hour 18</div>
|
|
348
|
+
<div class="tl-text">
|
|
349
|
+
<span class="tl-badge" style="background:#e0f2fe;color:#0369a1;">SWEn</span>
|
|
350
|
+
Stripe + deploy ✓
|
|
351
|
+
</div>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<div class="tl-item">
|
|
355
|
+
<div class="tl-dot" style="background:#f97316;">5</div>
|
|
356
|
+
<div class="tl-time">Hour 24</div>
|
|
357
|
+
<div class="tl-text">
|
|
358
|
+
<span class="tl-badge" style="background:#ffedd5;color:#c2410c;">GauTaM</span>
|
|
359
|
+
GTM stack ready ✓
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
|
|
363
|
+
<div class="tl-item">
|
|
364
|
+
<div class="tl-dot" style="background:#f59e0b;">6</div>
|
|
365
|
+
<div class="tl-time">Hour 48</div>
|
|
366
|
+
<div class="tl-text">
|
|
367
|
+
<span class="tl-badge" style="background:#fef3c7;color:#92400e;">AshLey</span>
|
|
368
|
+
Calendar + templates ✓
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<div class="tl-item">
|
|
373
|
+
<div class="tl-dot" style="background:#10b981;">7</div>
|
|
374
|
+
<div class="tl-time">Hour 72</div>
|
|
375
|
+
<div class="tl-text" style="font-weight:700;color:var(--accent);">
|
|
376
|
+
🚀 3 paying beta users
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
|
|
383
|
+
<div class="source-ref">
|
|
384
|
+
📎 Source: <a href="#">FRAIM · business-launch-workflow · fraim/ai-employee/jobs/</a>
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
</div>
|
|
388
|
+
|
|
389
|
+
<!-- Card 3: Enterprise Compliance Package -->
|
|
390
|
+
<div class="card" id="card3">
|
|
391
|
+
<div class="card-header" onclick="toggleCard(3)">
|
|
392
|
+
<div class="card-icon" style="background:#d1fae5;">🔒</div>
|
|
393
|
+
<div class="card-meta">
|
|
394
|
+
<div class="card-tag" style="color:#10b981;">Compliance Velocity</div>
|
|
395
|
+
<div class="card-title">SOC2 evidence package in 48 hours</div>
|
|
396
|
+
<div class="card-subtitle">FRAIM · soc2-evidence-management · compliance-sprint</div>
|
|
397
|
+
</div>
|
|
398
|
+
<div class="card-toggle">›</div>
|
|
399
|
+
</div>
|
|
400
|
+
<div class="card-body">
|
|
401
|
+
<div class="card-context">A B2B SaaS company needed a SOC2 Type I evidence package for an enterprise deal that required it in 5 business days.</div>
|
|
402
|
+
|
|
403
|
+
<div class="narrative">
|
|
404
|
+
<div class="narrative-step">
|
|
405
|
+
<div class="step-label">Problem</div>
|
|
406
|
+
<div class="step-text">SOC2 evidence collection spans 14 control categories: access control, incident response, change management, vendor management, and more. Manually collecting and formatting evidence from Slack, GitHub, AWS, and internal docs takes weeks.</div>
|
|
407
|
+
</div>
|
|
408
|
+
<div class="narrative-step">
|
|
409
|
+
<div class="step-label">What MAESTRO Can Build</div>
|
|
410
|
+
<div class="step-text">MAESTRO assigned each control category to the appropriate specialist: SEChar handled technical security controls (access logs, vulnerability scan reports, encryption configs), SWEn pulled code-change evidence from GitHub (PR review rate, deploy cadence, test coverage), MANdy documented the change-management policy and sprint governance, AshLey assembled the vendor inventory from contract records, CELiA drafted the information security policy.</div>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="narrative-step">
|
|
413
|
+
<div class="step-label">Possible Outcome</div>
|
|
414
|
+
<div class="step-text">MAESTRO can deliver a complete SOC2 evidence package in 48 hours — typically enough to close an enterprise deal within a 5-day window. At $249 for MAESTRO's orchestration versus $15,000–$40,000 for traditional auditor-assisted preparation, the cost difference can be decisive for early-stage companies.</div>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
|
|
418
|
+
<div class="artifact-label">Live Artifact — SOC2 Control Coverage Matrix</div>
|
|
419
|
+
|
|
420
|
+
<div class="soc2-wrap">
|
|
421
|
+
<table class="soc2-table">
|
|
422
|
+
<thead>
|
|
423
|
+
<tr>
|
|
424
|
+
<th>Control</th>
|
|
425
|
+
<th>Owner</th>
|
|
426
|
+
<th>Evidence</th>
|
|
427
|
+
<th>Status</th>
|
|
428
|
+
</tr>
|
|
429
|
+
</thead>
|
|
430
|
+
<tbody>
|
|
431
|
+
<tr>
|
|
432
|
+
<td><span class="ctrl-code">CC6.1</span> Access Control</td>
|
|
433
|
+
<td><span class="owner-badge" style="background:#fee2e2;color:#b91c1c;">SEChar</span></td>
|
|
434
|
+
<td><span class="evidence-text">Access logs, IAM policy export</span></td>
|
|
435
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
436
|
+
</tr>
|
|
437
|
+
<tr>
|
|
438
|
+
<td><span class="ctrl-code">CC7.2</span> Monitoring</td>
|
|
439
|
+
<td><span class="owner-badge" style="background:#e0f2fe;color:#0369a1;">SWEn</span></td>
|
|
440
|
+
<td><span class="evidence-text">Alerting config, uptime report</span></td>
|
|
441
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
442
|
+
</tr>
|
|
443
|
+
<tr>
|
|
444
|
+
<td><span class="ctrl-code">CC8.1</span> Change Mgmt</td>
|
|
445
|
+
<td><span class="owner-badge" style="background:#ede9fe;color:#6d28d9;">MANdy</span></td>
|
|
446
|
+
<td><span class="evidence-text">PR review rate, sprint governance</span></td>
|
|
447
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
448
|
+
</tr>
|
|
449
|
+
<tr>
|
|
450
|
+
<td><span class="ctrl-code">CC9.1</span> Risk Assessment</td>
|
|
451
|
+
<td><span class="owner-badge" style="background:#fee2e2;color:#b91c1c;">SEChar</span></td>
|
|
452
|
+
<td><span class="evidence-text">Vuln scan, risk register</span></td>
|
|
453
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
454
|
+
</tr>
|
|
455
|
+
<tr>
|
|
456
|
+
<td><span class="ctrl-code">A1.1</span> Availability</td>
|
|
457
|
+
<td><span class="owner-badge" style="background:#e0f2fe;color:#0369a1;">SWEn</span></td>
|
|
458
|
+
<td><span class="evidence-text">Deploy cadence, coverage 94%</span></td>
|
|
459
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
460
|
+
</tr>
|
|
461
|
+
<tr>
|
|
462
|
+
<td><span class="ctrl-code">PI1.1</span> Processing Integrity</td>
|
|
463
|
+
<td><span class="owner-badge" style="background:#d1fae5;color:#065f46;">QAsm</span></td>
|
|
464
|
+
<td><span class="evidence-text">E2E test results, data validation</span></td>
|
|
465
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
466
|
+
</tr>
|
|
467
|
+
<tr>
|
|
468
|
+
<td><span class="ctrl-code">P1.1</span> Privacy</td>
|
|
469
|
+
<td><span class="owner-badge" style="background:#ede9fe;color:#5b21b6;">CELiA</span></td>
|
|
470
|
+
<td><span class="evidence-text">Privacy policy, data map</span></td>
|
|
471
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
472
|
+
</tr>
|
|
473
|
+
<tr>
|
|
474
|
+
<td><span class="ctrl-code">C1.1</span> Confidentiality</td>
|
|
475
|
+
<td><span class="owner-badge" style="background:#ede9fe;color:#5b21b6;">CELiA</span></td>
|
|
476
|
+
<td><span class="evidence-text">NDA log, encryption configs</span></td>
|
|
477
|
+
<td><span class="status-dot-green"></span><span style="font-size:12px;font-weight:600;color:#10b981;">DONE</span></td>
|
|
478
|
+
</tr>
|
|
479
|
+
</tbody>
|
|
480
|
+
</table>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
<div class="source-ref">
|
|
484
|
+
📎 Source: <a href="#">FRAIM · soc2-evidence-management · fraim/ai-employee/jobs/soc2-evidence-management.md</a>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
|
|
489
|
+
</div>
|
|
490
|
+
|
|
491
|
+
<footer class="portfolio-footer">
|
|
492
|
+
<div class="footer-sub">
|
|
493
|
+
Part of the <a href="/">FRAIM</a> · 18 AI employees available ·
|
|
494
|
+
<a href="/">View all employees</a>
|
|
495
|
+
</div>
|
|
496
|
+
</footer>
|
|
497
|
+
|
|
498
|
+
<script>
|
|
499
|
+
function toggleTheme() {
|
|
500
|
+
const html = document.documentElement;
|
|
501
|
+
const isDark = html.getAttribute('data-theme') === 'dark';
|
|
502
|
+
html.setAttribute('data-theme', isDark ? 'light' : 'dark');
|
|
503
|
+
document.querySelector('.theme-btn').textContent = isDark ? '☾' : '☀';
|
|
504
|
+
}
|
|
505
|
+
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
506
|
+
document.documentElement.setAttribute('data-theme', 'dark');
|
|
507
|
+
document.querySelector('.theme-btn').textContent = '☀';
|
|
508
|
+
}
|
|
509
|
+
function toggleCard(num) {
|
|
510
|
+
const card = document.getElementById('card' + num);
|
|
511
|
+
const isOpen = card.classList.contains('open');
|
|
512
|
+
document.querySelectorAll('.card').forEach(c => c.classList.remove('open'));
|
|
513
|
+
if (!isOpen) { card.classList.add('open'); card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }
|
|
514
|
+
}
|
|
515
|
+
</script>
|
|
516
|
+
|
|
517
|
+
</body>
|
|
518
|
+
</html>
|