Skip to content

Commit 86a8f6e

Browse files
Merge pull request #1419 from datopian/feat/improve-ui-of-a-casestudy-component
Case studies features section ui and logic re-wamp
2 parents eabc826 + 0bd5506 commit 86a8f6e

7 files changed

+169
-55
lines changed

site/content/case-studies/a-global-transport-hub-building-a-shared-open-data-infrastructure-for-30-plus-transport-organizations.md

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,43 @@ solution:
3232
'Datopian delivered a unified open data platform using CKAN for the backend and PortalJS for the frontend. We replaced the default UI with a custom, fully decoupled interface tailored to non-technical users. The platform includes automated data ingestion pipelines, SDMX-compliant metadata, rich search and filter tools, onboarding flows, and role-based publishing workflows—making data management and access faster, simpler, and more reliable.'
3333
results:
3434
'TDC now operates a centralized, public data portal where 30+ organizations can contribute, manage, and explore datasets efficiently. The platform enables faster decision-making, reduces duplication, and supports international collaboration. Contributors follow structured publishing flows; users benefit from intuitive discovery tools. By standardizing data and simplifying workflows, the portal turns fragmented inputs into a shared, trusted resource.'
35-
features:
36-
[
37-
' - **Built for multi-organization publishing** – PortalJS is ideal for coalitions like TDC — enabling role-based access, contributor dashboards, and streamlined publishing across 30+ organizations.',
38-
'hexagonal',
39-
' - **Supports structured metadata like SDMX** – TDC needed metadata aligned with SDMX standards. PortalJS made it easy to surface, search, and display structured datasets clearly.',
40-
'presentation-1',
41-
' - **Turned disconnected data into a unified platform** – From scattered PDFs to a live, searchable portal — PortalJS helped TDC centralize transport and sustainability data in one public space.',
42-
'rocket',
43-
' - **Frontend flexibility without backend changes** – All workflows — including dataset approval, visibility toggling, and publishing flows — were built on the frontend with no backend rewrites.',
44-
'repair-tools',
45-
' - **Visual exploration through filters and maps** - Users can search by region, sector, or keyword — or use an interactive map to explore country-specific datasets.',
46-
'magnify',
47-
' - **Custom contributor onboarding flow** - We built a guided onboarding experience tailored to TDC: helping users follow topics, join organizations, and start contributing with confidence.',
48-
'presentation-4',
35+
features: [
36+
{
37+
title: "Built for multi-organization publishing",
38+
text: "PortalJS is ideal for coalitions like TDC — enabling role-based access, contributor dashboards, and streamlined publishing across 30+ organizations.",
39+
icon: "hexagonal"
40+
},
41+
{
42+
title: "Supports structured metadata like SDMX",
43+
text: "TDC needed metadata aligned with SDMX standards. PortalJS made it easy to surface, search, and display structured datasets clearly.",
44+
icon: "presentation-1"
45+
},
46+
{
47+
title: "Turned disconnected data into a unified platform",
48+
text: "From scattered PDFs to a live, searchable portal — PortalJS helped TDC centralize transport and sustainability data in one public space.",
49+
icon: "rocket"
50+
},
51+
{
52+
title: "Frontend flexibility without backend changes",
53+
text: "All workflows — including dataset approval, visibility toggling, and publishing flows — were built on the frontend with no backend rewrites.",
54+
icon: "repair-tools"
55+
},
56+
{
57+
title: "Visual exploration through filters and maps",
58+
text: "Users can search by region, sector, or keyword — or use an interactive map to explore country-specific datasets.",
59+
icon: "magnify"
60+
},
61+
{
62+
title: "Custom contributor onboarding flow",
63+
text: "We built a guided onboarding experience tailored to TDC: helping users follow topics, join organizations, and start contributing with confidence.",
64+
icon: "presentation-4"
65+
}
4966
]
5067
quote:
5168
[
5269
'This isn’t just a frontend — it’s a public infrastructure for collaboration on transport data.',
5370
'/static/img/showcases/2025-06-06-TDC/logo.png',
54-
'Transport Data Commons',
71+
'Transport Data Commons'
5572
]
5673
portal:
5774
[

site/content/case-studies/eiti-fully-customizable-data-portal-in-minutes.md

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,31 @@ solution:
3232
results: 'The new EITI open data portal became a **central hub** for stakeholders to access detailed reports, visualize extractive industry data, and explore global datasets effortlessly. The scalable infrastructure and rapid deployment empowered EITI to focus on their mission of transparency without being burdened by IT complexities.'
3333
features:
3434
[
35-
' - **Rapid Deployment with Zero Maintenance** – EITI launched their fully functional open data portal in less than a day using PortalJS Cloud. The platform eliminates the need for manual IT setup and ongoing maintenance, freeing up resources to focus on critical tasks.',
36-
'rocket',
37-
' - **Comprehensive Data Repository** – The portal hosts a wide array of open datasets, including country-level reports, production figures, and revenue distributions. This makes it a one-stop shop for anyone seeking reliable extractive industry data.',
38-
'database',
39-
' - **Full Customization & Developer-Friendly Access** – EITI leveraged the platform’s **public GitHub repository**, tailoring the portal to align with their branding and mission. They redesigned the UI/UX, integrated advanced data visualizations, and implemented features like **custom search filters** for better data discovery.',
40-
'browser',
41-
' - **Scalable, Secure Infrastructure** – The portal’s infrastructure supports large data volumes and high user traffic without compromising on performance or data security, ensuring reliable access at all times.',
42-
'api',
43-
' - **Continuous Improvement** - With access to the portal’s underlying source code, EITI continuously evolves their platform by responding to user feedback, adding new features, and refining the user experience.',
44-
'verified',
35+
{
36+
title: "Rapid Deployment with Zero Maintenance",
37+
text: "EITI launched their fully functional open data portal in less than a day using PortalJS Cloud. The platform eliminates the need for manual IT setup and ongoing maintenance, freeing up resources to focus on critical tasks.",
38+
icon: "rocket"
39+
},
40+
{
41+
title: "Comprehensive Data Repository",
42+
text: "The portal hosts a wide array of open datasets, including country-level reports, production figures, and revenue distributions. This makes it a one-stop shop for anyone seeking reliable extractive industry data.",
43+
icon: "database"
44+
},
45+
{
46+
title: "Full Customization & Developer-Friendly Access",
47+
text: "EITI leveraged the platform’s **public GitHub repository**, tailoring the portal to align with their branding and mission. They redesigned the UI/UX, integrated advanced data visualizations, and implemented features like **custom search filters** for better data discovery.",
48+
icon: "browser"
49+
},
50+
{
51+
title: "Scalable, Secure Infrastructure",
52+
text: "The portal’s infrastructure supports large data volumes and high user traffic without compromising on performance or data security, ensuring reliable access at all times.",
53+
icon: "api"
54+
},
55+
{
56+
title: "Continuous Improvement",
57+
text: "With access to the portal’s underlying source code, EITI continuously evolves their platform by responding to user feedback, adding new features, and refining the user experience.",
58+
icon: "verified"
59+
}
4560
]
4661
quote:
4762
[

site/content/case-studies/london-borough-of-hounslow.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,27 @@ solution: '### PortalJS Cloud: A Fully Managed, Cost-Effective Solution
2828
results: '### Results:
2929
3030
Migrating to PortalJS Cloud allowed the Borough to eliminate infrastructure maintenance, cut costs, and allocate resources more effectively. The open data portal remains accessible, reliable, and cost-efficient without requiring ongoing technical oversight.'
31-
features: [' - **No Infrastructure Maintenance** – PortalJS Cloud manages updates, security, and hosting.', 'server', ' - **Cost Optimization** – Pay-as-you-go model reduces cloud and staffing expenses.', 'ewallet', ' - **Seamless Scaling** – Adapts automatically to increasing data demands.', 'expand',' - **Improved UI/UX** – Faster load times, modern design, and better navigation.' , 'browser'
31+
features: [
32+
{
33+
title: "No Infrastructure Maintenance",
34+
text: "PortalJS Cloud manages updates, security, and hosting.",
35+
icon: "server"
36+
},
37+
{
38+
title: "Cost Optimization",
39+
text: "Pay-as-you-go model reduces cloud and staffing expenses.",
40+
icon: "ewallet"
41+
},
42+
{
43+
title: "Seamless Scaling",
44+
text: "Adapts automatically to increasing data demands.",
45+
icon: "expand"
46+
},
47+
{
48+
title: "Improved UI/UX",
49+
text: "Faster load times, modern design, and better navigation.",
50+
icon: "browser"
51+
}
3252
]
3353
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.', '/images/casestudies/hounslow-logo.webp', 'London Borough of Hounslow' ]
3454
portal:

site/content/case-studies/open-energy-data-how-ssen-tackled-massive-challenge-portaljs-ckan.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,28 @@ results: '### Making energy data work smarter, not harder
3030
- User satisfaction skyrocketed with faster queries and better access to critical insights.
3131
3232
- The portal supports sustainability initiatives, paving the way for net-zero goals.'
33-
features: [' - **Lightning-Fast Frontend** – PortalJS delivers a sleek, intuitive interface that’s built for usability.','favorite',' - **Reliable Data Backbone** – [CKAN](https://www.datopian.com/solutions/ckan) ensures large datasets are stored, organized, and shared efficiently.','database',' - **Powerful Add-Ons** – Extensions like ckanext-dcat and ckanext-scheming boost interoperability and customization.','layers',' - **Scalable Infrastructure** – BigQuery and Prefect make processing and analyzing huge datasets (over 1TB of data) effortless.','cloud-network']
33+
features: [
34+
{
35+
title: "Lightning-Fast Frontend",
36+
text: "PortalJS delivers a sleek, intuitive interface that’s built for usability.",
37+
icon: "favorite"
38+
},
39+
{
40+
title: "Reliable Data Backbone",
41+
text: "[CKAN](https://www.datopian.com/solutions/ckan) ensures large datasets are stored, organized, and shared efficiently.",
42+
icon: "database"
43+
},
44+
{
45+
title: "Powerful Add-Ons",
46+
text: "Extensions like ckanext-dcat and ckanext-scheming boost interoperability and customization.",
47+
icon: "layers"
48+
},
49+
{
50+
title: "Scalable Infrastructure",
51+
text: "BigQuery and Prefect make processing and analyzing huge datasets (over 1TB of data) effortless.",
52+
icon: "cloud-network"
53+
}
54+
]
3455
quote: ['I would like to take this opportunity to extend my heartfelt gratitude for the outstanding support and collaboration your team has offered over the past year. The agility, technical prowess, and steadfast dedication you have demonstrated are truly commendable. Your efforts have been integral to our successes, and I am deeply appreciative. I am hopeful that there will be opportunities for me to engage with future projects and contribute. Thank you once again for your exemplary contribution and for the positive spirit you bring to our work.', '/images/casestudies/ssen-logo.png', 'Shailesh Kumar, Analytics and Data Architect - SSEN' ]
3556
portal:
3657
[

site/content/case-studies/simplifying-healthcare-metadata.md

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,21 +48,38 @@ results:
4848
- **Human-Centric UX**- Q&A threads and glossary terms reduce confusion and support tickets.
4949
5050
- **Operational Boost**- Faster dataset provisioning, better data reuse, and less friction in onboarding new researchers.'
51-
features:
52-
[
53-
' - **Api-first, backend-agnostic** – Build modern data portals on any backend — from CKAN to OpenMetadata — using a clean, decoupled, API-first architecture.',
54-
'standards',
55-
' - **Modern web stack** – Built with Next.js, TailwindCSS, and React — PortalJS offers a lightweight, maintainable, developer-friendly foundation.',
56-
'api',
57-
' - **Dockerized for speed** – Deploy fast with containerized builds that fit neatly into your DevOps pipelines — on cloud or on-prem.',
58-
'rocket',
59-
' - **Designed for non-technical users** – Make data usable for everyone — researchers, citizens, analysts — with intuitive, clean UI tailored to real-world needs.',
60-
'presentation-3',
61-
' - **Secure by design** - Integrates easily with identity providers like Microsoft Entra ID to ensure secure, role-based access control.',
62-
'key',
63-
' - **Pluggable and extensible** - Adapt and grow your portal with reusable components, custom layouts, and rich integration options — all without vendor lock-in.',
64-
'puzzle',
65-
]
51+
features: [
52+
{
53+
title: "Api-first, backend-agnostic",
54+
text: "Build modern data portals on any backend — from CKAN to OpenMetadata — using a clean, decoupled, API-first architecture.",
55+
icon: "standards"
56+
},
57+
{
58+
title: "Modern web stack",
59+
text: "Built with Next.js, TailwindCSS, and React — PortalJS offers a lightweight, maintainable, developer-friendly foundation.",
60+
icon: "api"
61+
},
62+
{
63+
title: "Dockerized for speed",
64+
text: "Deploy fast with containerized builds that fit neatly into your DevOps pipelines — on cloud or on-prem.",
65+
icon: "rocket"
66+
},
67+
{
68+
title: "Designed for non-technical users",
69+
text: "Make data usable for everyone — researchers, citizens, analysts — with intuitive, clean UI tailored to real-world needs.",
70+
icon: "presentation-3"
71+
},
72+
{
73+
title: "Secure by design",
74+
text: "Integrates easily with identity providers like Microsoft Entra ID to ensure secure, role-based access control.",
75+
icon: "key"
76+
},
77+
{
78+
title: "Pluggable and extensible",
79+
text: "Adapt and grow your portal with reusable components, custom layouts, and rich integration options — all without vendor lock-in.",
80+
icon: "puzzle"
81+
}
82+
]
6683
quote:
6784
[
6885
'We needed a simple way to bridge usability gaps without rebuilding infrastructure. PortalJS delivered exactly that.',

site/content/case-studies/uae-moei-scalable-platform-government-data-publishing.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,27 @@ solution: 'Datopian delivered a full-stack solution using **PortalJS** for the f
1515
1616
MOEI’s non-technical staff manage content and datasets directly, without needing developers. The platform is fully hosted and maintained by Datopian, requiring zero operational effort from the Ministry. It’s a scalable, secure, and API-first solution that delivers on both transparency and usability.'
1717
results: 'The MOEI Open Data Portal now serves as a **trusted digital resource**, offering public access to clean, categorized, and searchable datasets. The platform simplifies data discovery, empowers developers through APIs, and enables non-technical staff to manage content effortlessly—while maintaining full security and performance at scale.'
18-
features: [' - **Zero maintenance burden for the MOEI team**', 'database', ' - **Managed hosting with ongoing updates and security patches**', 'menu', ' - **Scalable infrastructure, compatible with Azure**', 'expand',' - **Rapid delivery and branding alignment out of the box**' , 'verified'
18+
features: [
19+
{
20+
title: "Zero maintenance burden for the MOEI team",
21+
text: "",
22+
icon: "database"
23+
},
24+
{
25+
title: "Managed hosting with ongoing updates and security patches",
26+
text: "",
27+
icon: "menu"
28+
},
29+
{
30+
title: "Scalable infrastructure, compatible with Azure",
31+
text: "",
32+
icon: "expand"
33+
},
34+
{
35+
title: "Rapid delivery and branding alignment out of the box",
36+
text: "",
37+
icon: "verified"
38+
}
1939
]
2040
quote: ['The platform gives us exactly what we needed—bilingual access, strong data infrastructure, and zero maintenance on our end. It’s been a reliable tool for sharing our datasets with the public.', '/static/img/social-proof/uae-logo.webp', 'MOEI' ]
2141
highlight: '- **CKAN** provides a battle-tested backend for structured data, metadata management, and API endpoints.

site/layouts/casestudy.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,14 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
102102

103103
const IconWrapper: React.FC<any> = ({ features }) => {
104104
return (
105-
<div className="grid grid-cols-1 sm:grid-cols-2 gap-12 mt-9">
105+
<div className="grid grid-cols-1 sm:grid-cols-2 gap-12 mt-14 mb-20">
106106
{features.map((item, index) => {
107-
if (index % 2 === 0) {
108-
const text = item
109-
const icon = features[index + 1]
107+
if (item) {
110108
const IconComponent = ({ className }) => (
111109
<Player
112110
autoplay
113111
loop
114-
src={`/static/icons/${theme}/${icon}.json`}
112+
src={`/static/icons/${theme}/${item.icon}.json`}
115113
style={{ height: '60px', width: '60px' }}
116114
className={className}
117115
/>
@@ -123,9 +121,13 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
123121
<IconComponent className="mr-2 text-blue-400 min-w-4 min-h-4 dark:-rotate-[4deg] " />
124122
</div>
125123

126-
<div className="">
127-
{' '}
128-
<ReactMarkdown>{text}</ReactMarkdown>
124+
<div>
125+
<h5 className="text-lg font-bold">
126+
<ReactMarkdown>{item.title}</ReactMarkdown>
127+
</h5>
128+
<p className="text-gray-300 font-medium mt-[2px]">
129+
<ReactMarkdown>{item.text}</ReactMarkdown>
130+
</p>
129131
</div>
130132
</div>
131133
) : (
@@ -217,6 +219,7 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
217219
href={portal[2]}
218220
title="Get started with PortalJS Cloud"
219221
className="text-sm"
222+
target="_blank"
220223
>
221224
See the portal
222225
</ButtonLink>
@@ -293,21 +296,21 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
293296

294297
<Journey />
295298

296-
<div className="text-2xl font-bold mt-16 ">Why PortalJS Cloud?</div>
299+
<div className="text-2xl font-bold mt-20 max-w-5xl mx-auto">Why PortalJS Cloud?</div>
297300

298-
<div className="flex ">
301+
<div className="flex max-w-5xl justify-self-center ">
299302
<IconWrapper features={features} />
300303
</div>
301304

302305
{highlight && (
303-
<>
306+
<div className='max-w-5xl mx-auto'>
304307
<div className="text-2xl font-bold mt-8 ">
305308
Why PortalJS Cloud + CKAN is the perfect pair?
306309
</div>
307310
<ReactMarkdown className="prose prose-headings:font-headings dark:prose-invert prose-a:break-word mt-8">
308311
{highlight}
309312
</ReactMarkdown>
310-
</>
313+
</div>
311314
)}
312315
<div className="w-full flex flex-col items-center mt-32">
313316
<div className="max-w-4xl relative">
@@ -361,6 +364,7 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
361364
title="Explore"
362365
className="mt-6 text-sm"
363366
style="secondary"
367+
target="_blank"
364368
>
365369
Explore
366370
</ButtonLink>}

0 commit comments

Comments
 (0)