Skip to content

Commit 0d70b20

Browse files
committed
refactor: update testimonial data with new testimonials and correct author/source info (#322)
### TL;DR Redesigned the testimonials section with a new grid layout featuring a hero testimonial and updated content. ### What changed? - Replaced the infinite scrolling carousel with a static grid layout - Added a prominent hero testimonial at the top - Updated testimonial content with real user feedback - Improved responsive design for different screen sizes - Enhanced styling with better typography and visual hierarchy - Changed section title from "What Developers Are Saying" to "What Developers Say" - Removed subtitle "*Real comments after seeing early demos*" ### How to test? 1. Run the website locally 2. Navigate to the homepage and scroll to the testimonials section 3. Verify the hero testimonial appears at the top 4. Check that the grid layout displays correctly 5. Test responsiveness by resizing the browser window to ensure proper layout on mobile, tablet, and desktop ### Why make this change? The new design provides a more structured and readable presentation of user testimonials. By highlighting a hero testimonial and organizing the rest in a grid, it creates a better visual hierarchy and improves the overall user experience. The updated content includes more specific feedback about PQFlow, making the testimonials more relevant and impactful.
1 parent 529dc79 commit 0d70b20

File tree

3 files changed

+157
-120
lines changed

3 files changed

+157
-120
lines changed

pkgs/website/src/components/TestimonialCarousel.astro

Lines changed: 155 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,185 +1,227 @@
11
---
2+
const heroTestimonial = {
3+
author: 'cpursley',
4+
source: 'Discord',
5+
message:
6+
'Got a flow up and running, this is bad ass. I love that everything just goes into Postgres.',
7+
};
8+
29
const testimonials = [
310
{
4-
author: 'Revolutionary-Fact28',
5-
source: 'Reddit',
11+
author: 'nel',
12+
source: 'Discord',
613
message:
7-
'This looks amazing! I built a system on edge functions but it was very complicated and took so much time. I will probably switch to this.',
14+
'EdgeWorker is clearly a building block missing from supabase. I toyed with it locally for several days and it worked great.',
815
},
916
{
10-
author: 'CjHuber',
11-
source: 'Hacker News',
17+
author: 'Alipio Pereira',
18+
source: 'Discord',
1219
message:
13-
'Exactly what I was looking for without even knowing it. Thank you for saving me tons of time in my project.',
20+
"I'm really enjoying PQFlow — this is incredibly powerful! I'm implementing it in a flow with RAG.",
1421
},
1522
{
16-
author: 'bctreehugger',
17-
source: 'Reddit',
23+
author: 'Jie',
24+
source: 'Discord',
1825
message:
19-
'Amazing work on taking the initiative to build this out. Watching closely and looking forward to using it once my project has a need for it.',
26+
"I've been through hell and back with Airflow, Windmill, Inngest, etc and to be honest i haven't find anything I really love yet.",
2027
},
2128
{
22-
author: 'bota01',
29+
author: '_perhaps',
30+
source: 'Discord',
31+
message:
32+
'I was for a while now feeling like there had to be a better way of handling workflows on a supabase project without needing to add something like inngest or n8n to my tech stack. It clicked really hard when I found out about your project',
33+
},
34+
{
35+
author: 'TapTap2121',
2336
source: 'Reddit',
2437
message:
25-
"This is very needed and the product looks nice. Can't wait for it to be production ready.",
38+
"I was searching through the docs for something like this and I'm quite surprised it's not part of Supabase already. A queue feels kinda useless with serverless runners if I need to trigger them manually",
2639
},
2740
{
28-
author: 'Danish',
29-
source: 'Discord',
30-
message: 'Waiting for your amazing work to be production ready!',
41+
author: 'Revolutionary-Fact28',
42+
source: 'Reddit',
43+
message:
44+
'I built a system to this on edge functions but it was very complicated and took so much time this will be amazing! I will be probably switch to this.',
3145
},
3246
{
33-
author: 'tomaspozo_',
34-
source: 'Discord',
35-
message: 'This sounds awesome! Looking forward to see it.',
47+
author: 'CjHuber',
48+
source: 'Hacker News',
49+
message:
50+
'Exactly what I was looking for without even knowing it :) well I knew I need smt like this, but I thought I\'d had to build a very rudimentary version myself. Thank you for saving me tons of time',
3651
},
3752
{
38-
author: 'homj',
53+
author: 'enciso',
3954
source: 'Discord',
40-
message: "Sounds good, I'm looking forward to it!",
55+
message:
56+
'I was trying to build my own after having a couple of pgmq queues... you found a problem and you are giving a very good solution',
4157
},
4258
];
43-
44-
// Duplicate testimonials for seamless infinite scroll
45-
const duplicatedTestimonials = [...testimonials, ...testimonials];
4659
---
4760

48-
<div class="testimonial-carousel-wrapper">
49-
<div class="testimonial-track">
50-
{duplicatedTestimonials.map((testimonial, i) => (
61+
<div class="testimonials-section">
62+
<!-- Hero Testimonial -->
63+
<div class="testimonial-card hero">
64+
<blockquote class="testimonial-message">
65+
{heroTestimonial.message}
66+
</blockquote>
67+
<div class="testimonial-header">
68+
<div class="testimonial-author">@{heroTestimonial.author}</div>
69+
<div class="testimonial-source">{heroTestimonial.source}</div>
70+
</div>
71+
</div>
72+
73+
<!-- Grid of Remaining Testimonials -->
74+
<div class="testimonials-grid">
75+
{testimonials.map((testimonial) => (
5176
<div class="testimonial-card">
52-
<div class="testimonial-header">
53-
<div class="testimonial-author">@{testimonial.author}</div>
54-
<div class="testimonial-source">({testimonial.source})</div>
55-
</div>
5677
<blockquote class="testimonial-message">
5778
{testimonial.message}
5879
</blockquote>
80+
<div class="testimonial-header">
81+
<div class="testimonial-author">@{testimonial.author}</div>
82+
<div class="testimonial-source">{testimonial.source}</div>
83+
</div>
5984
</div>
6085
))}
6186
</div>
6287
</div>
6388

6489
<style>
65-
.testimonial-carousel-wrapper {
66-
width: 100vw;
67-
max-width: 100vw;
68-
position: relative;
69-
left: 50%;
70-
transform: translateX(-50%);
71-
overflow: hidden;
72-
padding: 2rem 0;
73-
margin-left: 0;
74-
margin-right: 0;
75-
mask-image: linear-gradient(
76-
to right,
77-
transparent,
78-
black 5%,
79-
black 95%,
80-
transparent
81-
);
82-
-webkit-mask-image: linear-gradient(
83-
to right,
84-
transparent,
85-
black 5%,
86-
black 95%,
87-
transparent
88-
);
90+
.testimonials-section {
91+
width: 100%;
92+
max-width: 1200px;
93+
margin: 0 auto;
94+
padding: 2rem 1rem;
8995
}
9096

91-
.testimonial-track {
92-
display: flex;
93-
align-items: stretch;
94-
gap: 2rem;
95-
animation: scroll-left 120s linear infinite;
96-
width: fit-content;
97-
/* Performance optimizations */
98-
will-change: transform;
99-
transform: translateZ(0); /* Force GPU acceleration */
100-
}
101-
102-
@keyframes scroll-left {
103-
0% {
104-
transform: translate3d(0, 0, 0);
97+
/* Hero Testimonial */
98+
.testimonial-card.hero {
99+
margin: 0 auto 3rem auto;
100+
max-width: 700px;
101+
padding: 2rem 2.5rem;
102+
}
103+
104+
/* Grid Layout */
105+
.testimonials-grid {
106+
display: grid;
107+
grid-template-columns: repeat(3, 1fr);
108+
gap: 1.25rem;
109+
align-items: start;
110+
}
111+
112+
.testimonials-grid > .testimonial-card {
113+
height: 100%;
114+
align-self: stretch;
115+
}
116+
117+
@media (max-width: 968px) {
118+
.testimonials-grid {
119+
grid-template-columns: repeat(2, 1fr);
105120
}
106-
100% {
107-
transform: translate3d(-50%, 0, 0);
121+
}
122+
123+
@media (max-width: 640px) {
124+
.testimonials-grid {
125+
grid-template-columns: 1fr;
126+
gap: 1rem;
108127
}
109128
}
110129

130+
/* Base Card Styles - Starlight Aside inspired */
111131
.testimonial-card {
112-
min-width: 400px;
113-
max-width: 400px;
114-
padding: 1.5rem;
115-
/* Simplified gradient for better performance */
116-
background: rgba(0, 123, 110, 0.04);
117-
border: 1px solid rgba(0, 123, 110, 0.16);
118-
border-radius: 8px;
119-
box-shadow: 0 4px 12px rgba(0, 123, 110, 0.03);
120-
flex-shrink: 0;
132+
background: linear-gradient(
133+
135deg,
134+
color-mix(in srgb, var(--sl-color-accent-high) 4%, transparent) 0%,
135+
color-mix(in srgb, var(--sl-color-accent-high) 1%, transparent) 100%
136+
);
137+
border-left: 3px solid color-mix(in srgb, var(--sl-color-accent-high) 50%, transparent);
138+
padding: 1.5rem 1.75rem;
121139
display: flex;
122140
flex-direction: column;
123-
justify-content: flex-start;
124-
align-items: flex-start;
141+
transition: border-left-color 0.2s ease;
142+
margin: 0;
143+
}
144+
145+
.testimonial-card:hover {
146+
border-left-color: var(--sl-color-accent-high);
125147
}
126148

149+
/* Hero card with less prominent border */
150+
.testimonial-card.hero {
151+
border-left-width: 4px;
152+
border-left-color: color-mix(in srgb, var(--sl-color-accent-high) 50%, transparent);
153+
}
154+
155+
/* Message Styles - Quote first */
156+
.testimonial-message {
157+
margin: 0;
158+
padding: 0 0 0.5rem 0;
159+
font-size: 1.1rem;
160+
line-height: 1.7;
161+
color: var(--sl-color-gray-2);
162+
font-style: italic;
163+
flex: 1;
164+
border: none;
165+
border-left: none;
166+
}
167+
168+
.testimonial-card.hero .testimonial-message {
169+
font-size: 1.45rem;
170+
line-height: 1.7;
171+
font-weight: 500;
172+
}
173+
174+
/* Header Styles - Author bottom right */
127175
.testimonial-header {
128176
display: flex;
129-
align-items: center;
130-
margin-bottom: 0.75rem;
177+
align-items: baseline;
178+
gap: 0.5rem;
179+
flex-wrap: wrap;
180+
justify-content: flex-end;
181+
flex-shrink: 0;
131182
}
132183

133184
.testimonial-author {
134-
font-weight: bold;
135-
font-size: 0.95rem;
185+
font-weight: 600;
186+
font-size: 1rem;
187+
color: var(--sl-color-white);
136188
}
137189

138190
.testimonial-source {
139-
font-size: 0.85rem;
191+
font-size: 0.9rem;
140192
color: var(--sl-color-gray-3);
141-
margin-left: 0.5rem;
142193
}
143194

144-
.testimonial-message {
145-
font-size: 1.05rem;
146-
font-style: italic;
147-
margin: 0;
148-
line-height: 1.6;
149-
color: var(--sl-color-gray-2);
195+
.testimonial-source::before {
196+
content: "·";
197+
margin-right: 0.5rem;
198+
color: var(--sl-color-gray-4);
150199
}
151200

152-
/* Pause animation on hover */
153-
.testimonial-carousel-wrapper:hover .testimonial-track {
154-
animation-play-state: paused;
201+
.testimonial-card.hero .testimonial-author {
202+
font-size: 1.1rem;
155203
}
156204

157-
@media (max-width: 768px) {
158-
.testimonial-card {
159-
min-width: 300px;
160-
max-width: 300px;
161-
padding: 1.25rem;
162-
}
163-
164-
.testimonial-message {
165-
font-size: 0.95rem;
166-
}
167-
168-
.testimonial-track {
169-
animation-duration: 80s;
170-
}
205+
.testimonial-card.hero .testimonial-source {
206+
font-size: 1rem;
171207
}
172208

173-
@media (max-width: 480px) {
209+
@media (max-width: 640px) {
174210
.testimonial-card {
175-
min-width: 260px;
176-
max-width: 260px;
177-
padding: 1rem;
211+
padding: 1rem 1.25rem;
212+
}
213+
214+
.testimonial-card.hero {
215+
padding: 1.25rem 1.5rem;
178216
}
179217

180218
.testimonial-message {
181219
font-size: 0.9rem;
182220
}
221+
222+
.testimonial-card.hero .testimonial-message {
223+
font-size: 1rem;
224+
}
183225
}
184226

185227
/* Disable animation for users who prefer reduced motion */

pkgs/website/src/content/docs/index.mdx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,9 +389,7 @@ npx pgflow@latest install
389389
</Card>
390390
</CardGrid>
391391

392-
## What Developers Are Saying
393-
394-
*Real comments after seeing early demos*
392+
## What Developers Say
395393

396394
<TestimonialCarousel />
397395

pkgs/website/src/styles/global.css

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ svg .secondary {
7070
}
7171

7272
@keyframes breathing-glow {
73-
7473
0%,
7574
100% {
7675
filter: drop-shadow(0 0 0 transparent);
@@ -403,9 +402,7 @@ svg .secondary {
403402
/* Light steel blue bg */
404403

405404
/* Purple (Tip) */
406-
--sl-color-purple-high: hsl(280,
407-
58%,
408-
32%);
405+
--sl-color-purple-high: hsl(280, 58%, 32%);
409406
/* Dark soft magenta-purple text */
410407
--sl-color-purple: hsl(280, 55%, 58%);
411408
/* Soft magenta-purple */

0 commit comments

Comments
 (0)