create-qa-architect 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.editorconfig +12 -0
  2. package/.github/CLAUDE_MD_AUTOMATION.md +248 -0
  3. package/.github/PROGRESSIVE_QUALITY_IMPLEMENTATION.md +408 -0
  4. package/.github/PROGRESSIVE_QUALITY_PROPOSAL.md +443 -0
  5. package/.github/RELEASE_CHECKLIST.md +100 -0
  6. package/.github/dependabot.yml +50 -0
  7. package/.github/git-sync.sh +48 -0
  8. package/.github/workflows/claude-md-validation.yml +82 -0
  9. package/.github/workflows/nightly-gitleaks-verification.yml +176 -0
  10. package/.github/workflows/pnpm-ci.yml.example +53 -0
  11. package/.github/workflows/python-ci.yml.example +69 -0
  12. package/.github/workflows/quality-legacy.yml.backup +165 -0
  13. package/.github/workflows/quality-progressive.yml.example +291 -0
  14. package/.github/workflows/quality.yml +436 -0
  15. package/.github/workflows/release.yml +53 -0
  16. package/.nvmrc +1 -0
  17. package/.prettierignore +14 -0
  18. package/.prettierrc +9 -0
  19. package/.stylelintrc.json +5 -0
  20. package/README.md +212 -0
  21. package/config/.lighthouserc.js +45 -0
  22. package/config/.pre-commit-config.yaml +66 -0
  23. package/config/constants.js +128 -0
  24. package/config/defaults.js +124 -0
  25. package/config/pyproject.toml +124 -0
  26. package/config/quality-config.schema.json +97 -0
  27. package/config/quality-python.yml +89 -0
  28. package/config/requirements-dev.txt +15 -0
  29. package/create-saas-monetization.js +1465 -0
  30. package/eslint.config.cjs +117 -0
  31. package/eslint.config.ts.cjs +99 -0
  32. package/legal/README.md +106 -0
  33. package/legal/copyright.md +76 -0
  34. package/legal/disclaimer.md +146 -0
  35. package/legal/privacy-policy.html +324 -0
  36. package/legal/privacy-policy.md +196 -0
  37. package/legal/terms-of-service.md +224 -0
  38. package/lib/billing-dashboard.html +645 -0
  39. package/lib/config-validator.js +163 -0
  40. package/lib/dependency-monitoring-basic.js +185 -0
  41. package/lib/dependency-monitoring-premium.js +1490 -0
  42. package/lib/error-reporter.js +444 -0
  43. package/lib/interactive/prompt.js +128 -0
  44. package/lib/interactive/questions.js +146 -0
  45. package/lib/license-validator.js +403 -0
  46. package/lib/licensing.js +989 -0
  47. package/lib/package-utils.js +187 -0
  48. package/lib/project-maturity.js +516 -0
  49. package/lib/security-enhancements.js +340 -0
  50. package/lib/setup-enhancements.js +317 -0
  51. package/lib/smart-strategy-generator.js +344 -0
  52. package/lib/telemetry.js +323 -0
  53. package/lib/template-loader.js +252 -0
  54. package/lib/typescript-config-generator.js +210 -0
  55. package/lib/ui-helpers.js +74 -0
  56. package/lib/validation/base-validator.js +174 -0
  57. package/lib/validation/cache-manager.js +158 -0
  58. package/lib/validation/config-security.js +741 -0
  59. package/lib/validation/documentation.js +326 -0
  60. package/lib/validation/index.js +186 -0
  61. package/lib/validation/validation-factory.js +153 -0
  62. package/lib/validation/workflow-validation.js +172 -0
  63. package/lib/yaml-utils.js +120 -0
  64. package/marketing/beta-user-email-campaign.md +372 -0
  65. package/marketing/landing-page.html +721 -0
  66. package/package.json +165 -0
  67. package/setup.js +2076 -0
@@ -0,0 +1,721 @@
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>Create Quality Automation - Ship Faster with Confidence</title>
7
+ <meta
8
+ name="description"
9
+ content="Automated quality gates for modern development. ESLint, Prettier, security scanning, smart test strategy. 70% faster pre-push validation."
10
+ />
11
+
12
+ <!-- Open Graph -->
13
+ <meta property="og:title" content="Create Quality Automation" />
14
+ <meta
15
+ property="og:description"
16
+ content="Ship faster with confidence. Automated quality gates, security scanning, and 70% faster pre-push validation."
17
+ />
18
+ <meta property="og:url" content="https://vibebuildlab.com/cqa" />
19
+ <meta property="og:type" content="website" />
20
+
21
+ <!-- Stripe -->
22
+ <script src="https://js.stripe.com/v3/"></script>
23
+
24
+ <style>
25
+ :root {
26
+ --primary: #6366f1;
27
+ --primary-dark: #4f46e5;
28
+ --success: #10b981;
29
+ --warning: #f59e0b;
30
+ --bg: #0f172a;
31
+ --bg-card: #1e293b;
32
+ --text: #f8fafc;
33
+ --text-muted: #94a3b8;
34
+ --border: #334155;
35
+ }
36
+
37
+ * {
38
+ box-sizing: border-box;
39
+ margin: 0;
40
+ padding: 0;
41
+ }
42
+
43
+ body {
44
+ font-family:
45
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
46
+ background: var(--bg);
47
+ color: var(--text);
48
+ line-height: 1.6;
49
+ }
50
+
51
+ .container {
52
+ max-width: 1200px;
53
+ margin: 0 auto;
54
+ padding: 0 24px;
55
+ }
56
+
57
+ /* Hero */
58
+ .hero {
59
+ padding: 80px 0;
60
+ text-align: center;
61
+ background: linear-gradient(135deg, var(--bg) 0%, #1e1b4b 100%);
62
+ }
63
+
64
+ .hero h1 {
65
+ font-size: 3.5rem;
66
+ font-weight: 800;
67
+ margin-bottom: 24px;
68
+ background: linear-gradient(135deg, #fff 0%, #a5b4fc 100%);
69
+ -webkit-background-clip: text;
70
+ -webkit-text-fill-color: transparent;
71
+ }
72
+
73
+ .hero p {
74
+ font-size: 1.25rem;
75
+ color: var(--text-muted);
76
+ max-width: 600px;
77
+ margin: 0 auto 32px;
78
+ }
79
+
80
+ .hero-cta {
81
+ display: flex;
82
+ gap: 16px;
83
+ justify-content: center;
84
+ flex-wrap: wrap;
85
+ }
86
+
87
+ .btn {
88
+ padding: 16px 32px;
89
+ border-radius: 8px;
90
+ font-size: 1rem;
91
+ font-weight: 600;
92
+ text-decoration: none;
93
+ transition: all 0.2s;
94
+ cursor: pointer;
95
+ border: none;
96
+ }
97
+
98
+ .btn-primary {
99
+ background: var(--primary);
100
+ color: white;
101
+ }
102
+
103
+ .btn-primary:hover {
104
+ background: var(--primary-dark);
105
+ transform: translateY(-2px);
106
+ }
107
+
108
+ .btn-outline {
109
+ background: transparent;
110
+ color: var(--text);
111
+ border: 2px solid var(--border);
112
+ }
113
+
114
+ .btn-outline:hover {
115
+ border-color: var(--primary);
116
+ }
117
+
118
+ .quick-start {
119
+ margin-top: 40px;
120
+ padding: 16px 24px;
121
+ background: var(--bg-card);
122
+ border-radius: 8px;
123
+ display: inline-block;
124
+ font-family: monospace;
125
+ font-size: 1.1rem;
126
+ }
127
+
128
+ .quick-start code {
129
+ color: var(--success);
130
+ }
131
+
132
+ /* Stats */
133
+ .stats {
134
+ display: grid;
135
+ grid-template-columns: repeat(4, 1fr);
136
+ gap: 24px;
137
+ padding: 60px 0;
138
+ border-bottom: 1px solid var(--border);
139
+ }
140
+
141
+ .stat {
142
+ text-align: center;
143
+ }
144
+
145
+ .stat-value {
146
+ font-size: 2.5rem;
147
+ font-weight: 700;
148
+ color: var(--primary);
149
+ }
150
+
151
+ .stat-label {
152
+ color: var(--text-muted);
153
+ font-size: 0.9rem;
154
+ }
155
+
156
+ /* Features */
157
+ .features {
158
+ padding: 80px 0;
159
+ }
160
+
161
+ .section-title {
162
+ text-align: center;
163
+ font-size: 2rem;
164
+ margin-bottom: 48px;
165
+ }
166
+
167
+ .features-grid {
168
+ display: grid;
169
+ grid-template-columns: repeat(3, 1fr);
170
+ gap: 24px;
171
+ }
172
+
173
+ .feature-card {
174
+ background: var(--bg-card);
175
+ border-radius: 12px;
176
+ padding: 32px;
177
+ border: 1px solid var(--border);
178
+ }
179
+
180
+ .feature-icon {
181
+ font-size: 2rem;
182
+ margin-bottom: 16px;
183
+ }
184
+
185
+ .feature-card h3 {
186
+ font-size: 1.25rem;
187
+ margin-bottom: 12px;
188
+ }
189
+
190
+ .feature-card p {
191
+ color: var(--text-muted);
192
+ font-size: 0.95rem;
193
+ }
194
+
195
+ /* Pricing */
196
+ .pricing {
197
+ padding: 80px 0;
198
+ background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg) 100%);
199
+ }
200
+
201
+ .pricing-grid {
202
+ display: grid;
203
+ grid-template-columns: repeat(4, 1fr);
204
+ gap: 24px;
205
+ }
206
+
207
+ .pricing-card {
208
+ background: var(--bg);
209
+ border-radius: 16px;
210
+ padding: 32px;
211
+ border: 1px solid var(--border);
212
+ position: relative;
213
+ }
214
+
215
+ .pricing-card.popular {
216
+ border-color: var(--primary);
217
+ transform: scale(1.05);
218
+ }
219
+
220
+ .popular-badge {
221
+ position: absolute;
222
+ top: -12px;
223
+ left: 50%;
224
+ transform: translateX(-50%);
225
+ background: var(--primary);
226
+ color: white;
227
+ padding: 4px 16px;
228
+ border-radius: 20px;
229
+ font-size: 0.8rem;
230
+ font-weight: 600;
231
+ }
232
+
233
+ .pricing-tier {
234
+ font-size: 1.1rem;
235
+ color: var(--text-muted);
236
+ margin-bottom: 8px;
237
+ }
238
+
239
+ .pricing-price {
240
+ font-size: 2.5rem;
241
+ font-weight: 700;
242
+ margin-bottom: 8px;
243
+ }
244
+
245
+ .pricing-price span {
246
+ font-size: 1rem;
247
+ color: var(--text-muted);
248
+ font-weight: 400;
249
+ }
250
+
251
+ .pricing-desc {
252
+ color: var(--text-muted);
253
+ font-size: 0.9rem;
254
+ margin-bottom: 24px;
255
+ min-height: 40px;
256
+ }
257
+
258
+ .pricing-features {
259
+ list-style: none;
260
+ margin-bottom: 32px;
261
+ }
262
+
263
+ .pricing-features li {
264
+ padding: 8px 0;
265
+ font-size: 0.9rem;
266
+ display: flex;
267
+ align-items: flex-start;
268
+ gap: 8px;
269
+ }
270
+
271
+ .pricing-features li::before {
272
+ content: '✓';
273
+ color: var(--success);
274
+ font-weight: bold;
275
+ }
276
+
277
+ .pricing-features li.limited::before {
278
+ content: '⚠';
279
+ color: var(--warning);
280
+ }
281
+
282
+ .pricing-features li.no::before {
283
+ content: '✗';
284
+ color: #ef4444;
285
+ }
286
+
287
+ .pricing-card .btn {
288
+ width: 100%;
289
+ text-align: center;
290
+ }
291
+
292
+ /* Comparison */
293
+ .comparison {
294
+ padding: 80px 0;
295
+ }
296
+
297
+ .comparison-table {
298
+ width: 100%;
299
+ border-collapse: collapse;
300
+ background: var(--bg-card);
301
+ border-radius: 12px;
302
+ overflow: hidden;
303
+ }
304
+
305
+ .comparison-table th,
306
+ .comparison-table td {
307
+ padding: 16px;
308
+ text-align: left;
309
+ border-bottom: 1px solid var(--border);
310
+ }
311
+
312
+ .comparison-table th {
313
+ background: var(--bg);
314
+ font-weight: 600;
315
+ }
316
+
317
+ .comparison-table td:not(:first-child) {
318
+ text-align: center;
319
+ }
320
+
321
+ /* CTA */
322
+ .cta {
323
+ padding: 80px 0;
324
+ text-align: center;
325
+ background: linear-gradient(135deg, #4f46e5 0%, #6366f1 100%);
326
+ }
327
+
328
+ .cta h2 {
329
+ font-size: 2.5rem;
330
+ margin-bottom: 16px;
331
+ }
332
+
333
+ .cta p {
334
+ font-size: 1.1rem;
335
+ opacity: 0.9;
336
+ margin-bottom: 32px;
337
+ }
338
+
339
+ /* Footer */
340
+ footer {
341
+ padding: 40px 0;
342
+ text-align: center;
343
+ color: var(--text-muted);
344
+ font-size: 0.9rem;
345
+ }
346
+
347
+ footer a {
348
+ color: var(--text-muted);
349
+ text-decoration: none;
350
+ }
351
+
352
+ footer a:hover {
353
+ color: var(--primary);
354
+ }
355
+
356
+ /* Responsive */
357
+ @media (max-width: 1024px) {
358
+ .pricing-grid {
359
+ grid-template-columns: repeat(2, 1fr);
360
+ }
361
+ .features-grid {
362
+ grid-template-columns: repeat(2, 1fr);
363
+ }
364
+ .stats {
365
+ grid-template-columns: repeat(2, 1fr);
366
+ }
367
+ }
368
+
369
+ @media (max-width: 640px) {
370
+ .hero h1 {
371
+ font-size: 2rem;
372
+ }
373
+ .pricing-grid {
374
+ grid-template-columns: 1fr;
375
+ }
376
+ .pricing-card.popular {
377
+ transform: none;
378
+ }
379
+ .features-grid {
380
+ grid-template-columns: 1fr;
381
+ }
382
+ .stats {
383
+ grid-template-columns: 1fr;
384
+ }
385
+ }
386
+ </style>
387
+ </head>
388
+ <body>
389
+ <!-- Hero -->
390
+ <section class="hero">
391
+ <div class="container">
392
+ <h1>Ship Faster with Confidence</h1>
393
+ <p>
394
+ Automated quality gates for modern development. One command sets up
395
+ ESLint, Prettier, security scanning, and smart test strategy.
396
+ </p>
397
+ <div class="hero-cta">
398
+ <a href="#pricing" class="btn btn-primary">Start 14-Day Free Trial</a>
399
+ <a
400
+ href="https://github.com/brettstark73/create-qa-architect"
401
+ class="btn btn-outline"
402
+ >View on GitHub</a
403
+ >
404
+ </div>
405
+ <div class="quick-start">
406
+ <code>npx create-qa-architect@latest</code>
407
+ </div>
408
+ </div>
409
+ </section>
410
+
411
+ <!-- Stats -->
412
+ <section class="container">
413
+ <div class="stats">
414
+ <div class="stat">
415
+ <div class="stat-value">70%</div>
416
+ <div class="stat-label">Faster pre-push validation</div>
417
+ </div>
418
+ <div class="stat">
419
+ <div class="stat-value">142</div>
420
+ <div class="stat-label">Tests passing</div>
421
+ </div>
422
+ <div class="stat">
423
+ <div class="stat-value">1.9k+</div>
424
+ <div class="stat-label">npm downloads/month</div>
425
+ </div>
426
+ <div class="stat">
427
+ <div class="stat-value">0</div>
428
+ <div class="stat-label">Security vulnerabilities</div>
429
+ </div>
430
+ </div>
431
+ </section>
432
+
433
+ <!-- Features -->
434
+ <section class="features">
435
+ <div class="container">
436
+ <h2 class="section-title">Everything You Need for Quality Code</h2>
437
+ <div class="features-grid">
438
+ <div class="feature-card">
439
+ <div class="feature-icon">⚡</div>
440
+ <h3>Smart Test Strategy</h3>
441
+ <p>
442
+ Risk-based pre-push validation. Only runs tests that matter based
443
+ on what you changed. 70% faster on average.
444
+ </p>
445
+ </div>
446
+ <div class="feature-card">
447
+ <div class="feature-icon">🔒</div>
448
+ <h3>Security Scanning</h3>
449
+ <p>
450
+ Gitleaks catches secrets before they hit your repo. ESLint
451
+ security rules prevent common vulnerabilities.
452
+ </p>
453
+ </div>
454
+ <div class="feature-card">
455
+ <div class="feature-icon">📦</div>
456
+ <h3>Dependency Management</h3>
457
+ <p>
458
+ Framework-aware grouping reduces Dependabot PR noise by 60%+.
459
+ React, Vue, Angular auto-detected.
460
+ </p>
461
+ </div>
462
+ <div class="feature-card">
463
+ <div class="feature-icon">🎯</div>
464
+ <h3>TypeScript Protection</h3>
465
+ <p>
466
+ Prevents production TypeScript errors with strict test configs.
467
+ Catch type issues before deploy.
468
+ </p>
469
+ </div>
470
+ <div class="feature-card">
471
+ <div class="feature-icon">🌐</div>
472
+ <h3>Multi-Language</h3>
473
+ <p>
474
+ JavaScript, TypeScript, Python, Rust, Ruby. One tool for your
475
+ entire polyglot stack.
476
+ </p>
477
+ </div>
478
+ <div class="feature-card">
479
+ <div class="feature-icon">🏢</div>
480
+ <h3>Team & Enterprise</h3>
481
+ <p>
482
+ Per-seat licensing, shared policies, SSO, audit logs. Built for
483
+ organizations of any size.
484
+ </p>
485
+ </div>
486
+ </div>
487
+ </div>
488
+ </section>
489
+
490
+ <!-- Pricing -->
491
+ <section class="pricing" id="pricing">
492
+ <div class="container">
493
+ <h2 class="section-title">Simple, Transparent Pricing</h2>
494
+ <div class="pricing-grid">
495
+ <!-- Free -->
496
+ <div class="pricing-card">
497
+ <div class="pricing-tier">FREE</div>
498
+ <div class="pricing-price">$0</div>
499
+ <div class="pricing-desc">For hobby projects and OSS</div>
500
+ <ul class="pricing-features">
501
+ <li>ESLint, Prettier, Stylelint</li>
502
+ <li>Basic Husky pre-commit hooks</li>
503
+ <li class="limited">1 private repo, 2k LOC</li>
504
+ <li class="limited">10 dependency PRs/month</li>
505
+ <li class="no">No security scanning</li>
506
+ <li class="no">No Smart Test Strategy</li>
507
+ </ul>
508
+ <a
509
+ href="https://github.com/brettstark73/create-qa-architect"
510
+ class="btn btn-outline"
511
+ >Get Started Free</a
512
+ >
513
+ </div>
514
+
515
+ <!-- Pro -->
516
+ <div class="pricing-card popular">
517
+ <div class="popular-badge">MOST POPULAR</div>
518
+ <div class="pricing-tier">PRO</div>
519
+ <div class="pricing-price">$59<span>/month</span></div>
520
+ <div class="pricing-desc">Or $590/year (save $118)</div>
521
+ <ul class="pricing-features">
522
+ <li>Unlimited repos, LOC, runs</li>
523
+ <li><strong>Smart Test Strategy</strong> (70% faster)</li>
524
+ <li><strong>Security scanning</strong> (Gitleaks)</li>
525
+ <li>TypeScript protection</li>
526
+ <li>Multi-language support</li>
527
+ <li>Framework-aware grouping</li>
528
+ <li>Email support (24-48h)</li>
529
+ </ul>
530
+ <button class="btn btn-primary" onclick="checkout('pro_monthly')">
531
+ Start Monthly ($59)
532
+ </button>
533
+ <button
534
+ class="btn btn-outline"
535
+ onclick="checkout('pro_annual')"
536
+ style="margin-top: 8px; width: 100%"
537
+ >
538
+ Annual ($590 - Save 17%)
539
+ </button>
540
+ </div>
541
+
542
+ <!-- Team -->
543
+ <div class="pricing-card">
544
+ <div class="pricing-tier">TEAM</div>
545
+ <div class="pricing-price">$15<span>/user/mo</span></div>
546
+ <div class="pricing-desc">
547
+ 5-seat min · $150/user/year (save 17%)
548
+ </div>
549
+ <ul class="pricing-features">
550
+ <li>All PRO features</li>
551
+ <li>Per-seat licensing</li>
552
+ <li>Shared org quota & reporting</li>
553
+ <li>Team-wide config policies</li>
554
+ <li>Slack/email alerts</li>
555
+ <li>Team audit log</li>
556
+ <li>Priority support</li>
557
+ </ul>
558
+ <a
559
+ href="mailto:sales@vibebuildlab.com?subject=CQA Team Plan Inquiry"
560
+ class="btn btn-primary"
561
+ >Contact Sales</a
562
+ >
563
+ </div>
564
+
565
+ <!-- Enterprise -->
566
+ <div class="pricing-card">
567
+ <div class="pricing-tier">ENTERPRISE</div>
568
+ <div class="pricing-price">$249<span>/month</span></div>
569
+ <div class="pricing-desc">Annual + $499 onboarding</div>
570
+ <ul class="pricing-features">
571
+ <li>All TEAM features</li>
572
+ <li>SSO/SAML integration</li>
573
+ <li>Custom risk patterns</li>
574
+ <li>Custom dependency policies</li>
575
+ <li>Audit logs export</li>
576
+ <li>Compliance pack (SOC2)</li>
577
+ <li>Dedicated TAM + SLA</li>
578
+ </ul>
579
+ <a href="mailto:enterprise@vibebuildlab.com" class="btn btn-outline"
580
+ >Contact Enterprise</a
581
+ >
582
+ </div>
583
+ </div>
584
+ </div>
585
+ </section>
586
+
587
+ <!-- Comparison -->
588
+ <section class="comparison">
589
+ <div class="container">
590
+ <h2 class="section-title">How We Compare</h2>
591
+ <table class="comparison-table">
592
+ <thead>
593
+ <tr>
594
+ <th>Feature</th>
595
+ <th>CQA Pro ($59/mo)</th>
596
+ <th>Snyk ($25-98/dev)</th>
597
+ <th>SonarCloud (~$30/mo)</th>
598
+ </tr>
599
+ </thead>
600
+ <tbody>
601
+ <tr>
602
+ <td>Secret scanning</td>
603
+ <td>✅</td>
604
+ <td>✅</td>
605
+ <td>❌</td>
606
+ </tr>
607
+ <tr>
608
+ <td>Pre-commit hooks</td>
609
+ <td>✅</td>
610
+ <td>❌</td>
611
+ <td>❌</td>
612
+ </tr>
613
+ <tr>
614
+ <td>Smart test strategy</td>
615
+ <td>✅</td>
616
+ <td>❌</td>
617
+ <td>❌</td>
618
+ </tr>
619
+ <tr>
620
+ <td>Framework grouping</td>
621
+ <td>✅</td>
622
+ <td>❌</td>
623
+ <td>❌</td>
624
+ </tr>
625
+ <tr>
626
+ <td>Multi-language</td>
627
+ <td>✅</td>
628
+ <td>✅</td>
629
+ <td>✅</td>
630
+ </tr>
631
+ <tr>
632
+ <td>Team-wide license</td>
633
+ <td>✅ ($59 flat)</td>
634
+ <td>❌ (per seat)</td>
635
+ <td>❌ (by LOC)</td>
636
+ </tr>
637
+ </tbody>
638
+ </table>
639
+ </div>
640
+ </section>
641
+
642
+ <!-- CTA -->
643
+ <section class="cta">
644
+ <div class="container">
645
+ <h2>Ready to Ship Faster?</h2>
646
+ <p>Start your 14-day free trial. No credit card required.</p>
647
+ <button
648
+ class="btn btn-primary"
649
+ onclick="checkout('pro')"
650
+ style="background: white; color: var(--primary)"
651
+ >
652
+ Start Free Trial
653
+ </button>
654
+ </div>
655
+ </section>
656
+
657
+ <!-- Footer -->
658
+ <footer>
659
+ <div class="container">
660
+ <p>
661
+ <a href="https://github.com/brettstark73/create-qa-architect"
662
+ >GitHub</a
663
+ >
664
+ ·
665
+ <a href="https://www.npmjs.com/package/create-qa-architect">npm</a>
666
+ · <a href="mailto:support@vibebuildlab.com">Support</a> ·
667
+ <a href="/privacy">Privacy</a> ·
668
+ <a href="/terms">Terms</a>
669
+ </p>
670
+ <p style="margin-top: 16px">
671
+ © 2025 VibeBuildLab. All rights reserved.
672
+ </p>
673
+ </div>
674
+ </footer>
675
+
676
+ <script>
677
+ // Stripe integration
678
+ // TODO: Replace with your Stripe publishable key
679
+ const stripe = Stripe('pk_live_YOUR_PUBLISHABLE_KEY')
680
+
681
+ async function checkout(plan) {
682
+ // TODO: Replace with your actual price IDs from Stripe
683
+ const priceIds = {
684
+ pro_monthly: 'price_PRO_MONTHLY_ID', // $59/mo
685
+ pro_annual: 'price_PRO_ANNUAL_ID', // $590/yr (save $118)
686
+ team_monthly: 'price_TEAM_MONTHLY_ID', // $75/mo (5 seats)
687
+ team_annual: 'price_TEAM_ANNUAL_ID', // $750/yr (5 seats)
688
+ enterprise: 'price_ENTERPRISE_ANNUAL_ID', // $2988/yr + $499 onboarding
689
+ }
690
+
691
+ // Team/Enterprise go to contact form
692
+ if (plan.startsWith('team') || plan === 'enterprise') {
693
+ window.location.href =
694
+ 'mailto:sales@vibebuildlab.com?subject=CQA ' +
695
+ plan.replace('_', ' ').toUpperCase() +
696
+ ' Inquiry'
697
+ return
698
+ }
699
+
700
+ try {
701
+ const response = await fetch('/api/create-checkout-session', {
702
+ method: 'POST',
703
+ headers: { 'Content-Type': 'application/json' },
704
+ body: JSON.stringify({
705
+ priceId: priceIds[plan],
706
+ trial: plan.includes('monthly'), // 14-day trial for monthly only
707
+ }),
708
+ })
709
+
710
+ const session = await response.json()
711
+ await stripe.redirectToCheckout({ sessionId: session.id })
712
+ } catch (error) {
713
+ console.error('Checkout error:', error)
714
+ alert(
715
+ 'Unable to start checkout. Please try again or contact support.'
716
+ )
717
+ }
718
+ }
719
+ </script>
720
+ </body>
721
+ </html>