2828 "company_name" : "Fastly" ,
2929 "quote" : "Fastly is a cloud computing company that provides content delivery network (CDN) services." ,
3030 "person" : "Juan" ,
31+ "picture" : "/favicon.ico" ,
3132 "role" : "CEO" ,
3233 },
3334 "autodesk" : {
3435 "company_name" : "Autodesk" ,
3536 "quote" : "Autodesk is a software company that provides design and engineering software." ,
3637 "person" : "Juan" ,
38+ "picture" : "/favicon.ico" ,
3739 "role" : "CEO" ,
40+ "url" : "/customers/bayesline" ,
3841 },
3942}
4043
@@ -62,7 +65,8 @@ def company_card(path: str, name: str) -> rx.Component:
6265 class_name = "w-full col-span-2 h-[10.75rem] flex justify-center items-center bg-slate-1 border-box" ,
6366 )
6467
65- is_case_study = name in companies_case_studies
68+ is_customer = name in companies_case_studies
69+ has_case_study = False
6670 parent_box_class_name = "h-[10.75rem] w-full relative overflow-hidden flex justify-center items-center bg-slate-1 border-box"
6771 image_component = rx .image (
6872 src = path ,
@@ -72,43 +76,111 @@ def company_card(path: str, name: str) -> rx.Component:
7276 content_items = [image_component ]
7377 badge_component = None
7478
75- if is_case_study :
76- parent_box_class_name += " cursor-pointer group"
77- badge_component = rx .box (
78- "Case Study" ,
79- get_icon ("arrow_top_right" , class_name = "size-3.5 rotate-45 group-hover:rotate-0 transition-transform" ),
80- class_name = "absolute bottom-4 right-4 bg-violet-3 border border-violet-6 text-violet-9 group-hover:bg-violet-4 text-xs font-semibold px-2 py-1 rounded-full transition-colors flex flex-row items-center gap-1 scale-[0.85]" ,
79+ if is_customer :
80+ has_case_study = "url" in companies_case_studies [name ]
81+ parent_box_class_name += " group" + (
82+ " cursor-pointer" if has_case_study else ""
8183 )
84+
85+ if has_case_study :
86+ # Badge for customers WITH a case study URL
87+ badge_text = "Case Study"
88+ badge_icon = get_icon (
89+ "arrow_top_right" ,
90+ class_name = "size-3.5 rotate-45 group-hover:rotate-0 transition-transform" ,
91+ )
92+ badge_class_name = "absolute bottom-4 right-4 bg-violet-3 border border-violet-6 text-violet-9 group-hover:bg-violet-4 text-xs font-semibold px-2 py-1 rounded-full transition-colors flex flex-row items-center gap-1 scale-[0.85]"
93+ badge_component = rx .box (
94+ badge_text ,
95+ badge_icon ,
96+ class_name = badge_class_name ,
97+ )
98+ else :
99+ # Badge for customers WITHOUT a case study URL
100+ badge_text = "Customer"
101+ badge_class_name = "absolute bottom-4 right-4 bg-violet-3 border border-violet-6 text-violet-9 text-xs font-semibold px-2 py-1 rounded-full transition-colors flex flex-row items-center gap-1 scale-[0.85]"
102+ badge_component = rx .box (
103+ badge_text ,
104+ class_name = badge_class_name ,
105+ )
106+
82107 content_items .append (badge_component )
83108
84109 trigger_box = rx .box (
85110 * content_items ,
86111 class_name = parent_box_class_name ,
87112 )
88113
89- if is_case_study :
114+ if is_customer :
90115 case_study = companies_case_studies [name ]
91116 hover_content = rx .hover_card .content (
92117 rx .box (
93118 rx .text (
94119 f'“{ case_study ["quote" ]} ”' ,
95120 class_name = "text-sm text-slate-12 italic font-medium" ,
96121 ),
97- rx .text (
98- f"{ case_study ['person' ]} , { case_study ['role' ]} " ,
99- class_name = "text-sm text-slate-9 font-medium" ,
122+ rx .box (
123+ rx .image (
124+ src = case_study ["picture" ],
125+ class_name = "size-8 rounded-full" ,
126+ ),
127+ rx .box (
128+ rx .text (
129+ f"{ case_study ['person' ]} " ,
130+ class_name = "text-sm text-slate-9 font-medium" ,
131+ ),
132+ rx .text (
133+ case_study ["role" ],
134+ class_name = "text-sm text-slate-9 font-medium" ,
135+ ),
136+ ),
137+ rx .box (class_name = "grow" ),
138+ (
139+ rx .link (
140+ "Read" ,
141+ get_icon (
142+ "arrow_top_right" ,
143+ class_name = "size-3.5" ,
144+ ),
145+ href = case_study ["url" ],
146+ class_name = "flex flex-row items-center gap-1.5 font-medium text-sm text-slate-12 underline hover:!text-slate-12 decoration-slate-12" ,
147+ )
148+ if has_case_study
149+ else None
150+ ),
151+ class_name = "flex flex-row items-center gap-2 w-full" ,
100152 ),
101- class_name = "flex flex-col gap-2" ,
153+ class_name = "flex flex-col gap-2.5 " ,
102154 ),
103155 side = "top" ,
104156 side_offset = - 50 ,
105157 align = "center" ,
106- class_name = "flex justify-center items-center bg-slate-1 p-3 rounded-xl shadow-large border border-slate-5 w-[17rem]" ,
107- )
108- return rx .hover_card .root (
109- rx .hover_card .trigger (trigger_box ),
110- hover_content ,
158+ on_click = rx .cond (
159+ has_case_study ,
160+ rx .redirect (case_study .get ("url" , "#" )),
161+ rx .noop (),
162+ ),
163+ class_name = "flex justify-center items-center bg-slate-1 p-3 rounded-xl shadow-large border border-slate-5 w-[17rem]"
164+ + (
165+ " cursor-pointer" if has_case_study else ""
166+ ),
111167 )
168+
169+ if has_case_study :
170+ return rx .link (
171+ rx .hover_card .root (
172+ rx .hover_card .trigger (trigger_box ),
173+ hover_content ,
174+ ),
175+ href = case_study .get ("url" , "#" ),
176+ is_external = True ,
177+ )
178+ else :
179+ return rx .hover_card .root (
180+ rx .hover_card .trigger (trigger_box ),
181+ hover_content ,
182+ )
183+
112184 else :
113185 return trigger_box
114186
0 commit comments