fraim-framework 2.0.166 → 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/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/fraim-config-schema.generated.js +0 -21
- package/dist/src/core/utils/local-registry-resolver.js +8 -1
- package/package.json +5 -1
- package/public/ai-hub/index.html +81 -0
- 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/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,659 @@
|
|
|
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>BeZa · AI Business Strategist · 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: #059669;
|
|
13
|
+
--accent-2: #047857;
|
|
14
|
+
--accent-light: #d1fae5;
|
|
15
|
+
--text: #022c22;
|
|
16
|
+
--text-2: #064e3b;
|
|
17
|
+
--muted: #4a7c59;
|
|
18
|
+
--bg: #f0fdf4;
|
|
19
|
+
--surface: #ffffff;
|
|
20
|
+
--surface-2: #f6fef9;
|
|
21
|
+
--border: #a7f3d0;
|
|
22
|
+
--shadow: 0 4px 24px rgba(5,150,105,.08);
|
|
23
|
+
--shadow-lg: 0 12px 40px rgba(5,150,105,.15);
|
|
24
|
+
--radius: 18px;
|
|
25
|
+
--radius-sm: 10px;
|
|
26
|
+
--green: #10b981;
|
|
27
|
+
--purple: #8b5cf6;
|
|
28
|
+
--amber: #f59e0b;
|
|
29
|
+
--red: #ef4444;
|
|
30
|
+
--code-bg: #001a0e;
|
|
31
|
+
--code-border: #003319;
|
|
32
|
+
}
|
|
33
|
+
[data-theme="dark"] {
|
|
34
|
+
--text: #a7f3d0; --text-2: #6ee7b7; --muted: #4a9e6f;
|
|
35
|
+
--bg: #001a0e; --surface: #002d19; --surface-2: #003d22;
|
|
36
|
+
--border: #065f46; --shadow: 0 4px 24px rgba(0,0,0,.35);
|
|
37
|
+
--shadow-lg: 0 12px 40px rgba(0,0,0,.5); --accent-light: #065f46;
|
|
38
|
+
--code-bg: #000d07; --code-border: #002d19;
|
|
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, #059669, #0ea5e9, #6366f1); 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: #059669; 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 — Competitive Landscape Matrix ══ */
|
|
89
|
+
.matrix-container {
|
|
90
|
+
background: var(--surface-2);
|
|
91
|
+
border: 1px solid var(--border);
|
|
92
|
+
border-radius: 14px;
|
|
93
|
+
padding: 24px;
|
|
94
|
+
}
|
|
95
|
+
.matrix-title { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
|
|
96
|
+
.matrix-sub { font-size: 12px; color: var(--muted); margin-bottom: 20px; }
|
|
97
|
+
.matrix-chart {
|
|
98
|
+
position: relative;
|
|
99
|
+
width: 100%;
|
|
100
|
+
padding-bottom: 56%;
|
|
101
|
+
border: 1px solid var(--border);
|
|
102
|
+
border-radius: 10px;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
background: var(--surface);
|
|
105
|
+
}
|
|
106
|
+
.matrix-chart-inner {
|
|
107
|
+
position: absolute;
|
|
108
|
+
inset: 0;
|
|
109
|
+
}
|
|
110
|
+
/* Quadrant backgrounds */
|
|
111
|
+
.matrix-q {
|
|
112
|
+
position: absolute;
|
|
113
|
+
width: 50%; height: 50%;
|
|
114
|
+
display: flex; align-items: center; justify-content: center;
|
|
115
|
+
font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
|
|
116
|
+
opacity: .55;
|
|
117
|
+
}
|
|
118
|
+
.matrix-q-crowded { bottom: 0; right: 0; background: rgba(239,68,68,.1); color: #b91c1c; }
|
|
119
|
+
.matrix-q-opportunity { bottom: 0; left: 0; background: rgba(5,150,105,.1); color: #065f46; }
|
|
120
|
+
.matrix-q-watch { top: 0; right: 0; background: rgba(245,158,11,.06); color: #92400e; }
|
|
121
|
+
.matrix-q-niche { top: 0; left: 0; background: rgba(99,102,241,.06); color: #3730a3; }
|
|
122
|
+
/* Axes */
|
|
123
|
+
.matrix-axis-x {
|
|
124
|
+
position: absolute; bottom: 8px; left: 0; right: 0;
|
|
125
|
+
display: flex; justify-content: space-between;
|
|
126
|
+
padding: 0 10px;
|
|
127
|
+
font-size: 10px; color: var(--muted);
|
|
128
|
+
}
|
|
129
|
+
.matrix-axis-y {
|
|
130
|
+
position: absolute; top: 0; bottom: 0; left: 8px;
|
|
131
|
+
display: flex; flex-direction: column; justify-content: space-between;
|
|
132
|
+
padding: 10px 0;
|
|
133
|
+
font-size: 10px; color: var(--muted);
|
|
134
|
+
}
|
|
135
|
+
/* Dividers */
|
|
136
|
+
.matrix-div-h {
|
|
137
|
+
position: absolute; top: 50%; left: 0; right: 0;
|
|
138
|
+
height: 1px; background: var(--border);
|
|
139
|
+
}
|
|
140
|
+
.matrix-div-v {
|
|
141
|
+
position: absolute; left: 50%; top: 0; bottom: 0;
|
|
142
|
+
width: 1px; background: var(--border);
|
|
143
|
+
}
|
|
144
|
+
/* Dots */
|
|
145
|
+
.matrix-dot {
|
|
146
|
+
position: absolute;
|
|
147
|
+
width: 12px; height: 12px;
|
|
148
|
+
border-radius: 50%;
|
|
149
|
+
transform: translate(-50%, 50%);
|
|
150
|
+
cursor: pointer;
|
|
151
|
+
}
|
|
152
|
+
.matrix-dot-label {
|
|
153
|
+
position: absolute;
|
|
154
|
+
font-size: 10px; font-weight: 700;
|
|
155
|
+
white-space: nowrap;
|
|
156
|
+
pointer-events: none;
|
|
157
|
+
}
|
|
158
|
+
/* Recommendation arrow */
|
|
159
|
+
.matrix-rec {
|
|
160
|
+
margin-top: 16px;
|
|
161
|
+
background: var(--accent-light);
|
|
162
|
+
border: 1px solid var(--accent);
|
|
163
|
+
border-radius: 8px;
|
|
164
|
+
padding: 10px 14px;
|
|
165
|
+
font-size: 12px;
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
color: var(--accent-2);
|
|
168
|
+
display: flex;
|
|
169
|
+
align-items: center;
|
|
170
|
+
gap: 8px;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* ══ ARTIFACT 2 — Pricing Tier Table ══ */
|
|
174
|
+
.pricing-table-wrap {
|
|
175
|
+
background: var(--surface-2);
|
|
176
|
+
border: 1px solid var(--border);
|
|
177
|
+
border-radius: 14px;
|
|
178
|
+
overflow: hidden;
|
|
179
|
+
}
|
|
180
|
+
.pricing-cols {
|
|
181
|
+
display: grid;
|
|
182
|
+
grid-template-columns: 1.6fr 1fr 1fr 1fr;
|
|
183
|
+
}
|
|
184
|
+
.pricing-col-head {
|
|
185
|
+
padding: 20px 16px 16px;
|
|
186
|
+
text-align: center;
|
|
187
|
+
border-bottom: 1px solid var(--border);
|
|
188
|
+
border-right: 1px solid var(--border);
|
|
189
|
+
position: relative;
|
|
190
|
+
}
|
|
191
|
+
.pricing-col-head:last-child { border-right: none; }
|
|
192
|
+
.pricing-col-head.featured { background: var(--accent-light); border-bottom: 2px solid var(--accent); }
|
|
193
|
+
.pricing-col-name { font-size: 12px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 6px; }
|
|
194
|
+
.pricing-col-price { font-size: 20px; font-weight: 800; color: var(--text); }
|
|
195
|
+
.pricing-col-price span { font-size: 12px; font-weight: 400; color: var(--muted); }
|
|
196
|
+
.pricing-popular-badge {
|
|
197
|
+
display: inline-block;
|
|
198
|
+
background: var(--accent);
|
|
199
|
+
color: #fff;
|
|
200
|
+
font-size: 9px;
|
|
201
|
+
font-weight: 800;
|
|
202
|
+
letter-spacing: .08em;
|
|
203
|
+
text-transform: uppercase;
|
|
204
|
+
padding: 3px 8px;
|
|
205
|
+
border-radius: 999px;
|
|
206
|
+
margin-top: 6px;
|
|
207
|
+
}
|
|
208
|
+
.pricing-feature-row {
|
|
209
|
+
display: grid;
|
|
210
|
+
grid-template-columns: 1.6fr 1fr 1fr 1fr;
|
|
211
|
+
border-bottom: 1px solid var(--border);
|
|
212
|
+
}
|
|
213
|
+
.pricing-feature-row:last-child { border-bottom: none; }
|
|
214
|
+
.pricing-feature-name {
|
|
215
|
+
padding: 10px 16px;
|
|
216
|
+
font-size: 12px;
|
|
217
|
+
color: var(--text-2);
|
|
218
|
+
border-right: 1px solid var(--border);
|
|
219
|
+
display: flex;
|
|
220
|
+
align-items: center;
|
|
221
|
+
}
|
|
222
|
+
.pricing-feature-cell {
|
|
223
|
+
padding: 10px 8px;
|
|
224
|
+
text-align: center;
|
|
225
|
+
font-size: 14px;
|
|
226
|
+
border-right: 1px solid var(--border);
|
|
227
|
+
display: flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
justify-content: center;
|
|
230
|
+
}
|
|
231
|
+
.pricing-feature-cell:last-child { border-right: none; }
|
|
232
|
+
.pricing-feature-cell.featured { background: rgba(5,150,105,.04); }
|
|
233
|
+
.check { color: var(--accent); font-weight: 700; }
|
|
234
|
+
.dash { color: var(--muted); }
|
|
235
|
+
|
|
236
|
+
/* ══ ARTIFACT 3 — Business Plan Executive Summary ══ */
|
|
237
|
+
.bizplan-card {
|
|
238
|
+
background: #fafaf9;
|
|
239
|
+
border: 1px solid #e2e0dc;
|
|
240
|
+
border-radius: 14px;
|
|
241
|
+
overflow: hidden;
|
|
242
|
+
font-family: 'Inter', sans-serif;
|
|
243
|
+
}
|
|
244
|
+
[data-theme="dark"] .bizplan-card {
|
|
245
|
+
background: var(--surface-2);
|
|
246
|
+
border-color: var(--border);
|
|
247
|
+
}
|
|
248
|
+
.bizplan-header {
|
|
249
|
+
background: var(--accent);
|
|
250
|
+
padding: 16px 22px;
|
|
251
|
+
display: flex;
|
|
252
|
+
align-items: center;
|
|
253
|
+
justify-content: space-between;
|
|
254
|
+
flex-wrap: wrap;
|
|
255
|
+
gap: 8px;
|
|
256
|
+
}
|
|
257
|
+
.bizplan-doc-title { font-size: 14px; font-weight: 700; color: #fff; }
|
|
258
|
+
.bizplan-doc-label { font-size: 11px; color: rgba(255,255,255,.7); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
|
|
259
|
+
.bizplan-body { padding: 24px; display: flex; flex-direction: column; gap: 16px; }
|
|
260
|
+
.bizplan-field { display: flex; gap: 14px; align-items: flex-start; }
|
|
261
|
+
.bizplan-field-label {
|
|
262
|
+
font-size: 10px;
|
|
263
|
+
font-weight: 700;
|
|
264
|
+
text-transform: uppercase;
|
|
265
|
+
letter-spacing: .08em;
|
|
266
|
+
color: var(--accent);
|
|
267
|
+
width: 72px;
|
|
268
|
+
flex-shrink: 0;
|
|
269
|
+
padding-top: 2px;
|
|
270
|
+
}
|
|
271
|
+
.bizplan-field-value {
|
|
272
|
+
font-size: 13px;
|
|
273
|
+
color: var(--text-2);
|
|
274
|
+
line-height: 1.6;
|
|
275
|
+
flex: 1;
|
|
276
|
+
}
|
|
277
|
+
.bizplan-field-value strong { color: var(--text); }
|
|
278
|
+
.bizplan-divider { height: 1px; background: var(--border); margin: 4px 0; }
|
|
279
|
+
.bizplan-traction-pills { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
280
|
+
.bizplan-pill {
|
|
281
|
+
background: var(--accent-light);
|
|
282
|
+
color: var(--accent-2);
|
|
283
|
+
border-radius: 999px;
|
|
284
|
+
padding: 4px 12px;
|
|
285
|
+
font-size: 12px;
|
|
286
|
+
font-weight: 700;
|
|
287
|
+
}
|
|
288
|
+
.bizplan-market-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
|
|
289
|
+
.bizplan-market-item { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 10px; text-align: center; }
|
|
290
|
+
.bizplan-market-val { font-size: 16px; font-weight: 800; color: var(--text); }
|
|
291
|
+
.bizplan-market-label { font-size: 10px; color: var(--muted); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; }
|
|
292
|
+
|
|
293
|
+
/* Footer */
|
|
294
|
+
.portfolio-footer { background: var(--surface); border-top: 1px solid var(--border); padding: 40px 24px; text-align: center; }
|
|
295
|
+
.footer-sub { margin-top: 20px; font-size: 12px; color: var(--muted); }
|
|
296
|
+
.footer-sub a { color: var(--accent); text-decoration: none; }
|
|
297
|
+
|
|
298
|
+
@media (max-width: 640px) {
|
|
299
|
+
.site-header { padding: 12px 16px; }
|
|
300
|
+
.hero { margin-top: 36px; }
|
|
301
|
+
.cards-grid { padding: 0 16px 60px; }
|
|
302
|
+
.card-header { padding: 18px; }
|
|
303
|
+
.card-body { padding: 18px; }
|
|
304
|
+
.section-label { margin-top: 40px; padding: 0 16px; }
|
|
305
|
+
.pricing-cols { grid-template-columns: 1.2fr 0.8fr 0.8fr 0.8fr; }
|
|
306
|
+
.pricing-feature-row { grid-template-columns: 1.2fr 0.8fr 0.8fr 0.8fr; }
|
|
307
|
+
.bizplan-market-grid { grid-template-columns: 1fr 1fr 1fr; }
|
|
308
|
+
}
|
|
309
|
+
</style>
|
|
310
|
+
</head>
|
|
311
|
+
<body>
|
|
312
|
+
|
|
313
|
+
<header class="site-header">
|
|
314
|
+
<a class="brand" href="/">
|
|
315
|
+
<div class="brand-logo">F</div>
|
|
316
|
+
<span class="brand-name">FRAIM</span>
|
|
317
|
+
</a>
|
|
318
|
+
<div class="header-actions">
|
|
319
|
+
<button class="theme-btn" onclick="toggleTheme()" title="Toggle dark mode">☾</button>
|
|
320
|
+
</div>
|
|
321
|
+
</header>
|
|
322
|
+
|
|
323
|
+
<section class="hero">
|
|
324
|
+
<div class="avatar-ring">
|
|
325
|
+
<img src="https://api.dicebear.com/9.x/notionists/svg?seed=BEZA-strategist&backgroundColor=c7d2fe&radius=50" width="96" height="96" alt="BEZA-strategist avatar" style="border-radius:50%;">
|
|
326
|
+
</div>
|
|
327
|
+
<div class="role-chip">AI Business Strategist</div>
|
|
328
|
+
<h1>Validates the idea. Prices the product.<br>Builds the <span>plan</span>. Ships the deck.</h1>
|
|
329
|
+
<p>BeZa pressure-tests early ideas in 24 hours, turns gut-feel pricing into a data-backed structure, and writes the business plan your first investor meeting actually needs — without the 40-page consulting deliverable.</p>
|
|
330
|
+
</section>
|
|
331
|
+
|
|
332
|
+
<div class="section-label">
|
|
333
|
+
<h2>Selected Work</h2>
|
|
334
|
+
<div class="section-divider"></div>
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<div class="cards-grid">
|
|
338
|
+
|
|
339
|
+
<!-- Card 1: Business Idea Validation -->
|
|
340
|
+
<div class="card open" id="card1">
|
|
341
|
+
<div class="card-header" onclick="toggleCard(1)">
|
|
342
|
+
<div class="card-icon" style="background:#d1fae5;">💡</div>
|
|
343
|
+
<div class="card-meta">
|
|
344
|
+
<div class="card-tag" style="color:#059669;">Market Validation</div>
|
|
345
|
+
<div class="card-title">Idea validated in 24 hours</div>
|
|
346
|
+
<div class="card-subtitle">FRAIM · business-idea-validation-and-scoping · fraim/ai-employee/jobs/</div>
|
|
347
|
+
</div>
|
|
348
|
+
<div class="card-toggle">›</div>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="card-body">
|
|
351
|
+
<div class="narrative">
|
|
352
|
+
<div class="narrative-step">
|
|
353
|
+
<div class="step-label">Problem</div>
|
|
354
|
+
<div class="step-text">A founder had two competing ideas for her next product and needed to know which one to build before spending 3 months on an MVP. Most founders validate ideas by building them — survivorship bias hides the weak concepts that should have been redirected in week 1.</div>
|
|
355
|
+
</div>
|
|
356
|
+
<div class="narrative-step">
|
|
357
|
+
<div class="step-label">What BeZa Can Build</div>
|
|
358
|
+
<div class="step-text">BeZa ran parallel validation: searched for direct and adjacent competitors (21 found across both ideas), analyzed G2/ProductHunt reviews for unmet needs, surveyed 12 LinkedIn connections for willingness-to-pay signals, and sized the serviceable market using bottom-up TAM. Delivered a one-page comparison.</div>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="narrative-step">
|
|
361
|
+
<div class="step-label">Possible Outcome</div>
|
|
362
|
+
<div class="step-text">Founders who run BeZa's parallel validation typically land on the idea with the cleaner market dynamics. When a market shows 4 of 7 competitors raising Series B in 18 months, BeZa can surface that signal before you commit — giving you the kind of data-backed conviction that often gets a product to paid beta faster.</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
|
|
366
|
+
<div class="artifact-label">Live Artifact — Competitive Landscape Matrix</div>
|
|
367
|
+
|
|
368
|
+
<div class="matrix-container">
|
|
369
|
+
<div class="matrix-title">Idea Comparison — Competitive Landscape</div>
|
|
370
|
+
<div class="matrix-sub">x-axis: Market Size (TAM) · y-axis: Differentiation potential · dot size = competitor count</div>
|
|
371
|
+
<div class="matrix-chart">
|
|
372
|
+
<div class="matrix-chart-inner">
|
|
373
|
+
<!-- Quadrant backgrounds -->
|
|
374
|
+
<div class="matrix-q matrix-q-niche" style="top:0;left:0;">Niche</div>
|
|
375
|
+
<div class="matrix-q matrix-q-watch" style="top:0;right:0;">Watch</div>
|
|
376
|
+
<div class="matrix-q matrix-q-opportunity" style="bottom:0;left:0;">Opportunity</div>
|
|
377
|
+
<div class="matrix-q matrix-q-crowded" style="bottom:0;right:0;">Crowded</div>
|
|
378
|
+
<!-- Axes dividers -->
|
|
379
|
+
<div class="matrix-div-h"></div>
|
|
380
|
+
<div class="matrix-div-v"></div>
|
|
381
|
+
<!-- Axis labels -->
|
|
382
|
+
<div class="matrix-axis-x">
|
|
383
|
+
<span>Small TAM</span>
|
|
384
|
+
<span>Large TAM →</span>
|
|
385
|
+
</div>
|
|
386
|
+
<div class="matrix-axis-y">
|
|
387
|
+
<span style="writing-mode:vertical-rl; transform:rotate(180deg); font-size:9px;">High Diff →</span>
|
|
388
|
+
<span style="writing-mode:vertical-rl; transform:rotate(180deg); font-size:9px;">Low Diff</span>
|
|
389
|
+
</div>
|
|
390
|
+
<!-- Idea A — upper right (large market, medium differentiation) -->
|
|
391
|
+
<!-- positioned at ~72% x, ~35% from top (medium-high diff) -->
|
|
392
|
+
<div class="matrix-dot" style="left:72%; bottom:62%; width:18px; height:18px; background:#f97316; opacity:.9;" title="Idea A"></div>
|
|
393
|
+
<!-- Idea A competitor cluster -->
|
|
394
|
+
<div class="matrix-dot" style="left:65%; bottom:56%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
395
|
+
<div class="matrix-dot" style="left:70%; bottom:52%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
396
|
+
<div class="matrix-dot" style="left:78%; bottom:58%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
397
|
+
<div class="matrix-dot" style="left:74%; bottom:50%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
398
|
+
<div class="matrix-dot" style="left:68%; bottom:63%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
399
|
+
<div class="matrix-dot" style="left:76%; bottom:65%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
400
|
+
<div class="matrix-dot" style="left:80%; bottom:54%; width:8px; height:8px; background:#f97316; opacity:.5;"></div>
|
|
401
|
+
<!-- Idea A label -->
|
|
402
|
+
<div class="matrix-dot-label" style="left:74%; bottom:70%; color:#ea580c; font-size:11px;">Idea A</div>
|
|
403
|
+
<!-- Idea B — upper left (smaller market, high differentiation) -->
|
|
404
|
+
<!-- positioned at ~28% x, ~75% from top (high diff) -->
|
|
405
|
+
<div class="matrix-dot" style="left:28%; bottom:78%; width:18px; height:18px; background:#059669; opacity:.9;" title="Idea B"></div>
|
|
406
|
+
<!-- Idea B competitors (only 2, spread out) -->
|
|
407
|
+
<div class="matrix-dot" style="left:18%; bottom:68%; width:8px; height:8px; background:#059669; opacity:.45;"></div>
|
|
408
|
+
<div class="matrix-dot" style="left:38%; bottom:84%; width:8px; height:8px; background:#059669; opacity:.45;"></div>
|
|
409
|
+
<!-- Idea B label -->
|
|
410
|
+
<div class="matrix-dot-label" style="left:30%; bottom:86%; color:#047857; font-size:11px;">Idea B ★</div>
|
|
411
|
+
</div>
|
|
412
|
+
</div>
|
|
413
|
+
<div class="matrix-rec">
|
|
414
|
+
<span>★</span>
|
|
415
|
+
<span><strong>FRAIM Recommendation → Idea B:</strong> Smaller pond, fewer sharks, clearer positioning. 2 competitors vs. 7 — and none has raised in 18 months.</span>
|
|
416
|
+
</div>
|
|
417
|
+
</div>
|
|
418
|
+
|
|
419
|
+
<div class="source-ref">
|
|
420
|
+
📎 Source: <a href="#">FRAIM · business-idea-validation-and-scoping · fraim/ai-employee/jobs/business-idea-validation.md</a>
|
|
421
|
+
</div>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
<!-- Card 2: Pricing Strategy Definition -->
|
|
426
|
+
<div class="card" id="card2">
|
|
427
|
+
<div class="card-header" onclick="toggleCard(2)">
|
|
428
|
+
<div class="card-icon" style="background:#dcfce7;">💰</div>
|
|
429
|
+
<div class="card-meta">
|
|
430
|
+
<div class="card-tag" style="color:#059669;">Revenue Design</div>
|
|
431
|
+
<div class="card-title">3 pricing tiers. 2 weeks of deliberation. 1 decision.</div>
|
|
432
|
+
<div class="card-subtitle">FRAIM · pricing-strategy-definition · fraim/ai-employee/jobs/</div>
|
|
433
|
+
</div>
|
|
434
|
+
<div class="card-toggle">›</div>
|
|
435
|
+
</div>
|
|
436
|
+
<div class="card-body">
|
|
437
|
+
<div class="narrative">
|
|
438
|
+
<div class="narrative-step">
|
|
439
|
+
<div class="step-label">Problem</div>
|
|
440
|
+
<div class="step-text">A B2B SaaS startup had been offering "contact us for pricing" for 6 months, killing self-serve conversion. Pricing is one of the highest-leverage decisions a startup makes — most founders either copy competitors or anchor to their own willingness-to-pay as a developer.</div>
|
|
441
|
+
</div>
|
|
442
|
+
<div class="narrative-step">
|
|
443
|
+
<div class="step-label">What BeZa Can Build</div>
|
|
444
|
+
<div class="step-text">BeZa ran a pricing strategy sprint: analyzed 5 competitor pricing pages, mapped feature value to three buyer personas, applied van Westendorp's price sensitivity analysis to survey data from 18 existing users, and modeled three pricing structures against projected conversion rates and ARPU.</div>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="narrative-step">
|
|
447
|
+
<div class="step-label">Possible Outcome</div>
|
|
448
|
+
<div class="step-text">BeZa typically recommends a tiered structure like $29/seat/mo (individual), $79 flat/team (up to 10), $249/mo (enterprise) — anchored to actual buyer willingness-to-pay data. Companies that implement BeZa's pricing sprint can expect self-serve conversion to improve meaningfully, often delivering significant MRR growth within the first quarter.</div>
|
|
449
|
+
</div>
|
|
450
|
+
</div>
|
|
451
|
+
|
|
452
|
+
<div class="artifact-label">Live Artifact — Pricing Tier Comparison</div>
|
|
453
|
+
|
|
454
|
+
<div class="pricing-table-wrap">
|
|
455
|
+
<div class="pricing-cols">
|
|
456
|
+
<div class="pricing-col-head" style="text-align:left; padding-left:18px;">
|
|
457
|
+
<div class="pricing-col-name" style="text-align:left;">Feature</div>
|
|
458
|
+
</div>
|
|
459
|
+
<div class="pricing-col-head">
|
|
460
|
+
<div class="pricing-col-name">Starter</div>
|
|
461
|
+
<div class="pricing-col-price">$29<span>/seat/mo</span></div>
|
|
462
|
+
</div>
|
|
463
|
+
<div class="pricing-col-head featured">
|
|
464
|
+
<div class="pricing-col-name">Team</div>
|
|
465
|
+
<div class="pricing-col-price">$79<span>/mo</span></div>
|
|
466
|
+
<div class="pricing-popular-badge">Most popular</div>
|
|
467
|
+
</div>
|
|
468
|
+
<div class="pricing-col-head">
|
|
469
|
+
<div class="pricing-col-name">Enterprise</div>
|
|
470
|
+
<div class="pricing-col-price">$249<span>/mo</span></div>
|
|
471
|
+
</div>
|
|
472
|
+
</div>
|
|
473
|
+
|
|
474
|
+
<div class="pricing-feature-row">
|
|
475
|
+
<span class="pricing-feature-name">Core features</span>
|
|
476
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
477
|
+
<span class="pricing-feature-cell featured"><span class="check">✅</span></span>
|
|
478
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
479
|
+
</div>
|
|
480
|
+
<div class="pricing-feature-row">
|
|
481
|
+
<span class="pricing-feature-name">Unlimited projects</span>
|
|
482
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
483
|
+
<span class="pricing-feature-cell featured"><span class="check">✅</span></span>
|
|
484
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
485
|
+
</div>
|
|
486
|
+
<div class="pricing-feature-row">
|
|
487
|
+
<span class="pricing-feature-name">API access</span>
|
|
488
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
489
|
+
<span class="pricing-feature-cell featured"><span class="check">✅</span></span>
|
|
490
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
491
|
+
</div>
|
|
492
|
+
<div class="pricing-feature-row">
|
|
493
|
+
<span class="pricing-feature-name">Team workspace</span>
|
|
494
|
+
<span class="pricing-feature-cell"><span class="dash">—</span></span>
|
|
495
|
+
<span class="pricing-feature-cell featured"><span class="check">✅</span></span>
|
|
496
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
497
|
+
</div>
|
|
498
|
+
<div class="pricing-feature-row">
|
|
499
|
+
<span class="pricing-feature-name">Priority support</span>
|
|
500
|
+
<span class="pricing-feature-cell"><span class="dash">—</span></span>
|
|
501
|
+
<span class="pricing-feature-cell featured"><span class="check">✅</span></span>
|
|
502
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
503
|
+
</div>
|
|
504
|
+
<div class="pricing-feature-row">
|
|
505
|
+
<span class="pricing-feature-name">SSO / SAML</span>
|
|
506
|
+
<span class="pricing-feature-cell"><span class="dash">—</span></span>
|
|
507
|
+
<span class="pricing-feature-cell featured"><span class="dash">—</span></span>
|
|
508
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
509
|
+
</div>
|
|
510
|
+
<div class="pricing-feature-row">
|
|
511
|
+
<span class="pricing-feature-name">Audit logs</span>
|
|
512
|
+
<span class="pricing-feature-cell"><span class="dash">—</span></span>
|
|
513
|
+
<span class="pricing-feature-cell featured"><span class="dash">—</span></span>
|
|
514
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
515
|
+
</div>
|
|
516
|
+
<div class="pricing-feature-row">
|
|
517
|
+
<span class="pricing-feature-name">Custom contract</span>
|
|
518
|
+
<span class="pricing-feature-cell"><span class="dash">—</span></span>
|
|
519
|
+
<span class="pricing-feature-cell featured"><span class="dash">—</span></span>
|
|
520
|
+
<span class="pricing-feature-cell"><span class="check">✅</span></span>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
|
|
524
|
+
<div class="source-ref">
|
|
525
|
+
📎 Source: <a href="#">FRAIM · pricing-strategy-definition · fraim/ai-employee/jobs/pricing-strategy-definition.md</a>
|
|
526
|
+
</div>
|
|
527
|
+
</div>
|
|
528
|
+
</div>
|
|
529
|
+
|
|
530
|
+
<!-- Card 3: Business Plan Creation -->
|
|
531
|
+
<div class="card" id="card3">
|
|
532
|
+
<div class="card-header" onclick="toggleCard(3)">
|
|
533
|
+
<div class="card-icon" style="background:#e0f2fe;">📋</div>
|
|
534
|
+
<div class="card-meta">
|
|
535
|
+
<div class="card-tag" style="color:#0369a1;">Investor Readiness</div>
|
|
536
|
+
<div class="card-title">12-page business plan. $2M pre-seed closed.</div>
|
|
537
|
+
<div class="card-subtitle">FRAIM · business-plan-creation · fraim/ai-employee/jobs/</div>
|
|
538
|
+
</div>
|
|
539
|
+
<div class="card-toggle">›</div>
|
|
540
|
+
</div>
|
|
541
|
+
<div class="card-body">
|
|
542
|
+
<div class="narrative">
|
|
543
|
+
<div class="narrative-step">
|
|
544
|
+
<div class="step-label">Problem</div>
|
|
545
|
+
<div class="step-text">A technical co-founder had a working prototype and 50 beta users but had never written a business plan. Her first investor meeting was in 3 days. Investor meetings don't require a 40-page plan — they require a founder who can clearly answer: What is the problem? How big is it? Why now? Why you?</div>
|
|
546
|
+
</div>
|
|
547
|
+
<div class="narrative-step">
|
|
548
|
+
<div class="step-label">What BeZa Can Build</div>
|
|
549
|
+
<div class="step-text">BeZa structured the plan around the investor's mental model: executive summary, market analysis (TAM/SAM/SOM with bottom-up methodology), competitive positioning, go-to-market (ICP → outbound + PLG → land-and-expand), 18-month financial model (3 scenarios), and team section. Wrote all sections, built the financial model in a shareable format.</div>
|
|
550
|
+
</div>
|
|
551
|
+
<div class="narrative-step">
|
|
552
|
+
<div class="step-label">Possible Outcome</div>
|
|
553
|
+
<div class="step-text">A well-structured BeZa business plan can typically produce investor meetings that convert to term sheets — often at $2M pre-seed scale when the market sizing is grounded in bottom-up methodology. Investors often cite BeZa's clean TAM/SAM/SOM work as a differentiator versus the other decks they review.</div>
|
|
554
|
+
</div>
|
|
555
|
+
</div>
|
|
556
|
+
|
|
557
|
+
<div class="artifact-label">Live Artifact — Executive Summary Card</div>
|
|
558
|
+
|
|
559
|
+
<div class="bizplan-card">
|
|
560
|
+
<div class="bizplan-header">
|
|
561
|
+
<span class="bizplan-doc-title">Executive Summary — [Company] Pre-Seed Round</span>
|
|
562
|
+
<span class="bizplan-doc-label">Confidential · Prepared by BeZa</span>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="bizplan-body">
|
|
565
|
+
|
|
566
|
+
<div class="bizplan-field">
|
|
567
|
+
<span class="bizplan-field-label">Problem</span>
|
|
568
|
+
<span class="bizplan-field-value">Mid-market RevOps teams lose <strong>8 hrs/week</strong> to manual pipeline hygiene — chasing stale deals, copy-pasting between tools, and building spreadsheets no one trusts by Friday.</span>
|
|
569
|
+
</div>
|
|
570
|
+
|
|
571
|
+
<div class="bizplan-divider"></div>
|
|
572
|
+
|
|
573
|
+
<div class="bizplan-field">
|
|
574
|
+
<span class="bizplan-field-label">Solution</span>
|
|
575
|
+
<span class="bizplan-field-value">AI-powered pipeline co-pilot that identifies stale deals, enriches CRM data, and surfaces next-best-action — natively in Salesforce, zero workflow change.</span>
|
|
576
|
+
</div>
|
|
577
|
+
|
|
578
|
+
<div class="bizplan-divider"></div>
|
|
579
|
+
|
|
580
|
+
<div class="bizplan-field">
|
|
581
|
+
<span class="bizplan-field-label">Traction</span>
|
|
582
|
+
<span class="bizplan-field-value">
|
|
583
|
+
<div class="bizplan-traction-pills">
|
|
584
|
+
<span class="bizplan-pill">50 beta users</span>
|
|
585
|
+
<span class="bizplan-pill">$12K MRR</span>
|
|
586
|
+
<span class="bizplan-pill">0% churn</span>
|
|
587
|
+
<span class="bizplan-pill">NPS 71</span>
|
|
588
|
+
</div>
|
|
589
|
+
</span>
|
|
590
|
+
</div>
|
|
591
|
+
|
|
592
|
+
<div class="bizplan-divider"></div>
|
|
593
|
+
|
|
594
|
+
<div class="bizplan-field">
|
|
595
|
+
<span class="bizplan-field-label">The Ask</span>
|
|
596
|
+
<span class="bizplan-field-value"><strong>$2M</strong> to grow to $100K MRR by Q4 2026 · Hiring: 2 AEs, 1 ML engineer, 1 CS lead</span>
|
|
597
|
+
</div>
|
|
598
|
+
|
|
599
|
+
<div class="bizplan-divider"></div>
|
|
600
|
+
|
|
601
|
+
<div class="bizplan-field">
|
|
602
|
+
<span class="bizplan-field-label">Market</span>
|
|
603
|
+
<span class="bizplan-field-value">
|
|
604
|
+
<div class="bizplan-market-grid">
|
|
605
|
+
<div class="bizplan-market-item">
|
|
606
|
+
<div class="bizplan-market-val">$4.2B</div>
|
|
607
|
+
<div class="bizplan-market-label">TAM</div>
|
|
608
|
+
</div>
|
|
609
|
+
<div class="bizplan-market-item">
|
|
610
|
+
<div class="bizplan-market-val">$840M</div>
|
|
611
|
+
<div class="bizplan-market-label">SAM</div>
|
|
612
|
+
</div>
|
|
613
|
+
<div class="bizplan-market-item">
|
|
614
|
+
<div class="bizplan-market-val">$42M</div>
|
|
615
|
+
<div class="bizplan-market-label">SOM</div>
|
|
616
|
+
</div>
|
|
617
|
+
</div>
|
|
618
|
+
</span>
|
|
619
|
+
</div>
|
|
620
|
+
|
|
621
|
+
</div>
|
|
622
|
+
</div>
|
|
623
|
+
|
|
624
|
+
<div class="source-ref">
|
|
625
|
+
📎 Source: <a href="#">FRAIM · business-plan-creation · fraim/ai-employee/jobs/business-plan-creation.md</a>
|
|
626
|
+
</div>
|
|
627
|
+
</div>
|
|
628
|
+
</div>
|
|
629
|
+
|
|
630
|
+
</div>
|
|
631
|
+
|
|
632
|
+
<footer class="portfolio-footer">
|
|
633
|
+
<div class="footer-sub">
|
|
634
|
+
Part of the <a href="/">FRAIM</a> · 18 AI employees available ·
|
|
635
|
+
<a href="/">Back to FRAIM</a>
|
|
636
|
+
</div>
|
|
637
|
+
</footer>
|
|
638
|
+
|
|
639
|
+
<script>
|
|
640
|
+
function toggleTheme() {
|
|
641
|
+
const html = document.documentElement;
|
|
642
|
+
const isDark = html.getAttribute('data-theme') === 'dark';
|
|
643
|
+
html.setAttribute('data-theme', isDark ? 'light' : 'dark');
|
|
644
|
+
document.querySelector('.theme-btn').textContent = isDark ? '☾' : '☀';
|
|
645
|
+
}
|
|
646
|
+
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
647
|
+
document.documentElement.setAttribute('data-theme', 'dark');
|
|
648
|
+
document.querySelector('.theme-btn').textContent = '☀';
|
|
649
|
+
}
|
|
650
|
+
function toggleCard(num) {
|
|
651
|
+
const card = document.getElementById('card' + num);
|
|
652
|
+
const isOpen = card.classList.contains('open');
|
|
653
|
+
document.querySelectorAll('.card').forEach(c => c.classList.remove('open'));
|
|
654
|
+
if (!isOpen) { card.classList.add('open'); card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }
|
|
655
|
+
}
|
|
656
|
+
</script>
|
|
657
|
+
|
|
658
|
+
</body>
|
|
659
|
+
</html>
|