SlideShare a Scribd company logo
Plone and Volto in a Jamstack Project
Plone Conference 2020
Asko Soukka
7.12.2020
+
Backend: Plone & Volto
1
Frontend: GatsbyJS Jamstack
2
datakurre
Author
Asko Soukka
Software architect at University of Jyväskylä Digital Services
Background
• Python developer since 2002
• Plone developer since 2004
• Full-time professional since 2008
• GatsbyJS user since 2018
3
In the beginning...
datakurre
SISU
One student information management system to rule them all, but...
• every organisation shall do their own integrations
• using granular REST API with deep JSON responses
Branded study guide DIY
• data in tables with JSONB column per endpoint
• custom API with database views and Hasura
• crafted with GatsbyJS + GraphQL source plugin
4
Let there be CMS
datakurre
Study Guide for University of Jyväskylä Open University
Starting points
• 3rd party student information management system
• limited content authoring options
Requirements
• rich content authoring options
• hierarchical permission management
• merge structural data with custom content
• fast and responsive end-user experience
5
datakurre
Study Guide for University of Jyväskylä Open University
Solution
https://www.avoin.jyu.fi/opinto-opas/fi/avoinyo/
Ingredients
• Plone 5.2
• Volto
• GatsbyJS
Numbers
• 6 000 HTML pages
• × two languages
• 760 Volto pages
6
Plone: No-Code Content-Type Customizations
7
Volto: Auto-Complete Widgets with Custom Vocabularies
8
datakurre
GatsbyJS: Query Connected Pages with GraphQL
{
...
pages: allPloneDocument(filter: {
sisu_ids: { in: [$id] },
sisu_topic: { token: { eq: "avoin-subject" } }
}) {
edges {
node {
...VoltoDocument
}
}
}
...
}
9
datakurre
ReactJS: Render Volto Layouts with React Components
import VoltoDocument from '../components/VoltoDocument';
...
{props.data.pages.edges.map(({ node }) => (
<VoltoDocument key={node.id} data={node} />
))}
...
10
Backend: Plone & Volto
11
Frontend: GatsbyJS Jamstack
12
GatsbyJS recap
datakurre
JavaScript, API & Markup
GatsbyJS is a ReactJS-based site generator
Why GatsbyJS?
• multi-source plugin architecture
• GraphQL based data lookup
• convention over configuration
• seamless developer experience
• comprehensive documentation
13
gatsby-source-plone
datakurre
gatsby-source-plone
https://github.com/collective/gatsby-source-plone/
Features
• supports default types and most TTW types
• supports files and images from default types
• supports richtext from default types
• resolves linked objects from default types
• incremental updates by modification date
14
datakurre
Basic Configuration
{
resolve: 'gatsby-source-plone',
options: {
baseUrl: 'https://plonedemo.kitconcept.com/en',
},
},
{
resolve: 'gatsby-source-filesystem',
options: {
path: `${__dirname}/src/static`,
},
},
15
datakurre
Advanced Configuration
{
resolve: 'gatsby-source-plone',
options: {
baseUrl: 'https://plonedemo.kitconcept.com',
searchParams: {
path: [
'/en/'
],
},
token: process.env.PLONE_TOKEN,
},
},
16
GraphiQL
17
datakurre
Not Only Rainbows and Unicorns
Full “GatsbyJS experience” requires practice
• query connected pages, images and files
• replace inline links with GatsbyJS links
• replace inline images with GatsbyJS images
• replace file links with direct download
Using @plone/volto seemed like a good idea...
• required Webpack overrides to be importable
• could not be used for images and links
18
datakurre
Not Only Rainbows and Unicorns
GatsbyJS – the ugly parts
• GraphQL source plugin cannot cache
• build may take hours
• build may take gigabytes of memory
• build result is readonly
• monorepo is painful to follow
19
Discussion
datakurre.github.io/ploneconf2020
19

More Related Content

PPTX
Sasaki practical-linked-data
PDF
"Offline mode for a mobile application, redux on server and a little bit abou...
PPTX
Cloud Native and CNCF
PPTX
Google cloud infrastructure workshop
PDF
Web App Prototypes with Google App Engine
PDF
Google Big Query UDFs
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
Briney - Leveling Up Data Management - With Notes
Sasaki practical-linked-data
"Offline mode for a mobile application, redux on server and a little bit abou...
Cloud Native and CNCF
Google cloud infrastructure workshop
Web App Prototypes with Google App Engine
Google Big Query UDFs
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
Briney - Leveling Up Data Management - With Notes

What's hot (20)

PDF
DBpedia Viewer - LDOW 2014
PDF
Decoupled (Headless) Drupal
PDF
Getting started with BigQuery
PDF
Google BigQuery Best Practices
PDF
Cloud Developer Days - BigQuery
ODP
Stateful applications on kubernetes
PPTX
BigQuery for the Big Data win
PDF
Upstream Consultancy and Ceph RadosGW/S3 (AMTEGA Ceph Day 2018)
PDF
An overview of BigQuery
PDF
Kubernetes Config Management Landscape
PPTX
DbyDx Software Corporate Presentation
PPTX
DocumentDB - NoSQL on Cloud at Reboot2015
PDF
Introduction to Fluvio Data Engineer.pdf
PDF
BrikL - A GraphQL Native - GraphQL Asia 2019
PDF
Fact oriented modeling
PDF
Building an open data platform with apache iceberg
PDF
QGIS UK: QGIS Performance Enhancements (Lutra Consulting)
PDF
Introduction to Google Cloud Platform
PPTX
MicroServices with Containers, Kubernetes & ServiceMesh
PPTX
Architecture Blue Print
DBpedia Viewer - LDOW 2014
Decoupled (Headless) Drupal
Getting started with BigQuery
Google BigQuery Best Practices
Cloud Developer Days - BigQuery
Stateful applications on kubernetes
BigQuery for the Big Data win
Upstream Consultancy and Ceph RadosGW/S3 (AMTEGA Ceph Day 2018)
An overview of BigQuery
Kubernetes Config Management Landscape
DbyDx Software Corporate Presentation
DocumentDB - NoSQL on Cloud at Reboot2015
Introduction to Fluvio Data Engineer.pdf
BrikL - A GraphQL Native - GraphQL Asia 2019
Fact oriented modeling
Building an open data platform with apache iceberg
QGIS UK: QGIS Performance Enhancements (Lutra Consulting)
Introduction to Google Cloud Platform
MicroServices with Containers, Kubernetes & ServiceMesh
Architecture Blue Print
Ad

Similar to Plone and Volto in a Jamstack project (18)

PDF
How Plone Excels in GatsbyJS Content Mesh
PPTX
Volto Unleashed - Real Life User Experience - Case Study Guide, University of...
PDF
Великолепный Gatsby.js | Odessa Frontend Meetup #19
PDF
Plone 6 - Volto: Past, Present and Future
PPTX
Build Fast WordPress Site With Gatsby
PPTX
Kotlin REST & GraphQL API
PDF
GraphQL Bangkok Meetup 6.0
PDF
Volto: Plone Conference 2018
PDF
Drupal, GraphQL, Views, View Modes and Gatsby for a US Gov site CMS Philly
PDF
Deploying Plone and Volto, the Hard Way
PDF
Modern Web Framework : Play framework
PPTX
Quick prototyping with VulcanJS
PDF
Melding React with the Ultra Secure Plone Content Repository
PDF
Kotlin server side frameworks
PDF
Gatsby (Code.Talks) 2019
PDF
Plone's API-first CMS story - Brasilia Plone Conference 2024
PDF
GraphQL Bangkok meetup 5.0
PDF
GraphQL: Enabling a new generation of API developer tools
How Plone Excels in GatsbyJS Content Mesh
Volto Unleashed - Real Life User Experience - Case Study Guide, University of...
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Plone 6 - Volto: Past, Present and Future
Build Fast WordPress Site With Gatsby
Kotlin REST & GraphQL API
GraphQL Bangkok Meetup 6.0
Volto: Plone Conference 2018
Drupal, GraphQL, Views, View Modes and Gatsby for a US Gov site CMS Philly
Deploying Plone and Volto, the Hard Way
Modern Web Framework : Play framework
Quick prototyping with VulcanJS
Melding React with the Ultra Secure Plone Content Repository
Kotlin server side frameworks
Gatsby (Code.Talks) 2019
Plone's API-first CMS story - Brasilia Plone Conference 2024
GraphQL Bangkok meetup 5.0
GraphQL: Enabling a new generation of API developer tools
Ad

More from Asko Soukka (7)

PDF
Bird eye's view on Camunda open source ecosystem
PDF
Embedding BPMN-driven business processes into Plone
PDF
ZServer Reloaded with HTTP/2 and WebSocket Support
PDF
Building instant features with advanced Plone themes
PDF
Nix for Python developers
PDF
Acceptance testing plone sites and add ons with robot framework and selenium
PDF
Plone, rabbit mq and messaging that just works
Bird eye's view on Camunda open source ecosystem
Embedding BPMN-driven business processes into Plone
ZServer Reloaded with HTTP/2 and WebSocket Support
Building instant features with advanced Plone themes
Nix for Python developers
Acceptance testing plone sites and add ons with robot framework and selenium
Plone, rabbit mq and messaging that just works

Recently uploaded (20)

PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPT
Teaching material agriculture food technology
PDF
Encapsulation theory and applications.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Empathic Computing: Creating Shared Understanding
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MYSQL Presentation for SQL database connectivity
Dropbox Q2 2025 Financial Results & Investor Presentation
Teaching material agriculture food technology
Encapsulation theory and applications.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Diabetes mellitus diagnosis method based random forest with bat algorithm
Advanced methodologies resolving dimensionality complications for autism neur...
Programs and apps: productivity, graphics, security and other tools
Reach Out and Touch Someone: Haptics and Empathic Computing
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Empathic Computing: Creating Shared Understanding
Unlocking AI with Model Context Protocol (MCP)
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
The Rise and Fall of 3GPP – Time for a Sabbatical?

Plone and Volto in a Jamstack project