@@ -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
200216type 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