Skip to content

Commit 4f7a8ca

Browse files
committed
updates
1 parent 3e1d241 commit 4f7a8ca

File tree

3 files changed

+132
-26
lines changed

3 files changed

+132
-26
lines changed

pcweb/constants.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@
6060
ANACONDA_INSTALLATION = "https://docs.anaconda.com/free/anaconda/install/windows/"
6161
ANACONDA_SETUP_ENVIRONMENT = "https://docs.anaconda.com/free/navigator/getting-started/#navigator-managing-environments"
6262

63+
# Cloudflare
64+
SCREENSHOT_BUCKET = "https://pub-c14a5dcf674640a6b73fded32bad72ca.r2.dev/"
65+
66+
# Reflex Cloud Backend
67+
RX_CLOUD_BACKEND = os.getenv("RX_CLOUD_BACKEND", "https://cloud-f188e2cd-51fb-4b29-b546-2ce4b9efc5d5.fly.dev/")
68+
69+
6370
# Stats
6471
GITHUB_STARS = 23000
6572
MONTHLY_USERS = 10000

pcweb/pages/landing/views/ai_section.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,28 @@
11
import reflex as rx
2-
2+
import httpx
33
from pcweb.components.icons.hugeicons import hi
4+
from pcweb.constants import SCREENSHOT_BUCKET, REFLEX_BUILD_URL, RX_CLOUD_BACKEND
5+
6+
7+
class AIBuilderGallery(rx.State):
8+
items: list[str] = [
9+
"a0534e5a-53a6-4d34-bf44-fe7f2ab8e1bc",
10+
"d01840cc-13eb-4583-8782-1edd3dff1470",
11+
"87ac20d4-a1c5-4145-965c-085da602c89d",
12+
"a51dd890-5350-4b4c-97ca-16a2e0c609bb",
13+
"af522f77-87f1-43f7-ba92-62e9672308e0",
14+
"f4732ca5-3abe-433c-9197-8359f36306d7",
15+
"91099fa1-aa5a-4adc-955d-db4c9d4482a1",
16+
"62cea375-fe2e-41a3-b5b3-7f0bdc1a1503",
17+
"5e13d767-8f71-439f-963f-fe7fd805a4c3",
18+
"1264fe69-b26a-49df-b5a8-53c108dcdad2",
19+
]
20+
21+
# @rx.event
22+
# async def fetch_items(self):
23+
# async with httpx.AsyncClient() as client:
24+
# response = await client.get(f"{RX_CLOUD_BACKEND}v1/flexgen/templates")
25+
# # self.items = response.json()
426

527

628
def header() -> rx.Component:
@@ -28,20 +50,24 @@ def header() -> rx.Component:
2850
)
2951

3052

31-
def gallery_item() -> rx.Component:
32-
return rx.box(
33-
# rx.image(
34-
# src="",
35-
# class_name="absolute top-0 left-0 w-full h-full object-cover",
36-
# ),
37-
rx.text("Gallery Item", class_name="text-slate-6 text-base font-medium"),
53+
def gallery_item(item: str) -> rx.Component:
54+
return rx.link(
55+
rx.image(
56+
src=f"{SCREENSHOT_BUCKET}{item}",
57+
class_name="absolute top-0 left-0 w-full h-full object-cover hover:scale-105 transition-all duration-200 ease-out object-center",
58+
),
59+
href=f"{REFLEX_BUILD_URL}gen/{item}",
60+
is_external=True,
3861
class_name="relative overflow-hidden border-slate-3 border rounded-[1.125rem] h-[14rem] bg-slate-2 flex justify-center items-center w-full shadow-small",
3962
)
4063

4164

4265
def gallery() -> rx.Component:
4366
return rx.box(
44-
*[gallery_item() for _ in range(12)],
67+
rx.foreach(
68+
AIBuilderGallery.items,
69+
lambda item: gallery_item(item),
70+
),
4571
class_name="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",
4672
)
4773

@@ -50,5 +76,6 @@ def ai_section() -> rx.Component:
5076
return rx.el.section(
5177
header(),
5278
gallery(),
79+
# on_mount=AIBuilderGallery.fetch_items,
5380
class_name="flex flex-col mx-auto w-full max-w-[84.19rem]",
5481
)

pcweb/pages/landing/views/companies.py

Lines changed: 89 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@
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

Comments
 (0)