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,647 @@
1
+ # Google Cloud for Startups Application Guide
2
+
3
+ **Complete step-by-step guide with Playwright automation instructions for applying to Google Cloud for Startups credits (up to $350K for AI Tier).**
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** (first and last name)
13
+ - **Business Email** (MUST match website domain)
14
+ - **Phone Number** (format: digits only, no dashes)
15
+ - **Company Website** (full URL)
16
+ - **Founded Date** (month and year)
17
+ - **Location:** City, State, Zip Code
18
+ - **State/Province**
19
+ - **Country**
20
+ - **Industry**
21
+ - **Job Role**
22
+ - **Job Title**
23
+ - **Funding Level** (e.g., "Bootstrapped", "Pre-seed", "Seed")
24
+ - **Founded Date Range** (e.g., "3-12 months", "1-2 years")
25
+ - **Accelerators** (usually "NONE" if not part of an accelerator)
26
+ - **Google Cloud Billing Account ID** (format: `XXXXXX-XXXXXX-XXXXXX`, 18 characters)
27
+ - User can find this in: https://console.cloud.google.com/billing
28
+ - **CRITICAL:** Billing account admin email domain must match website domain
29
+
30
+ **Store these values in variables and use them throughout the automation steps below.**
31
+
32
+ ---
33
+
34
+ ## Overview
35
+
36
+ **Program:** Google Cloud for Startups Cloud Program
37
+ **Credits:** Up to $350,000 USD (AI Tier) or $200,000 USD (Scale Tier)
38
+ **URL:** https://cloud.google.com/startup/apply
39
+ **Processing Time:** 3-5 business days (or 7-10 days for new billing accounts)
40
+
41
+ ---
42
+
43
+ ## Prerequisites
44
+
45
+ ### Required Information
46
+ - **Company Name:** [ASK USER]
47
+ - **Founder Name:** [ASK USER]
48
+ - **Business Email:** [ASK USER] (MUST match website domain)
49
+ - **Phone:** [ASK USER] (format: digits only)
50
+ - **Website:** [ASK USER] (full URL)
51
+ - **Founded:** [ASK USER] (month and year)
52
+ - **Location:** [ASK USER - City, State, Zip]
53
+ - **State:** [ASK USER]
54
+ - **Country:** [ASK USER]
55
+ - **Industry:** [ASK USER] (e.g., Technology)
56
+ - **Job Role:** [ASK USER]
57
+ - **Job Title:** [ASK USER]
58
+ - **Funding Level:** [ASK USER] (e.g., Bootstrapped)
59
+ - **Founded Date Range:** [ASK USER] (e.g., 3-12 months)
60
+ - **Accelerators:** [ASK USER] (usually "NONE")
61
+
62
+ ### Required Accounts & Setup
63
+ - **Google Account:** For signing in
64
+ - **Business Email:** [ASK USER] (must be set up and match website domain)
65
+ - **Google Cloud Billing Account ID:** [ASK USER] (format: `XXXXXX-XXXXXX-XXXXXX`)
66
+ - Find in: https://console.cloud.google.com/billing
67
+ - **Important:** Billing account admin email domain must match website domain
68
+
69
+ ### Pre-Application Setup
70
+
71
+ **If business email doesn't exist:**
72
+ 1. Set up email service (Zoho Mail, Google Workspace, etc.) for user's domain
73
+ 2. Create business email address
74
+ 3. Configure DNS records (MX, SPF, TXT)
75
+ 4. Verify email is working
76
+
77
+ **If billing account admin email doesn't match domain:**
78
+ 1. Navigate to: https://console.cloud.google.com/billing
79
+ 2. Open billing account (user will provide ID)
80
+ 3. Go to Account Management
81
+ 4. Add business email as Billing Account Administrator
82
+ 5. Wait for email verification (may require Google Cloud Identity setup)
83
+
84
+ ---
85
+
86
+ ## Playwright Automation Steps
87
+
88
+ ### Step 1: Navigate to Google Cloud for Startups Application Page
89
+
90
+ ```javascript
91
+ // Navigate to application page
92
+ await page.goto('https://cloud.google.com/startup/apply');
93
+ await page.waitForTimeout(3000);
94
+ ```
95
+
96
+ **Expected Result:** Page loads showing application form.
97
+
98
+ ---
99
+
100
+ ### Step 2: Sign In with Google Account
101
+
102
+ ```javascript
103
+ // If sign-in required, wait for user to sign in manually
104
+ // Or automate if credentials available
105
+ await page.waitForURL(/accounts.google.com|cloud.google.com/, { timeout: 30000 });
106
+
107
+ // After sign-in, wait for form to load
108
+ await page.waitForSelector('input[type="text"], input[type="email"]', { timeout: 10000 });
109
+ ```
110
+
111
+ **Note:** User must sign in manually with Google Account. Wait for navigation to application form.
112
+
113
+ ---
114
+
115
+ ### Step 3: Fill Personal Information
116
+
117
+ ```javascript
118
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
119
+ const firstName = '[USER_FIRST_NAME]'; // ASK USER
120
+ const lastName = '[USER_LAST_NAME]'; // ASK USER
121
+ const businessEmail = '[USER_BUSINESS_EMAIL]'; // ASK USER (must match website domain)
122
+ const phone = '[USER_PHONE]'; // ASK USER (digits only)
123
+
124
+ // Fill first name
125
+ await page.getByRole('textbox', { name: /first name/i }).fill(firstName);
126
+ await page.waitForTimeout(500);
127
+
128
+ // Fill last name
129
+ await page.getByRole('textbox', { name: /last name/i }).fill(lastName);
130
+ await page.waitForTimeout(500);
131
+
132
+ // Fill business email (CRITICAL: must match website domain)
133
+ await page.getByRole('textbox', { name: /business email/i }).fill(businessEmail);
134
+ await page.waitForTimeout(1000);
135
+
136
+ // Verify no error appears (personal emails like @gmail.com will be rejected)
137
+ const emailError = page.locator('text=/personal email|business email required/i');
138
+ if (await emailError.isVisible()) {
139
+ throw new Error('Business email validation failed - must use domain matching website');
140
+ }
141
+
142
+ // Fill business phone (format: digits only)
143
+ await page.getByRole('textbox', { name: /business phone|phone/i }).fill(phone);
144
+ await page.waitForTimeout(500);
145
+ ```
146
+
147
+ **Expected Result:** Personal information filled, no email validation errors.
148
+
149
+ ---
150
+
151
+ ### Step 4: Fill Company Information
152
+
153
+ ```javascript
154
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
155
+ const companyName = '[USER_COMPANY_NAME]'; // ASK USER
156
+ const website = '[USER_WEBSITE]'; // ASK USER (full URL)
157
+
158
+ // Fill company name
159
+ await page.getByRole('textbox', { name: /company name|startup name/i }).fill(companyName);
160
+ await page.waitForTimeout(500);
161
+
162
+ // Fill startup website domain (full URL)
163
+ await page.getByRole('textbox', { name: /website|domain/i }).fill(website);
164
+ await page.waitForTimeout(500);
165
+ ```
166
+
167
+ **Expected Result:** Company information filled.
168
+
169
+ ---
170
+
171
+ ### Step 5: Select Industry (Dropdown)
172
+
173
+ ```javascript
174
+ // Use user-provided industry - REPLACE WITH ACTUAL VALUE FROM USER
175
+ const industry = '[USER_INDUSTRY]'; // ASK USER (e.g., "Technology")
176
+
177
+ // Click industry dropdown
178
+ await page.getByRole('combobox', { name: /industry/i }).click();
179
+ await page.waitForTimeout(1000);
180
+
181
+ // Type industry name
182
+ await page.keyboard.type(industry);
183
+ await page.waitForTimeout(1000);
184
+
185
+ // Select industry from dropdown
186
+ await page.getByRole('option', { name: new RegExp(`^${industry}$`, 'i') }).click();
187
+ await page.waitForTimeout(1000);
188
+ ```
189
+
190
+ **Expected Result:** Industry selected.
191
+
192
+ ---
193
+
194
+ ### Step 6: Select Job Role (Dropdown)
195
+
196
+ ```javascript
197
+ // Use user-provided job role - REPLACE WITH ACTUAL VALUE FROM USER
198
+ const jobRole = '[USER_JOB_ROLE]'; // ASK USER
199
+
200
+ // Click job role dropdown
201
+ await page.getByRole('combobox', { name: /job role/i }).click();
202
+ await page.waitForTimeout(1000);
203
+
204
+ // Type job role
205
+ await page.keyboard.type(jobRole.split('/')[0].trim()); // Type first part (e.g., "CEO")
206
+ await page.waitForTimeout(1000);
207
+
208
+ // Select job role from dropdown
209
+ await page.getByRole('option', { name: new RegExp(jobRole, 'i') }).click();
210
+ await page.waitForTimeout(1000);
211
+ ```
212
+
213
+ **Expected Result:** Job role selected.
214
+
215
+ ---
216
+
217
+ ### Step 7: Fill Job Title
218
+
219
+ ```javascript
220
+ // Use user-provided job title - REPLACE WITH ACTUAL VALUE FROM USER
221
+ const jobTitle = '[USER_JOB_TITLE]'; // ASK USER
222
+
223
+ // Fill job title
224
+ await page.getByRole('textbox', { name: /job title/i }).fill(jobTitle);
225
+ await page.waitForTimeout(500);
226
+ ```
227
+
228
+ **Expected Result:** Job title filled.
229
+
230
+ ---
231
+
232
+ ### Step 8: Select AI Startup (Radio Button)
233
+
234
+ ```javascript
235
+ // ASK USER if their startup is AI-first
236
+ // If yes, select AI startups for up to $350K credits
237
+ // If no, skip this step (will get Scale Tier up to $200K)
238
+
239
+ // Select "AI startups" radio button (if applicable)
240
+ const isAIStartup = '[USER_IS_AI_STARTUP]'; // ASK USER (true/false)
241
+ if (isAIStartup === 'true' || isAIStartup === true) {
242
+ await page.getByRole('radio', { name: /AI startups|AI.*startup/i }).click();
243
+ await page.waitForTimeout(500);
244
+ }
245
+ ```
246
+
247
+ **Expected Result:** AI Startup option selected (if applicable).
248
+
249
+ ---
250
+
251
+ ### Step 9: Click "Submit & Continue"
252
+
253
+ ```javascript
254
+ // Click submit/continue button
255
+ await page.getByRole('button', { name: /submit.*continue|continue|next/i }).click();
256
+ await page.waitForTimeout(3000);
257
+ ```
258
+
259
+ **Expected Result:** Form progresses to next page.
260
+
261
+ ---
262
+
263
+ ### Step 10: Fill Additional Company Details (Page 2)
264
+
265
+ ```javascript
266
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
267
+ const businessEmail = '[USER_BUSINESS_EMAIL]'; // ASK USER
268
+ const website = '[USER_WEBSITE]'; // ASK USER
269
+
270
+ // Fill business email again (if required on second page)
271
+ const businessEmailField = page.getByRole('textbox', { name: /business email/i });
272
+ if (await businessEmailField.isVisible()) {
273
+ await businessEmailField.fill(businessEmail);
274
+ await page.waitForTimeout(500);
275
+ }
276
+
277
+ // Fill startup website domain (if required again)
278
+ const websiteField = page.getByRole('textbox', { name: /website|domain/i });
279
+ if (await websiteField.isVisible()) {
280
+ await websiteField.fill(website);
281
+ await page.waitForTimeout(500);
282
+ }
283
+ ```
284
+
285
+ ---
286
+
287
+ ### Step 11: Enter Google Cloud Billing Account ID
288
+
289
+ ```javascript
290
+ // Use user-provided billing account ID - REPLACE WITH ACTUAL VALUE FROM USER
291
+ const billingAccountId = '[USER_BILLING_ACCOUNT_ID]'; // ASK USER (format: XXXXXX-XXXXXX-XXXXXX)
292
+
293
+ // Fill billing account ID
294
+ await page.getByRole('textbox', { name: /billing.*account.*ID|billing account/i }).fill(billingAccountId);
295
+ await page.waitForTimeout(1000);
296
+
297
+ // Verify no error appears
298
+ const billingError = page.locator('text=/invalid.*billing|billing.*domain.*match/i');
299
+ if (await billingError.isVisible()) {
300
+ const errorText = await billingError.textContent();
301
+ console.error(`Billing account error: ${errorText}`);
302
+
303
+ // If error says admin email domain must match, need to:
304
+ // 1. Add business email as billing account admin
305
+ // 2. Or set up Google Cloud Identity for user's domain
306
+ throw new Error('Billing account admin email domain must match website domain');
307
+ }
308
+ ```
309
+
310
+ **Expected Result:** Billing account ID accepted, no validation errors.
311
+
312
+ ---
313
+
314
+ ### Step 12: Select Funding Level
315
+
316
+ ```javascript
317
+ // Use user-provided funding level - REPLACE WITH ACTUAL VALUE FROM USER
318
+ const fundingLevel = '[USER_FUNDING_LEVEL]'; // ASK USER (e.g., "Bootstrapped", "Pre-seed")
319
+
320
+ // Select funding level radio button
321
+ await page.getByRole('radio', { name: new RegExp(fundingLevel, 'i') }).click();
322
+ await page.waitForTimeout(500);
323
+ ```
324
+
325
+ **Expected Result:** Funding level selected.
326
+
327
+ ---
328
+
329
+ ### Step 13: Select Founded Date Range
330
+
331
+ ```javascript
332
+ // Use user-provided founded date range - REPLACE WITH ACTUAL VALUE FROM USER
333
+ const foundedRange = '[USER_FOUNDED_RANGE]'; // ASK USER (e.g., "3-12 months", "1-2 years")
334
+
335
+ // Select founded date range radio button
336
+ await page.getByRole('radio', { name: new RegExp(foundedRange.replace('-', '.*'), 'i') }).click();
337
+ await page.waitForTimeout(500);
338
+ ```
339
+
340
+ **Expected Result:** Founded date range selected.
341
+
342
+ ---
343
+
344
+ ### Step 14: Fill Address Information
345
+
346
+ ```javascript
347
+ // Use user-provided address - REPLACE WITH ACTUAL VALUES FROM USER
348
+ const city = '[USER_CITY]'; // ASK USER
349
+ const zipCode = '[USER_ZIP_CODE]'; // ASK USER
350
+ const streetAddress = '[USER_STREET_ADDRESS]'; // ASK USER (if required)
351
+
352
+ // Fill street address (if required)
353
+ const streetField = page.getByRole('textbox', { name: /street|address/i });
354
+ if (await streetField.isVisible() && streetAddress) {
355
+ await streetField.fill(streetAddress);
356
+ await page.waitForTimeout(500);
357
+ }
358
+
359
+ // Fill city
360
+ await page.getByRole('textbox', { name: /city/i }).fill(city);
361
+ await page.waitForTimeout(500);
362
+
363
+ // Fill postal code
364
+ await page.getByRole('textbox', { name: /postal|zip/i }).fill(zipCode);
365
+ await page.waitForTimeout(500);
366
+ ```
367
+
368
+ ---
369
+
370
+ ### Step 15: Select State (Dropdown)
371
+
372
+ ```javascript
373
+ // Use user-provided state - REPLACE WITH ACTUAL VALUE FROM USER
374
+ const state = '[USER_STATE]'; // ASK USER (e.g., "Washington" or "WA")
375
+
376
+ // Click state dropdown
377
+ await page.getByRole('combobox', { name: /state|province/i }).click();
378
+ await page.waitForTimeout(1000);
379
+
380
+ // Type state name
381
+ await page.keyboard.type(state);
382
+ await page.waitForTimeout(1000);
383
+
384
+ // Select state from dropdown
385
+ await page.getByRole('option', { name: new RegExp(`^${state}$|^${state}$`, 'i') }).click();
386
+ await page.waitForTimeout(1000);
387
+ ```
388
+
389
+ **Expected Result:** State selected.
390
+
391
+ ---
392
+
393
+ ### Step 16: Select Accelerators (Dropdown)
394
+
395
+ ```javascript
396
+ // Use user-provided accelerators - REPLACE WITH ACTUAL VALUE FROM USER
397
+ // Usually "NONE" if not part of an accelerator
398
+ const accelerators = '[USER_ACCELERATORS]'; // ASK USER (usually "NONE")
399
+
400
+ // Click accelerators dropdown
401
+ await page.getByRole('combobox', { name: /accelerator|incubator|partner/i }).click();
402
+ await page.waitForTimeout(1000);
403
+
404
+ // Type accelerator name
405
+ await page.keyboard.type(accelerators);
406
+ await page.waitForTimeout(1000);
407
+
408
+ // Select from dropdown
409
+ const acceleratorOption = page.getByRole('option', { name: new RegExp(`^${accelerators}$`, 'i') });
410
+ if (await acceleratorOption.isVisible()) {
411
+ await acceleratorOption.click();
412
+ } else {
413
+ // Try clicking outside to close if already selected
414
+ await page.keyboard.press('Escape');
415
+ }
416
+ await page.waitForTimeout(1000);
417
+ ```
418
+
419
+ **Expected Result:** Accelerators selected (usually "NONE").
420
+
421
+ ---
422
+
423
+ ### Step 17: Accept Terms and Conditions
424
+
425
+ ```javascript
426
+ // Check terms checkbox
427
+ const termsCheckbox = page.getByRole('checkbox', { name: /terms|agreement/i });
428
+ if (await termsCheckbox.isVisible()) {
429
+ await termsCheckbox.check();
430
+ await page.waitForTimeout(500);
431
+ }
432
+
433
+ // Check credits deposit checkbox (if present)
434
+ const creditsCheckbox = page.getByRole('checkbox', { name: /credits|deposit/i });
435
+ if (await creditsCheckbox.isVisible()) {
436
+ await creditsCheckbox.check();
437
+ await page.waitForTimeout(500);
438
+ }
439
+ ```
440
+
441
+ **Expected Result:** All required checkboxes checked.
442
+
443
+ ---
444
+
445
+ ### Step 18: Submit Application
446
+
447
+ ```javascript
448
+ // Click final submit button
449
+ await page.getByRole('button', { name: /submit.*application|submit/i }).click();
450
+ await page.waitForTimeout(5000);
451
+
452
+ // Wait for confirmation page or success message
453
+ await page.waitForSelector('text=/success|submitted|thank you|application.*received/i', { timeout: 10000 });
454
+ ```
455
+
456
+ **Expected Result:** Application submitted successfully, confirmation page appears.
457
+
458
+ ---
459
+
460
+ ## Handling Billing Account Domain Mismatch Error
461
+
462
+ ### Error: "Your Billing account ID admin email domain must match the website domain"
463
+
464
+ **Solution Steps:**
465
+
466
+ #### Option 1: Add Business Email as Billing Account Administrator
467
+
468
+ ```javascript
469
+ // Use user-provided billing account ID - REPLACE WITH ACTUAL VALUE FROM USER
470
+ const billingAccountId = '[USER_BILLING_ACCOUNT_ID]'; // ASK USER
471
+ const businessEmail = '[USER_BUSINESS_EMAIL]'; // ASK USER
472
+
473
+ // Navigate to billing account management
474
+ await page.goto(`https://console.cloud.google.com/billing/${billingAccountId}/manage`);
475
+ await page.waitForTimeout(3000);
476
+
477
+ // Click "Add principal" button
478
+ await page.getByRole('button', { name: /add principal/i }).click();
479
+ await page.waitForTimeout(2000);
480
+
481
+ // Enter business email
482
+ await page.getByRole('textbox', { name: /new principal|email/i }).fill(businessEmail);
483
+ await page.waitForTimeout(2000);
484
+
485
+ // Select role: Billing Account Administrator
486
+ await page.getByRole('combobox', { name: /role/i }).click();
487
+ await page.waitForTimeout(1000);
488
+ await page.getByRole('option', { name: /billing.*account.*administrator/i }).click();
489
+ await page.waitForTimeout(1000);
490
+
491
+ // Click Save
492
+ await page.getByRole('button', { name: /save/i }).click();
493
+ await page.waitForTimeout(3000);
494
+ ```
495
+
496
+ **Note:** This may require Google Cloud Identity to be set up for user's domain first.
497
+
498
+ #### Option 2: Set Up Google Cloud Identity
499
+
500
+ ```javascript
501
+ // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
502
+ const companyName = '[USER_COMPANY_NAME]'; // ASK USER
503
+ const firstName = '[USER_FIRST_NAME]'; // ASK USER
504
+ const lastName = '[USER_LAST_NAME]'; // ASK USER
505
+ const currentEmail = '[USER_CURRENT_EMAIL]'; // ASK USER (for verification)
506
+ const domain = '[USER_DOMAIN]'; // ASK USER (extract from website, e.g., "example.com")
507
+ const username = '[USER_USERNAME]'; // ASK USER (for business email, e.g., "founder")
508
+ const password = '[USER_PASSWORD]'; // ASK USER (or generate secure password)
509
+ const phone = '[USER_PHONE]'; // ASK USER (for verification)
510
+
511
+ // Navigate to Cloud Identity signup
512
+ await page.goto('https://workspace.google.com/gcpidentity/signup?sku=identitybasic');
513
+ await page.waitForTimeout(3000);
514
+
515
+ // Fill business name
516
+ await page.getByRole('textbox', { name: /business name/i }).fill(companyName);
517
+ await page.waitForTimeout(500);
518
+
519
+ // Select number of employees
520
+ await page.getByRole('radio', { name: /one|just you/i }).click();
521
+ await page.waitForTimeout(500);
522
+
523
+ // Click Next
524
+ await page.getByRole('button', { name: /next/i }).click();
525
+ await page.waitForTimeout(2000);
526
+
527
+ // Fill contact info
528
+ await page.getByRole('textbox', { name: /first name/i }).fill(firstName);
529
+ await page.getByRole('textbox', { name: /last name/i }).fill(lastName);
530
+ await page.getByRole('textbox', { name: /current email/i }).fill(currentEmail);
531
+ await page.getByRole('button', { name: /next/i }).click();
532
+ await page.waitForTimeout(2000);
533
+
534
+ // Enter domain
535
+ await page.getByRole('textbox', { name: /domain name/i }).fill(domain);
536
+ await page.getByRole('button', { name: /next/i }).click();
537
+ await page.waitForTimeout(2000);
538
+
539
+ // Confirm domain
540
+ await page.getByRole('button', { name: /next/i }).click();
541
+ await page.waitForTimeout(2000);
542
+
543
+ // Create username and password
544
+ await page.getByRole('textbox', { name: /username/i }).fill(username);
545
+ await page.getByRole('textbox', { name: /password/i }).fill(password);
546
+ await page.getByRole('textbox', { name: /confirm password/i }).fill(password);
547
+ await page.getByRole('button', { name: /agree.*continue/i }).click();
548
+ await page.waitForTimeout(5000);
549
+
550
+ // Complete phone verification (manual step required)
551
+ // User must verify phone number
552
+ ```
553
+
554
+ ---
555
+
556
+ ## Manual Steps (If Automation Fails)
557
+
558
+ ### Common Issues and Solutions
559
+
560
+ 1. **Business Email Validation Error:**
561
+ - Ensure email uses domain matching website (not @gmail.com)
562
+ - Verify email is set up and working
563
+ - Check DNS records are configured correctly
564
+
565
+ 2. **Billing Account Domain Mismatch:**
566
+ - Add business email as billing account administrator
567
+ - Or set up Google Cloud Identity for user's domain
568
+ - Wait for email verification
569
+
570
+ 3. **Dropdown Not Opening:**
571
+ - Try clicking multiple times
572
+ - Use keyboard navigation (Tab, Enter, Arrow keys)
573
+ - Use `page.evaluate()` for direct DOM manipulation
574
+
575
+ 4. **Element Not Found:**
576
+ - Wait longer for page to load
577
+ - Check if element is in iframe
578
+ - Use more generic selectors
579
+
580
+ ---
581
+
582
+ ## Verification
583
+
584
+ ### Check Application Status
585
+
586
+ ```javascript
587
+ // Navigate to Google Cloud for Startups dashboard (if available)
588
+ // Or check email for confirmation
589
+ await page.goto('https://cloud.google.com/startup');
590
+ await page.waitForTimeout(3000);
591
+ ```
592
+
593
+ ---
594
+
595
+ ## Expected Outcomes
596
+
597
+ - **Application Submitted:** Confirmation page or email
598
+ - **Processing Time:** 3-5 business days (or 7-10 for new billing accounts)
599
+ - **Approval Email:** Sent to business email address
600
+ - **Credits Added:** Automatically deposited to billing account upon approval
601
+
602
+ ---
603
+
604
+ ## Troubleshooting
605
+
606
+ ### If Application Fails
607
+
608
+ 1. **Check Browser Console:**
609
+ ```javascript
610
+ page.on('console', msg => console.log('Browser console:', msg.text()));
611
+ ```
612
+
613
+ 2. **Take Screenshot:**
614
+ ```javascript
615
+ await page.screenshot({ path: 'google-cloud-application-error.png', fullPage: true });
616
+ ```
617
+
618
+ 3. **Check Validation Errors:**
619
+ ```javascript
620
+ const errors = await page.locator('[role="alert"], .error, [class*="error"]').all();
621
+ for (const error of errors) {
622
+ console.log('Error:', await error.textContent());
623
+ }
624
+ ```
625
+
626
+ ---
627
+
628
+ ## Next Steps After Submission
629
+
630
+ 1. **Monitor Email:** Check user's business email for approval notification
631
+ 2. **Check Billing Dashboard:** Verify credits appear in Google Cloud Console
632
+ 3. **Follow Up:** If no response after 10 business days, contact Google Cloud support
633
+
634
+ ---
635
+
636
+ ## Resources
637
+
638
+ - **Google Cloud for Startups:** https://cloud.google.com/startup
639
+ - **Application Page:** https://cloud.google.com/startup/apply
640
+ - **Billing Console:** https://console.cloud.google.com/billing
641
+ - **Cloud Identity Setup:** https://workspace.google.com/gcpidentity/signup?sku=identitybasic
642
+
643
+ ---
644
+
645
+ **Last Updated:** November 2025
646
+ **Status:** Ready for automation
647
+ **Credits:** Up to $350,000 USD (AI Tier) or $200,000 USD (Scale Tier)