Skip to content

Commit 4b404a4

Browse files
steveonidemenech
authored andcommitted
[case study]: linconlshire
1 parent 64cd5fc commit 4b404a4

File tree

11 files changed

+2180
-146
lines changed

11 files changed

+2180
-146
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
filetype: 'casestudy'
3+
created: 2026-03-03
4+
title: Modernizing Lincolnshire County Council / From Dedicated CKAN Instance to Managed PortalJS Cloud Service
5+
description: 'Discover how Lincolnshire County Council transformed their data publishing approach, migrating from a dedicated CKAN instance to PortalJS Cloud. Reduced operational costs, simplified administration, and delivered a modern user experience without compromising their established catalogue.'
6+
image: /images/casestudies/linconshire0.jpg
7+
images: ['/images/casestudies/lincolnshire1.png', '/images/casestudies/lincolnshire2.png', '/images/casestudies/lincolnshire3.png', '/images/casestudies/lincolnshire4.png']
8+
authors: ['popovayoana']
9+
keystats: [
10+
'Seamless/n catalogue migration',
11+
'Zero/n infrastructure overhead',
12+
'100%/n Budget-friendly solution',
13+
]
14+
problem: "
15+
Lincolnshire County Council had built a solid open data programme on CKAN, serving their community with 60+ datasets across essential public services. As a smaller authority, however, they found themselves managing infrastructure complexity that was better suited to larger organizations with dedicated technical teams. Their challenges centered around operational fit rather than technology limitations:
16+
17+
18+
- **Infrastructure Management Overhead**: Running a dedicated instance required server administration and technical maintenance that consumed staff time.
19+
20+
- **Admin Interface Complexity**: CKAN's powerful admin dashboard was designed for technical users, creating friction for council staff who needed to focus on data rather than platform management.
21+
22+
23+
- **Limited Self-Service Capability**: Routine updates and content management required technical intervention, slowing down day-to-day operations.
24+
"
25+
solution: "
26+
PortalJS Cloud delivered exactly what Lincolnshire needed: a managed service that eliminated infrastructure costs while providing a modern, customizable frontend. The migration preserved their entire CKAN catalogue while giving council staff direct control over day-to-day operations through an intuitive admin dashboard..
27+
28+
- **Complete Data Migration**: Every dataset, resource, organization, and metadata element transferred seamlessly from CKAN to PortalJS Cloud.
29+
30+
31+
- **Modern, Branded Interface**: Fully customised frontend reflecting Lincolnshire County Council''s visual identity and accessibility requirements.
32+
33+
34+
- **Staff Empowerment**: Admin workflows simplified so council staff can manage content, users, and configurations without technical support."
35+
results: "Lincolnshire's open data portal is now both more cost-effective and easier to operate. The modern interface serves their community of residents, researchers, and developers through clean data discovery tools, while the simplified admin experience lets council staff focus on data quality rather than platform maintenance."
36+
features: [
37+
{ title: "Cost-Effective Managed Service", text: "Lincolnshire moved from managing their own infrastructure to a fully managed service model with PortalJS Cloud. This eliminated the need for server administration and technical maintenance, letting council staff focus on their data rather than the platform underneath it.", icon: "rocket" },
38+
{ title: "Complete Catalogue Preservation", text: "The migration transferred all 60 published datasets, 10 topic categories, and 6 organizational structures without data loss. Download links, metadata relationships, and search functionality remained fully intact.", icon: "database" },
39+
{ title: "Intuitive Self-Service Administration", text: "Council staff now manage datasets, users, and portal configuration through PortalJS Cloud's purpose-built dashboard—no need to navigate CKAN's complex admin interface or route requests through developers.", icon: "browser" },
40+
{ title: "Modern User Experience", text: "Built on Next.js and Tailwind CSS, the new portal delivers faster performance, responsive design, and accessibility compliance that meets contemporary web standards.", icon: "verified" },
41+
{ title: "Simplified Customization", text: "Frontend updates, branding changes, and feature additions can be implemented directly by the council team without specialist development resources.", icon: "paint-roller" },
42+
]
43+
quote: [
44+
'"PortalJS Cloud allowed us to maintain our data publishing commitments while working within our budget constraints. The migration was seamless and the ongoing operational savings have been significant."',
45+
'/images/casestudies/lincon.svg',
46+
'Lincolnshire County Council Representative',
47+
]
48+
portal: [
49+
'Lincolnshire Open Data Portal',
50+
'As part of its digital transformation strategy, Lincolnshire County Council migrated to PortalJS Cloud with consulting and migration services by Datopian.',
51+
'https://data.lincolnshire.gov.uk',
52+
]
53+
table: default
54+
longReadLink: 'https://www.datopian.com/showcase/case-studies/lincolnshire-county-council-portaljs-cloud-migration'
55+
longReadTitle: 'How Lincolnshire County Council Modernised Its Open Data Portal with PortalJS Cloud'
56+
longReadSummary: 'Read the complete breakdown of architecture, migration approach, and outcomes — from dedicated CKAN instance to fully managed PortalJS Cloud.'
57+
---

site/layouts/casestudy.tsx

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
8181
table,
8282
highlight,
8383
longRead = true,
84+
longReadLink,
85+
longReadTitle,
86+
longReadSummary,
8487
fullCaseStudy = false,
8588
faqs
8689
} = frontMatter
@@ -539,46 +542,77 @@ export default function CaseStudyLayout({ children, ...frontMatter }) {
539542
<article>
540543
<Header />
541544
<Cta />
542-
{longRead && !fullCaseStudy && <main className="flex flex-col mt-16 w-full mx-auto max-w-8xl px-4 sm:px-8 xl:px-12">
543-
<Disclosure>
544-
{({ open }) => (
545-
<>
546-
<Disclosure.Button className="text-start text-base font-medium">
547-
{open ? (
548-
<div>
549-
<p className="text-sm font-bold text-blue-400">LONG READ</p>
550-
<div className="flex items-center gap-2">
551-
<p className="text-2xl">Hide</p>
552-
<FaIcons.FaAngleDoubleUp className="text-blue-400 mt-1 " />
545+
{longRead && !fullCaseStudy && (longReadLink ? (
546+
<main className="flex flex-col mt-16 w-full mx-auto max-w-8xl px-4 sm:px-8 xl:px-12">
547+
<div className="px-8 py-12 sm:px-12 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-8">
548+
<div>
549+
<p className="text-xs font-semibold tracking-widest uppercase text-blue-400 mb-2.5">
550+
Full Case Study
551+
</p>
552+
<h3 className="text-xl sm:text-[22px] font-bold text-slate-900 dark:text-white leading-snug max-w-sm">
553+
{longReadTitle || 'Read the full case study'}
554+
</h3>
555+
{longReadSummary && (
556+
<p className="mt-2.5 text-sm text-slate-500 dark:text-slate-400 max-w-sm leading-relaxed">
557+
{longReadSummary}
558+
</p>
559+
)}
560+
</div>
561+
<a
562+
href={longReadLink}
563+
target="_blank"
564+
rel="noopener noreferrer"
565+
className="inline-flex items-center gap-2 bg-slate-900 dark:bg-white text-white dark:text-[#111] text-sm font-semibold px-6 py-3.5 rounded-lg hover:bg-slate-700 dark:hover:bg-slate-100 transition-colors shrink-0"
566+
>
567+
Read the full story
568+
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="w-4 h-4">
569+
<path d="M3 8h10M9 4l4 4-4 4"/>
570+
</svg>
571+
</a>
572+
</div>
573+
</main>
574+
) : (
575+
<main className="flex flex-col mt-16 w-full mx-auto max-w-8xl px-4 sm:px-8 xl:px-12">
576+
<Disclosure>
577+
{({ open }) => (
578+
<>
579+
<Disclosure.Button className="text-start text-base font-medium">
580+
{open ? (
581+
<div>
582+
<p className="text-sm font-bold text-blue-400">LONG READ</p>
583+
<div className="flex items-center gap-2">
584+
<p className="text-2xl">Hide</p>
585+
<FaIcons.FaAngleDoubleUp className="text-blue-400 mt-1 " />
586+
</div>
553587
</div>
554-
</div>
555-
) : (
556-
<div>
557-
<p className="text-sm font-bold text-blue-400">LONG READ</p>
558-
<div className="flex items-center gap-2 transition blink">
559-
<p className="text-start text-5xl sm:text-7xl max-w-lg sm:mb-16 tracking-tight">
560-
Click to read the detailed case study{' '}
561-
<FaIcons.FaAngleDoubleDown className=" inline text-blue-400 -ml-3 mt-1 sm:h-16 sm:w-16 " />
562-
</p>
588+
) : (
589+
<div>
590+
<p className="text-sm font-bold text-blue-400">LONG READ</p>
591+
<div className="flex items-center gap-2 transition blink">
592+
<p className="text-start text-5xl sm:text-7xl max-w-lg sm:mb-16 tracking-tight">
593+
Click to read the detailed case study{' '}
594+
<FaIcons.FaAngleDoubleDown className=" inline text-blue-400 -ml-3 mt-1 sm:h-16 sm:w-16 " />
595+
</p>
596+
</div>
563597
</div>
598+
)}
599+
</Disclosure.Button>
600+
<Disclosure.Panel>
601+
<div className="text-center text-3xl font-semibold mt-8 mb-6 max-w-l">
602+
A Detailed Case Study for a Deep Dive
564603
</div>
565-
)}
566-
</Disclosure.Button>
567-
<Disclosure.Panel>
568-
<div className="text-center text-3xl font-semibold mt-8 mb-6 max-w-l">
569-
A Detailed Case Study for a Deep Dive
570-
</div>
571-
<div className="flex justify-center">
572-
{' '}
573-
<div className="max-w-4xl docs mt-6 prose prose-headings:font-headings dark:prose-invert prose-a:break-word ">
574-
{children}
604+
<div className="flex justify-center">
605+
{' '}
606+
<div className="max-w-4xl docs mt-6 prose prose-headings:font-headings dark:prose-invert prose-a:break-word ">
607+
{children}
608+
</div>
575609
</div>
576-
</div>
577-
</Disclosure.Panel>
578-
</>
579-
)}
580-
</Disclosure>
581-
</main>}
610+
</Disclosure.Panel>
611+
</>
612+
)}
613+
</Disclosure>
614+
</main>
615+
))}
582616
<Stats />
583617
<FAQ faqItems={faqs || questions} />
584618
</article>

0 commit comments

Comments
 (0)