Skip to content

Commit 4a9e610

Browse files
tgberkeleyTom Gotsman
andauthored
update pricing with latest AI changes (#1225)
* update pricing with latest AI changes * updates for aleks comments --------- Co-authored-by: Tom Gotsman <[email protected]>
1 parent 7c87bb1 commit 4a9e610

File tree

4 files changed

+113
-75
lines changed

4 files changed

+113
-75
lines changed

pcweb/pages/pricing/header.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@ def header() -> rx.Component:
88
"Pricing that scales with you",
99
class_name="gradient-heading font-semibold text-4xl xl:text-5xl text-center",
1010
),
11-
rx.el.h2(
12-
"Start for free using the open-source and scale as you grow.",
13-
class_name="font-medium text-slate-9 text-lg text-center text-wrap",
11+
rx.hstack(
12+
rx.el.a(
13+
rx.badge("Build with AI", class_name="text-lg text-center text-wrap rounded-md bg-[--violet-9] flex items-center justify-center text-[#FCFCFD]"),
14+
href="https://reflex.build",
15+
),
16+
rx.el.a(
17+
rx.badge("Deploy with Cloud", class_name="text-lg text-center text-wrap rounded-md bg-[--violet-9] flex items-center justify-center text-[#FCFCFD]"),
18+
href="https://cloud.reflex.dev",
19+
),
20+
rx.badge("Scale with Enterprise", class_name="text-lg text-center text-wrap rounded-md bg-[--violet-9] flex items-center justify-center text-[#FCFCFD]"),
21+
gap="2rem",
1422
),
1523
class_name="flex flex-col gap-4 justify-center items-center max-w-[64.19rem] 2xl:border-x border-slate-4 w-full pb-16 "
1624
+ rx.cond(HostingBannerState.show_banner, "pt-[13rem]", "pt-[10rem]"),

pcweb/pages/pricing/plan_cards.py

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,14 @@ def plan_cards() -> rx.Component:
247247
"Hobby",
248248
"Everything you need to get started.",
249249
[
250-
("heart-handshake", "Community support"),
250+
("brain", "AI App Builder (Limited Access)"),
251251
(
252252
"app-window",
253-
"Unlimited apps",
253+
"Cloud Unlimited Apps",
254254
"Free users are limited to 20 hours of 1 vCPU, 1 GB RAM machines per month.",
255255
),
256-
("clock", "1 day log retention"),
257-
("code", "Open Source Framework"),
258-
("file-code", "Starter Templates"),
256+
("code", "Reflex Open Source"),
257+
("heart-handshake", "Discord/Github Support")
259258
],
260259
"Start building for free",
261260
price="Free",
@@ -265,18 +264,9 @@ def plan_cards() -> rx.Component:
265264
"Pro",
266265
"For professional projects and startups.",
267266
[
268-
("heart-handshake", "Priority Community support"),
269-
("users", "1 seat incl. (additional seats at $20/mo)"),
270-
("credit-card", "$10 / month free compute credits"),
271-
("server", "Customize machine sizes"),
272-
("clock", "30 days log retention"),
273-
("globe", "Multi-region"),
267+
("brain", "AI App Builder (Free $20 credits / month)"),
268+
("credit-card", "Cloud (Free $10 credits / month)"),
274269
("brush", "Custom domains"),
275-
(
276-
"file-badge",
277-
"Remove Branding",
278-
"Check out the Reflex Branding doc page to learn how to remove the 'Built with Reflex' badge from your app.",
279-
),
280270
("circle-plus", "Everything in Hobby"),
281271
],
282272
"Start with Pro plan",
@@ -286,34 +276,27 @@ def plan_cards() -> rx.Component:
286276
"Team",
287277
"For teams looking to scale their applications.",
288278
[
289-
("mail", "Email/Slack support"),
290-
("users", "5 seat incl. (additional seats available)"),
291-
("credit-card", "Monthly free compute credits"),
292-
("git-branch", "Create multiple projects"),
293-
("signal", "Full Website Analytics"),
279+
("users", "Invite your team mates"),
280+
("cable", "Connect AI Builder to your Data", "Integrations include Databricks, Snowflake, etc."),
294281
("lock-keyhole", "One Click Auth"),
295-
(
296-
"file-badge",
297-
"Remove Branding Everywhere",
298-
"Check out the Remove Reflex Branding section in the Self Hosting doc page to learn how to remove the 'Built with Reflex' badge from your app.",
299-
),
282+
("file-badge", "AG Grid with no Reflex Branding"),
283+
("mail", "Email support"),
300284
("circle-plus", "Everything in Pro"),
301285
],
302286
"Contact sales",
287+
price="$49/user/mo + compute",
303288
redirect_url=REFLEX_DEV_WEB_LANDING_FORM_URL_GET_DEMO,
304289
),
305290
card(
306291
"Enterprise",
307292
"Get a plan tailored to your business needs.",
308293
[
309-
("headset", "Dedicated Support"),
310-
("users", "Customized seat amount"),
294+
("hand-helping", "White Glove Onboarding"),
311295
("user-round-plus", "Personalized integration help"),
312296
("hard-drive", "On Premise Deployment"),
313-
("clock", "Unlimited log retention"),
314-
("activity", "Error Monitoring and Observability"),
297+
("key", "Bring your own AI API keys"),
298+
("headset", "Dedicated Support Channel"),
315299
("git-pull-request", "Influence Reflex Roadmap"),
316-
("shield-check", "Audit logs, SSO, SOC2 Reports"),
317300
("circle-plus", "Everything in Team"),
318301
],
319302
"Contact sales",

pcweb/pages/pricing/pricing.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pcweb.pages.index.views.footer_index import footer_index
55
from pcweb.pages.pricing.header import header
66
from pcweb.pages.pricing.plan_cards import plan_cards
7-
from pcweb.pages.pricing.table import comparison_table_hosting, comparison_table_oss
7+
from pcweb.pages.pricing.table import comparison_table_hosting, comparison_table_ai_and_oss
88
from pcweb.pages.pricing.faq import faq
99
from pcweb.pages.pricing.calculator import calculator_section
1010
from pcweb.meta.meta import hosting_meta_tags
@@ -24,9 +24,9 @@ def pricing() -> rx.Component:
2424
rx.box(
2525
header(),
2626
plan_cards(),
27-
calculator_section(),
27+
comparison_table_ai_and_oss(),
2828
comparison_table_hosting(),
29-
comparison_table_oss(),
29+
calculator_section(),
3030
faq(),
3131
class_name="flex flex-col relative justify-center items-center w-full",
3232
),

pcweb/pages/pricing/table.py

Lines changed: 85 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -33,49 +33,76 @@
3333
}
3434
"""
3535

36+
PRICE_SECTION = [
37+
("Per Seat Price", "FREE", "$20/month", "$49/month", "Custom"),
38+
("Team Size", "1", "1", "< 25", "Unlimited"),
39+
]
40+
3641
FRAMEWORK_SECTION = [
3742
("Open Source Framework", True, True, True, True),
43+
("AG Grid *", True, True, True, True),
3844
("One Click Auth", False, False, True, True),
39-
("Embed Reflex Apps", False, False, True, True),
45+
("Single Port Deploy", False, False, True, True),
46+
("HTTP Fallback for Websockets", False, False, True, True),
47+
("Custom NPM Registry", False, False, True, True),
4048
]
4149

42-
REFLEX_BRANDING_SECTION = [
43-
("Remove Branding", "", "On Cloud", "Everywhere*", "Everywhere*"),
50+
AI_TEXT_SECTION = [
51+
("AI App Building", "Limited Access", "$20 credits/month", "$40 credits/user/month", "Custom"),
4452
]
4553

46-
REFLEX_AI_SECTION = []
54+
AI_BOOLEAN_SECTION = [
55+
("Purchase Extra AI Credits", False, True, True, True),
56+
("One Click Cloud Deploy", True, True, True, True),
57+
("Github Integration", True, True, True, True),
58+
("Database Integration", True, True, True, True),
59+
("Secrets Integration", True, True, True, True),
60+
("Web IDE", True, True, True, True),
61+
("Private Apps", False, True, True, True),
62+
("Connect AI Builder to your Data Sources", False, False, True, True),
63+
("Bring your own API Keys", False, False, False, True),
64+
]
65+
66+
67+
4768

4869
HOSTING_TEXT_SECTION = [
70+
("Compute", "20 hours/month", "$10 compute credits/month", "$20 compute credits/user/month", "Custom"),
4971
("Regions", "Single", "Multiple", "Multiple", "Multiple"),
50-
("Logs", "1 day", "30 days", "90 days", "Custom"),
72+
("Build Logs", "1 day", "30 days", "90 days", "Custom"),
73+
("Runtime Logs", "1 hour", "1 day", "1 week", "Custom"),
5174
]
5275

5376
HOSTING_BOOLEAN_SECTION = [
77+
("CPU / Memory Metrics", True, True, True, True),
5478
("CLI Deployments", True, True, True, True),
5579
("CI/CD Deploy Tokens", True, True, True, True),
5680
("Set Billing Limits", True, True, True, True),
5781
("Custom Domains", False, True, True, True),
5882
("Secret Manager", False, True, True, True),
59-
("App Analytics", False, True, True, True),
60-
("On Prem Hosting", False, False, False, True),
83+
("User Analytics", False, False, True, True),
84+
("Custom Alerts", False, False, True, True),
85+
("Rollbacks", False, False, True, True),
86+
("Audit Log", False, False, True, True),
87+
("On Prem Deployments", False, False, False, True),
6188
]
6289

6390
SECURITY_SECTION = [
6491
("Web App Firewall", True, True, True, True),
6592
("HTTP/SSL", True, True, True, True),
6693
("DDos Protection", True, True, True, True),
67-
("2 Factor Auth", True, True, True, True),
68-
("Audit Logs", False, False, False, True),
94+
("Automatic CI/CD", False, True, True, True),
95+
("Security Audit Reports", False, False, True, True),
6996
("SSO", False, False, False, True),
7097
]
7198

7299
SUPPORT_TEXT_SECTION = [
73-
("Support", "Community", "Community", "Email/Slack", "Dedicated Support")
100+
("Support", "Community", "Community", "Email Support", "Dedicated Support")
74101
]
75102

76103
SUPPORT_BOOLEAN_SECTION = [
104+
("White Glove Onboarding", False, False, False, True),
77105
("SLAs Available", False, False, False, True),
78-
("Personalized Onboarding", False, False, False, True),
79106
("", "", "", "", ""),
80107
]
81108

@@ -88,7 +115,7 @@
88115

89116
ASTERIX_SECTION = [
90117
(
91-
"* Everywhere: This includes removing the 'Built with Reflex' badge for self hosted apps.",
118+
"* AG Grid comes with a 'Built with Reflex' badge for Hobby and Pro tier.",
92119
"",
93120
"",
94121
"",
@@ -194,34 +221,72 @@ def create_checkmark_row(feature: str, checks: tuple[bool, ...]) -> rx.Component
194221
return create_table_row(cells)
195222

196223

197-
def header_hosting() -> rx.Component:
224+
225+
226+
def header_oss() -> rx.Component:
198227
return rx.box(
199228
rx.el.h3(
200-
"Secure and Scalable Hosting",
229+
"Supercharged Features to Build Faster",
201230
class_name="text-slate-12 text-3xl font-semibold text-center",
202231
),
203232
rx.el.p(
204-
"Compare features across plans.",
233+
"Premium Features to help you get the most out of Reflex",
205234
class_name="text-slate-9 text-2xl font-semibold text-center",
206235
),
207236
class_name="flex items-center justify-between text-slate-11 flex-col py-[5rem] 2xl:border-x border-slate-4 max-w-[64.19rem] mx-auto w-full",
208237
)
209238

239+
def table_body_oss() -> rx.Component:
240+
return rx.table.root(
241+
rx.table.header(
242+
create_table_row_header("Pricing"),
243+
class_name="relative",
244+
),
245+
create_table_body(
246+
*[create_table_row(row) for row in PRICE_SECTION],
247+
),
248+
rx.table.header(
249+
create_table_row_header("AI"),
250+
class_name="relative",
251+
),
252+
create_table_body(
253+
*[create_table_row(row) for row in AI_TEXT_SECTION],
254+
*[
255+
create_checkmark_row(feature, checks)
256+
for feature, *checks in AI_BOOLEAN_SECTION
257+
],
258+
),
259+
rx.table.header(
260+
create_table_row_header("FRAMEWORK"),
261+
class_name="relative",
262+
),
263+
create_table_body(
264+
*[
265+
create_checkmark_row(feature, checks)
266+
for feature, *checks in FRAMEWORK_SECTION
267+
],
268+
),
269+
create_table_body(
270+
*[create_table_row(row) for row in ASTERIX_SECTION],
271+
),
272+
class_name="w-full overflow-x-auto max-w-[69.125rem] -mt-[2rem]",
273+
)
274+
210275

211-
def header_oss() -> rx.Component:
276+
277+
def header_hosting() -> rx.Component:
212278
return rx.box(
213279
rx.el.h3(
214-
"Supercharged Features to Build Faster",
280+
"Secure and Scalable Hosting",
215281
class_name="text-slate-12 text-3xl font-semibold text-center",
216282
),
217283
rx.el.p(
218-
"Premium Features to help you get the most out of Reflex",
284+
"Compare features across plans.",
219285
class_name="text-slate-9 text-2xl font-semibold text-center",
220286
),
221287
class_name="flex items-center justify-between text-slate-11 flex-col py-[5rem] 2xl:border-x border-slate-4 max-w-[64.19rem] mx-auto w-full",
222288
)
223289

224-
225290
def table_body_hosting() -> rx.Component:
226291
return rx.table.root(
227292
rx.el.style(TABLE_STYLE),
@@ -262,24 +327,6 @@ def table_body_hosting() -> rx.Component:
262327
)
263328

264329

265-
def table_body_oss() -> rx.Component:
266-
return rx.table.root(
267-
rx.table.header(
268-
create_table_row_header("Framework"),
269-
class_name="relative",
270-
),
271-
create_table_body(
272-
*[
273-
create_checkmark_row(feature, checks)
274-
for feature, *checks in FRAMEWORK_SECTION
275-
],
276-
*[create_table_row(row) for row in REFLEX_BRANDING_SECTION],
277-
),
278-
create_table_body(
279-
*[create_table_row(row) for row in ASTERIX_SECTION],
280-
),
281-
class_name="w-full overflow-x-auto max-w-[69.125rem] -mt-[2rem]",
282-
)
283330

284331

285332
def comparison_table_hosting() -> rx.Component:
@@ -290,7 +337,7 @@ def comparison_table_hosting() -> rx.Component:
290337
)
291338

292339

293-
def comparison_table_oss() -> rx.Component:
340+
def comparison_table_ai_and_oss() -> rx.Component:
294341
return rx.box(
295342
header_oss(),
296343
table_body_oss(),

0 commit comments

Comments
 (0)