Skip to content

Commit

Permalink
update pricing with latest AI changes (#1225)
Browse files Browse the repository at this point in the history
* update pricing with latest AI changes

* updates for aleks comments

---------

Co-authored-by: Tom Gotsman <tomgotsman@Toms-MacBook-Pro.local>
  • Loading branch information
tgberkeley and Tom Gotsman authored Feb 27, 2025
1 parent 7c87bb1 commit 4a9e610
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 75 deletions.
14 changes: 11 additions & 3 deletions pcweb/pages/pricing/header.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,17 @@ def header() -> rx.Component:
"Pricing that scales with you",
class_name="gradient-heading font-semibold text-4xl xl:text-5xl text-center",
),
rx.el.h2(
"Start for free using the open-source and scale as you grow.",
class_name="font-medium text-slate-9 text-lg text-center text-wrap",
rx.hstack(
rx.el.a(
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]"),
href="https://reflex.build",
),
rx.el.a(
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]"),
href="https://cloud.reflex.dev",
),
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]"),
gap="2rem",
),
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 "
+ rx.cond(HostingBannerState.show_banner, "pt-[13rem]", "pt-[10rem]"),
Expand Down
45 changes: 14 additions & 31 deletions pcweb/pages/pricing/plan_cards.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,15 +247,14 @@ def plan_cards() -> rx.Component:
"Hobby",
"Everything you need to get started.",
[
("heart-handshake", "Community support"),
("brain", "AI App Builder (Limited Access)"),
(
"app-window",
"Unlimited apps",
"Cloud Unlimited Apps",
"Free users are limited to 20 hours of 1 vCPU, 1 GB RAM machines per month.",
),
("clock", "1 day log retention"),
("code", "Open Source Framework"),
("file-code", "Starter Templates"),
("code", "Reflex Open Source"),
("heart-handshake", "Discord/Github Support")
],
"Start building for free",
price="Free",
Expand All @@ -265,18 +264,9 @@ def plan_cards() -> rx.Component:
"Pro",
"For professional projects and startups.",
[
("heart-handshake", "Priority Community support"),
("users", "1 seat incl. (additional seats at $20/mo)"),
("credit-card", "$10 / month free compute credits"),
("server", "Customize machine sizes"),
("clock", "30 days log retention"),
("globe", "Multi-region"),
("brain", "AI App Builder (Free $20 credits / month)"),
("credit-card", "Cloud (Free $10 credits / month)"),
("brush", "Custom domains"),
(
"file-badge",
"Remove Branding",
"Check out the Reflex Branding doc page to learn how to remove the 'Built with Reflex' badge from your app.",
),
("circle-plus", "Everything in Hobby"),
],
"Start with Pro plan",
Expand All @@ -286,34 +276,27 @@ def plan_cards() -> rx.Component:
"Team",
"For teams looking to scale their applications.",
[
("mail", "Email/Slack support"),
("users", "5 seat incl. (additional seats available)"),
("credit-card", "Monthly free compute credits"),
("git-branch", "Create multiple projects"),
("signal", "Full Website Analytics"),
("users", "Invite your team mates"),
("cable", "Connect AI Builder to your Data", "Integrations include Databricks, Snowflake, etc."),
("lock-keyhole", "One Click Auth"),
(
"file-badge",
"Remove Branding Everywhere",
"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.",
),
("file-badge", "AG Grid with no Reflex Branding"),
("mail", "Email support"),
("circle-plus", "Everything in Pro"),
],
"Contact sales",
price="$49/user/mo + compute",
redirect_url=REFLEX_DEV_WEB_LANDING_FORM_URL_GET_DEMO,
),
card(
"Enterprise",
"Get a plan tailored to your business needs.",
[
("headset", "Dedicated Support"),
("users", "Customized seat amount"),
("hand-helping", "White Glove Onboarding"),
("user-round-plus", "Personalized integration help"),
("hard-drive", "On Premise Deployment"),
("clock", "Unlimited log retention"),
("activity", "Error Monitoring and Observability"),
("key", "Bring your own AI API keys"),
("headset", "Dedicated Support Channel"),
("git-pull-request", "Influence Reflex Roadmap"),
("shield-check", "Audit logs, SSO, SOC2 Reports"),
("circle-plus", "Everything in Team"),
],
"Contact sales",
Expand Down
6 changes: 3 additions & 3 deletions pcweb/pages/pricing/pricing.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from pcweb.pages.index.views.footer_index import footer_index
from pcweb.pages.pricing.header import header
from pcweb.pages.pricing.plan_cards import plan_cards
from pcweb.pages.pricing.table import comparison_table_hosting, comparison_table_oss
from pcweb.pages.pricing.table import comparison_table_hosting, comparison_table_ai_and_oss
from pcweb.pages.pricing.faq import faq
from pcweb.pages.pricing.calculator import calculator_section
from pcweb.meta.meta import hosting_meta_tags
Expand All @@ -24,9 +24,9 @@ def pricing() -> rx.Component:
rx.box(
header(),
plan_cards(),
calculator_section(),
comparison_table_ai_and_oss(),
comparison_table_hosting(),
comparison_table_oss(),
calculator_section(),
faq(),
class_name="flex flex-col relative justify-center items-center w-full",
),
Expand Down
123 changes: 85 additions & 38 deletions pcweb/pages/pricing/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,49 +33,76 @@
}
"""

PRICE_SECTION = [
("Per Seat Price", "FREE", "$20/month", "$49/month", "Custom"),
("Team Size", "1", "1", "< 25", "Unlimited"),
]

FRAMEWORK_SECTION = [
("Open Source Framework", True, True, True, True),
("AG Grid *", True, True, True, True),
("One Click Auth", False, False, True, True),
("Embed Reflex Apps", False, False, True, True),
("Single Port Deploy", False, False, True, True),
("HTTP Fallback for Websockets", False, False, True, True),
("Custom NPM Registry", False, False, True, True),
]

REFLEX_BRANDING_SECTION = [
("Remove Branding", "", "On Cloud", "Everywhere*", "Everywhere*"),
AI_TEXT_SECTION = [
("AI App Building", "Limited Access", "$20 credits/month", "$40 credits/user/month", "Custom"),
]

REFLEX_AI_SECTION = []
AI_BOOLEAN_SECTION = [
("Purchase Extra AI Credits", False, True, True, True),
("One Click Cloud Deploy", True, True, True, True),
("Github Integration", True, True, True, True),
("Database Integration", True, True, True, True),
("Secrets Integration", True, True, True, True),
("Web IDE", True, True, True, True),
("Private Apps", False, True, True, True),
("Connect AI Builder to your Data Sources", False, False, True, True),
("Bring your own API Keys", False, False, False, True),
]




HOSTING_TEXT_SECTION = [
("Compute", "20 hours/month", "$10 compute credits/month", "$20 compute credits/user/month", "Custom"),
("Regions", "Single", "Multiple", "Multiple", "Multiple"),
("Logs", "1 day", "30 days", "90 days", "Custom"),
("Build Logs", "1 day", "30 days", "90 days", "Custom"),
("Runtime Logs", "1 hour", "1 day", "1 week", "Custom"),
]

HOSTING_BOOLEAN_SECTION = [
("CPU / Memory Metrics", True, True, True, True),
("CLI Deployments", True, True, True, True),
("CI/CD Deploy Tokens", True, True, True, True),
("Set Billing Limits", True, True, True, True),
("Custom Domains", False, True, True, True),
("Secret Manager", False, True, True, True),
("App Analytics", False, True, True, True),
("On Prem Hosting", False, False, False, True),
("User Analytics", False, False, True, True),
("Custom Alerts", False, False, True, True),
("Rollbacks", False, False, True, True),
("Audit Log", False, False, True, True),
("On Prem Deployments", False, False, False, True),
]

SECURITY_SECTION = [
("Web App Firewall", True, True, True, True),
("HTTP/SSL", True, True, True, True),
("DDos Protection", True, True, True, True),
("2 Factor Auth", True, True, True, True),
("Audit Logs", False, False, False, True),
("Automatic CI/CD", False, True, True, True),
("Security Audit Reports", False, False, True, True),
("SSO", False, False, False, True),
]

SUPPORT_TEXT_SECTION = [
("Support", "Community", "Community", "Email/Slack", "Dedicated Support")
("Support", "Community", "Community", "Email Support", "Dedicated Support")
]

SUPPORT_BOOLEAN_SECTION = [
("White Glove Onboarding", False, False, False, True),
("SLAs Available", False, False, False, True),
("Personalized Onboarding", False, False, False, True),
("", "", "", "", ""),
]

Expand All @@ -88,7 +115,7 @@

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


def header_hosting() -> rx.Component:


def header_oss() -> rx.Component:
return rx.box(
rx.el.h3(
"Secure and Scalable Hosting",
"Supercharged Features to Build Faster",
class_name="text-slate-12 text-3xl font-semibold text-center",
),
rx.el.p(
"Compare features across plans.",
"Premium Features to help you get the most out of Reflex",
class_name="text-slate-9 text-2xl font-semibold text-center",
),
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",
)

def table_body_oss() -> rx.Component:
return rx.table.root(
rx.table.header(
create_table_row_header("Pricing"),
class_name="relative",
),
create_table_body(
*[create_table_row(row) for row in PRICE_SECTION],
),
rx.table.header(
create_table_row_header("AI"),
class_name="relative",
),
create_table_body(
*[create_table_row(row) for row in AI_TEXT_SECTION],
*[
create_checkmark_row(feature, checks)
for feature, *checks in AI_BOOLEAN_SECTION
],
),
rx.table.header(
create_table_row_header("FRAMEWORK"),
class_name="relative",
),
create_table_body(
*[
create_checkmark_row(feature, checks)
for feature, *checks in FRAMEWORK_SECTION
],
),
create_table_body(
*[create_table_row(row) for row in ASTERIX_SECTION],
),
class_name="w-full overflow-x-auto max-w-[69.125rem] -mt-[2rem]",
)


def header_oss() -> rx.Component:

def header_hosting() -> rx.Component:
return rx.box(
rx.el.h3(
"Supercharged Features to Build Faster",
"Secure and Scalable Hosting",
class_name="text-slate-12 text-3xl font-semibold text-center",
),
rx.el.p(
"Premium Features to help you get the most out of Reflex",
"Compare features across plans.",
class_name="text-slate-9 text-2xl font-semibold text-center",
),
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",
)


def table_body_hosting() -> rx.Component:
return rx.table.root(
rx.el.style(TABLE_STYLE),
Expand Down Expand Up @@ -262,24 +327,6 @@ def table_body_hosting() -> rx.Component:
)


def table_body_oss() -> rx.Component:
return rx.table.root(
rx.table.header(
create_table_row_header("Framework"),
class_name="relative",
),
create_table_body(
*[
create_checkmark_row(feature, checks)
for feature, *checks in FRAMEWORK_SECTION
],
*[create_table_row(row) for row in REFLEX_BRANDING_SECTION],
),
create_table_body(
*[create_table_row(row) for row in ASTERIX_SECTION],
),
class_name="w-full overflow-x-auto max-w-[69.125rem] -mt-[2rem]",
)


def comparison_table_hosting() -> rx.Component:
Expand All @@ -290,7 +337,7 @@ def comparison_table_hosting() -> rx.Component:
)


def comparison_table_oss() -> rx.Component:
def comparison_table_ai_and_oss() -> rx.Component:
return rx.box(
header_oss(),
table_body_oss(),
Expand Down

0 comments on commit 4a9e610

Please sign in to comment.