fraim-framework 2.0.52 → 2.0.55
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/registry/scripts/profile-server.js +2 -1
- package/dist/src/ai-manager/ai-manager.js +49 -1
- package/dist/src/ai-manager/phase-flow.js +68 -0
- package/dist/src/utils/digest-utils.js +18 -7
- package/dist/tests/test-debug-session.js +6 -2
- package/dist/tests/test-enhanced-session-init.js +6 -2
- package/dist/tests/test-mcp-lifecycle-methods.js +1 -2
- package/dist/tests/test-mcp-template-processing.js +6 -2
- package/dist/tests/test-modular-issue-tracking.js +6 -2
- package/dist/tests/test-node-compatibility.js +4 -2
- package/dist/tests/test-npm-install.js +4 -2
- package/dist/tests/test-productivity-integration.js +157 -0
- package/dist/tests/test-session-rehydration.js +1 -2
- package/dist/tests/test-telemetry.js +1 -2
- package/dist/tests/test-users-to-target-workflow.js +253 -0
- package/index.js +44 -55
- package/package.json +5 -5
- package/registry/agent-guardrails.md +62 -62
- package/registry/scripts/detect-tautological-tests.sh +38 -38
- package/registry/scripts/productivity/build-productivity-csv.mjs +242 -0
- package/registry/scripts/productivity/fetch-pr-details.mjs +144 -0
- package/registry/scripts/productivity/productivity-report.sh +147 -0
- package/registry/scripts/profile-server.ts +1 -1
- package/registry/scripts/validate-openapi-limits.ts +366 -366
- package/registry/scripts/validate-test-coverage.ts +280 -280
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-customer-profiling.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-survey-scoping.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-platform-discovery.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-survey-build-linkedin.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-prospect-qualification.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-survey-build-reddit.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-inventory-compilation.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-survey-build-x.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase5-survey-build-facebook.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase6-survey-build-custom.md +11 -0
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase7-survey-dispatch.md +11 -0
- package/registry/stubs/workflows/customer-development/templates/customer-persona-template.md +11 -0
- package/registry/stubs/workflows/customer-development/templates/search-strategy-template.md +11 -0
- package/registry/stubs/workflows/customer-development/user-survey-dispatch.md +11 -0
- package/registry/stubs/workflows/customer-development/users-to-target.md +11 -0
- package/registry/stubs/workflows/productivity-report/productivity-report.md +11 -0
- package/bin/fraim.js +0 -8
- package/dist/registry/ai-manager-rules/design-phases/design.md +0 -108
- package/dist/registry/ai-manager-rules/design-phases/finalize.md +0 -60
- package/dist/registry/ai-manager-rules/design-phases/validate.md +0 -125
- package/dist/registry/ai-manager-rules/design.json +0 -97
- package/dist/registry/ai-manager-rules/implement-phases/code.md +0 -323
- package/dist/registry/ai-manager-rules/implement-phases/completeness-review.md +0 -94
- package/dist/registry/ai-manager-rules/implement-phases/finalize.md +0 -177
- package/dist/registry/ai-manager-rules/implement-phases/quality-review.md +0 -304
- package/dist/registry/ai-manager-rules/implement-phases/regression.md +0 -159
- package/dist/registry/ai-manager-rules/implement-phases/repro.md +0 -101
- package/dist/registry/ai-manager-rules/implement-phases/scoping.md +0 -93
- package/dist/registry/ai-manager-rules/implement-phases/smoke.md +0 -225
- package/dist/registry/ai-manager-rules/implement-phases/spike.md +0 -118
- package/dist/registry/ai-manager-rules/implement-phases/validate.md +0 -347
- package/dist/registry/ai-manager-rules/implement.json +0 -153
- package/dist/registry/ai-manager-rules/shared-phases/finalize.md +0 -169
- package/dist/registry/ai-manager-rules/spec-phases/finalize.md +0 -60
- package/dist/registry/ai-manager-rules/spec-phases/spec.md +0 -102
- package/dist/registry/ai-manager-rules/spec-phases/validate.md +0 -118
- package/dist/registry/ai-manager-rules/spec.json +0 -112
- package/dist/registry/ai-manager-rules/test.json +0 -98
- package/dist/registry/scripts/build-scripts-generator.js +0 -205
- package/dist/registry/scripts/fraim-config.js +0 -61
- package/dist/registry/scripts/generic-issues-api.js +0 -100
- package/dist/registry/scripts/openapi-generator.js +0 -664
- package/dist/registry/scripts/performance/profile-server.js +0 -390
- package/dist/src/ai-manager/evidence-validator.js +0 -309
- package/dist/src/fraim/issue-tracking/ado-provider.js +0 -304
- package/dist/src/fraim/issue-tracking/factory.js +0 -63
- package/dist/src/fraim/issue-tracking/github-provider.js +0 -200
- package/dist/src/fraim/issue-tracking/types.js +0 -7
- package/dist/src/fraim/issue-tracking-config.js +0 -83
- package/dist/src/static-website-middleware.js +0 -75
- package/dist/test-utils.js +0 -96
- package/dist/tests/esm-compat.js +0 -11
- package/dist/tests/test-ai-manager-phase-protocol.js +0 -147
- package/dist/tests/test-ai-manager.js +0 -118
- package/dist/tests/test-chalk-esm-issue.js +0 -159
- package/dist/tests/test-chalk-real-world.js +0 -265
- package/dist/tests/test-chalk-regression.js +0 -377
- package/dist/tests/test-chalk-resolution-issue.js +0 -304
- package/dist/tests/test-evidence-validation.js +0 -221
- package/dist/tests/test-first-run-interactive.js +0 -1
- package/dist/tests/test-fraim-install-chalk-issue.js +0 -254
- package/dist/tests/test-markdown-to-pdf.js +0 -454
- package/dist/tests/test-npm-resolution-diagnostic.js +0 -140
- package/dist/tests/test-pr-review-integration.js +0 -1
- package/dist/website/.nojekyll +0 -0
- package/dist/website/404.html +0 -101
- package/dist/website/CNAME +0 -1
- package/dist/website/README.md +0 -22
- package/dist/website/demo.html +0 -604
- package/dist/website/images/.gitkeep +0 -1
- package/dist/website/images/fraim-logo.png +0 -0
- package/dist/website/index.html +0 -290
- package/dist/website/pricing.html +0 -414
- package/dist/website/script.js +0 -55
- package/dist/website/styles.css +0 -2647
package/dist/website/demo.html
DELETED
|
@@ -1,604 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>FRAIM Demo - See It In Action</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&display=swap" rel="stylesheet">
|
|
10
|
-
|
|
11
|
-
<!-- Favicon -->
|
|
12
|
-
<link rel="icon" type="image/png" sizes="32x32" href="images/fraim-logo.png">
|
|
13
|
-
<link rel="icon" type="image/png" sizes="16x16" href="images/fraim-logo.png">
|
|
14
|
-
<link rel="apple-touch-icon" sizes="180x180" href="images/fraim-logo.png">
|
|
15
|
-
<link rel="shortcut icon" href="images/fraim-logo.png">
|
|
16
|
-
|
|
17
|
-
<style>
|
|
18
|
-
:root {
|
|
19
|
-
/* Light mode colors */
|
|
20
|
-
--bg-primary: #ffffff;
|
|
21
|
-
--bg-secondary: #f8fafc;
|
|
22
|
-
--text-primary: #1a1a1a;
|
|
23
|
-
--text-secondary: #64748b;
|
|
24
|
-
--accent-primary: #3b82f6;
|
|
25
|
-
--accent-secondary: #8b5cf6;
|
|
26
|
-
--border-color: #e2e8f0;
|
|
27
|
-
--terminal-bg: #1e293b;
|
|
28
|
-
--terminal-text: #e2e8f0;
|
|
29
|
-
--success-color: #10b981;
|
|
30
|
-
--warning-color: #f59e0b;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
[data-theme="dark"] {
|
|
34
|
-
/* Dark mode colors */
|
|
35
|
-
--bg-primary: #0f172a;
|
|
36
|
-
--bg-secondary: #1e293b;
|
|
37
|
-
--text-primary: #f1f5f9;
|
|
38
|
-
--text-secondary: #94a3b8;
|
|
39
|
-
--accent-primary: #60a5fa;
|
|
40
|
-
--accent-secondary: #a78bfa;
|
|
41
|
-
--border-color: #334155;
|
|
42
|
-
--terminal-bg: #0f172a;
|
|
43
|
-
--terminal-text: #e2e8f0;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
* {
|
|
47
|
-
margin: 0;
|
|
48
|
-
padding: 0;
|
|
49
|
-
box-sizing: border-box;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
body {
|
|
53
|
-
font-family: 'Inter', sans-serif;
|
|
54
|
-
background: var(--bg-primary);
|
|
55
|
-
color: var(--text-primary);
|
|
56
|
-
line-height: 1.6;
|
|
57
|
-
transition: all 0.3s ease;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.container {
|
|
61
|
-
max-width: 1200px;
|
|
62
|
-
margin: 0 auto;
|
|
63
|
-
padding: 0 2rem;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/* Navigation */
|
|
67
|
-
.nav {
|
|
68
|
-
position: fixed;
|
|
69
|
-
top: 0;
|
|
70
|
-
width: 100%;
|
|
71
|
-
background: rgba(255, 255, 255, 0.95);
|
|
72
|
-
backdrop-filter: blur(10px);
|
|
73
|
-
border-bottom: 1px solid var(--border-color);
|
|
74
|
-
z-index: 1000;
|
|
75
|
-
transition: all 0.3s ease;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
[data-theme="dark"] .nav {
|
|
79
|
-
background: rgba(15, 23, 42, 0.95);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.nav-container {
|
|
83
|
-
display: flex;
|
|
84
|
-
justify-content: space-between;
|
|
85
|
-
align-items: center;
|
|
86
|
-
padding: 1rem 2rem;
|
|
87
|
-
max-width: 1200px;
|
|
88
|
-
margin: 0 auto;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.nav-brand {
|
|
92
|
-
font-size: 1.5rem;
|
|
93
|
-
font-weight: 700;
|
|
94
|
-
color: var(--accent-primary);
|
|
95
|
-
text-decoration: none;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.nav-links {
|
|
99
|
-
display: flex;
|
|
100
|
-
gap: 2rem;
|
|
101
|
-
align-items: center;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.nav-links a {
|
|
105
|
-
color: var(--text-primary);
|
|
106
|
-
text-decoration: none;
|
|
107
|
-
font-weight: 500;
|
|
108
|
-
transition: color 0.3s ease;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.nav-links a:hover {
|
|
112
|
-
color: var(--accent-primary);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.theme-toggle {
|
|
116
|
-
background: none;
|
|
117
|
-
border: 1px solid var(--border-color);
|
|
118
|
-
border-radius: 8px;
|
|
119
|
-
padding: 0.5rem;
|
|
120
|
-
cursor: pointer;
|
|
121
|
-
font-size: 1.2rem;
|
|
122
|
-
transition: all 0.3s ease;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.theme-toggle:hover {
|
|
126
|
-
background: var(--bg-secondary);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/* Hero Section */
|
|
130
|
-
.hero {
|
|
131
|
-
padding: 8rem 0 4rem;
|
|
132
|
-
text-align: center;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.hero h1 {
|
|
136
|
-
font-size: 3rem;
|
|
137
|
-
font-weight: 700;
|
|
138
|
-
margin-bottom: 1rem;
|
|
139
|
-
background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
|
|
140
|
-
-webkit-background-clip: text;
|
|
141
|
-
-webkit-text-fill-color: transparent;
|
|
142
|
-
background-clip: text;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.hero p {
|
|
146
|
-
font-size: 1.25rem;
|
|
147
|
-
color: var(--text-secondary);
|
|
148
|
-
margin-bottom: 2rem;
|
|
149
|
-
max-width: 600px;
|
|
150
|
-
margin-left: auto;
|
|
151
|
-
margin-right: auto;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/* Demo Section */
|
|
155
|
-
.demo-section {
|
|
156
|
-
padding: 4rem 0;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.demo-grid {
|
|
160
|
-
display: grid;
|
|
161
|
-
grid-template-columns: 1fr 1fr;
|
|
162
|
-
gap: 4rem;
|
|
163
|
-
align-items: start;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.demo-content h2 {
|
|
167
|
-
font-size: 2rem;
|
|
168
|
-
margin-bottom: 1rem;
|
|
169
|
-
color: var(--text-primary);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.demo-content p {
|
|
173
|
-
color: var(--text-secondary);
|
|
174
|
-
margin-bottom: 1.5rem;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
.demo-features {
|
|
178
|
-
list-style: none;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
.demo-features li {
|
|
182
|
-
padding: 0.5rem 0;
|
|
183
|
-
color: var(--text-secondary);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.demo-features li::before {
|
|
187
|
-
content: "✓";
|
|
188
|
-
color: var(--success-color);
|
|
189
|
-
font-weight: bold;
|
|
190
|
-
margin-right: 0.5rem;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/* Terminal Demo */
|
|
194
|
-
.terminal-demo {
|
|
195
|
-
background: var(--terminal-bg);
|
|
196
|
-
border-radius: 12px;
|
|
197
|
-
overflow: hidden;
|
|
198
|
-
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
|
199
|
-
border: 1px solid var(--border-color);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.terminal-header {
|
|
203
|
-
background: #374151;
|
|
204
|
-
padding: 1rem;
|
|
205
|
-
display: flex;
|
|
206
|
-
align-items: center;
|
|
207
|
-
gap: 0.5rem;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.terminal-controls {
|
|
211
|
-
display: flex;
|
|
212
|
-
gap: 0.5rem;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.control {
|
|
216
|
-
width: 12px;
|
|
217
|
-
height: 12px;
|
|
218
|
-
border-radius: 50%;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
.control.red { background: #ef4444; }
|
|
222
|
-
.control.yellow { background: #f59e0b; }
|
|
223
|
-
.control.green { background: #10b981; }
|
|
224
|
-
|
|
225
|
-
.terminal-title {
|
|
226
|
-
color: var(--terminal-text);
|
|
227
|
-
font-size: 0.875rem;
|
|
228
|
-
margin-left: 1rem;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.terminal-body {
|
|
232
|
-
padding: 1.5rem;
|
|
233
|
-
font-family: 'Monaco', 'Menlo', monospace;
|
|
234
|
-
font-size: 0.875rem;
|
|
235
|
-
line-height: 1.6;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
.terminal-line {
|
|
239
|
-
margin-bottom: 0.5rem;
|
|
240
|
-
color: var(--terminal-text);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.prompt {
|
|
244
|
-
color: var(--success-color);
|
|
245
|
-
margin-right: 0.5rem;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.command {
|
|
249
|
-
color: #60a5fa;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.output {
|
|
253
|
-
color: var(--terminal-text);
|
|
254
|
-
opacity: 0.8;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
.success {
|
|
258
|
-
color: var(--success-color);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
.warning {
|
|
262
|
-
color: var(--warning-color);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.cursor {
|
|
266
|
-
animation: blink 1s infinite;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
@keyframes blink {
|
|
270
|
-
0%, 50% { opacity: 1; }
|
|
271
|
-
51%, 100% { opacity: 0; }
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/* Workflow Steps */
|
|
275
|
-
.workflow-steps {
|
|
276
|
-
padding: 4rem 0;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.workflow-steps h2 {
|
|
280
|
-
text-align: center;
|
|
281
|
-
font-size: 2rem;
|
|
282
|
-
margin-bottom: 3rem;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.steps-grid {
|
|
286
|
-
display: grid;
|
|
287
|
-
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
288
|
-
gap: 2rem;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
.step-card {
|
|
292
|
-
background: var(--bg-secondary);
|
|
293
|
-
padding: 2rem;
|
|
294
|
-
border-radius: 12px;
|
|
295
|
-
border: 1px solid var(--border-color);
|
|
296
|
-
transition: transform 0.3s ease;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
.step-card:hover {
|
|
300
|
-
transform: translateY(-4px);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
.step-number {
|
|
304
|
-
background: var(--accent-primary);
|
|
305
|
-
color: white;
|
|
306
|
-
width: 40px;
|
|
307
|
-
height: 40px;
|
|
308
|
-
border-radius: 50%;
|
|
309
|
-
display: flex;
|
|
310
|
-
align-items: center;
|
|
311
|
-
justify-content: center;
|
|
312
|
-
font-weight: bold;
|
|
313
|
-
margin-bottom: 1rem;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
.step-card h3 {
|
|
317
|
-
font-size: 1.25rem;
|
|
318
|
-
margin-bottom: 1rem;
|
|
319
|
-
color: var(--text-primary);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
.step-card p {
|
|
323
|
-
color: var(--text-secondary);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/* CTA Section */
|
|
327
|
-
.cta {
|
|
328
|
-
background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
|
|
329
|
-
color: white;
|
|
330
|
-
padding: 4rem 0;
|
|
331
|
-
text-align: center;
|
|
332
|
-
margin: 4rem 0;
|
|
333
|
-
border-radius: 12px;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
.cta h2 {
|
|
337
|
-
font-size: 2rem;
|
|
338
|
-
margin-bottom: 1rem;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
.cta p {
|
|
342
|
-
font-size: 1.125rem;
|
|
343
|
-
margin-bottom: 2rem;
|
|
344
|
-
opacity: 0.9;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
.btn {
|
|
348
|
-
display: inline-block;
|
|
349
|
-
padding: 1rem 2rem;
|
|
350
|
-
background: white;
|
|
351
|
-
color: var(--accent-primary);
|
|
352
|
-
text-decoration: none;
|
|
353
|
-
border-radius: 8px;
|
|
354
|
-
font-weight: 600;
|
|
355
|
-
transition: all 0.3s ease;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
.btn:hover {
|
|
359
|
-
transform: translateY(-2px);
|
|
360
|
-
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/* Responsive */
|
|
364
|
-
@media (max-width: 768px) {
|
|
365
|
-
.demo-grid {
|
|
366
|
-
grid-template-columns: 1fr;
|
|
367
|
-
gap: 2rem;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
.hero h1 {
|
|
371
|
-
font-size: 2rem;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
.nav-links {
|
|
375
|
-
gap: 1rem;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
.container {
|
|
379
|
-
padding: 0 1rem;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
</style>
|
|
383
|
-
</head>
|
|
384
|
-
<body>
|
|
385
|
-
<!-- Navigation -->
|
|
386
|
-
<nav class="nav">
|
|
387
|
-
<div class="nav-container">
|
|
388
|
-
<a href="index.html" class="nav-brand">FRAIM</a>
|
|
389
|
-
<div class="nav-links">
|
|
390
|
-
<a href="index.html">Home</a>
|
|
391
|
-
<a href="index.html#features">Features</a>
|
|
392
|
-
<a href="pricing.html">Pricing</a>
|
|
393
|
-
<button class="theme-toggle" id="theme-toggle" aria-label="Toggle theme">
|
|
394
|
-
<span class="theme-icon">🌙</span>
|
|
395
|
-
</button>
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</nav>
|
|
399
|
-
|
|
400
|
-
<!-- Hero Section -->
|
|
401
|
-
<section class="hero">
|
|
402
|
-
<div class="container">
|
|
403
|
-
<h1>See FRAIM in Action</h1>
|
|
404
|
-
<p>Watch how FRAIM transforms chaotic AI coding into structured, production-ready development workflows.</p>
|
|
405
|
-
</div>
|
|
406
|
-
</section>
|
|
407
|
-
|
|
408
|
-
<!-- Demo Section -->
|
|
409
|
-
<section class="demo-section">
|
|
410
|
-
<div class="container">
|
|
411
|
-
<div class="demo-grid">
|
|
412
|
-
<div class="demo-content">
|
|
413
|
-
<h2>From Idea to Production</h2>
|
|
414
|
-
<p>FRAIM guides AI agents through a structured development process, ensuring consistent quality and reducing rework cycles.</p>
|
|
415
|
-
|
|
416
|
-
<ul class="demo-features">
|
|
417
|
-
<li>Automated specification generation</li>
|
|
418
|
-
<li>Architecture design validation</li>
|
|
419
|
-
<li>Implementation with quality gates</li>
|
|
420
|
-
<li>Comprehensive testing coverage</li>
|
|
421
|
-
<li>Production deployment readiness</li>
|
|
422
|
-
</ul>
|
|
423
|
-
</div>
|
|
424
|
-
|
|
425
|
-
<div class="terminal-demo">
|
|
426
|
-
<div class="terminal-header">
|
|
427
|
-
<div class="terminal-controls">
|
|
428
|
-
<span class="control red"></span>
|
|
429
|
-
<span class="control yellow"></span>
|
|
430
|
-
<span class="control green"></span>
|
|
431
|
-
</div>
|
|
432
|
-
<span class="terminal-title">FRAIM Terminal Demo</span>
|
|
433
|
-
</div>
|
|
434
|
-
<div class="terminal-body" id="terminal-content">
|
|
435
|
-
<div class="terminal-line">
|
|
436
|
-
<span class="prompt">$</span>
|
|
437
|
-
<span class="command">fraim spec "user authentication system"</span>
|
|
438
|
-
</div>
|
|
439
|
-
<div class="terminal-line output">
|
|
440
|
-
<span class="success">✓ Analyzing requirements...</span>
|
|
441
|
-
</div>
|
|
442
|
-
<div class="terminal-line output">
|
|
443
|
-
<span class="success">✓ Generating user stories...</span>
|
|
444
|
-
</div>
|
|
445
|
-
<div class="terminal-line output">
|
|
446
|
-
<span class="success">✓ Creating acceptance criteria...</span>
|
|
447
|
-
</div>
|
|
448
|
-
<div class="terminal-line output">
|
|
449
|
-
<span class="success">✓ Specification complete</span>
|
|
450
|
-
</div>
|
|
451
|
-
<div class="terminal-line">
|
|
452
|
-
<span class="prompt">$</span>
|
|
453
|
-
<span class="command">fraim design --spec auth-spec.md</span>
|
|
454
|
-
</div>
|
|
455
|
-
<div class="terminal-line output">
|
|
456
|
-
<span class="success">✓ Architecture analysis...</span>
|
|
457
|
-
</div>
|
|
458
|
-
<div class="terminal-line output">
|
|
459
|
-
<span class="success">✓ Security review...</span>
|
|
460
|
-
</div>
|
|
461
|
-
<div class="terminal-line output">
|
|
462
|
-
<span class="success">✓ Design document generated</span>
|
|
463
|
-
</div>
|
|
464
|
-
<div class="terminal-line">
|
|
465
|
-
<span class="prompt">$</span>
|
|
466
|
-
<span class="command">fraim implement --design auth-design.md</span>
|
|
467
|
-
</div>
|
|
468
|
-
<div class="terminal-line output">
|
|
469
|
-
<span class="success">✓ Code generation...</span>
|
|
470
|
-
</div>
|
|
471
|
-
<div class="terminal-line output">
|
|
472
|
-
<span class="success">✓ Test creation...</span>
|
|
473
|
-
</div>
|
|
474
|
-
<div class="terminal-line output">
|
|
475
|
-
<span class="success">✓ Quality gates passed</span>
|
|
476
|
-
</div>
|
|
477
|
-
<div class="terminal-line output">
|
|
478
|
-
<span class="success">✓ Implementation complete</span>
|
|
479
|
-
</div>
|
|
480
|
-
<div class="terminal-line">
|
|
481
|
-
<span class="prompt">$</span>
|
|
482
|
-
<span class="cursor">_</span>
|
|
483
|
-
</div>
|
|
484
|
-
</div>
|
|
485
|
-
</div>
|
|
486
|
-
</div>
|
|
487
|
-
</div>
|
|
488
|
-
</section>
|
|
489
|
-
|
|
490
|
-
<!-- Workflow Steps -->
|
|
491
|
-
<section class="workflow-steps">
|
|
492
|
-
<div class="container">
|
|
493
|
-
<h2>FRAIM Workflow Process</h2>
|
|
494
|
-
<div class="steps-grid">
|
|
495
|
-
<div class="step-card">
|
|
496
|
-
<div class="step-number">1</div>
|
|
497
|
-
<h3>Specification</h3>
|
|
498
|
-
<p>AI agents analyze requirements and generate comprehensive specifications with user stories, acceptance criteria, and validation rules.</p>
|
|
499
|
-
</div>
|
|
500
|
-
|
|
501
|
-
<div class="step-card">
|
|
502
|
-
<div class="step-number">2</div>
|
|
503
|
-
<h3>Design</h3>
|
|
504
|
-
<p>Architecture and design documents are created with security reviews, performance considerations, and implementation guidelines.</p>
|
|
505
|
-
</div>
|
|
506
|
-
|
|
507
|
-
<div class="step-card">
|
|
508
|
-
<div class="step-number">3</div>
|
|
509
|
-
<h3>Implementation</h3>
|
|
510
|
-
<p>Code is generated following best practices with comprehensive testing, documentation, and quality gate validation.</p>
|
|
511
|
-
</div>
|
|
512
|
-
|
|
513
|
-
<div class="step-card">
|
|
514
|
-
<div class="step-number">4</div>
|
|
515
|
-
<h3>Testing</h3>
|
|
516
|
-
<p>Automated test suites ensure code quality, performance benchmarks, and security compliance before deployment.</p>
|
|
517
|
-
</div>
|
|
518
|
-
|
|
519
|
-
<div class="step-card">
|
|
520
|
-
<div class="step-number">5</div>
|
|
521
|
-
<h3>Deployment</h3>
|
|
522
|
-
<p>Production-ready deployment with monitoring, rollback procedures, and performance tracking in place.</p>
|
|
523
|
-
</div>
|
|
524
|
-
|
|
525
|
-
<div class="step-card">
|
|
526
|
-
<div class="step-number">6</div>
|
|
527
|
-
<h3>Retrospective</h3>
|
|
528
|
-
<p>Continuous improvement through feedback analysis, workflow optimization, and knowledge base updates.</p>
|
|
529
|
-
</div>
|
|
530
|
-
</div>
|
|
531
|
-
</div>
|
|
532
|
-
</section>
|
|
533
|
-
|
|
534
|
-
<!-- CTA Section -->
|
|
535
|
-
<section class="cta">
|
|
536
|
-
<div class="container">
|
|
537
|
-
<h2>Ready to Transform Your Development Process?</h2>
|
|
538
|
-
<p>Start using FRAIM today and experience the power of structured AI management.</p>
|
|
539
|
-
<a href="https://github.com/mathursrus/FRAIM" class="btn">Get Started Free</a>
|
|
540
|
-
</div>
|
|
541
|
-
</section>
|
|
542
|
-
|
|
543
|
-
<script>
|
|
544
|
-
// Theme toggle functionality
|
|
545
|
-
const themeToggle = document.getElementById('theme-toggle');
|
|
546
|
-
const themeIcon = document.querySelector('.theme-icon');
|
|
547
|
-
|
|
548
|
-
// Check for saved theme preference or default to light mode
|
|
549
|
-
const currentTheme = localStorage.getItem('theme') || 'light';
|
|
550
|
-
document.documentElement.setAttribute('data-theme', currentTheme);
|
|
551
|
-
|
|
552
|
-
// Update icon based on current theme
|
|
553
|
-
themeIcon.textContent = currentTheme === 'dark' ? '☀️' : '🌙';
|
|
554
|
-
|
|
555
|
-
themeToggle.addEventListener('click', () => {
|
|
556
|
-
const currentTheme = document.documentElement.getAttribute('data-theme');
|
|
557
|
-
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
|
558
|
-
|
|
559
|
-
document.documentElement.setAttribute('data-theme', newTheme);
|
|
560
|
-
localStorage.setItem('theme', newTheme);
|
|
561
|
-
|
|
562
|
-
// Update icon
|
|
563
|
-
themeIcon.textContent = newTheme === 'dark' ? '☀️' : '🌙';
|
|
564
|
-
});
|
|
565
|
-
|
|
566
|
-
// Terminal animation
|
|
567
|
-
function animateTerminal() {
|
|
568
|
-
const terminal = document.getElementById('terminal-content');
|
|
569
|
-
const lines = terminal.querySelectorAll('.terminal-line');
|
|
570
|
-
|
|
571
|
-
// Hide all lines initially
|
|
572
|
-
lines.forEach(line => {
|
|
573
|
-
line.style.opacity = '0';
|
|
574
|
-
line.style.transform = 'translateY(10px)';
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
// Animate lines one by one
|
|
578
|
-
lines.forEach((line, index) => {
|
|
579
|
-
setTimeout(() => {
|
|
580
|
-
line.style.transition = 'all 0.5s ease';
|
|
581
|
-
line.style.opacity = '1';
|
|
582
|
-
line.style.transform = 'translateY(0)';
|
|
583
|
-
}, index * 800);
|
|
584
|
-
});
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
// Start animation when page loads
|
|
588
|
-
window.addEventListener('load', () => {
|
|
589
|
-
setTimeout(animateTerminal, 1000);
|
|
590
|
-
});
|
|
591
|
-
|
|
592
|
-
// Restart animation on scroll into view
|
|
593
|
-
const observer = new IntersectionObserver((entries) => {
|
|
594
|
-
entries.forEach(entry => {
|
|
595
|
-
if (entry.isIntersecting) {
|
|
596
|
-
setTimeout(animateTerminal, 500);
|
|
597
|
-
}
|
|
598
|
-
});
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
observer.observe(document.querySelector('.terminal-demo'));
|
|
602
|
-
</script>
|
|
603
|
-
</body>
|
|
604
|
-
</html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# Images directory for FRAIM logo and assets
|
|
Binary file
|