@funnelsgrove/cli 0.1.87 β 0.1.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apiClient.d.ts +1 -0
- package/dist/apiClient.js +32 -1
- package/funnel-contract-compatibility.json +28 -28
- package/package.json +3 -3
- package/template_docs/.funnelsgrove-docs.json +3 -3
- package/template_docs/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_docs/funnel-docs.config.json +1 -1
- package/template_scaffold/.funnelsgrove-docs.json +3 -3
- package/template_scaffold/.funnelsgrove-scaffold.json +26 -471
- package/template_scaffold/PLAN.md +15 -29
- package/template_scaffold/context/build-context.md +3 -3
- package/template_scaffold/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_scaffold/funnel-docs.config.json +1 -1
- package/template_scaffold/package-lock.json +9 -9
- package/template_scaffold/package.json +2 -2
- package/template_scaffold/public/assets/email-capture-preview.svg +5 -0
- package/template_scaffold/public/assets/paywall-preview.svg +6 -0
- package/template_scaffold/src/app/sdk/page.tsx +14 -26
- package/template_scaffold/src/components/FunnelFlow.tsx +8 -1
- package/template_scaffold/src/config/billing.plans.ts +71 -21
- package/template_scaffold/src/config/funnel.manifest.ts +20 -59
- package/template_scaffold/src/runtime/checkout-runtime-config.ts +0 -7
- package/template_scaffold/src/runtime/step-registry.ts +0 -28
- package/template_scaffold/src/steps/content/step-01.content.ts +4 -9
- package/template_scaffold/src/steps/content/step-32-paywall.content.ts +12 -50
- package/template_scaffold/src/steps/step-01.tsx +43 -50
- package/template_scaffold/src/steps/step-31-email-capture.tsx +18 -1
- package/template_scaffold/src/steps/step-32-paywall.tsx +93 -299
- package/template_scaffold/src/steps/step-33-subscription-started.tsx +1 -1
- package/template_scaffold/src/steps/step-content.registry.ts +1 -26
- package/template_scaffold/public/claimbee/bee.png +0 -0
- package/template_scaffold/public/claimbee/device-iphone.png +0 -0
- package/template_scaffold/public/claimbee/device-macbook.png +0 -0
- package/template_scaffold/public/claimbee/device-none.png +0 -0
- package/template_scaffold/public/claimbee/device-watch.png +0 -0
- package/template_scaffold/public/claimbee/glow.svg +0 -3
- package/template_scaffold/public/claimbee/steps-sprite-alt.png +0 -0
- package/template_scaffold/public/claimbee/steps-sprite-default.png +0 -0
- package/template_scaffold/public/claimbee/testimonial-avatar.png +0 -0
- package/template_scaffold/public/claimbee/testimonial-star.svg +0 -3
- package/template_scaffold/public/paywall/ai-claim-assistant.png +0 -0
- package/template_scaffold/public/paywall/claim-history.png +0 -0
- package/template_scaffold/public/paywall/clear-progress.png +0 -0
- package/template_scaffold/public/paywall/hero.png +0 -0
- package/template_scaffold/public/paywall/money-alerts.png +0 -0
- package/template_scaffold/public/paywall/money-back-badge.png +0 -0
- package/template_scaffold/public/paywall/paywall-image.png +0 -0
- package/template_scaffold/public/paywall/r1.png +0 -0
- package/template_scaffold/public/paywall/r2.png +0 -0
- package/template_scaffold/public/paywall/r3.png +0 -0
- package/template_scaffold/public/paywall/r4.png +0 -0
- package/template_scaffold/public/paywall/r5.png +0 -0
- package/template_scaffold/public/paywall/r6.png +0 -0
- package/template_scaffold/public/paywall/special-offer-gift.png +0 -0
- package/template_scaffold/public/please/bee.png +0 -0
- package/template_scaffold/public/please/device-iphone.png +0 -0
- package/template_scaffold/public/please/device-macbook.png +0 -0
- package/template_scaffold/public/please/device-none.png +0 -0
- package/template_scaffold/public/please/device-watch.png +0 -0
- package/template_scaffold/public/please/glow.svg +0 -3
- package/template_scaffold/public/please/steps-sprite-alt.png +0 -0
- package/template_scaffold/public/please/steps-sprite-default.png +0 -0
- package/template_scaffold/public/please/testimonial-avatar.png +0 -0
- package/template_scaffold/public/please/testimonial-star.svg +0 -3
- package/template_scaffold/public/upsell/upgrade-hero.png +0 -0
- package/template_scaffold/src/assets/claimbee/bee.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-iphone.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-macbook.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-none.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-watch.png +0 -0
- package/template_scaffold/src/assets/claimbee/glow.svg +0 -3
- package/template_scaffold/src/assets/claimbee/steps-sprite-alt.png +0 -0
- package/template_scaffold/src/assets/claimbee/steps-sprite-default.png +0 -0
- package/template_scaffold/src/assets/claimbee/testimonial-avatar.png +0 -0
- package/template_scaffold/src/assets/claimbee/testimonial-star.svg +0 -3
- package/template_scaffold/src/components/FunnelStepImage.tsx +0 -28
- package/template_scaffold/src/config/offer-sets.generated.ts +0 -4
- package/template_scaffold/src/steps/content/manage-subscription.content.ts +0 -62
- package/template_scaffold/src/steps/content/paywall.content.ts +0 -191
- package/template_scaffold/src/steps/content/step-02.content.ts +0 -77
- package/template_scaffold/src/steps/content/step-03.content.ts +0 -40
- package/template_scaffold/src/steps/content/step-04.content.ts +0 -49
- package/template_scaffold/src/steps/editor/manage-subscription.editor.ts +0 -179
- package/template_scaffold/src/steps/editor/paywall.editor.ts +0 -232
- package/template_scaffold/src/steps/editor/step-02.editor.ts +0 -41
- package/template_scaffold/src/steps/editor/step-03.editor.ts +0 -58
- package/template_scaffold/src/steps/editor/step-04.editor.ts +0 -98
- package/template_scaffold/src/steps/pricing/paywall-b.pricing.ts +0 -12
- package/template_scaffold/src/steps/step-02.tsx +0 -140
- package/template_scaffold/src/steps/step-03.tsx +0 -262
- package/template_scaffold/src/steps/step-04.tsx +0 -673
- package/template_scaffold/src/steps/step-32b-paywall-b.tsx +0 -35
- package/template_scaffold/src/steps/step-35-manage-subscription.tsx +0 -46
- package/template_scaffold/src/steps/use-claimbee-step-content.ts +0 -15
- package/template_scaffold/tests/funnel-agent-docs.test.ts +0 -751
- package/template_scaffold/tests/package.test.ts +0 -37
- package/template_scaffold/tests/src/app/[stepId]/page.test.tsx +0 -59
- package/template_scaffold/tests/src/app/layout.test.ts +0 -26
- package/template_scaffold/tests/src/components/FunnelFlow.test.tsx +0 -38
- package/template_scaffold/tests/src/components/FunnelStepImage.test.ts +0 -15
- package/template_scaffold/tests/src/config/billing.plans.test.ts +0 -143
- package/template_scaffold/tests/src/config/funnel.manifest.test.ts +0 -166
- package/template_scaffold/tests/src/contract/funnel-project.validation.test.ts +0 -79
- package/template_scaffold/tests/src/contract/golden/golden-fixtures.test.ts +0 -190
- package/template_scaffold/tests/src/contract/validate-funnel.cli.test.ts +0 -191
- package/template_scaffold/tests/src/runtime/checkout-runtime-config.test.ts +0 -60
- package/template_scaffold/tests/src/runtime/funnel-runtime.test.ts +0 -25
- package/template_scaffold/tests/src/runtime/step-content-context.test.ts +0 -38
- package/template_scaffold/tests/src/runtime/use-funnel-flow-controller.integration.test.ts +0 -203
- package/template_scaffold/tests/src/runtime/use-funnel-flow-controller.test.ts +0 -76
- package/template_scaffold/tests/src/steps/paywall-checkout-options.test.ts +0 -104
- package/template_scaffold/tests/src/steps/shared-header-contract.test.ts +0 -29
- package/template_scaffold/tests/src/steps/step-01.test.ts +0 -38
- package/template_scaffold/tests/src/steps/step-02.test.ts +0 -43
- package/template_scaffold/tests/src/steps/step-03.test.ts +0 -15
- package/template_scaffold/tests/src/steps/step-04.test.ts +0 -32
- package/template_scaffold/tests/src/steps/step-31-email-capture.test.ts +0 -22
- package/template_scaffold/tests/src/steps/step-32-paywall.test.ts +0 -773
- package/template_scaffold/tests/src/steps/step-33-subscription-started.test.ts +0 -44
- package/template_scaffold/tests/src/steps/step-34-upsell-form.test.ts +0 -27
- package/template_scaffold/tests/src/steps/step-image-migration.test.ts +0 -20
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 116 109.5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path id="Vector 11" d="M0 22.5L51 0H85L116 22.5V54.5V89L74.5 109.5L42 103L9 89L0 61.5V22.5Z" fill="var(--fill-0, #FEFDF5)"/>
|
|
3
|
-
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 16.1222 15.4039" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path id="Star 1" d="M7.37895 0.495601C7.59366 -0.165201 8.52852 -0.1652 8.74323 0.495602L10.1545 4.83902C10.2505 5.13454 10.5259 5.33462 10.8366 5.33462H15.4036C16.0984 5.33462 16.3873 6.22372 15.8251 6.63212L12.1304 9.3165C11.879 9.49914 11.7738 9.82288 11.8699 10.1184L13.2811 14.4618C13.4958 15.1226 12.7395 15.6721 12.1774 15.2637L8.48267 12.5793C8.23129 12.3967 7.89089 12.3967 7.63951 12.5793L3.94477 15.2637C3.38266 15.6721 2.62635 15.1226 2.84105 14.4618L4.25232 10.1184C4.34834 9.82288 4.24315 9.49914 3.99176 9.3165L0.297032 6.63212C-0.26508 6.22372 0.0238078 5.33462 0.718616 5.33462H5.28555C5.59628 5.33462 5.87167 5.13454 5.96769 4.83902L7.37895 0.495601Z" fill="var(--fill-0, #F28100)"/>
|
|
3
|
-
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 116 109.5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path id="Vector 11" d="M0 22.5L51 0H85L116 22.5V54.5V89L74.5 109.5L42 103L9 89L0 61.5V22.5Z" fill="var(--fill-0, #FEFDF5)"/>
|
|
3
|
-
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 16.1222 15.4039" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path id="Star 1" d="M7.37895 0.495601C7.59366 -0.165201 8.52852 -0.1652 8.74323 0.495602L10.1545 4.83902C10.2505 5.13454 10.5259 5.33462 10.8366 5.33462H15.4036C16.0984 5.33462 16.3873 6.22372 15.8251 6.63212L12.1304 9.3165C11.879 9.49914 11.7738 9.82288 11.8699 10.1184L13.2811 14.4618C13.4958 15.1226 12.7395 15.6721 12.1774 15.2637L8.48267 12.5793C8.23129 12.3967 7.89089 12.3967 7.63951 12.5793L3.94477 15.2637C3.38266 15.6721 2.62635 15.1226 2.84105 14.4618L4.25232 10.1184C4.34834 9.82288 4.24315 9.49914 3.99176 9.3165L0.297032 6.63212C-0.26508 6.22372 0.0238078 5.33462 0.718616 5.33462H5.28555C5.59628 5.33462 5.87167 5.13454 5.96769 4.83902L7.37895 0.495601Z" fill="var(--fill-0, #F28100)"/>
|
|
3
|
-
</svg>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import Image, { type ImageLoaderProps, type ImageProps } from 'next/image';
|
|
4
|
-
|
|
5
|
-
export const createFunnelStepImageLoader = () => {
|
|
6
|
-
return ({ src }: ImageLoaderProps): string => src;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
const funnelStepImageLoader = createFunnelStepImageLoader();
|
|
10
|
-
|
|
11
|
-
type FunnelStepImageProps = Omit<ImageProps, 'loader' | 'alt'> & {
|
|
12
|
-
alt: string;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export function FunnelStepImage({
|
|
16
|
-
alt,
|
|
17
|
-
unoptimized,
|
|
18
|
-
...props
|
|
19
|
-
}: FunnelStepImageProps) {
|
|
20
|
-
return (
|
|
21
|
-
<Image
|
|
22
|
-
{...props}
|
|
23
|
-
alt={alt}
|
|
24
|
-
loader={funnelStepImageLoader}
|
|
25
|
-
unoptimized={unoptimized ?? true}
|
|
26
|
-
/>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { LocalizedStepContent, ManageSubscriptionContent } from '@funnelsgrove/runtime';
|
|
2
|
-
|
|
3
|
-
export const manageSubscriptionContent = {
|
|
4
|
-
defaultLocale: 'en',
|
|
5
|
-
locales: {
|
|
6
|
-
en: {
|
|
7
|
-
subscriptionsStage: {
|
|
8
|
-
title: 'Manage your subscription',
|
|
9
|
-
loadingLabel: 'Loading your subscription...',
|
|
10
|
-
emptyLabel: 'We could not find an active subscription for your account.',
|
|
11
|
-
listAriaLabel: 'My subscriptions',
|
|
12
|
-
supportPrefix: 'Need help? Email us at',
|
|
13
|
-
continueLabel: 'Continue',
|
|
14
|
-
rowSelectedLabel: 'Selected',
|
|
15
|
-
rowSelectLabel: 'Select',
|
|
16
|
-
subscriptionSuffix: 'subscription',
|
|
17
|
-
renewsOnPrefix: 'Renews on',
|
|
18
|
-
cancelScheduledLabel: 'Ending',
|
|
19
|
-
notCancellableLabel: 'Unavailable',
|
|
20
|
-
},
|
|
21
|
-
whyStage: {
|
|
22
|
-
title: 'Tell us why you want to cancel',
|
|
23
|
-
backLabel: 'Back',
|
|
24
|
-
reasonsAriaLabel: 'Cancellation reasons',
|
|
25
|
-
reasons: [
|
|
26
|
-
{ id: 'cost', icon: 'π°', label: 'It is too expensive' },
|
|
27
|
-
{ id: 'usage', icon: 'π±', label: 'I do not use the app enough' },
|
|
28
|
-
{ id: 'onboarding', icon: 'π', label: 'I could not figure out how to use it' },
|
|
29
|
-
{ id: 'value', icon: 'π', label: 'I did not get enough value' },
|
|
30
|
-
{ id: 'alternative', icon: 'π¦', label: 'I found a better alternative' },
|
|
31
|
-
{ id: 'issues', icon: 'π οΈ', label: 'I had technical issues' },
|
|
32
|
-
{ id: 'pause', icon: 'β³', label: 'I am taking a break for now' },
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
confirmStage: {
|
|
36
|
-
title: 'Cancel your subscription',
|
|
37
|
-
reasonPrefix: 'Reason:',
|
|
38
|
-
selectedPlanPrefix: 'Selected plan:',
|
|
39
|
-
missingSelectionLabel: 'No active subscription selected.',
|
|
40
|
-
cancelLabel: 'Cancel subscription',
|
|
41
|
-
cancellingLabel: 'Cancelling...',
|
|
42
|
-
backLabel: 'Back',
|
|
43
|
-
},
|
|
44
|
-
doneStage: {
|
|
45
|
-
title: 'Subscription status updated',
|
|
46
|
-
cancelledMessage:
|
|
47
|
-
'Your cancellation request has been processed. You can return home.',
|
|
48
|
-
emptyMessage: 'We could not find an active subscription for your account.',
|
|
49
|
-
returnHomeLabel: 'Return home',
|
|
50
|
-
},
|
|
51
|
-
supportLink: {
|
|
52
|
-
id: 'support',
|
|
53
|
-
label: 'support@example.com',
|
|
54
|
-
href: 'mailto:support@example.com',
|
|
55
|
-
},
|
|
56
|
-
errorMessages: {
|
|
57
|
-
load: 'Failed to load subscriptions',
|
|
58
|
-
cancel: 'Failed to cancel subscription',
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
} as const satisfies LocalizedStepContent<ManageSubscriptionContent>;
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import type { LocalizedStepContent, QaItem, QuoteItem, StepImage } from '@funnelsgrove/runtime';
|
|
2
|
-
|
|
3
|
-
export type PaywallLocaleContent = {
|
|
4
|
-
timer: {
|
|
5
|
-
label: string;
|
|
6
|
-
ctaLabel: string;
|
|
7
|
-
};
|
|
8
|
-
hero: {
|
|
9
|
-
image: StepImage;
|
|
10
|
-
pills: readonly string[];
|
|
11
|
-
};
|
|
12
|
-
promo: {
|
|
13
|
-
label: string;
|
|
14
|
-
code: string;
|
|
15
|
-
};
|
|
16
|
-
highlight: {
|
|
17
|
-
title: readonly string[];
|
|
18
|
-
description: string;
|
|
19
|
-
};
|
|
20
|
-
plans: {
|
|
21
|
-
title: string;
|
|
22
|
-
popularLabel: string;
|
|
23
|
-
applePayLabel: string;
|
|
24
|
-
cardButtonLabel: string;
|
|
25
|
-
loadingLabel: string;
|
|
26
|
-
alternativePaymentLabel: string;
|
|
27
|
-
metaLabels: readonly string[];
|
|
28
|
-
stripeUnavailableNote: string;
|
|
29
|
-
previewFallbackLabel: string;
|
|
30
|
-
};
|
|
31
|
-
checkout: {
|
|
32
|
-
submitLabel: string;
|
|
33
|
-
processingLabel: string;
|
|
34
|
-
poweredByLabel: string;
|
|
35
|
-
};
|
|
36
|
-
stories: {
|
|
37
|
-
title: string;
|
|
38
|
-
items: readonly QuoteItem[];
|
|
39
|
-
};
|
|
40
|
-
faq: {
|
|
41
|
-
title: string;
|
|
42
|
-
items: readonly QaItem[];
|
|
43
|
-
};
|
|
44
|
-
guarantee: {
|
|
45
|
-
image: StepImage;
|
|
46
|
-
title: string;
|
|
47
|
-
description: string;
|
|
48
|
-
refundPolicyLabel: string;
|
|
49
|
-
};
|
|
50
|
-
accessibility: {
|
|
51
|
-
plansLabel: string;
|
|
52
|
-
storiesLabel: string;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const preservedStories = [
|
|
57
|
-
{
|
|
58
|
-
id: 'elizabeth',
|
|
59
|
-
quote: 'I realized this saves me more value than it costs - it pays for itself quickly.',
|
|
60
|
-
author: 'Elizabeth L.',
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
id: 'tom',
|
|
64
|
-
quote: "These are opportunities I never saw anywhere online - I would've missed all of this.",
|
|
65
|
-
author: 'Tom J.',
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
id: 'maria',
|
|
69
|
-
quote: "It just told me instantly whether I'm eligible - no reading the legal stuff myself.",
|
|
70
|
-
author: 'Maria G.',
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: 'alex',
|
|
74
|
-
quote: 'All I did was confirm and click - it handled the rest.',
|
|
75
|
-
author: 'Alex M.',
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: 'peter',
|
|
79
|
-
quote:
|
|
80
|
-
'This surfaced value I was missing even though my friends and social feeds never mentioned it.',
|
|
81
|
-
author: 'Peter P.',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
id: 'michael',
|
|
85
|
-
quote: "Even if I unsubscribe, I feel like I got my money's worth with just one claim.",
|
|
86
|
-
author: 'Michael M.',
|
|
87
|
-
},
|
|
88
|
-
] as const satisfies readonly QuoteItem[];
|
|
89
|
-
|
|
90
|
-
const preservedFaqItems = [
|
|
91
|
-
{
|
|
92
|
-
id: 'faq-lawsuits',
|
|
93
|
-
question:
|
|
94
|
-
'Do you only cover the big, famous lawsuits, or do you track smaller ones too?',
|
|
95
|
-
answer:
|
|
96
|
-
'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.',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
id: 'faq-receipt',
|
|
100
|
-
question:
|
|
101
|
-
'What if thereβs a settlement for an item I bought years ago and I donβt have the receipt?',
|
|
102
|
-
answer:
|
|
103
|
-
'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.',
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
id: 'faq-scam',
|
|
107
|
-
question: 'This sounds too good to be true. Is this a scam or a "free money" scheme?',
|
|
108
|
-
answer:
|
|
109
|
-
'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.',
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
id: 'faq-approval',
|
|
113
|
-
question:
|
|
114
|
-
'If I file through an app, is my claim less likely to be approved than if I filed on the official website?',
|
|
115
|
-
answer:
|
|
116
|
-
'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.',
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: 'faq-fees',
|
|
120
|
-
question: 'Are there hidden fees? Will you take a cut of my small settlement?',
|
|
121
|
-
answer:
|
|
122
|
-
'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.',
|
|
123
|
-
},
|
|
124
|
-
] as const satisfies readonly QaItem[];
|
|
125
|
-
|
|
126
|
-
export const paywallContent = {
|
|
127
|
-
defaultLocale: 'en',
|
|
128
|
-
locales: {
|
|
129
|
-
en: {
|
|
130
|
-
timer: {
|
|
131
|
-
label: 'Discount Expires in',
|
|
132
|
-
ctaLabel: 'Get my Plan',
|
|
133
|
-
},
|
|
134
|
-
hero: {
|
|
135
|
-
image: {
|
|
136
|
-
src: '/paywall/hero.png',
|
|
137
|
-
alt: 'ClaimBee family illustration',
|
|
138
|
-
},
|
|
139
|
-
pills: ['Find hidden money and', "claim what's yours"],
|
|
140
|
-
},
|
|
141
|
-
promo: {
|
|
142
|
-
label: 'Your promo code applied!',
|
|
143
|
-
code: 'DISCOUNT_50',
|
|
144
|
-
},
|
|
145
|
-
highlight: {
|
|
146
|
-
title: ['Get money you', "didn't know about"],
|
|
147
|
-
description:
|
|
148
|
-
"Discover settlement payouts you're owed from past purchases. ClaimBee finds them for you.",
|
|
149
|
-
},
|
|
150
|
-
plans: {
|
|
151
|
-
title: 'Choose your plan',
|
|
152
|
-
popularLabel: 'Most Popular Choice',
|
|
153
|
-
applePayLabel: 'Continue with',
|
|
154
|
-
cardButtonLabel: 'Claim my plan',
|
|
155
|
-
loadingLabel: 'Preparing your plan...',
|
|
156
|
-
alternativePaymentLabel: 'Continue with other payment options',
|
|
157
|
-
metaLabels: ['Money-back guarantee', 'Cancel anytime'],
|
|
158
|
-
stripeUnavailableNote:
|
|
159
|
-
'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.',
|
|
160
|
-
previewFallbackLabel: 'Continue in preview',
|
|
161
|
-
},
|
|
162
|
-
checkout: {
|
|
163
|
-
submitLabel: 'CONTINUE',
|
|
164
|
-
processingLabel: 'Processing...',
|
|
165
|
-
poweredByLabel: 'Powered by Stripe',
|
|
166
|
-
},
|
|
167
|
-
stories: {
|
|
168
|
-
title: 'Stories from our users',
|
|
169
|
-
items: preservedStories,
|
|
170
|
-
},
|
|
171
|
-
faq: {
|
|
172
|
-
title: 'More things you might want to know',
|
|
173
|
-
items: preservedFaqItems,
|
|
174
|
-
},
|
|
175
|
-
guarantee: {
|
|
176
|
-
image: {
|
|
177
|
-
src: '/paywall/money-back-badge.png',
|
|
178
|
-
alt: '30 day money back guarantee badge',
|
|
179
|
-
},
|
|
180
|
-
title: 'Money-Back guarantee',
|
|
181
|
-
description:
|
|
182
|
-
"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",
|
|
183
|
-
refundPolicyLabel: 'refund policy',
|
|
184
|
-
},
|
|
185
|
-
accessibility: {
|
|
186
|
-
plansLabel: 'Plans',
|
|
187
|
-
storiesLabel: 'Stories from our users',
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
} as const satisfies LocalizedStepContent<PaywallLocaleContent>;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
FunnelChoiceOption,
|
|
3
|
-
LocalizedStepContent,
|
|
4
|
-
StepChoiceItem,
|
|
5
|
-
StepImage,
|
|
6
|
-
} from '@funnelsgrove/runtime';
|
|
7
|
-
|
|
8
|
-
type StepTwoOption = StepChoiceItem & {
|
|
9
|
-
id: string;
|
|
10
|
-
image: StepImage;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type StepTwoLocaleContent = {
|
|
14
|
-
title: [string, string];
|
|
15
|
-
description: string;
|
|
16
|
-
optionsLabel: string;
|
|
17
|
-
continueLabel: string;
|
|
18
|
-
options: readonly StepTwoOption[];
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export const stepTwoContent = {
|
|
22
|
-
defaultLocale: 'en',
|
|
23
|
-
locales: {
|
|
24
|
-
en: {
|
|
25
|
-
title: ['Which devices do you use', 'most often?'],
|
|
26
|
-
description: 'Select all that apply so we can tailor your setup and recommendations.',
|
|
27
|
-
optionsLabel: 'Device options',
|
|
28
|
-
continueLabel: 'Continue',
|
|
29
|
-
options: [
|
|
30
|
-
{
|
|
31
|
-
id: 'iphone',
|
|
32
|
-
label: 'Smartphone',
|
|
33
|
-
image: {
|
|
34
|
-
src: '/claimbee/device-iphone.png',
|
|
35
|
-
alt: '',
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
id: 'laptop',
|
|
40
|
-
label: 'Laptop',
|
|
41
|
-
image: {
|
|
42
|
-
src: '/claimbee/device-macbook.png',
|
|
43
|
-
alt: '',
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: 'watch',
|
|
48
|
-
label: 'Smart watch',
|
|
49
|
-
image: {
|
|
50
|
-
src: '/claimbee/device-watch.png',
|
|
51
|
-
alt: '',
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
id: 'none',
|
|
56
|
-
label: 'None of these',
|
|
57
|
-
image: {
|
|
58
|
-
src: '/claimbee/device-none.png',
|
|
59
|
-
alt: '',
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
} as const satisfies LocalizedStepContent<StepTwoLocaleContent>;
|
|
66
|
-
|
|
67
|
-
export const stepTwoOptions = Object.freeze(
|
|
68
|
-
stepTwoContent.locales.en.options.map((option) =>
|
|
69
|
-
Object.freeze({
|
|
70
|
-
id: option.id,
|
|
71
|
-
label: option.label,
|
|
72
|
-
imageSrc: option.image.src,
|
|
73
|
-
} satisfies FunnelChoiceOption),
|
|
74
|
-
),
|
|
75
|
-
) satisfies readonly FunnelChoiceOption[];
|
|
76
|
-
|
|
77
|
-
export type StepTwoOptionId = (typeof stepTwoOptions)[number]['id'];
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { LocalizedStepContent, StepImage } from '@funnelsgrove/runtime';
|
|
2
|
-
|
|
3
|
-
export type StepThreeLocaleContent = {
|
|
4
|
-
kicker: string;
|
|
5
|
-
title: readonly string[];
|
|
6
|
-
description: string;
|
|
7
|
-
progressLabel: string;
|
|
8
|
-
artwork: {
|
|
9
|
-
sprite: StepImage;
|
|
10
|
-
glow: StepImage;
|
|
11
|
-
bee: StepImage;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const stepThreeContent = {
|
|
16
|
-
defaultLocale: 'en',
|
|
17
|
-
locales: {
|
|
18
|
-
en: {
|
|
19
|
-
kicker: 'Step 3',
|
|
20
|
-
title: ['Finding relevant', 'opportunities for you'],
|
|
21
|
-
description:
|
|
22
|
-
'We are matching your profile across trusted sources and preparing the final result.',
|
|
23
|
-
progressLabel: 'Processing your personalized flow',
|
|
24
|
-
artwork: {
|
|
25
|
-
sprite: {
|
|
26
|
-
src: '/claimbee/steps-sprite-alt.png',
|
|
27
|
-
alt: '',
|
|
28
|
-
},
|
|
29
|
-
glow: {
|
|
30
|
-
src: '/claimbee/glow.svg',
|
|
31
|
-
alt: '',
|
|
32
|
-
},
|
|
33
|
-
bee: {
|
|
34
|
-
src: '/claimbee/bee.png',
|
|
35
|
-
alt: '',
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
} as const satisfies LocalizedStepContent<StepThreeLocaleContent>;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { LocalizedStepContent } from '@funnelsgrove/runtime';
|
|
2
|
-
|
|
3
|
-
export type StepFourLocaleContent = {
|
|
4
|
-
header: {
|
|
5
|
-
title: readonly string[];
|
|
6
|
-
description: readonly string[];
|
|
7
|
-
instructionLabel: string;
|
|
8
|
-
scratchAriaLabel: string;
|
|
9
|
-
};
|
|
10
|
-
ticket: {
|
|
11
|
-
offerLabel: string;
|
|
12
|
-
code: string;
|
|
13
|
-
};
|
|
14
|
-
reward: {
|
|
15
|
-
kicker: string;
|
|
16
|
-
description: string;
|
|
17
|
-
offerLabel: string;
|
|
18
|
-
appliedLabel: string;
|
|
19
|
-
ctaLabel: string;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export const stepFourContent = {
|
|
24
|
-
defaultLocale: 'en',
|
|
25
|
-
locales: {
|
|
26
|
-
en: {
|
|
27
|
-
header: {
|
|
28
|
-
title: ['Scratch & Unlock', 'Your Claim Advantage'],
|
|
29
|
-
description: [
|
|
30
|
-
'Youβve been pre-qualified for multiple active settlements.',
|
|
31
|
-
'Reveal your private offer to start filing instantly π',
|
|
32
|
-
],
|
|
33
|
-
instructionLabel: 'Scratch the cardπ',
|
|
34
|
-
scratchAriaLabel: 'Scratch the ticket to reveal your discount',
|
|
35
|
-
},
|
|
36
|
-
ticket: {
|
|
37
|
-
offerLabel: '50% OFF',
|
|
38
|
-
code: 'DISCOUNT_50',
|
|
39
|
-
},
|
|
40
|
-
reward: {
|
|
41
|
-
kicker: 'Woo hoo π',
|
|
42
|
-
description: 'You won a promo code with',
|
|
43
|
-
offerLabel: '50% OFF',
|
|
44
|
-
appliedLabel: 'It will be applied automatically',
|
|
45
|
-
ctaLabel: 'Claim Discount β',
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
} as const satisfies LocalizedStepContent<StepFourLocaleContent>;
|