@funnelsgrove/cli 0.1.15 → 0.1.19

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 (293) hide show
  1. package/contracts/step-contract-v2.json +733 -0
  2. package/dist/analyticsOutput.d.ts +30 -15
  3. package/dist/analyticsOutput.js +45 -28
  4. package/dist/apiClient.d.ts +85 -0
  5. package/dist/apiClient.js +225 -8
  6. package/dist/cli.d.ts +149 -1
  7. package/dist/cli.js +1234 -71
  8. package/dist/diagnosticOutput.d.ts +42 -0
  9. package/dist/diagnosticOutput.js +83 -0
  10. package/dist/docsOutput.d.ts +19 -0
  11. package/dist/docsOutput.js +73 -0
  12. package/dist/docsTransaction.d.ts +81 -0
  13. package/dist/docsTransaction.js +1755 -0
  14. package/dist/funnelValidation.d.ts +14 -0
  15. package/dist/funnelValidation.js +297 -0
  16. package/dist/localSync.d.ts +79 -0
  17. package/dist/localSync.js +400 -29
  18. package/dist/projectValidator.d.ts +27 -0
  19. package/dist/projectValidator.js +208 -0
  20. package/dist/reskin.js +27 -1
  21. package/dist/stepContractMigration.d.ts +71 -0
  22. package/dist/stepContractMigration.js +1323 -0
  23. package/dist/templateDocs.js +8 -25
  24. package/docs-release-history.json +66 -0
  25. package/legacy-docs-catalog.json +1012 -0
  26. package/package.json +13 -4
  27. package/template_docs/.funnelsgrove-docs.json +144 -0
  28. package/template_docs/AGENTS.md +30 -58
  29. package/template_docs/CLAUDE.md +0 -2
  30. package/template_docs/docs/funnelsgrove/START-HERE.md +73 -0
  31. package/template_docs/docs/funnelsgrove/contracts/analytics-events.md +59 -0
  32. package/template_docs/docs/funnelsgrove/contracts/content-answers.md +44 -0
  33. package/template_docs/docs/funnelsgrove/contracts/flow-routing.md +41 -0
  34. package/template_docs/docs/funnelsgrove/contracts/payments.md +42 -0
  35. package/template_docs/docs/funnelsgrove/contracts/step-metadata.md +57 -0
  36. package/template_docs/docs/funnelsgrove/migrations/step-contract-v3.md +39 -0
  37. package/template_docs/docs/funnelsgrove/qa/analytics.md +43 -0
  38. package/template_docs/docs/funnelsgrove/qa/local.md +42 -0
  39. package/template_docs/docs/funnelsgrove/qa/paywall-checkout.md +55 -0
  40. package/template_docs/docs/funnelsgrove/qa/publish.md +32 -0
  41. package/template_docs/docs/funnelsgrove/recipes/add-experiment.md +34 -0
  42. package/template_docs/docs/funnelsgrove/recipes/add-step.md +33 -0
  43. package/template_docs/docs/funnelsgrove/recipes/edit-step.md +31 -0
  44. package/template_docs/docs/funnelsgrove/steps/INDEX.md +26 -0
  45. package/template_docs/docs/funnelsgrove/steps/cancellation_offer.md +112 -0
  46. package/template_docs/docs/funnelsgrove/steps/checkout.md +120 -0
  47. package/template_docs/docs/funnelsgrove/steps/form_input.md +115 -0
  48. package/template_docs/docs/funnelsgrove/steps/intro_hero.md +110 -0
  49. package/template_docs/docs/funnelsgrove/steps/multi_select_choice.md +123 -0
  50. package/template_docs/docs/funnelsgrove/steps/paywall_offer.md +115 -0
  51. package/template_docs/docs/funnelsgrove/steps/progress_interstitial.md +111 -0
  52. package/template_docs/docs/funnelsgrove/steps/purchase_completed.md +117 -0
  53. package/template_docs/docs/funnelsgrove/steps/single_step_choice.md +122 -0
  54. package/template_docs/docs/funnelsgrove/steps/single_step_choice_emoji.md +122 -0
  55. package/template_docs/docs/funnelsgrove/steps/social_proof.md +110 -0
  56. package/template_docs/docs/funnelsgrove/steps/subscription_handoff.md +113 -0
  57. package/template_docs/docs/funnelsgrove/steps/subscription_management.md +112 -0
  58. package/template_docs/docs/funnelsgrove/steps/summary_confirmation.md +110 -0
  59. package/template_docs/docs/funnelsgrove/steps/upsell_offer.md +112 -0
  60. package/template_docs/docs/funnelsgrove/steps/value_prop_story.md +110 -0
  61. package/template_docs/funnel-docs.config.json +43 -0
  62. package/template_scaffold/.env.example +41 -0
  63. package/template_scaffold/.funnelsgrove-contract-tools.json +19 -0
  64. package/template_scaffold/.funnelsgrove-docs.json +144 -0
  65. package/template_scaffold/.funnelsgrove-scaffold.json +1078 -0
  66. package/template_scaffold/AGENTS.md +42 -0
  67. package/template_scaffold/CLAUDE.md +1 -0
  68. package/template_scaffold/PLAN.md +81 -0
  69. package/template_scaffold/PRODUCT_SENSE.md +28 -0
  70. package/template_scaffold/context/build-context.md +34 -0
  71. package/template_scaffold/docs/AGENT_FUNNEL_IMPLEMENTATION_SPEC.md +5 -0
  72. package/template_scaffold/docs/ARCHITECTURE.md +5 -0
  73. package/template_scaffold/docs/FLOW_CONFIG_AND_ROUTING.md +5 -0
  74. package/template_scaffold/docs/PAYWALL_AND_PAYMENTS.md +5 -0
  75. package/template_scaffold/docs/README.md +5 -0
  76. package/template_scaffold/docs/funnelsgrove/START-HERE.md +73 -0
  77. package/template_scaffold/docs/funnelsgrove/contracts/analytics-events.md +59 -0
  78. package/template_scaffold/docs/funnelsgrove/contracts/content-answers.md +44 -0
  79. package/template_scaffold/docs/funnelsgrove/contracts/flow-routing.md +41 -0
  80. package/template_scaffold/docs/funnelsgrove/contracts/payments.md +42 -0
  81. package/template_scaffold/docs/funnelsgrove/contracts/step-metadata.md +57 -0
  82. package/template_scaffold/docs/funnelsgrove/migrations/step-contract-v3.md +39 -0
  83. package/template_scaffold/docs/funnelsgrove/qa/analytics.md +43 -0
  84. package/template_scaffold/docs/funnelsgrove/qa/local.md +42 -0
  85. package/template_scaffold/docs/funnelsgrove/qa/paywall-checkout.md +55 -0
  86. package/template_scaffold/docs/funnelsgrove/qa/publish.md +32 -0
  87. package/template_scaffold/docs/funnelsgrove/recipes/add-experiment.md +34 -0
  88. package/template_scaffold/docs/funnelsgrove/recipes/add-step.md +33 -0
  89. package/template_scaffold/docs/funnelsgrove/recipes/edit-step.md +31 -0
  90. package/template_scaffold/docs/funnelsgrove/steps/INDEX.md +26 -0
  91. package/template_scaffold/docs/funnelsgrove/steps/cancellation_offer.md +112 -0
  92. package/template_scaffold/docs/funnelsgrove/steps/checkout.md +120 -0
  93. package/template_scaffold/docs/funnelsgrove/steps/form_input.md +115 -0
  94. package/template_scaffold/docs/funnelsgrove/steps/intro_hero.md +110 -0
  95. package/template_scaffold/docs/funnelsgrove/steps/multi_select_choice.md +123 -0
  96. package/template_scaffold/docs/funnelsgrove/steps/paywall_offer.md +115 -0
  97. package/template_scaffold/docs/funnelsgrove/steps/progress_interstitial.md +111 -0
  98. package/template_scaffold/docs/funnelsgrove/steps/purchase_completed.md +117 -0
  99. package/template_scaffold/docs/funnelsgrove/steps/single_step_choice.md +122 -0
  100. package/template_scaffold/docs/funnelsgrove/steps/single_step_choice_emoji.md +122 -0
  101. package/template_scaffold/docs/funnelsgrove/steps/social_proof.md +110 -0
  102. package/template_scaffold/docs/funnelsgrove/steps/subscription_handoff.md +113 -0
  103. package/template_scaffold/docs/funnelsgrove/steps/subscription_management.md +112 -0
  104. package/template_scaffold/docs/funnelsgrove/steps/summary_confirmation.md +110 -0
  105. package/template_scaffold/docs/funnelsgrove/steps/upsell_offer.md +112 -0
  106. package/template_scaffold/docs/funnelsgrove/steps/value_prop_story.md +110 -0
  107. package/template_scaffold/docs/references/funnel-sdk-user-answers.md +5 -0
  108. package/template_scaffold/eslint.config.mjs +16 -0
  109. package/template_scaffold/funnel-agent-docs.test.ts +699 -0
  110. package/template_scaffold/funnel-docs.config.json +43 -0
  111. package/template_scaffold/funnel.config.json +5 -0
  112. package/template_scaffold/gitignore.template +5 -0
  113. package/template_scaffold/next-env.d.ts +6 -0
  114. package/template_scaffold/next.config.ts +53 -0
  115. package/template_scaffold/package-lock.json +7737 -0
  116. package/template_scaffold/package.json +37 -0
  117. package/template_scaffold/package.test.ts +23 -0
  118. package/template_scaffold/public/claimbee/bee.png +0 -0
  119. package/template_scaffold/public/claimbee/device-iphone.png +0 -0
  120. package/template_scaffold/public/claimbee/device-macbook.png +0 -0
  121. package/template_scaffold/public/claimbee/device-none.png +0 -0
  122. package/template_scaffold/public/claimbee/device-watch.png +0 -0
  123. package/template_scaffold/public/claimbee/glow.svg +3 -0
  124. package/template_scaffold/public/claimbee/steps-sprite-alt.png +0 -0
  125. package/template_scaffold/public/claimbee/steps-sprite-default.png +0 -0
  126. package/template_scaffold/public/claimbee/testimonial-avatar.png +0 -0
  127. package/template_scaffold/public/claimbee/testimonial-star.svg +3 -0
  128. package/template_scaffold/public/paywall/ai-claim-assistant.png +0 -0
  129. package/template_scaffold/public/paywall/claim-history.png +0 -0
  130. package/template_scaffold/public/paywall/clear-progress.png +0 -0
  131. package/template_scaffold/public/paywall/hero.png +0 -0
  132. package/template_scaffold/public/paywall/money-alerts.png +0 -0
  133. package/template_scaffold/public/paywall/money-back-badge.png +0 -0
  134. package/template_scaffold/public/paywall/paywall-image.png +0 -0
  135. package/template_scaffold/public/paywall/r1.png +0 -0
  136. package/template_scaffold/public/paywall/r2.png +0 -0
  137. package/template_scaffold/public/paywall/r3.png +0 -0
  138. package/template_scaffold/public/paywall/r4.png +0 -0
  139. package/template_scaffold/public/paywall/r5.png +0 -0
  140. package/template_scaffold/public/paywall/r6.png +0 -0
  141. package/template_scaffold/public/paywall/special-offer-gift.png +0 -0
  142. package/template_scaffold/public/please/bee.png +0 -0
  143. package/template_scaffold/public/please/device-iphone.png +0 -0
  144. package/template_scaffold/public/please/device-macbook.png +0 -0
  145. package/template_scaffold/public/please/device-none.png +0 -0
  146. package/template_scaffold/public/please/device-watch.png +0 -0
  147. package/template_scaffold/public/please/glow.svg +3 -0
  148. package/template_scaffold/public/please/steps-sprite-alt.png +0 -0
  149. package/template_scaffold/public/please/steps-sprite-default.png +0 -0
  150. package/template_scaffold/public/please/testimonial-avatar.png +0 -0
  151. package/template_scaffold/public/please/testimonial-star.svg +3 -0
  152. package/template_scaffold/public/upsell/upgrade-hero.png +0 -0
  153. package/template_scaffold/src/app/[stepId]/page.test.tsx +59 -0
  154. package/template_scaffold/src/app/[stepId]/page.tsx +62 -0
  155. package/template_scaffold/src/app/globals.css +49 -0
  156. package/template_scaffold/src/app/layout.test.ts +26 -0
  157. package/template_scaffold/src/app/layout.tsx +61 -0
  158. package/template_scaffold/src/app/page.tsx +8 -0
  159. package/template_scaffold/src/app/sdk/page.tsx +673 -0
  160. package/template_scaffold/src/app/subscription-dashboard/page.tsx +274 -0
  161. package/template_scaffold/src/assets/claimbee/bee.png +0 -0
  162. package/template_scaffold/src/assets/claimbee/device-iphone.png +0 -0
  163. package/template_scaffold/src/assets/claimbee/device-macbook.png +0 -0
  164. package/template_scaffold/src/assets/claimbee/device-none.png +0 -0
  165. package/template_scaffold/src/assets/claimbee/device-watch.png +0 -0
  166. package/template_scaffold/src/assets/claimbee/glow.svg +3 -0
  167. package/template_scaffold/src/assets/claimbee/steps-sprite-alt.png +0 -0
  168. package/template_scaffold/src/assets/claimbee/steps-sprite-default.png +0 -0
  169. package/template_scaffold/src/assets/claimbee/testimonial-avatar.png +0 -0
  170. package/template_scaffold/src/assets/claimbee/testimonial-star.svg +3 -0
  171. package/template_scaffold/src/components/FunnelEditorPanel.tsx +194 -0
  172. package/template_scaffold/src/components/FunnelFlow.test.tsx +17 -0
  173. package/template_scaffold/src/components/FunnelFlow.tsx +114 -0
  174. package/template_scaffold/src/components/FunnelStepImage.test.ts +15 -0
  175. package/template_scaffold/src/components/FunnelStepImage.tsx +28 -0
  176. package/template_scaffold/src/components/step/FunnelStepHeader.tsx +35 -0
  177. package/template_scaffold/src/config/billing.plans.test.ts +143 -0
  178. package/template_scaffold/src/config/billing.plans.ts +69 -0
  179. package/template_scaffold/src/config/billing.test.plans.ts +32 -0
  180. package/template_scaffold/src/config/experiments.generated.ts +4 -0
  181. package/template_scaffold/src/config/experiments.test.ts +12 -0
  182. package/template_scaffold/src/config/experiments.ts +9 -0
  183. package/template_scaffold/src/config/funnel.config.ts +12 -0
  184. package/template_scaffold/src/config/funnel.manifest.test.ts +166 -0
  185. package/template_scaffold/src/config/funnel.manifest.ts +139 -0
  186. package/template_scaffold/src/config/offer-sets.generated.ts +4 -0
  187. package/template_scaffold/src/contract/funnel-project.validation.test.ts +80 -0
  188. package/template_scaffold/src/contract/funnel-project.validation.ts +44 -0
  189. package/template_scaffold/src/contract/funnel-validator.vite.config.ts +11 -0
  190. package/template_scaffold/src/contract/golden/cancellation_offer.fixture.ts +29 -0
  191. package/template_scaffold/src/contract/golden/checkout.fixture.ts +37 -0
  192. package/template_scaffold/src/contract/golden/form_input.fixture.ts +28 -0
  193. package/template_scaffold/src/contract/golden/golden-fixtures.test.ts +190 -0
  194. package/template_scaffold/src/contract/golden/intro_hero.fixture.ts +27 -0
  195. package/template_scaffold/src/contract/golden/multi_select_choice.fixture.ts +37 -0
  196. package/template_scaffold/src/contract/golden/paywall_offer.fixture.ts +30 -0
  197. package/template_scaffold/src/contract/golden/progress_interstitial.fixture.ts +28 -0
  198. package/template_scaffold/src/contract/golden/purchase_completed.fixture.ts +33 -0
  199. package/template_scaffold/src/contract/golden/single_step_choice.fixture.ts +36 -0
  200. package/template_scaffold/src/contract/golden/single_step_choice_emoji.fixture.ts +36 -0
  201. package/template_scaffold/src/contract/golden/social_proof.fixture.ts +27 -0
  202. package/template_scaffold/src/contract/golden/subscription_handoff.fixture.ts +30 -0
  203. package/template_scaffold/src/contract/golden/subscription_management.fixture.ts +29 -0
  204. package/template_scaffold/src/contract/golden/summary_confirmation.fixture.ts +27 -0
  205. package/template_scaffold/src/contract/golden/upsell_offer.fixture.ts +29 -0
  206. package/template_scaffold/src/contract/golden/value_prop_story.fixture.ts +27 -0
  207. package/template_scaffold/src/contract/validate-funnel.cli.test.ts +180 -0
  208. package/template_scaffold/src/contract/validate-funnel.cli.ts +199 -0
  209. package/template_scaffold/src/runtime/checkout-runtime-config.test.ts +60 -0
  210. package/template_scaffold/src/runtime/checkout-runtime-config.ts +26 -0
  211. package/template_scaffold/src/runtime/funnel-runtime.test.ts +25 -0
  212. package/template_scaffold/src/runtime/funnel-runtime.ts +118 -0
  213. package/template_scaffold/src/runtime/step-content-context.test.ts +38 -0
  214. package/template_scaffold/src/runtime/step-content-context.ts +65 -0
  215. package/template_scaffold/src/runtime/step-registry.ts +66 -0
  216. package/template_scaffold/src/runtime/step-variable-values.ts +31 -0
  217. package/template_scaffold/src/runtime/use-funnel-flow-controller.integration.test.ts +203 -0
  218. package/template_scaffold/src/runtime/use-funnel-flow-controller.test.ts +76 -0
  219. package/template_scaffold/src/runtime/use-funnel-flow-controller.ts +53 -0
  220. package/template_scaffold/src/steps/content/email-capture.content.ts +29 -0
  221. package/template_scaffold/src/steps/content/manage-subscription.content.ts +62 -0
  222. package/template_scaffold/src/steps/content/paywall.content.ts +191 -0
  223. package/template_scaffold/src/steps/content/step-01.content.ts +23 -0
  224. package/template_scaffold/src/steps/content/step-02.content.ts +77 -0
  225. package/template_scaffold/src/steps/content/step-03.content.ts +40 -0
  226. package/template_scaffold/src/steps/content/step-04.content.ts +49 -0
  227. package/template_scaffold/src/steps/content/step-32-paywall.content.ts +352 -0
  228. package/template_scaffold/src/steps/content/subscription-started.content.ts +68 -0
  229. package/template_scaffold/src/steps/editor/email-capture.editor.ts +58 -0
  230. package/template_scaffold/src/steps/editor/manage-subscription.editor.ts +179 -0
  231. package/template_scaffold/src/steps/editor/paywall.editor.ts +232 -0
  232. package/template_scaffold/src/steps/editor/step-01.editor.ts +22 -0
  233. package/template_scaffold/src/steps/editor/step-02.editor.ts +41 -0
  234. package/template_scaffold/src/steps/editor/step-03.editor.ts +58 -0
  235. package/template_scaffold/src/steps/editor/step-04.editor.ts +98 -0
  236. package/template_scaffold/src/steps/editor/step-32-paywall.editor.ts +478 -0
  237. package/template_scaffold/src/steps/editor/subscription-started.editor.ts +131 -0
  238. package/template_scaffold/src/steps/index.ts +25 -0
  239. package/template_scaffold/src/steps/paywall-checkout-options.test.ts +104 -0
  240. package/template_scaffold/src/steps/paywall-checkout-options.ts +130 -0
  241. package/template_scaffold/src/steps/pricing/paywall-b.pricing.ts +12 -0
  242. package/template_scaffold/src/steps/pricing/paywall.pricing.ts +12 -0
  243. package/template_scaffold/src/steps/pricing/shared-plan-order.ts +17 -0
  244. package/template_scaffold/src/steps/pricing/upsell-form.pricing.ts +16 -0
  245. package/template_scaffold/src/steps/shared-header-contract.test.ts +27 -0
  246. package/template_scaffold/src/steps/step-01.test.ts +38 -0
  247. package/template_scaffold/src/steps/step-01.tsx +108 -0
  248. package/template_scaffold/src/steps/step-02.test.ts +43 -0
  249. package/template_scaffold/src/steps/step-02.tsx +140 -0
  250. package/template_scaffold/src/steps/step-03.test.ts +15 -0
  251. package/template_scaffold/src/steps/step-03.tsx +262 -0
  252. package/template_scaffold/src/steps/step-04.test.ts +32 -0
  253. package/template_scaffold/src/steps/step-04.tsx +673 -0
  254. package/template_scaffold/src/steps/step-31-email-capture.test.ts +22 -0
  255. package/template_scaffold/src/steps/step-31-email-capture.tsx +195 -0
  256. package/template_scaffold/src/steps/step-32-paywall.test.ts +770 -0
  257. package/template_scaffold/src/steps/step-32-paywall.tsx +2253 -0
  258. package/template_scaffold/src/steps/step-32b-paywall-b.tsx +35 -0
  259. package/template_scaffold/src/steps/step-33-subscription-started.test.ts +26 -0
  260. package/template_scaffold/src/steps/step-33-subscription-started.tsx +86 -0
  261. package/template_scaffold/src/steps/step-34-upsell-form.test.ts +27 -0
  262. package/template_scaffold/src/steps/step-35-manage-subscription.tsx +46 -0
  263. package/template_scaffold/src/steps/step-content.registry.ts +45 -0
  264. package/template_scaffold/src/steps/step-image-migration.test.ts +20 -0
  265. package/template_scaffold/src/steps/styles/index.css +2 -0
  266. package/template_scaffold/src/steps/styles/shared/final-flow-shared.css +55 -0
  267. package/template_scaffold/src/steps/styles/shared/funnel-base.css +543 -0
  268. package/template_scaffold/src/steps/styles/shared/info-shared.css +139 -0
  269. package/template_scaffold/src/steps/styles/shared/progress-shared.css +117 -0
  270. package/template_scaffold/src/steps/styles/shared/question-shared.css +76 -0
  271. package/template_scaffold/src/steps/styles/shared/responsive-container.css +176 -0
  272. package/template_scaffold/src/steps/types.ts +7 -0
  273. package/template_scaffold/src/steps/use-claimbee-step-content.ts +15 -0
  274. package/template_scaffold/src/theme/theme.ts +81 -0
  275. package/template_scaffold/tsconfig.json +38 -0
  276. package/template_scaffold/vitest.config.ts +32 -0
  277. package/template_validation/.funnelsgrove-contract-tools.json +19 -0
  278. package/template_validation/src/contract/funnel-project.validation.ts +44 -0
  279. package/template_validation/src/contract/funnel-validator.vite.config.ts +11 -0
  280. package/template_validation/src/contract/validate-funnel.cli.ts +199 -0
  281. package/template_docs/docs/ab-experiments.md +0 -111
  282. package/template_docs/docs/analytics.md +0 -65
  283. package/template_docs/docs/editing-flow.md +0 -136
  284. package/template_docs/docs/editing-step.md +0 -125
  285. package/template_docs/docs/editor-and-content.md +0 -58
  286. package/template_docs/docs/funnel-runtime-architecture.md +0 -125
  287. package/template_docs/docs/meta-pixel-conversions-api.md +0 -50
  288. package/template_docs/docs/payment-plans-and-discounts.md +0 -106
  289. package/template_docs/docs/publishing-and-versioning.md +0 -117
  290. package/template_docs/docs/qa-checklist.md +0 -80
  291. package/template_docs/docs/sdk-api-endpoints.md +0 -78
  292. package/template_docs/docs/step-ui-guidelines.md +0 -110
  293. package/template_docs/docs/theme.md +0 -35
@@ -0,0 +1,352 @@
1
+ import type {
2
+ InfoItem,
3
+ LinkItem,
4
+ LocalizedStepContent,
5
+ QaItem,
6
+ QuoteItem,
7
+ StepImage,
8
+ } from '@funnelsgrove/runtime';
9
+
10
+ type StepPaywallLocaleContent = {
11
+ loadingLabel: string;
12
+ topBarDiscountLabel: string;
13
+ topBarCtaLabel: string;
14
+ countdownUnits: readonly string[];
15
+ hero: {
16
+ pills: readonly string[];
17
+ image: StepImage;
18
+ };
19
+ promo: {
20
+ ariaLabel: string;
21
+ initialLabel: string;
22
+ upgradedLabel: string;
23
+ };
24
+ highlight: {
25
+ title: readonly string[];
26
+ description: string;
27
+ };
28
+ plans: {
29
+ title: string;
30
+ cardButtonLabel: string;
31
+ metaLabels: readonly string[];
32
+ stripeUnavailableNote: string;
33
+ };
34
+ checkout: {
35
+ title: string;
36
+ summaryTitle: string;
37
+ closeAriaLabel: string;
38
+ walletPlaceholderLabel: string;
39
+ googlePayPlaceholderLabel: string;
40
+ walletButtonLabel: string;
41
+ customerEmailLabel: string;
42
+ customerEmailPlaceholder: string;
43
+ customerEmailInvalidMessage: string;
44
+ countdownLabel: string;
45
+ satisfactionPercent: string;
46
+ satisfactionLabel: string;
47
+ originalPriceLabel: string;
48
+ discountLabelTemplate: string;
49
+ discountRowLabelTemplate: string;
50
+ promoCodeLabel: string;
51
+ savedLabelTemplate: string;
52
+ totalLabel: string;
53
+ summaryGuaranteeLabel: string;
54
+ submitLabel: string;
55
+ cardSubmitLabel: string;
56
+ paypalLabel: string;
57
+ paypalButtonLabel: string;
58
+ processingLabel: string;
59
+ secureLabel: string;
60
+ poweredByLabel: string;
61
+ paymentMethodLabels: readonly string[];
62
+ legalPrefix: string;
63
+ legalLinks: readonly LinkItem[];
64
+ supportText: string;
65
+ renewalTemplate: string;
66
+ specialOffer: {
67
+ image: StepImage;
68
+ discountLabel: string;
69
+ title: string;
70
+ description: string;
71
+ buttonLabel: string;
72
+ };
73
+ };
74
+ featureGrid: {
75
+ title: readonly string[];
76
+ subtitle: string;
77
+ assistant: InfoItem;
78
+ quickFeatures: readonly InfoItem[];
79
+ history: InfoItem;
80
+ detailedFeatures: readonly InfoItem[];
81
+ };
82
+ stories: {
83
+ title: string;
84
+ items: readonly QuoteItem[];
85
+ };
86
+ faq: {
87
+ title: string;
88
+ items: readonly QaItem[];
89
+ };
90
+ guarantee: {
91
+ image: StepImage;
92
+ title: string;
93
+ description: string;
94
+ links: readonly LinkItem[];
95
+ };
96
+ };
97
+
98
+ export const stepPaywallContent = {
99
+ defaultLocale: 'en',
100
+ locales: {
101
+ en: {
102
+ loadingLabel: 'Loading...',
103
+ topBarDiscountLabel: '⏰ Discount Expires in',
104
+ topBarCtaLabel: 'GET MY PLAN',
105
+ countdownUnits: ['minutes', 'seconds'],
106
+ hero: {
107
+ pills: ['Find hidden money and', "claim what's yours"],
108
+ image: {
109
+ src: '/paywall/hero.png',
110
+ alt: 'ClaimBee family illustration',
111
+ },
112
+ },
113
+ promo: {
114
+ ariaLabel: 'Applied promo code',
115
+ initialLabel: '% Your promo code applied!',
116
+ upgradedLabel: 'New promo code applied!',
117
+ },
118
+ highlight: {
119
+ title: ['Get money you', 'didn’t know about'],
120
+ description:
121
+ 'Discover settlement payouts you’re owed from past purchases, ClaimBee finds them for you.',
122
+ },
123
+ plans: {
124
+ title: 'Choose your plan',
125
+ cardButtonLabel: 'GET MY PLAN',
126
+ metaLabels: ['Money-back guarantee', 'Cancel anytime'],
127
+ stripeUnavailableNote:
128
+ 'Stripe publishable key is not available in this app runtime. Update the project payment environment variables or make sure your SDK publishable key maps to a funnel with Stripe settings.',
129
+ },
130
+ checkout: {
131
+ title: 'Checkout',
132
+ summaryTitle: 'Order summary',
133
+ closeAriaLabel: 'Close checkout',
134
+ walletPlaceholderLabel: 'Subscribe with Apple Pay',
135
+ googlePayPlaceholderLabel: 'Subscribe with Google Pay',
136
+ walletButtonLabel: 'Apple Pay',
137
+ customerEmailLabel: 'Email',
138
+ customerEmailPlaceholder: 'Enter your email',
139
+ customerEmailInvalidMessage: 'Enter a valid email address to continue.',
140
+ countdownLabel: 'Discount expires in',
141
+ satisfactionPercent: '91%',
142
+ satisfactionLabel: 'of users are satisfied with the plan and stay with us after its completion',
143
+ originalPriceLabel: 'Regular Price',
144
+ discountLabelTemplate: '{percent}% OFF',
145
+ discountRowLabelTemplate: 'Your {percent}% Discount',
146
+ promoCodeLabel: 'Applied promo code:',
147
+ savedLabelTemplate: 'You just saved {amount} ({percent}% OFF)',
148
+ totalLabel: 'Total',
149
+ summaryGuaranteeLabel: '30 days moneyback guarantee. Cancel anytime.',
150
+ submitLabel: 'CONTINUE',
151
+ cardSubmitLabel: 'Confirm payment',
152
+ paypalLabel: 'PayPal',
153
+ paypalButtonLabel: 'PayPal Buy Now',
154
+ processingLabel: 'PROCESSING...',
155
+ secureLabel: 'Pay safe & secure',
156
+ poweredByLabel: 'Powered by Stripe',
157
+ paymentMethodLabels: ['Visa', 'Mastercard', 'Maestro', 'Discover'],
158
+ legalPrefix: 'By proceeding you agree to our',
159
+ legalLinks: [
160
+ {
161
+ id: 'terms',
162
+ label: 'Terms of Service',
163
+ href: '/terms',
164
+ },
165
+ {
166
+ id: 'privacy',
167
+ label: 'Privacy Policy',
168
+ href: '/privacy',
169
+ },
170
+ {
171
+ id: 'subscription-policy',
172
+ label: 'Subscription Policy',
173
+ href: '/subscription-policy',
174
+ },
175
+ ],
176
+ supportText: 'Need help? Contact us at',
177
+ renewalTemplate:
178
+ "You'll be charged {amount} today for your selected plan. Your subscription renews automatically unless cancelled at least 24 hours before renewal date.",
179
+ specialOffer: {
180
+ image: {
181
+ src: '/paywall/special-offer-gift.png',
182
+ alt: 'Gift box with offer label',
183
+ },
184
+ discountLabel: '-46%',
185
+ title: 'Special Offer',
186
+ description:
187
+ 'We want you to feel loved and happy so we are offering you a discount to try our proven learning program',
188
+ buttonLabel: 'GET DISCOUNT',
189
+ },
190
+ },
191
+ featureGrid: {
192
+ title: ['Find, track, and claim', 'in one place'],
193
+ subtitle:
194
+ 'One app shows all your options and helps you complete real claims for real payouts',
195
+ assistant: {
196
+ id: 'assistant',
197
+ title: 'AI claim assistant',
198
+ description:
199
+ 'It reviews your info, finds matches, and shows you what to do next',
200
+ image: {
201
+ src: '/paywall/ai-claim-assistant.png',
202
+ alt: 'AI claim assistant illustration',
203
+ },
204
+ },
205
+ quickFeatures: [
206
+ {
207
+ id: 'eligibility',
208
+ title: 'Get instant\neligibility checks',
209
+ },
210
+ {
211
+ id: 'potential',
212
+ title: 'See how much\nyou could claim',
213
+ },
214
+ {
215
+ id: 'settlements',
216
+ title: '100+ new\nsettlements found\nevery month',
217
+ },
218
+ {
219
+ id: 'unlimited',
220
+ title: 'Unlimited\nclaim checks',
221
+ },
222
+ ],
223
+ history: {
224
+ id: 'history',
225
+ title: 'Claim for your own past\nbuys, bills, or services',
226
+ image: {
227
+ src: '/paywall/claim-history.png',
228
+ alt: 'Past claims illustration',
229
+ },
230
+ },
231
+ detailedFeatures: [
232
+ {
233
+ id: 'tracking',
234
+ title: 'Clear progress\nand tracking',
235
+ description:
236
+ 'See which claims you started, submitted, and are waiting to be paid.',
237
+ image: {
238
+ src: '/paywall/clear-progress.png',
239
+ alt: 'Claim progress illustration',
240
+ },
241
+ },
242
+ {
243
+ id: 'alerts',
244
+ title: 'Personalized\nMoney Alerts',
245
+ description:
246
+ 'Instant alerts when we find a new settlement you could qualify for.',
247
+ image: {
248
+ src: '/paywall/money-alerts.png',
249
+ alt: 'Money alert illustration',
250
+ },
251
+ },
252
+ ],
253
+ },
254
+ stories: {
255
+ title: 'Stories from our users',
256
+ items: [
257
+ {
258
+ id: 'elizabeth',
259
+ quote:
260
+ 'I realized ClaimBee saves me more money than it costs - this pays for itself',
261
+ author: 'Elizabeth L.',
262
+ },
263
+ {
264
+ id: 'tom',
265
+ quote:
266
+ 'These are settlements I never saw anywhere online - I would’ve missed all of this.',
267
+ author: 'Tom J.',
268
+ },
269
+ {
270
+ id: 'maria',
271
+ quote:
272
+ 'It just told me instantly whether I’m eligible - no reading the legal stuff myself.',
273
+ author: 'Maria G.',
274
+ },
275
+ {
276
+ id: 'alex',
277
+ quote: 'All I did was confirm and click - it handled the rest.',
278
+ author: 'Alex M.',
279
+ },
280
+ {
281
+ id: 'peter',
282
+ quote:
283
+ 'ClaimBee told me about money I was owed even though my friends and social feeds never mentioned it.',
284
+ author: 'Peter P.',
285
+ },
286
+ {
287
+ id: 'michael',
288
+ quote:
289
+ 'Even if I unsubscribe, I feel like I got my money’s worth with just one claim.',
290
+ author: 'Michael M.',
291
+ },
292
+ ],
293
+ },
294
+ faq: {
295
+ title: 'More things you might want to know',
296
+ items: [
297
+ {
298
+ id: 'faq-lawsuits',
299
+ question:
300
+ 'Do you only cover the big, famous lawsuits, or do you track smaller ones too?',
301
+ answer:
302
+ 'We track it all. From massive data breaches to niche product recalls and local class actions, our database is comprehensive.\n\nOur goal is your complete financial security regarding owed compensation, so if there is an eligible settlement active in your region, we aim to have it in the app, regardless of how "famous" the case is.',
303
+ },
304
+ {
305
+ id: 'faq-receipt',
306
+ question:
307
+ 'What if there’s a settlement for an item I bought years ago and I don’t have the receipt?',
308
+ answer:
309
+ 'Don’t worry, this is very common. Many settlements do not require proof of purchase for smaller claim amounts.\n\nFurthermore, ClaimBee can help you search your connected digital history for records you might have forgotten existed, helping you "restore" a claim you might have otherwise abandoned.',
310
+ },
311
+ {
312
+ id: 'faq-scam',
313
+ question:
314
+ 'This sounds too good to be true. Is this a scam or a "free money" scheme?',
315
+ answer:
316
+ 'Not at all. We aren’t generating "free money"; we are simply helping you claim money that is already yours legally.\n\nSettlements are court-ordered compensations for wrongdoings. ClaimBee is just a tool that organizes this fragmented legal data to make the process accessible, transparent, and manageable for you.',
317
+ },
318
+ {
319
+ id: 'faq-approval',
320
+ question:
321
+ 'If I file through an app, is my claim less likely to be approved than if I filed on the official website?',
322
+ answer:
323
+ 'No. When you submit through ClaimBee, we generate the exact information and forms required by the settlement administrator.\n\nThe legal validity is the same; we just make the experience of filling it out much faster and less prone to errors than the manual method.',
324
+ },
325
+ {
326
+ id: 'faq-fees',
327
+ question:
328
+ 'Are there hidden fees? Will you take a cut of my small settlement?',
329
+ answer:
330
+ 'We believe in total transparency. We do not take a surprise commission from your settlement checks.\n\nOur business model is upfront (e.g., subscription or freemium features), ensuring that the money you claim stays in your pocket.',
331
+ },
332
+ ],
333
+ },
334
+ guarantee: {
335
+ image: {
336
+ src: '/paywall/money-back-badge.png',
337
+ alt: '30 day money back guarantee badge',
338
+ },
339
+ title: 'Money-Back guarantee',
340
+ description:
341
+ 'We’re confident in our service and results. If you’re not satisfied, let us know within 30 days of purchase for a full refund. You must demonstrate that you followed the program. See our',
342
+ links: [
343
+ {
344
+ id: 'refund-policy',
345
+ label: 'refund policy',
346
+ href: '/refund-policy',
347
+ },
348
+ ],
349
+ },
350
+ },
351
+ },
352
+ } as const satisfies LocalizedStepContent<StepPaywallLocaleContent>;
@@ -0,0 +1,68 @@
1
+ import type { LocalizedStepContent, StoreLinkItem } from '@funnelsgrove/runtime';
2
+
3
+ export type SubscriptionStartedLocaleContent = {
4
+ kicker: string;
5
+ title: string;
6
+ copyWithQr: string;
7
+ copyWithoutQr: string;
8
+ note: string;
9
+ openAppLabel: string;
10
+ emailButtonLabel: string;
11
+ emailSubject: string;
12
+ emailIntro: string;
13
+ emailOpenAppLabel: string;
14
+ emailIosDeepLinkLabel: string;
15
+ emailAndroidDeepLinkLabel: string;
16
+ emailStoreLabels: {
17
+ ios: string;
18
+ android: string;
19
+ };
20
+ storeLinks: readonly StoreLinkItem[];
21
+ emailSentStatus: string;
22
+ autoOpenStatus: string;
23
+ qrOpenLabel: string;
24
+ };
25
+
26
+ export const subscriptionStartedContent = {
27
+ defaultLocale: 'en',
28
+ locales: {
29
+ en: {
30
+ kicker: 'Congratulations!',
31
+ title: 'Your subscription has started.',
32
+ copyWithQr:
33
+ 'Scan with your phone to install or open the app and continue inside mobile.',
34
+ copyWithoutQr: 'Open the app on your phone to continue inside mobile.',
35
+ note: 'In case the app asks you to subscribe again, open the same deep link one more time.',
36
+ openAppLabel: 'Open app now',
37
+ emailButtonLabel: 'Send link to email',
38
+ emailSubject: 'Your app link',
39
+ emailIntro: 'Your subscription is active.',
40
+ emailOpenAppLabel: 'Open app',
41
+ emailIosDeepLinkLabel: 'iPhone deep link',
42
+ emailAndroidDeepLinkLabel: 'Android deep link',
43
+ emailStoreLabels: {
44
+ ios: 'App Store',
45
+ android: 'Google Play',
46
+ },
47
+ storeLinks: [
48
+ {
49
+ id: 'ios',
50
+ eyebrow: 'Download on the',
51
+ title: 'App Store',
52
+ href: '',
53
+ variant: 'ios',
54
+ },
55
+ {
56
+ id: 'android',
57
+ eyebrow: 'Get it on',
58
+ title: 'Google Play',
59
+ href: '',
60
+ variant: 'android',
61
+ },
62
+ ],
63
+ emailSentStatus: 'Email draft opened in your mail app.',
64
+ autoOpenStatus: 'Attempted to open your app automatically.',
65
+ qrOpenLabel: 'Open app handoff link',
66
+ },
67
+ },
68
+ } as const satisfies LocalizedStepContent<SubscriptionStartedLocaleContent>;
@@ -0,0 +1,58 @@
1
+ import type { StepEditorSection } from '@funnelsgrove/runtime';
2
+
3
+ export const emailCaptureEditor: readonly StepEditorSection[] = [
4
+ {
5
+ id: 'copy',
6
+ label: 'Copy',
7
+ fields: [
8
+ {
9
+ id: 'kicker',
10
+ label: 'Kicker',
11
+ kind: 'text',
12
+ path: 'kicker',
13
+ },
14
+ {
15
+ id: 'title',
16
+ label: 'Title',
17
+ kind: 'text',
18
+ path: 'title',
19
+ },
20
+ {
21
+ id: 'description',
22
+ label: 'Description',
23
+ kind: 'textarea',
24
+ path: 'description',
25
+ },
26
+ {
27
+ id: 'fieldLabel',
28
+ label: 'Field label',
29
+ kind: 'text',
30
+ path: 'fieldLabel',
31
+ },
32
+ {
33
+ id: 'placeholder',
34
+ label: 'Placeholder',
35
+ kind: 'text',
36
+ path: 'placeholder',
37
+ },
38
+ {
39
+ id: 'submitLabel',
40
+ label: 'Submit label',
41
+ kind: 'text',
42
+ path: 'submitLabel',
43
+ },
44
+ {
45
+ id: 'submittingLabel',
46
+ label: 'Submitting label',
47
+ kind: 'text',
48
+ path: 'submittingLabel',
49
+ },
50
+ {
51
+ id: 'saveErrorMessage',
52
+ label: 'Error message',
53
+ kind: 'text',
54
+ path: 'saveErrorMessage',
55
+ },
56
+ ],
57
+ },
58
+ ] as const;
@@ -0,0 +1,179 @@
1
+ import type { StepEditorSection } from '@funnelsgrove/runtime';
2
+
3
+ export const manageSubscriptionEditor: readonly StepEditorSection[] = [
4
+ {
5
+ id: 'subscriptions',
6
+ label: 'Subscriptions',
7
+ fields: [
8
+ {
9
+ id: 'subscriptionsStage.title',
10
+ label: 'Stage title',
11
+ kind: 'text',
12
+ path: 'subscriptionsStage.title',
13
+ },
14
+ {
15
+ id: 'subscriptionsStage.loadingLabel',
16
+ label: 'Loading label',
17
+ kind: 'text',
18
+ path: 'subscriptionsStage.loadingLabel',
19
+ },
20
+ {
21
+ id: 'subscriptionsStage.emptyLabel',
22
+ label: 'Empty label',
23
+ kind: 'text',
24
+ path: 'subscriptionsStage.emptyLabel',
25
+ },
26
+ {
27
+ id: 'subscriptionsStage.listAriaLabel',
28
+ label: 'List label',
29
+ kind: 'text',
30
+ path: 'subscriptionsStage.listAriaLabel',
31
+ },
32
+ {
33
+ id: 'subscriptionsStage.supportPrefix',
34
+ label: 'Support prefix',
35
+ kind: 'text',
36
+ path: 'subscriptionsStage.supportPrefix',
37
+ },
38
+ {
39
+ id: 'subscriptionsStage.continueLabel',
40
+ label: 'Continue label',
41
+ kind: 'text',
42
+ path: 'subscriptionsStage.continueLabel',
43
+ },
44
+ {
45
+ id: 'subscriptionsStage.cancelScheduledLabel',
46
+ label: 'Cancel scheduled label',
47
+ kind: 'text',
48
+ path: 'subscriptionsStage.cancelScheduledLabel',
49
+ },
50
+ {
51
+ id: 'subscriptionsStage.notCancellableLabel',
52
+ label: 'Unavailable label',
53
+ kind: 'text',
54
+ path: 'subscriptionsStage.notCancellableLabel',
55
+ },
56
+ {
57
+ id: 'supportLink.label',
58
+ label: 'Support email',
59
+ kind: 'text',
60
+ path: 'supportLink.label',
61
+ },
62
+ {
63
+ id: 'supportLink.href',
64
+ label: 'Support link',
65
+ kind: 'text',
66
+ path: 'supportLink.href',
67
+ },
68
+ ],
69
+ },
70
+ {
71
+ id: 'reasons',
72
+ label: 'Reasons',
73
+ fields: [
74
+ {
75
+ id: 'whyStage.title',
76
+ label: 'Why title',
77
+ kind: 'text',
78
+ path: 'whyStage.title',
79
+ },
80
+ {
81
+ id: 'whyStage.reasonsAriaLabel',
82
+ label: 'Reasons label',
83
+ kind: 'text',
84
+ path: 'whyStage.reasonsAriaLabel',
85
+ },
86
+ {
87
+ id: 'whyStage.backLabel',
88
+ label: 'Back label',
89
+ kind: 'text',
90
+ path: 'whyStage.backLabel',
91
+ },
92
+ {
93
+ id: 'whyStage.reasons',
94
+ label: 'Reasons',
95
+ kind: 'list',
96
+ path: 'whyStage.reasons',
97
+ preset: 'reasonItems',
98
+ },
99
+ ],
100
+ },
101
+ {
102
+ id: 'confirm',
103
+ label: 'Confirm',
104
+ fields: [
105
+ {
106
+ id: 'confirmStage.title',
107
+ label: 'Confirm title',
108
+ kind: 'text',
109
+ path: 'confirmStage.title',
110
+ },
111
+ {
112
+ id: 'confirmStage.cancelLabel',
113
+ label: 'Cancel label',
114
+ kind: 'text',
115
+ path: 'confirmStage.cancelLabel',
116
+ },
117
+ {
118
+ id: 'confirmStage.reasonPrefix',
119
+ label: 'Reason prefix',
120
+ kind: 'text',
121
+ path: 'confirmStage.reasonPrefix',
122
+ },
123
+ {
124
+ id: 'confirmStage.selectedPlanPrefix',
125
+ label: 'Selected plan prefix',
126
+ kind: 'text',
127
+ path: 'confirmStage.selectedPlanPrefix',
128
+ },
129
+ {
130
+ id: 'confirmStage.cancellingLabel',
131
+ label: 'Cancelling label',
132
+ kind: 'text',
133
+ path: 'confirmStage.cancellingLabel',
134
+ },
135
+ {
136
+ id: 'confirmStage.backLabel',
137
+ label: 'Back label',
138
+ kind: 'text',
139
+ path: 'confirmStage.backLabel',
140
+ },
141
+ {
142
+ id: 'doneStage.title',
143
+ label: 'Done title',
144
+ kind: 'text',
145
+ path: 'doneStage.title',
146
+ },
147
+ {
148
+ id: 'doneStage.cancelledMessage',
149
+ label: 'Cancelled message',
150
+ kind: 'textarea',
151
+ path: 'doneStage.cancelledMessage',
152
+ },
153
+ {
154
+ id: 'doneStage.emptyMessage',
155
+ label: 'Empty message',
156
+ kind: 'textarea',
157
+ path: 'doneStage.emptyMessage',
158
+ },
159
+ {
160
+ id: 'doneStage.returnHomeLabel',
161
+ label: 'Return home label',
162
+ kind: 'text',
163
+ path: 'doneStage.returnHomeLabel',
164
+ },
165
+ {
166
+ id: 'errorMessages.load',
167
+ label: 'Load error',
168
+ kind: 'text',
169
+ path: 'errorMessages.load',
170
+ },
171
+ {
172
+ id: 'errorMessages.cancel',
173
+ label: 'Cancel error',
174
+ kind: 'text',
175
+ path: 'errorMessages.cancel',
176
+ },
177
+ ],
178
+ },
179
+ ] as const;