Blockity McBlock Blocks, Oh My!

Evan Mullins
Evan MullinsWordPress Developer at Bluehost
Blockity McBlock
Blocks, Oh My!
Evan Mullins
https://github.com/circlecube/evans-block-theme
Evan Mullins
WordPress Engineer at Bluehost
focused on building tools for
customers and contributing to
WordPress.
AFK, I love to travel as a digital
nomad with my wife and four
kids – we spent the last year on
a North American tour living
full-time in our truck and 43
foot camper! Pre-COVID, we also
spent two years abroad as an
international house sitting
family!
@circlecube
Overview
A look at Block concepts (in less than 10 minutes)
With the recent releases of Gutenberg and Full-Site Editing WordPress is changing at
its core to be block-centric. There are a lot of newer concepts regarding blocks that
can be overwhelming to new users and developers as well as seasoned pros. From a
high level we can see blocks are taking over, let’s dig a bit together to see what it all
means and follow the WordPress block evolution thus far.
We have core blocks, custom blocks, dynamic blocks, reusable blocks, block widgets,
block patterns, block styles, block variations, block templates, block-based themes…
etc. Let’s look at these each with some content and code examples to how to deal
with blocks.
Code examples: https://github.com/circlecube/evans-block-theme
The Vision
The Four Phases of Gutenberg
1) ☑ Easier Editing (2018) - Block editor in 5.0
2) ☑ Customization (2022) - FSE in 5.9
3) ☐ Collaboration (2023)
4) ☐ Multi-lingual (Future)
What is a block?
A block is a single entity for structuring and interacting with
content. Every paragraph, headline image or video is a block.
They are interoperable and work together to tell a story, but
are distinct and individual units. We have consistent tools
for editing managing, and controlling them.
Block Markup
The Syntax
Blocks are saved as actual HTML comments with
attributes and settings in a json format. This allows
the content to be valid html but still contain all the
flexible rich metadata the editor consumes to make it
editable in the editor and also viewable on the site.
Blockity McBlock Blocks, Oh My!
Core Blocks
Built-in via the Gutenberg Editor
These are the familiar blocks like paragraph, image, quote and
heading as well as some layout blocks like cover blocks and
columns. These are very stable but are still being improved with
every release.
Custom Blocks
From Themes or Plugins
Basically anything beyond the core blocks are custom. This
would be any block that you build yourself and many other
blocks found in various plugins or themes.
For example, the Jetpack plugin
contains many additional custom
blocks.
https://jetpack.com/support/jetpack-blocks/
Custom Blocks
Static Blocks
Simple Content
Blocks with content are generally static blocks. They
are stored as content in the block markup.
For example, a headline or paragraph block stores the
content as an <h3> or <p> tag in the block markup.
Dynamic Blocks
Non-Static Blocks
Dynamic blocks connect to the
database to compute and render
content whereas a static block
has content that doesn’t change.
For example, a latest posts block
has dynamic content that
changes.
Block Styles
To customize styles via a class name
For alternative styles to be applied to existing blocks.
Reusable Blocks
Aren’t they all?
We can save a block (or group of
blocks) with identical content to
be used in multiple placed on a
site. For example, if you have a
blurb at the end of every blog
post, you can include it and
manage the content globally from
one place.
InnerBlocks
Nested Blocks
Blocks can be nested within other blocks at multiple (and sometimes
rather complex) levels. We interface with this parent/child relationship
via innerBlocks API. In our render function for example we’ll reference
InnerBlocks to place and render the children of the block.
Block Variations
To change attribute or inner blocks
We can set a block variation to get an initial state of a block
(including the attributes or inner blocks). These can display
both as unique blocks or in the block options via scope
property.
Block Transforms
Transform from one block type to another
For example, transforming or changing a paragraph block into a heading
block. All blocks can define what blocks they can transform into via the block
controls. The benefit to this is the content and some attributes can be
mapped to the content and attributes of the new block type.
Blocks Supports
Opt-in core features
An API that allows a block to declare support for certain
features when registering. With a custom block we can
easily incorporate features that exist on core blocks – like
anchors, color or alignment – by adding the relevant block
supports property.
Block Patterns
Explore the Pattern Directory
Predefined block layouts, available from the patterns directory found
in the pattern tab. Once inserted into content, the blocks are ready for
additional or modified content and configuration. Patterns usually
include multiple blocks and styles to achieve a certain look or pattern.
Blockity McBlock Blocks, Oh My!
Block Template
Setting a block or post type initial state
We can set a default block state dynamically or register a
default for a whole post type. Templates can be declared in
JS or in PHP as an array of blockTypes (block name and
optional attributes). We can also nest blocks here or lock
the template via the `templateLock` property or individual
parts with the lock attribute on individual children.
Widget Blocks
Milestone Met – Since 5.8
The classic wordpress widgets were rebuilt to use the same block
system we’ve become used to with the editor. This allows users to add
widgets into post or pages as well as have access to all content blocks
in sidebars. This brought us one step closer to Full Site Editing.
Block-Based Themes
twentytwentytwo is a BBT
A theme that takes full advantage of blocks and full site editing
capabilities of WordPress 5.9, requires a theme.json and usually
includes a few templates and/or template parts.
Block Templates
Page templates for block themes
A block template is made up of a list of blocks. Any block can be
used in a template.
These are html files rather than the traditional php templates in
standard themes. Templates are designs for pages and can
include one or more template parts.
Block Template Parts
Smaller Template Pieces for block themes
Template parts are used to organize a theme in smaller
reusable structural parts. They are commonly used for a
global site header and site footer.
Both templates and template parts contain block markup to
represent blocks and block settings and content.
Blockity McBlock Blocks, Oh My!
Block Party!
Blocks are here to stay –
understanding them deeply
will pay off,
plus they’re fun!
https://github.com/circlecube/evans-block-theme
Thank you!
https://github.com/circlecube/evans-block-theme
1 of 28

Recommended

WordCamp Atlanta - April 15 2018 - dev team workflow and processes with word... by
WordCamp Atlanta -  April 15 2018 - dev team workflow and processes with word...WordCamp Atlanta -  April 15 2018 - dev team workflow and processes with word...
WordCamp Atlanta - April 15 2018 - dev team workflow and processes with word...Evan Mullins
1.7K views49 slides
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to Development by
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to DevelopmentWordCamp Greenville 2018 - Beware the Dark Side, or an Intro to Development
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to DevelopmentEvan Mullins
356 views124 slides
Meetup: The big change coming to WordPress in 2018 - Gutenberg by
Meetup: The big change coming to WordPress in 2018 - GutenbergMeetup: The big change coming to WordPress in 2018 - Gutenberg
Meetup: The big change coming to WordPress in 2018 - GutenbergEvan Mullins
176 views106 slides
WordCamp Wilmington 2017 WP-API Why? by
WordCamp Wilmington 2017   WP-API Why?WordCamp Wilmington 2017   WP-API Why?
WordCamp Wilmington 2017 WP-API Why?Evan Mullins
1.9K views101 slides
WordCamp Asheville 2017 - So You Wanna Dev? Join the Team! by
WordCamp Asheville 2017 - So You Wanna Dev? Join the Team!WordCamp Asheville 2017 - So You Wanna Dev? Join the Team!
WordCamp Asheville 2017 - So You Wanna Dev? Join the Team!Evan Mullins
1.3K views111 slides
So, You Wanna Dev? Join the Team! - WordCamp Raleigh 2017 by
So, You Wanna Dev? Join the Team! - WordCamp Raleigh 2017 So, You Wanna Dev? Join the Team! - WordCamp Raleigh 2017
So, You Wanna Dev? Join the Team! - WordCamp Raleigh 2017 Evan Mullins
424 views110 slides

More Related Content

Recently uploaded

Throughput by
ThroughputThroughput
ThroughputMoisés Armani Ramírez
32 views11 slides
Future of Learning - Khoong Chan Meng by
Future of Learning - Khoong Chan MengFuture of Learning - Khoong Chan Meng
Future of Learning - Khoong Chan MengNUS-ISS
31 views7 slides
[2023] Putting the R! in R&D.pdf by
[2023] Putting the R! in R&D.pdf[2023] Putting the R! in R&D.pdf
[2023] Putting the R! in R&D.pdfEleanor McHugh
38 views127 slides
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy by
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
"Role of a CTO in software outsourcing company", Yuriy NakonechnyyFwdays
40 views21 slides
The Importance of Cybersecurity for Digital Transformation by
The Importance of Cybersecurity for Digital TransformationThe Importance of Cybersecurity for Digital Transformation
The Importance of Cybersecurity for Digital TransformationNUS-ISS
25 views26 slides
Micron CXL product and architecture update by
Micron CXL product and architecture updateMicron CXL product and architecture update
Micron CXL product and architecture updateCXL Forum
27 views7 slides

Recently uploaded(20)

Future of Learning - Khoong Chan Meng by NUS-ISS
Future of Learning - Khoong Chan MengFuture of Learning - Khoong Chan Meng
Future of Learning - Khoong Chan Meng
NUS-ISS31 views
[2023] Putting the R! in R&D.pdf by Eleanor McHugh
[2023] Putting the R! in R&D.pdf[2023] Putting the R! in R&D.pdf
[2023] Putting the R! in R&D.pdf
Eleanor McHugh38 views
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy by Fwdays
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
Fwdays40 views
The Importance of Cybersecurity for Digital Transformation by NUS-ISS
The Importance of Cybersecurity for Digital TransformationThe Importance of Cybersecurity for Digital Transformation
The Importance of Cybersecurity for Digital Transformation
NUS-ISS25 views
Micron CXL product and architecture update by CXL Forum
Micron CXL product and architecture updateMicron CXL product and architecture update
Micron CXL product and architecture update
CXL Forum27 views
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad... by Fwdays
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad..."Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad...
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad...
Fwdays40 views
Samsung: CMM-H Tiered Memory Solution with Built-in DRAM by CXL Forum
Samsung: CMM-H Tiered Memory Solution with Built-in DRAMSamsung: CMM-H Tiered Memory Solution with Built-in DRAM
Samsung: CMM-H Tiered Memory Solution with Built-in DRAM
CXL Forum105 views
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... by NUS-ISS
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
NUS-ISS28 views
MemVerge: Gismo (Global IO-free Shared Memory Objects) by CXL Forum
MemVerge: Gismo (Global IO-free Shared Memory Objects)MemVerge: Gismo (Global IO-free Shared Memory Objects)
MemVerge: Gismo (Global IO-free Shared Memory Objects)
CXL Forum112 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman25 views
Understanding GenAI/LLM and What is Google Offering - Felix Goh by NUS-ISS
Understanding GenAI/LLM and What is Google Offering - Felix GohUnderstanding GenAI/LLM and What is Google Offering - Felix Goh
Understanding GenAI/LLM and What is Google Offering - Felix Goh
NUS-ISS39 views
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen... by NUS-ISS
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
NUS-ISS23 views
TE Connectivity: Card Edge Interconnects by CXL Forum
TE Connectivity: Card Edge InterconnectsTE Connectivity: Card Edge Interconnects
TE Connectivity: Card Edge Interconnects
CXL Forum96 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10165 views
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ... by Fwdays
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ..."Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...
Fwdays33 views
Data-centric AI and the convergence of data and model engineering: opportunit... by Paolo Missier
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...
Paolo Missier29 views
The details of description: Techniques, tips, and tangents on alternative tex... by BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada110 views
MemVerge: Memory Viewer Software by CXL Forum
MemVerge: Memory Viewer SoftwareMemVerge: Memory Viewer Software
MemVerge: Memory Viewer Software
CXL Forum118 views

Featured

ChatGPT and the Future of Work - Clark Boyd by
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
20.3K views69 slides
Getting into the tech field. what next by
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
5K views22 slides
Google's Just Not That Into You: Understanding Core Updates & Search Intent by
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
5.8K views99 slides
How to have difficult conversations by
How to have difficult conversations How to have difficult conversations
How to have difficult conversations Rajiv Jayarajah, MAppComm, ACC
4.3K views19 slides
Introduction to Data Science by
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data ScienceChristy Abraham Joy
82.1K views51 slides
Time Management & Productivity - Best Practices by
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
169.6K views42 slides

Featured(20)

ChatGPT and the Future of Work - Clark Boyd by Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd20.3K views
Getting into the tech field. what next by Tessa Mero
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero5K views
Google's Just Not That Into You: Understanding Core Updates & Search Intent by Lily Ray
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray5.8K views
Time Management & Productivity - Best Practices by Vit Horky
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky169.6K views
The six step guide to practical project management by MindGenius
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius36.6K views
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright... by RachelPearson36
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson3612.6K views
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present... by Applitools
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools55.4K views
12 Ways to Increase Your Influence at Work by GetSmarter
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter401.6K views
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G... by DevGAMM Conference
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
DevGAMM Conference3.6K views
Barbie - Brand Strategy Presentation by Erica Santiago
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
Erica Santiago25.1K views
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well by Saba Software
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Saba Software25.2K views
Introduction to C Programming Language by Simplilearn
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
Simplilearn8.4K views
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr... by Palo Alto Software
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
Palo Alto Software88.3K views
9 Tips for a Work-free Vacation by Weekdone.com
9 Tips for a Work-free Vacation9 Tips for a Work-free Vacation
9 Tips for a Work-free Vacation
Weekdone.com7.2K views
How to Map Your Future by SlideShop.com
How to Map Your FutureHow to Map Your Future
How to Map Your Future
SlideShop.com275.1K views

Blockity McBlock Blocks, Oh My!

  • 1. Blockity McBlock Blocks, Oh My! Evan Mullins https://github.com/circlecube/evans-block-theme
  • 2. Evan Mullins WordPress Engineer at Bluehost focused on building tools for customers and contributing to WordPress. AFK, I love to travel as a digital nomad with my wife and four kids – we spent the last year on a North American tour living full-time in our truck and 43 foot camper! Pre-COVID, we also spent two years abroad as an international house sitting family! @circlecube
  • 3. Overview A look at Block concepts (in less than 10 minutes) With the recent releases of Gutenberg and Full-Site Editing WordPress is changing at its core to be block-centric. There are a lot of newer concepts regarding blocks that can be overwhelming to new users and developers as well as seasoned pros. From a high level we can see blocks are taking over, let’s dig a bit together to see what it all means and follow the WordPress block evolution thus far. We have core blocks, custom blocks, dynamic blocks, reusable blocks, block widgets, block patterns, block styles, block variations, block templates, block-based themes… etc. Let’s look at these each with some content and code examples to how to deal with blocks. Code examples: https://github.com/circlecube/evans-block-theme
  • 4. The Vision The Four Phases of Gutenberg 1) ☑ Easier Editing (2018) - Block editor in 5.0 2) ☑ Customization (2022) - FSE in 5.9 3) ☐ Collaboration (2023) 4) ☐ Multi-lingual (Future)
  • 5. What is a block? A block is a single entity for structuring and interacting with content. Every paragraph, headline image or video is a block. They are interoperable and work together to tell a story, but are distinct and individual units. We have consistent tools for editing managing, and controlling them.
  • 6. Block Markup The Syntax Blocks are saved as actual HTML comments with attributes and settings in a json format. This allows the content to be valid html but still contain all the flexible rich metadata the editor consumes to make it editable in the editor and also viewable on the site.
  • 8. Core Blocks Built-in via the Gutenberg Editor These are the familiar blocks like paragraph, image, quote and heading as well as some layout blocks like cover blocks and columns. These are very stable but are still being improved with every release.
  • 9. Custom Blocks From Themes or Plugins Basically anything beyond the core blocks are custom. This would be any block that you build yourself and many other blocks found in various plugins or themes.
  • 10. For example, the Jetpack plugin contains many additional custom blocks. https://jetpack.com/support/jetpack-blocks/ Custom Blocks
  • 11. Static Blocks Simple Content Blocks with content are generally static blocks. They are stored as content in the block markup. For example, a headline or paragraph block stores the content as an <h3> or <p> tag in the block markup.
  • 12. Dynamic Blocks Non-Static Blocks Dynamic blocks connect to the database to compute and render content whereas a static block has content that doesn’t change. For example, a latest posts block has dynamic content that changes.
  • 13. Block Styles To customize styles via a class name For alternative styles to be applied to existing blocks.
  • 14. Reusable Blocks Aren’t they all? We can save a block (or group of blocks) with identical content to be used in multiple placed on a site. For example, if you have a blurb at the end of every blog post, you can include it and manage the content globally from one place.
  • 15. InnerBlocks Nested Blocks Blocks can be nested within other blocks at multiple (and sometimes rather complex) levels. We interface with this parent/child relationship via innerBlocks API. In our render function for example we’ll reference InnerBlocks to place and render the children of the block.
  • 16. Block Variations To change attribute or inner blocks We can set a block variation to get an initial state of a block (including the attributes or inner blocks). These can display both as unique blocks or in the block options via scope property.
  • 17. Block Transforms Transform from one block type to another For example, transforming or changing a paragraph block into a heading block. All blocks can define what blocks they can transform into via the block controls. The benefit to this is the content and some attributes can be mapped to the content and attributes of the new block type.
  • 18. Blocks Supports Opt-in core features An API that allows a block to declare support for certain features when registering. With a custom block we can easily incorporate features that exist on core blocks – like anchors, color or alignment – by adding the relevant block supports property.
  • 19. Block Patterns Explore the Pattern Directory Predefined block layouts, available from the patterns directory found in the pattern tab. Once inserted into content, the blocks are ready for additional or modified content and configuration. Patterns usually include multiple blocks and styles to achieve a certain look or pattern.
  • 21. Block Template Setting a block or post type initial state We can set a default block state dynamically or register a default for a whole post type. Templates can be declared in JS or in PHP as an array of blockTypes (block name and optional attributes). We can also nest blocks here or lock the template via the `templateLock` property or individual parts with the lock attribute on individual children.
  • 22. Widget Blocks Milestone Met – Since 5.8 The classic wordpress widgets were rebuilt to use the same block system we’ve become used to with the editor. This allows users to add widgets into post or pages as well as have access to all content blocks in sidebars. This brought us one step closer to Full Site Editing.
  • 23. Block-Based Themes twentytwentytwo is a BBT A theme that takes full advantage of blocks and full site editing capabilities of WordPress 5.9, requires a theme.json and usually includes a few templates and/or template parts.
  • 24. Block Templates Page templates for block themes A block template is made up of a list of blocks. Any block can be used in a template. These are html files rather than the traditional php templates in standard themes. Templates are designs for pages and can include one or more template parts.
  • 25. Block Template Parts Smaller Template Pieces for block themes Template parts are used to organize a theme in smaller reusable structural parts. They are commonly used for a global site header and site footer. Both templates and template parts contain block markup to represent blocks and block settings and content.
  • 27. Block Party! Blocks are here to stay – understanding them deeply will pay off, plus they’re fun! https://github.com/circlecube/evans-block-theme