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+
3641FRAMEWORK_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
4869HOSTING_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
5376HOSTING_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
6390SECURITY_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
7299SUPPORT_TEXT_SECTION = [
73- ("Support" , "Community" , "Community" , "Email/Slack " , "Dedicated Support" )
100+ ("Support" , "Community" , "Community" , "Email Support " , "Dedicated Support" )
74101]
75102
76103SUPPORT_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
88115
89116ASTERIX_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-
225290def 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
285332def 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