fraim-framework 2.0.55 → 2.0.56

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 (126) hide show
  1. package/dist/registry/ai-manager-rules/customer-development-phases/phase1-customer-profiling.md +101 -0
  2. package/dist/registry/ai-manager-rules/customer-development-phases/phase2-platform-discovery.md +235 -0
  3. package/dist/registry/ai-manager-rules/customer-development-phases/phase3-prospect-qualification.md +243 -0
  4. package/dist/registry/ai-manager-rules/customer-development-phases/phase4-inventory-compilation.md +206 -0
  5. package/dist/registry/ai-manager-rules/user-survey-phases/phase1-survey-scoping.md +60 -0
  6. package/dist/registry/ai-manager-rules/user-survey-phases/phase2-survey-build-linkedin.md +23 -0
  7. package/dist/registry/ai-manager-rules/user-survey-phases/phase3-survey-build-reddit.md +22 -0
  8. package/dist/registry/ai-manager-rules/user-survey-phases/phase4-survey-build-x.md +21 -0
  9. package/dist/registry/ai-manager-rules/user-survey-phases/phase5-survey-build-facebook.md +19 -0
  10. package/dist/registry/ai-manager-rules/user-survey-phases/phase6-survey-build-custom.md +15 -0
  11. package/dist/registry/ai-manager-rules/user-survey-phases/phase7-survey-dispatch.md +45 -0
  12. package/dist/registry/templates/bootstrap/ARCHITECTURE-TEMPLATE.md +53 -0
  13. package/dist/registry/templates/bootstrap/CODE-QUALITY-REPORT-TEMPLATE.md +37 -0
  14. package/dist/registry/templates/bootstrap/TEST-COVERAGE-REPORT-TEMPLATE.md +35 -0
  15. package/dist/registry/templates/business-development/IDEATION-REPORT-TEMPLATE.md +29 -0
  16. package/dist/registry/templates/business-development/PRICING-STRATEGY-TEMPLATE.md +126 -0
  17. package/dist/registry/templates/customer-development/customer-interview-template.md +99 -0
  18. package/dist/registry/templates/customer-development/customer-persona-template.md +69 -0
  19. package/dist/registry/templates/customer-development/follow-up-email-templates.md +132 -0
  20. package/dist/registry/templates/customer-development/insight-analysis-template.md +74 -0
  21. package/dist/registry/templates/customer-development/prospect-inventory-template.csv +3 -0
  22. package/dist/registry/templates/customer-development/search-strategy-template.md +123 -0
  23. package/dist/registry/templates/customer-development/strategic-recommendations-template.md +53 -0
  24. package/dist/registry/templates/customer-development/thank-you-email-template.html +124 -0
  25. package/dist/registry/templates/customer-development/thank-you-note-template.md +16 -0
  26. package/dist/registry/templates/customer-development/triage-log-template.md +278 -0
  27. package/dist/registry/templates/customer-development/weekly-newsletter-template.html +204 -0
  28. package/dist/registry/templates/evidence/Design-Evidence.md +30 -0
  29. package/dist/registry/templates/evidence/Implementation-BugEvidence.md +94 -0
  30. package/dist/registry/templates/evidence/Implementation-FeatureEvidence.md +129 -0
  31. package/dist/registry/templates/evidence/Spec-Evidence.md +19 -0
  32. package/dist/registry/templates/help/HelpNeeded.md +14 -0
  33. package/dist/registry/templates/legal/NDA-TEMPLATE.md +170 -0
  34. package/dist/registry/templates/legal/PATENT-TEMPLATE.md +372 -0
  35. package/dist/registry/templates/legal/TRADEMARK-TEMPLATE.md +339 -0
  36. package/dist/registry/templates/legal/contract-review-checklist.md +193 -0
  37. package/dist/registry/templates/legal/review-report-template.md +198 -0
  38. package/dist/registry/templates/legal/saas-terms-template.md +174 -0
  39. package/dist/registry/templates/legal/sow-template.md +117 -0
  40. package/dist/registry/templates/legal/template-variables.md +131 -0
  41. package/dist/registry/templates/marketing/DOMAIN-REGISTRATION-TEMPLATE.md +194 -0
  42. package/dist/registry/templates/marketing/HBR-ARTICLE-TEMPLATE.md +66 -0
  43. package/dist/registry/templates/marketing/STORYTELLING-TEMPLATE.md +130 -0
  44. package/dist/registry/templates/marketing/WEBSITE-TEMPLATE.md +262 -0
  45. package/dist/registry/templates/marketing/github-pages-workflow.yml +64 -0
  46. package/dist/registry/templates/replicate/implementation-checklist.md +39 -0
  47. package/dist/registry/templates/replicate/use-cases-template.md +88 -0
  48. package/dist/registry/templates/retrospective/RETROSPECTIVE-TEMPLATE.md +55 -0
  49. package/dist/registry/templates/specs/BUGSPEC-TEMPLATE.md +37 -0
  50. package/dist/registry/templates/specs/FEATURESPEC-TEMPLATE.md +66 -0
  51. package/dist/registry/templates/specs/TECHSPEC-TEMPLATE.md +39 -0
  52. package/dist/registry/workflows/bootstrap/create-architecture.md +38 -0
  53. package/dist/registry/workflows/bootstrap/detect-broken-windows.md +300 -0
  54. package/dist/registry/workflows/bootstrap/evaluate-code-quality.md +35 -0
  55. package/dist/registry/workflows/bootstrap/verify-test-coverage.md +36 -0
  56. package/dist/registry/workflows/brainstorming/blue-sky-brainstorming.md +211 -0
  57. package/dist/registry/workflows/brainstorming/codebase-brainstorming.md +165 -0
  58. package/dist/registry/workflows/business-development/create-business-plan.md +737 -0
  59. package/dist/registry/workflows/business-development/ideate-business-opportunity.md +55 -0
  60. package/dist/registry/workflows/business-development/price-product.md +325 -0
  61. package/dist/registry/workflows/compliance/detect-compliance-requirements.md +78 -0
  62. package/dist/registry/workflows/compliance/generate-audit-evidence.md +75 -0
  63. package/dist/registry/workflows/compliance/soc2-evidence-generator.md +332 -0
  64. package/dist/registry/workflows/customer-development/insight-analysis.md +156 -0
  65. package/dist/registry/workflows/customer-development/insight-triage.md +938 -0
  66. package/dist/registry/workflows/customer-development/interview-preparation.md +452 -0
  67. package/dist/registry/workflows/customer-development/linkedin-outreach.md +593 -0
  68. package/dist/registry/workflows/customer-development/strategic-brainstorming.md +146 -0
  69. package/dist/registry/workflows/customer-development/thank-customers.md +203 -0
  70. package/dist/registry/workflows/customer-development/user-survey-dispatch.md +60 -0
  71. package/dist/registry/workflows/customer-development/users-to-target.md +112 -0
  72. package/dist/registry/workflows/customer-development/weekly-newsletter.md +366 -0
  73. package/dist/registry/workflows/deploy/cloud-deployment.md +310 -0
  74. package/dist/registry/workflows/improve-fraim/contribute.md +32 -0
  75. package/dist/registry/workflows/improve-fraim/file-issue.md +32 -0
  76. package/dist/registry/workflows/learning/build-skillset.md +212 -0
  77. package/dist/registry/workflows/learning/synthesize-learnings.md +284 -0
  78. package/dist/registry/workflows/legal/contract-review-analysis.md +382 -0
  79. package/dist/registry/workflows/legal/nda.md +69 -0
  80. package/dist/registry/workflows/legal/patent-filing.md +76 -0
  81. package/dist/registry/workflows/legal/saas-contract-development.md +213 -0
  82. package/dist/registry/workflows/legal/trademark-filing.md +77 -0
  83. package/dist/registry/workflows/marketing/content-creation.md +37 -0
  84. package/dist/registry/workflows/marketing/convert-to-pdf.md +235 -0
  85. package/dist/registry/workflows/marketing/create-modern-website.md +456 -0
  86. package/dist/registry/workflows/marketing/domain-registration.md +323 -0
  87. package/dist/registry/workflows/marketing/hbr-article.md +73 -0
  88. package/dist/registry/workflows/marketing/launch-checklist.md +37 -0
  89. package/dist/registry/workflows/marketing/marketing-strategy.md +45 -0
  90. package/dist/registry/workflows/marketing/storytelling.md +65 -0
  91. package/dist/registry/workflows/performance/analyze-performance.md +65 -0
  92. package/dist/registry/workflows/product-building/design.md +103 -0
  93. package/dist/registry/workflows/product-building/implement.md +74 -0
  94. package/dist/registry/workflows/product-building/iterate-on-pr-comments.md +70 -0
  95. package/dist/registry/workflows/product-building/prep-issue.md +41 -0
  96. package/dist/registry/workflows/product-building/prototype.md +65 -0
  97. package/dist/registry/workflows/product-building/resolve.md +168 -0
  98. package/dist/registry/workflows/product-building/retrospect.md +86 -0
  99. package/dist/registry/workflows/product-building/spec.md +181 -0
  100. package/dist/registry/workflows/product-building/test.md +125 -0
  101. package/dist/registry/workflows/productivity-report/productivity-report.md +263 -0
  102. package/dist/registry/workflows/quality-assurance/browser-validation.md +221 -0
  103. package/dist/registry/workflows/quality-assurance/iterative-improvement-cycle.md +562 -0
  104. package/dist/registry/workflows/replicate/replicate-discovery.md +336 -0
  105. package/dist/registry/workflows/replicate/replicate-to-issues.md +324 -0
  106. package/dist/registry/workflows/reviewer/review-implementation-vs-design-spec.md +638 -0
  107. package/dist/registry/workflows/reviewer/review-implementation-vs-feature-spec.md +675 -0
  108. package/dist/registry/workflows/startup-credits/aws-activate-application.md +535 -0
  109. package/dist/registry/workflows/startup-credits/google-cloud-application.md +647 -0
  110. package/dist/registry/workflows/startup-credits/microsoft-azure-application.md +538 -0
  111. package/dist/src/ai-manager/ai-manager.js +4 -6
  112. package/dist/tests/test-users-to-target-workflow.js +2 -2
  113. package/package.json +1 -1
  114. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-customer-profiling.md +0 -11
  115. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-survey-scoping.md +0 -11
  116. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-platform-discovery.md +0 -11
  117. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-survey-build-linkedin.md +0 -11
  118. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-prospect-qualification.md +0 -11
  119. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-survey-build-reddit.md +0 -11
  120. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-inventory-compilation.md +0 -11
  121. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-survey-build-x.md +0 -11
  122. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase5-survey-build-facebook.md +0 -11
  123. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase6-survey-build-custom.md +0 -11
  124. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase7-survey-dispatch.md +0 -11
  125. package/registry/stubs/workflows/customer-development/templates/customer-persona-template.md +0 -11
  126. package/registry/stubs/workflows/customer-development/templates/search-strategy-template.md +0 -11
@@ -0,0 +1,535 @@
1
+ # AWS Activate Application Guide
2
+
3
+ **Complete step-by-step guide with Playwright automation instructions for applying to AWS Activate Credits.**
4
+
5
+ ---
6
+
7
+ ## ⚠️ IMPORTANT: Collect User Information First
8
+
9
+ **Before starting automation, you MUST ask the user for the following information:**
10
+
11
+ - **Company Name**
12
+ - **Founder/Contact Name**
13
+ - **Email Address** (personal or business email)
14
+ - **Phone Number** (format: digits only, no dashes)
15
+ - **Company Website** (full URL)
16
+ - **Founded Date** (month and year)
17
+ - **City**
18
+ - **State/Province**
19
+ - **Zip/Postal Code**
20
+ - **Country** (e.g., "United States")
21
+ - **Industry** (e.g., "Technology", "Software & Internet")
22
+ - **Role** (e.g., "Entrepreneur", "Founder", "Co-Founder")
23
+ - **Application Path** (Founders for self-funded, or Portfolio if they have an Org ID)
24
+
25
+ **Store these values in variables and use them throughout the automation steps below.**
26
+
27
+ ---
28
+
29
+ ## Overview
30
+
31
+ **Program:** AWS Activate
32
+ **Credits:** $1,000 USD (Founders path) or up to $100,000 USD (Portfolio path)
33
+ **URL:** https://aws.amazon.com/startups/credits
34
+ **Processing Time:** 7-10 business days
35
+
36
+ ---
37
+
38
+ ## Prerequisites
39
+
40
+ ### Required Information
41
+ - **Company Name:** [ASK USER]
42
+ - **Founder Name:** [ASK USER]
43
+ - **Email:** [ASK USER]
44
+ - **Phone:** [ASK USER] (format: digits only, no dashes)
45
+ - **Website:** [ASK USER] (full URL)
46
+ - **Founded:** [ASK USER] (month and year)
47
+ - **Location:** [ASK USER - City, State, Zip]
48
+ - **State:** [ASK USER]
49
+ - **Country:** [ASK USER]
50
+ - **Industry:** [ASK USER] (e.g., Technology / Software & Internet)
51
+
52
+ ### Required Accounts
53
+ - AWS Builder ID (create if needed)
54
+ - AWS Account ID (optional, can create during application)
55
+
56
+ ---
57
+
58
+ ## Playwright Automation Steps
59
+
60
+ ### Step 1: Navigate to AWS Activate Credits Page
61
+
62
+ ```javascript
63
+ // Navigate to AWS Activate Credits page
64
+ await page.goto('https://aws.amazon.com/startups/credits');
65
+ await page.waitForTimeout(3000);
66
+ ```
67
+
68
+ **Expected Result:** Page loads showing AWS Activate information and "Apply now" button.
69
+
70
+ ---
71
+
72
+ ### Step 2: Click "Apply now" Button
73
+
74
+ ```javascript
75
+ // Click the "Apply now" button
76
+ await page.getByRole('button', { name: /apply now/i }).click();
77
+ await page.waitForTimeout(3000);
78
+ ```
79
+
80
+ **Expected Result:** Redirects to AWS sign-in page or application form.
81
+
82
+ ---
83
+
84
+ ### Step 3: Sign In with AWS Builder ID
85
+
86
+ ```javascript
87
+ // If redirected to sign-in, wait for user to sign in manually
88
+ // Or automate sign-in if credentials are available
89
+ await page.waitForURL(/aws.amazon.com|signin.aws.amazon.com/, { timeout: 30000 });
90
+ ```
91
+
92
+ **Note:** User must sign in manually with AWS Builder ID. Wait for navigation to application form.
93
+
94
+ ---
95
+
96
+ ### Step 4: Select Application Path
97
+
98
+ **Option A: Activate Founders (Self-funded)**
99
+ ```javascript
100
+ // Select "Activate Founders" path
101
+ await page.getByRole('radio', { name: /founders|self-funded/i }).click();
102
+ await page.waitForTimeout(1000);
103
+ ```
104
+
105
+ **Option B: Activate Portfolio (If you have Org ID)**
106
+ ```javascript
107
+ // Select "Activate Portfolio" path
108
+ await page.getByRole('radio', { name: /portfolio|provider/i }).click();
109
+ await page.waitForTimeout(1000);
110
+ ```
111
+
112
+ **Expected Result:** Form fields appear based on selected path.
113
+
114
+ ---
115
+
116
+ ### Step 5: Fill Personal Information
117
+
118
+ ```javascript
119
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
120
+ const firstName = '[USER_FIRST_NAME]'; // ASK USER
121
+ const lastName = '[USER_LAST_NAME]'; // ASK USER
122
+ const email = '[USER_EMAIL]'; // ASK USER
123
+ const phone = '[USER_PHONE]'; // ASK USER (digits only, no dashes)
124
+
125
+ // Fill first name
126
+ await page.getByRole('textbox', { name: /first name/i }).fill(firstName);
127
+ await page.waitForTimeout(500);
128
+
129
+ // Fill last name
130
+ await page.getByRole('textbox', { name: /last name/i }).fill(lastName);
131
+ await page.waitForTimeout(500);
132
+
133
+ // Fill email
134
+ await page.getByRole('textbox', { name: /email/i }).fill(email);
135
+ await page.waitForTimeout(500);
136
+
137
+ // Fill phone (format: digits only, no dashes)
138
+ await page.getByRole('textbox', { name: /phone/i }).fill(phone);
139
+ await page.waitForTimeout(500);
140
+ ```
141
+
142
+ **Expected Result:** All personal information fields are filled.
143
+
144
+ ---
145
+
146
+ ### Step 6: Fill Company Information
147
+
148
+ ```javascript
149
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
150
+ const companyName = '[USER_COMPANY_NAME]'; // ASK USER
151
+ const website = '[USER_WEBSITE]'; // ASK USER (full URL)
152
+ const city = '[USER_CITY]'; // ASK USER
153
+ const zipCode = '[USER_ZIP_CODE]'; // ASK USER
154
+
155
+ // Fill company name
156
+ await page.getByRole('textbox', { name: /company name/i }).fill(companyName);
157
+ await page.waitForTimeout(500);
158
+
159
+ // Fill company website
160
+ await page.getByRole('textbox', { name: /website|url/i }).fill(website);
161
+ await page.waitForTimeout(500);
162
+
163
+ // Fill city
164
+ await page.getByRole('textbox', { name: /city/i }).fill(city);
165
+ await page.waitForTimeout(500);
166
+
167
+ // Fill zip code
168
+ await page.getByRole('textbox', { name: /zip|postal/i }).fill(zipCode);
169
+ await page.waitForTimeout(500);
170
+ ```
171
+
172
+ **Expected Result:** Company information fields are filled.
173
+
174
+ ---
175
+
176
+ ### Step 7: Select Country (Dropdown)
177
+
178
+ ```javascript
179
+ // Use user-provided country - REPLACE WITH ACTUAL VALUE FROM USER
180
+ const country = '[USER_COUNTRY]'; // ASK USER (e.g., "United States")
181
+
182
+ // Click country dropdown
183
+ await page.getByRole('combobox', { name: /country/i }).click();
184
+ await page.waitForTimeout(1000);
185
+
186
+ // Type country name to search
187
+ await page.keyboard.type(country);
188
+ await page.waitForTimeout(1000);
189
+
190
+ // Select country from dropdown
191
+ await page.getByRole('option', { name: new RegExp(country, 'i') }).click();
192
+ await page.waitForTimeout(1000);
193
+ ```
194
+
195
+ **Alternative Method (if typing doesn't work):**
196
+ ```javascript
197
+ // Use evaluate to find and click the option
198
+ const country = '[USER_COUNTRY]'; // ASK USER
199
+ await page.evaluate((countryName) => {
200
+ const options = Array.from(document.querySelectorAll('[role="option"]'));
201
+ const countryOption = options.find(opt =>
202
+ opt.textContent.toLowerCase().includes(countryName.toLowerCase())
203
+ );
204
+ if (countryOption) countryOption.click();
205
+ }, country);
206
+ await page.waitForTimeout(1000);
207
+ ```
208
+
209
+ **Expected Result:** Country is selected.
210
+
211
+ ---
212
+
213
+ ### Step 8: Select State/Province (Dropdown)
214
+
215
+ ```javascript
216
+ // Use user-provided state - REPLACE WITH ACTUAL VALUE FROM USER
217
+ const state = '[USER_STATE]'; // ASK USER (e.g., "Washington" or "WA")
218
+
219
+ // Click state dropdown
220
+ await page.getByRole('combobox', { name: /state|province/i }).click();
221
+ await page.waitForTimeout(1000);
222
+
223
+ // Type state name
224
+ await page.keyboard.type(state);
225
+ await page.waitForTimeout(1000);
226
+
227
+ // Select state from dropdown
228
+ await page.getByRole('option', { name: new RegExp(state, 'i') }).click();
229
+ await page.waitForTimeout(1000);
230
+ ```
231
+
232
+ **Alternative Method:**
233
+ ```javascript
234
+ // Scroll and click if needed
235
+ const state = '[USER_STATE]'; // ASK USER
236
+ await page.evaluate((stateName) => {
237
+ const options = Array.from(document.querySelectorAll('[role="option"]'));
238
+ const stateOption = options.find(opt =>
239
+ opt.textContent.match(new RegExp(stateName, 'i'))
240
+ );
241
+ if (stateOption) {
242
+ stateOption.scrollIntoView({ behavior: 'smooth', block: 'center' });
243
+ setTimeout(() => stateOption.click(), 500);
244
+ }
245
+ }, state);
246
+ await page.waitForTimeout(1500);
247
+ ```
248
+
249
+ **Expected Result:** State is selected.
250
+
251
+ ---
252
+
253
+ ### Step 9: Select Industry (Dropdown)
254
+
255
+ ```javascript
256
+ // Use user-provided industry - REPLACE WITH ACTUAL VALUE FROM USER
257
+ const industry = '[USER_INDUSTRY]'; // ASK USER (e.g., "Technology", "Software & Internet")
258
+
259
+ // Click industry dropdown
260
+ await page.getByRole('combobox', { name: /industry/i }).click();
261
+ await page.waitForTimeout(1000);
262
+
263
+ // Type industry name
264
+ await page.keyboard.type(industry);
265
+ await page.waitForTimeout(1000);
266
+
267
+ // Select industry from dropdown
268
+ await page.getByRole('option', { name: new RegExp(industry, 'i') }).click();
269
+ await page.waitForTimeout(1000);
270
+ ```
271
+
272
+ **Expected Result:** Industry is selected.
273
+
274
+ ---
275
+
276
+ ### Step 10: Select Role
277
+
278
+ ```javascript
279
+ // Use user-provided role - REPLACE WITH ACTUAL VALUE FROM USER
280
+ // Common options: "Entrepreneur", "Founder", "Co-Founder"
281
+ const role = '[USER_ROLE]'; // ASK USER
282
+
283
+ // Select role
284
+ await page.getByRole('radio', { name: new RegExp(role, 'i') }).click();
285
+ await page.waitForTimeout(500);
286
+ ```
287
+
288
+ **Expected Result:** Role is selected.
289
+
290
+ ---
291
+
292
+ ### Step 11: Fill Additional Fields (If Present)
293
+
294
+ ```javascript
295
+ // Fill any additional required fields that appear
296
+ // Example: Business interest checkbox
297
+ const businessInterest = page.getByRole('checkbox', { name: /business interest/i });
298
+ if (await businessInterest.isVisible()) {
299
+ await businessInterest.check();
300
+ await page.waitForTimeout(500);
301
+ }
302
+ ```
303
+
304
+ ---
305
+
306
+ ### Step 12: Handle Multi-Select Dropdowns (If Present)
307
+
308
+ **For "What are the top 3 ways AWS can help you?":**
309
+ ```javascript
310
+ // Click the multi-select dropdown
311
+ await page.getByRole('combobox', { name: /ways AWS can help/i }).click();
312
+ await page.waitForTimeout(1000);
313
+
314
+ // Select first 3 options
315
+ const options = await page.locator('[role="option"]').all();
316
+ for (let i = 0; i < Math.min(3, options.length); i++) {
317
+ await options[i].click();
318
+ await page.waitForTimeout(500);
319
+ }
320
+
321
+ // Close dropdown by clicking outside or pressing Escape
322
+ await page.keyboard.press('Escape');
323
+ await page.waitForTimeout(500);
324
+ ```
325
+
326
+ **For "Which AWS tech topics would you like to follow?":**
327
+ ```javascript
328
+ // Click the multi-select dropdown
329
+ await page.getByRole('combobox', { name: /tech topics/i }).click();
330
+ await page.waitForTimeout(1000);
331
+
332
+ // Select 3-5 relevant options (e.g., AI/ML, Compute, Storage)
333
+ // ASK USER which topics they're interested in, or select common ones
334
+ const relevantTopics = ['AI', 'Machine Learning', 'Compute', 'Storage', 'Database'];
335
+ for (const topic of relevantTopics.slice(0, 3)) {
336
+ const option = page.getByRole('option', { name: new RegExp(topic, 'i') });
337
+ if (await option.isVisible()) {
338
+ await option.click();
339
+ await page.waitForTimeout(500);
340
+ }
341
+ }
342
+
343
+ await page.keyboard.press('Escape');
344
+ await page.waitForTimeout(500);
345
+ ```
346
+
347
+ **For "What type of customers do you primarily serve?":**
348
+ ```javascript
349
+ // Click the multi-select dropdown
350
+ await page.getByRole('combobox', { name: /customers|serve/i }).click();
351
+ await page.waitForTimeout(1000);
352
+
353
+ // ASK USER which customer types apply, or select relevant options
354
+ const customerTypes = ['Enterprise', 'SMB', 'Startups'];
355
+ for (const type of customerTypes.slice(0, 2)) {
356
+ const option = page.getByRole('option', { name: new RegExp(type, 'i') });
357
+ if (await option.isVisible()) {
358
+ await option.click();
359
+ await page.waitForTimeout(500);
360
+ }
361
+ }
362
+
363
+ await page.keyboard.press('Escape');
364
+ await page.waitForTimeout(500);
365
+ ```
366
+
367
+ ---
368
+
369
+ ### Step 13: Click "Save and Continue"
370
+
371
+ ```javascript
372
+ // Click save/continue button
373
+ await page.getByRole('button', { name: /save.*continue|continue|next/i }).click();
374
+ await page.waitForTimeout(3000);
375
+ ```
376
+
377
+ **Expected Result:** Form validates and moves to next page or shows success message.
378
+
379
+ ---
380
+
381
+ ### Step 14: Handle Validation Errors (If Any)
382
+
383
+ ```javascript
384
+ // Check for validation errors
385
+ const errorMessages = await page.locator('[role="alert"], .error, [class*="error"]').all();
386
+ if (errorMessages.length > 0) {
387
+ console.log('Validation errors found:');
388
+ for (const error of errorMessages) {
389
+ const text = await error.textContent();
390
+ console.log(`- ${text}`);
391
+ }
392
+
393
+ // Fix errors and retry
394
+ // Example: If country/state/industry missing, repeat steps 7-9
395
+ }
396
+ ```
397
+
398
+ ---
399
+
400
+ ### Step 15: Complete Remaining Pages (If Any)
401
+
402
+ ```javascript
403
+ // If additional pages appear, continue filling them
404
+ // Common additional pages:
405
+ // - AWS Account linking
406
+ // - Additional company details
407
+ // - Terms and conditions
408
+
409
+ // Example: Accept terms
410
+ const termsCheckbox = page.getByRole('checkbox', { name: /terms|agreement/i });
411
+ if (await termsCheckbox.isVisible()) {
412
+ await termsCheckbox.check();
413
+ await page.waitForTimeout(500);
414
+ }
415
+
416
+ // Example: Link AWS Account (if prompted)
417
+ const linkAccountButton = page.getByRole('button', { name: /link.*account|connect/i });
418
+ if (await linkAccountButton.isVisible()) {
419
+ // May require manual intervention
420
+ console.log('AWS Account linking required - may need manual step');
421
+ }
422
+ ```
423
+
424
+ ---
425
+
426
+ ### Step 16: Submit Application
427
+
428
+ ```javascript
429
+ // Click final submit button
430
+ await page.getByRole('button', { name: /submit|finish|complete/i }).click();
431
+ await page.waitForTimeout(5000);
432
+
433
+ // Wait for confirmation page
434
+ await page.waitForSelector('text=/success|submitted|thank you/i', { timeout: 10000 });
435
+ ```
436
+
437
+ **Expected Result:** Application submitted successfully, confirmation page appears.
438
+
439
+ ---
440
+
441
+ ## Manual Steps (If Automation Fails)
442
+
443
+ ### Common Issues and Solutions
444
+
445
+ 1. **Dropdown Not Opening:**
446
+ - Try clicking the dropdown multiple times
447
+ - Use `page.evaluate()` to directly interact with DOM
448
+ - Try keyboard navigation (Tab, Enter, Arrow keys)
449
+
450
+ 2. **Element Not Found:**
451
+ - Wait longer for page to load
452
+ - Check if element is in iframe
453
+ - Use more generic selectors (e.g., `page.locator('input[type="text"]')`)
454
+
455
+ 3. **Validation Errors:**
456
+ - Ensure all required fields are filled
457
+ - Check field formats (phone numbers, emails)
458
+ - Verify dropdown selections are correct
459
+
460
+ 4. **AWS Account Linking:**
461
+ - May require manual intervention
462
+ - User may need to sign in to AWS account separately
463
+ - Follow on-screen instructions
464
+
465
+ ---
466
+
467
+ ## Verification
468
+
469
+ ### Check Application Status
470
+
471
+ ```javascript
472
+ // Navigate to AWS Activate dashboard
473
+ await page.goto('https://aws.amazon.com/startups/dashboard');
474
+ await page.waitForTimeout(3000);
475
+
476
+ // Check for application status
477
+ const status = await page.locator('[class*="status"], [class*="application"]').textContent();
478
+ console.log(`Application Status: ${status}`);
479
+ ```
480
+
481
+ ---
482
+
483
+ ## Expected Outcomes
484
+
485
+ - **Application Submitted:** Confirmation page or email
486
+ - **Processing Time:** 7-10 business days
487
+ - **Approval Email:** Sent to registered email address
488
+ - **Credits Added:** Automatically added to AWS account upon approval
489
+
490
+ ---
491
+
492
+ ## Troubleshooting
493
+
494
+ ### If Application Fails
495
+
496
+ 1. **Check Browser Console:**
497
+ ```javascript
498
+ // Log all console errors
499
+ page.on('console', msg => console.log('Browser console:', msg.text()));
500
+ ```
501
+
502
+ 2. **Take Screenshot:**
503
+ ```javascript
504
+ await page.screenshot({ path: 'aws-application-error.png', fullPage: true });
505
+ ```
506
+
507
+ 3. **Check Network Requests:**
508
+ ```javascript
509
+ page.on('response', response => {
510
+ if (response.status() >= 400) {
511
+ console.log(`Error: ${response.url()} - ${response.status()}`);
512
+ }
513
+ });
514
+ ```
515
+
516
+ ---
517
+
518
+ ## Next Steps After Submission
519
+
520
+ 1. **Monitor Email:** Check user's email for approval notification
521
+ 2. **Check AWS Console:** Verify credits appear in billing dashboard
522
+ 3. **Follow Up:** If no response after 10 business days, contact AWS support
523
+
524
+ ---
525
+
526
+ ## Resources
527
+
528
+ - **AWS Activate Main Page:** https://aws.amazon.com/startups
529
+ - **AWS Activate FAQ:** https://aws.amazon.com/activate/faq/
530
+ - **AWS Support:** https://aws.amazon.com/support/
531
+
532
+ ---
533
+
534
+ **Last Updated:** November 2025
535
+ **Status:** Ready for automation