Skip to content

Commit 5e2aa4d

Browse files
committed
Pro tier pricing information now matches the marketing site
1 parent f389ead commit 5e2aa4d

File tree

1 file changed

+107
-36
lines changed

1 file changed

+107
-36
lines changed

apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx

Lines changed: 107 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ const pricingDefinitions = {
168168
title: "Concurrent runs",
169169
content: "The number of runs that can be executed at the same time.",
170170
},
171+
additionalConcurrency: {
172+
title: "Additional concurrency",
173+
content: "Then $50/month per 50",
174+
},
171175
taskRun: {
172176
title: "Task runs",
173177
content: "A single execution of a task.",
@@ -185,6 +189,10 @@ const pricingDefinitions = {
185189
title: "Schedules",
186190
content: "You can attach recurring schedules to tasks using cron syntax.",
187191
},
192+
additionalSchedules: {
193+
title: "Additional schedules",
194+
content: "Then $10/month per 1,000",
195+
},
188196
alerts: {
189197
title: "Alert destination",
190198
content:
@@ -195,6 +203,14 @@ const pricingDefinitions = {
195203
content:
196204
"Realtime allows you to send the live status and data from your runs to your frontend. This is the number of simultaneous Realtime connections that can be made.",
197205
},
206+
additionalRealtimeConnections: {
207+
title: "Additional Realtime connections",
208+
content: "Then $10/month per 100",
209+
},
210+
additionalSeats: {
211+
title: "Additional seats",
212+
content: "Then $20/month per seat",
213+
},
198214
};
199215

200216
type PricingPlansProps = {
@@ -499,7 +515,7 @@ export function TierFree({
499515
<LogRetention limits={plan.limits} />
500516
<SupportLevel limits={plan.limits} />
501517
<Alerts limits={plan.limits} />
502-
<RealtimeConnecurrency limits={plan.limits} />
518+
<RealtimeConcurrency limits={plan.limits} />
503519
</ul>
504520
</>
505521
)}
@@ -614,7 +630,7 @@ export function TierHobby({
614630
<LogRetention limits={plan.limits} />
615631
<SupportLevel limits={plan.limits} />
616632
<Alerts limits={plan.limits} />
617-
<RealtimeConnecurrency limits={plan.limits} />
633+
<RealtimeConcurrency limits={plan.limits} />
618634
</ul>
619635
</TierContainer>
620636
);
@@ -713,7 +729,7 @@ export function TierPro({
713729
)}
714730
</div>
715731
</Form>
716-
<ul className="flex flex-col gap-2.5">
732+
{/* <ul className="flex flex-col gap-2.5">
717733
<ConcurrentRuns limits={plan.limits} />
718734
<FeatureItem checked>
719735
Unlimited{" "}
@@ -731,6 +747,29 @@ export function TierPro({
731747
<SupportLevel limits={plan.limits} />
732748
<Alerts limits={plan.limits} />
733749
<RealtimeConnecurrency limits={plan.limits} />
750+
</ul> */}
751+
<ul className="flex flex-col gap-2.5">
752+
<ConcurrentRuns limits={plan.limits}>
753+
{pricingDefinitions.additionalConcurrency.content}
754+
</ConcurrentRuns>
755+
<FeatureItem checked>
756+
Unlimited{" "}
757+
<DefinitionTip
758+
title={pricingDefinitions.tasks.title}
759+
content={pricingDefinitions.tasks.content}
760+
>
761+
tasks
762+
</DefinitionTip>
763+
</FeatureItem>
764+
<TeamMembers limits={plan.limits}>{pricingDefinitions.additionalSeats.content}</TeamMembers>
765+
<Environments limits={plan.limits} />
766+
<Schedules limits={plan.limits}>{pricingDefinitions.additionalSchedules.content}</Schedules>
767+
<LogRetention limits={plan.limits} />
768+
<SupportLevel limits={plan.limits} />
769+
<Alerts limits={plan.limits} />
770+
<RealtimeConcurrency limits={plan.limits}>
771+
{pricingDefinitions.additionalRealtimeConnections.content}
772+
</RealtimeConcurrency>
734773
</ul>
735774
</TierContainer>
736775
);
@@ -891,16 +930,16 @@ function FeatureItem({
891930
children: React.ReactNode;
892931
}) {
893932
return (
894-
<li className="flex items-center gap-2">
933+
<li className="flex items-start gap-2">
895934
{checked ? (
896935
<CheckIcon
897936
className={cn(
898-
"size-4 min-w-4",
937+
"mt-0.5 size-4 min-w-4",
899938
checkedColor === "primary" ? "text-primary" : "text-text-bright"
900939
)}
901940
/>
902941
) : (
903-
<XMarkIcon className="size-4 min-w-4 text-charcoal-500" />
942+
<XMarkIcon className="size-4 text-charcoal-500" />
904943
)}
905944
<div
906945
className={cn(
@@ -914,26 +953,42 @@ function FeatureItem({
914953
);
915954
}
916955

917-
function ConcurrentRuns({ limits }: { limits: Limits }) {
956+
function ConcurrentRuns({ limits, children }: { limits: Limits; children?: React.ReactNode }) {
918957
return (
919958
<FeatureItem checked>
920-
{limits.concurrentRuns.number}
921-
{limits.concurrentRuns.canExceed ? "+" : ""}{" "}
922-
<DefinitionTip
923-
title={pricingDefinitions.concurrentRuns.title}
924-
content={pricingDefinitions.concurrentRuns.content}
925-
>
926-
concurrent runs
927-
</DefinitionTip>
959+
<div className="flex flex-col gap-y-0.5">
960+
<div className="flex items-center gap-1">
961+
{limits.concurrentRuns.canExceed ? (
962+
<>
963+
{limits.concurrentRuns.number}
964+
{"+"}
965+
</>
966+
) : (
967+
<>{limits.concurrentRuns.number} </>
968+
)}{" "}
969+
<DefinitionTip
970+
title={pricingDefinitions.concurrentRuns.title}
971+
content={pricingDefinitions.concurrentRuns.content}
972+
>
973+
concurrent runs
974+
</DefinitionTip>
975+
</div>
976+
{children && <span className="text-xs text-text-dimmed">{children}</span>}
977+
</div>
928978
</FeatureItem>
929979
);
930980
}
931981

932-
function TeamMembers({ limits }: { limits: Limits }) {
982+
function TeamMembers({ limits, children }: { limits: Limits; children?: React.ReactNode }) {
933983
return (
934984
<FeatureItem checked>
935-
{limits.teamMembers.number}
936-
{limits.concurrentRuns.canExceed ? "+" : ""} team members
985+
<div className="flex flex-col gap-y-0.5">
986+
<div className="flex items-center gap-1">
987+
{limits.teamMembers.number}
988+
{limits.teamMembers.canExceed ? "+" : ""} team members
989+
</div>
990+
{children && <span className="text-xs text-text-dimmed">{children}</span>}
991+
</div>
937992
</FeatureItem>
938993
);
939994
}
@@ -952,17 +1007,22 @@ function Environments({ limits }: { limits: Limits }) {
9521007
);
9531008
}
9541009

955-
function Schedules({ limits }: { limits: Limits }) {
1010+
function Schedules({ limits, children }: { limits: Limits; children?: React.ReactNode }) {
9561011
return (
9571012
<FeatureItem checked>
958-
{limits.schedules.number}
959-
{limits.schedules.canExceed ? "+" : ""}{" "}
960-
<DefinitionTip
961-
title={pricingDefinitions.schedules.title}
962-
content={pricingDefinitions.schedules.content}
963-
>
964-
schedules
965-
</DefinitionTip>
1013+
<div className="flex flex-col gap-y-0.5">
1014+
<div className="flex items-center gap-1">
1015+
{limits.schedules.number}
1016+
{limits.schedules.canExceed ? "+" : ""}{" "}
1017+
<DefinitionTip
1018+
title={pricingDefinitions.schedules.title}
1019+
content={pricingDefinitions.schedules.content}
1020+
>
1021+
schedules
1022+
</DefinitionTip>
1023+
</div>
1024+
{children && <span className="text-xs text-text-dimmed">{children}</span>}
1025+
</div>
9661026
</FeatureItem>
9671027
);
9681028
}
@@ -1007,17 +1067,28 @@ function Alerts({ limits }: { limits: Limits }) {
10071067
);
10081068
}
10091069

1010-
function RealtimeConnecurrency({ limits }: { limits: Limits }) {
1070+
function RealtimeConcurrency({ limits, children }: { limits: Limits; children?: React.ReactNode }) {
10111071
return (
10121072
<FeatureItem checked>
1013-
{limits.realtimeConcurrentConnections.number}
1014-
{limits.realtimeConcurrentConnections.canExceed ? "+" : ""}{" "}
1015-
<DefinitionTip
1016-
title={pricingDefinitions.realtime.title}
1017-
content={pricingDefinitions.realtime.content}
1018-
>
1019-
concurrent Realtime connections
1020-
</DefinitionTip>
1073+
<div className="flex flex-col gap-y-0.5">
1074+
<div className="flex items-start gap-1">
1075+
{limits.realtimeConcurrentConnections.canExceed ? (
1076+
<>
1077+
{limits.realtimeConcurrentConnections.number}
1078+
{"+"}
1079+
</>
1080+
) : (
1081+
<>{limits.realtimeConcurrentConnections.number} </>
1082+
)}{" "}
1083+
<DefinitionTip
1084+
title={pricingDefinitions.realtime.title}
1085+
content={pricingDefinitions.realtime.content}
1086+
>
1087+
concurrent Realtime connections
1088+
</DefinitionTip>
1089+
</div>
1090+
{children && <span className="text-xs text-text-dimmed">{children}</span>}
1091+
</div>
10211092
</FeatureItem>
10221093
);
10231094
}

0 commit comments

Comments
 (0)