Skip to content

Commit 0004963

Browse files
authored
Merge pull request #1451 from datopian/feature/homepage-improvements
Feature/homepage improvements
2 parents c2f65d8 + 8a24740 commit 0004963

4 files changed

Lines changed: 71 additions & 57 deletions

File tree

site/components/home/SocialProof.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ export default function SocialProof() {
1212
style: 'grayscale opacity-75',
1313
width: 170,
1414
},
15+
{
16+
name: 'Bank of England',
17+
srcDark: '/static/img/social-proof/bank-of-england.svg',
18+
srcLight: '/static/img/social-proof/bank-of-england.svg',
19+
url: 'https://www.bankofengland.co.uk/',
20+
style: 'grayscale dark:invert opacity-80',
21+
width: 200,
22+
},
1523
{
1624
name: 'Transport Data Commons',
1725
srcDark: '/static/img/social-proof/TDC_logo.svg',
@@ -48,7 +56,7 @@ export default function SocialProof() {
4856
name: 'Sigma2',
4957
srcDark: '/static/img/social-proof/sigma2-light-transparent.png',
5058
srcLight: '/static/img/social-proof/sigma2-light-transparent.png',
51-
url: 'https://www.sigma2.no/',
59+
url: 'https://archive.sigma2.no/',
5260
style: 'grayscale ',
5361
width: 180,
5462
},
@@ -93,14 +101,6 @@ export default function SocialProof() {
93101
style: 'grayscale dark:invert-0 opacity-80',
94102
width: 200,
95103
},
96-
{
97-
name: 'EITI',
98-
srcDark: '/static/img/social-proof/EITI.webp',
99-
srcLight: '/static/img/social-proof/EITI.webp',
100-
url: 'https://eiti.portaljs.com',
101-
style: 'grayscale dark:invert',
102-
width: 120,
103-
},
104104
]
105105

106106
const { theme, setTheme } = useTheme()

site/components/home/Testimonials.tsx

Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,60 @@
1-
import { Player } from '@lottiefiles/react-lottie-player'
21
import { H2, H3 } from '../custom/header'
3-
import { ro } from 'date-fns/locale'
2+
import { RiDoubleQuotesL } from 'react-icons/ri'
3+
import testimonials from '@/content/testimonials.json'
4+
5+
type Testimonial = {
6+
name: string
7+
role?: string
8+
organization?: string
9+
quote: string
10+
image?: string
11+
url?: string
12+
}
413

514
export const Testimonials = () => {
6-
const testimonials = [
7-
{
8-
name: 'Sarah Johnson',
9-
role: 'Data Officer, City Government',
10-
quote:
11-
'"PortalJS Cloud allowed us to launch our open data initiative in days instead of months. The platform is intuitive and our users love the experience."',
12-
image: '/static/img/home/62-100x100.jpg',
13-
style: '',
14-
},
15-
{
16-
name: 'Dr. Michael Chen',
17-
role: 'Research Director, University',
18-
quote:
19-
'"We needed a compliant, secure solution for sharing research data. PortalJS Cloud met all our requirements and was surprisingly easy to implement."',
20-
image: '/static/img/home/64-100x100.jpg',
21-
style: '',
22-
},
23-
{
24-
name: 'Emma Rodriguez',
25-
role: 'IT Manager, Non-profit Organization',
26-
quote:
27-
'"The support team has been exceptional. They helped us migrate our legacy data and provided training for our staff. Highly recommended."',
28-
image: '/static/img/home/65-100x100.jpg',
29-
style: '',
30-
},
31-
]
15+
const items = (testimonials as Testimonial[]).filter(
16+
(t) => t && t.quote && t.name
17+
)
18+
19+
if (!items.length) return null
3220

3321
return (
34-
<div className="py-24">
35-
<div className="">
22+
<div className="pt-10 sm:pt-16 lg:pt-24 pb-24">
23+
<div>
3624
<H2 className="text-center mb-4">
3725
Trusted by Data Publishers Worldwide
3826
</H2>
39-
<H3 className="opacity-75 text-center ">
40-
Join hundreds of organizations that trust PortalJS Cloud for their
41-
data publishing needs.
27+
<H3 className="opacity-75 text-center">
28+
Real feedback from organizations using PortalJS Cloud
4229
</H3>
4330
<div className="mt-16 grid grid-cols-1 gap-y-12 sm:gap-x-12 lg:grid-cols-3 lg:gap-x-6">
44-
{testimonials.map((testimonial) => (
31+
{items.map((t) => (
4532
<div
46-
key={testimonial.name}
47-
className="relative flex flex-col rounded-xl dark:bg-slate-900 dark:hover:bg-slate-800 hover:bg-slate-100 transition-all duration-300 ring-1 ring-slate-200 dark:ring-slate-800 p-7 gap-7 rounded-lg shadow-lg overflow-hidden"
33+
key={`${t.name}-${t.quote.slice(0, 16)}`}
34+
className="relative flex flex-col rounded-xl dark:bg-slate-900 dark:hover:bg-slate-800 hover:bg-slate-100 transition-all duration-300 ring-1 ring-slate-200 dark:ring-slate-800 p-7 gap-5 rounded-lg shadow-lg overflow-hidden"
4835
>
49-
<p className=" text-base opacity-75">{testimonial.quote}</p>
50-
<div className="flex-shrink-0 w-full flex items-start gap-4 mt-auto ">
51-
<img
52-
src={testimonial.image}
53-
className={`w-14 h-14 ${testimonial.style} rounded-full`}
54-
/>
55-
<div className="">
56-
<h3 className="text-lg font-medium ">{testimonial.name}</h3>
57-
<p className="text-sm text-gray-500 dark:text-gray-400">
58-
{testimonial.role}
59-
</p>
60-
</div>
36+
<div className="text-theme-orange opacity-75">
37+
<RiDoubleQuotesL className="w-6 h-6" aria-hidden />
38+
</div>
39+
<p className="text-base opacity-75">{t.quote}</p>
40+
<div className="flex-shrink-0 w-full mt-auto">
41+
<h3 className="text-lg font-medium ">
42+
{t.url ? (
43+
<a
44+
href={t.url}
45+
target="_blank"
46+
rel="noopener noreferrer"
47+
className="hover:underline"
48+
>
49+
{t.name}
50+
</a>
51+
) : (
52+
t.name
53+
)}
54+
</h3>
55+
<p className="text-sm text-gray-500 dark:text-gray-400">
56+
{[t.role, t.organization].filter(Boolean).join(', ')}
57+
</p>
6158
</div>
6259
</div>
6360
))}

site/content/testimonials.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[
2+
{
3+
"name": "Transport Data Commons",
4+
"quote": "This isn’t just a frontend — it’s a public infrastructure for collaboration on transport data.",
5+
"url": "https://portal.transport-data.org/"
6+
},
7+
{
8+
"name": "London Borough of Hounslow",
9+
"quote": "With PortalJS Cloud, we no longer worry about infrastructure. We’ve cut costs and improved our platform’s usability for citizens and researchers alike.",
10+
"url": "https://data.hounslow.gov.uk"
11+
},
12+
{
13+
"name": "Public Health Data Service",
14+
"quote": "We needed a simple way to bridge usability gaps without rebuilding infrastructure. PortalJS delivered exactly that."
15+
}
16+
]
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)