<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/goran-alkovic/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 17 Apr 2026 13:59:15 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>38368https://infinum.com/uploads/2023/05/How-we-made-Gutenberg-more-gut.webp</url>
				</image>
				<title>How We Made Gutenberg Editor More Gut</title>
				<link>https://infinum.com/blog/gutenberg-editor-eightshift-boilerplate/</link>
				<pubDate>Thu, 04 May 2023 10:30:34 +0000</pubDate>
				<dc:creator>Goran Alković</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=38368</guid>
				<description>
					<![CDATA[<p>WordPress's Gutenberg editor powered by Eightshift Boilerplate is the perfect recipe for building future-ready web solutions.</p>
<p>The post <a href="https://infinum.com/blog/gutenberg-editor-eightshift-boilerplate/">How We Made Gutenberg Editor More Gut</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-299"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-36-text js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	<strong>Following its somewhat rocky start, the Gutenberg editor has revolutionized content editing in WordPress. Combine it with our open-source boilerplate, and you’re perfectly equipped to start building clean, fast, and reliable web solutions.  </strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	First launched in 2019, WordPress’s default editor Gutenberg brought about a new era of content creation. By introducing the concept of blocks, it made website building easier for the users while also allowing for more flexibility and creativity in the process. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	To make the most of Gutenberg editor, over the years we’ve developed our own WordPress boilerplate. Block by block, we’ve put together a comprehensive development kit that makes building complex WordPress themes and plugins painless.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	In this article, we explain how Gutenberg became what it is today, why it’s our platform of choice, and how you too can build custom web solutions fast and efficiently with the help of Eightshift Boilerplate. Let’s dive in.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-111"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<a	class="card-simple js-card-simple card-simple--is-ad block-card__card-simple card-simple--has-link js-card-simple-link card-simple__content-align--left"
	data-id="es-105"
	 target='_blank' rel='noopener noreferrer' href='https://github.com/infinum/eightshift-boilerplate'>

	
	
	<div class="card-simple__content">
		<div class="card-simple__heading-wrap">
			<h2	class='typography typography--size-24-text js-typography card-simple__heading'
	data-id='es-106'
	>
	Getting started with Eightshift Boilerplate is easy</h2>		</div>

		<p	class='typography typography--size-16-text-roman js-typography card-simple__paragraph'
	data-id='es-107'
	 id='es-105-paragraph'>
	<br>Just run <code>npx create-wp-project</code> and follow the instructions. Before the actual theme creation, you’ll be asked to check the versions of some dependencies, so make sure you’re up to date with everything.<br><br>Note: as WordPress itself isn’t fully ready for PHP 8(.x) at the time of writing, you should be on PHP 7.4.</p><button	class="btn btn--color-infinum btn--size-small btn--width-default btn__icon-position--right card-simple__btn js-block-card-btn"
	data-id="es-108"
	 tabindex='-1'>
		<div class="btn__inner">
					<div	class='typography typography--size-none js-typography btn__label'
	data-id='es-109'
	>
	Explore Eightshift Boilerplate </div>		
		<i
	class="icon btn__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='arrow-right-16' data-id='es-110'>
	<svg fill='none' height='16' viewBox='0 0 17 16' width='17' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><g stroke='currentColor' stroke-width='2'><path d='m.5 7.99999 14 .00001'/><path d='m9.23352 2.7251 5.97848 5.97852'/><path d='m9.23352 13.2744 5.97848-5.9785'/></g></svg></i>	</div>
	</button>	</div>
</a>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-114"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-112">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-113'
	>
	Revolution comes in blocks</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-117"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-115">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-116'
	>
	To provide some background, here’s a brief history lesson on the evolution of content editing in WordPress.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-120"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-118">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-119'
	>
	When WordPress was first introduced back in 2003, its basic editor consisted of… well, the basics. A simple title, post category, short summary (excerpt), and the post content. Simple formatting options like bold, italic, and underline were also available, along with some HTML basics like images and blockquotes. A site’s theme was responsible for how everything looked, worked and felt.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-123"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-121">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-122'
	>
	The WordPress experience was expanded in the next couple of years with the addition of features like shortcodes and plugins. However, no major changes were introduced until 2012 and the launch of the Customizer. This allowed changing some aspects of a theme without modifying the code, and gave developers an easy way to use the API for all kinds of cool things.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-126"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-124">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-125'
	>
	The real power of WordPress’s plugin system came into play in 2018 when the first page builder plugins started to hit the market. Users could edit content in a smoother, more visual way without needing to write any code, and layouts could became more complex than the previous vertical blog-style ones. A well-known example of a page builder from that time is the WPBakery page builder, still being developed to this day.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-129"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-127">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-128'
	>
	In late 2010’s, the market was full of page builders. However, as for the editing experience – the Core never looked so stale. This changed drastically with versions 4.8 and 4.9 which revealed something new, the beginnings of Gutenberg editor.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-36-text js-typography block-highlighted-text__typography'
	data-id='es-130'
	>
	<strong>Gutenberg revolutionized the Core editing experience. Gone was the Classic editor with its what-you-see-is-what-you-get approach, and in came the blocks.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-134"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-132">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-133'
	>
	A new, React-based editor ditched the text-like flow. The pages were now laid out as a collection of blocks – from simple paragraphs and images to columns, tables, or embedded content. Unfortunately, the initial versions were chock-full of bugs as the development team was working according to the “work fast and break things” principle.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-137"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-135">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-136'
	>
	However, after the initial teething issues, Gutenberg became the standard editor in WordPress 5.0 and has been continuously improved upon and cleaned up ever since. The sheer power of moving your editor away from the backend (PHP) into the frontend prompted <a href="https://infinum.com/blog/gutenberg-wordpress-themes/">developments like Full-site editing</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-138">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-139'
	>
	By the way, if you’re feeling nostalgic or just want a taste of history, you can install the Classic editor plugin on your site.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-143"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-141">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-142'
	>
	Why Gutenberg editor?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-146"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-144">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-145'
	>
	A perfectly valid question. Why use Gutenberg as our platform of choice since most other page builders offer ways of extending the base features?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-149"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-147">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-148'
	>
	The answer is rather simple.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-36-text js-typography block-highlighted-text__typography'
	data-id='es-150'
	>
	<strong>At Infinum, we create tailor-made themes to match our clients’ needs. We also like clean, fast, non-bloated websites.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-154"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-152">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-153'
	>
	As it turns out, when you build something really generic, it tends to get bloaty. You might not notice it when you’re adding content, but a lot of page builders add tons of unnecessary DOM elements, scripts, and styles. While there are ways of optimizing them, they are never as good as a custom solution.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-157"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-155">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-156'
	>
	There’s also a very important buzzword worth mentioning here – DX or developer experience. Trying to extend a page builder sometimes takes away from it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-160"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-158">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-159'
	>
	Of course, it’s not all sunshine and rainbows in the land of Gutenberg. The initial versions were pretty buggy, some decisions questionable, and documentation lacking. However, after some time and polishing, it turned out to be a pretty solid platform, both to use and develop on.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-163"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-161">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-162'
	>
	Introducing Eightshift Boilerplate, now based on Gutenberg editor</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-166"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-164">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-165'
	>
	We tried our luck with boilerplates even before Gutenberg editor was a thing. The first version of Eightshift Boilerplate was actually based on ACF Section Creator. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-169"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-167">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-168'
	>
	ACF stands for Advanced Custom Fields; a plugin that allows defining custom metadata fields for various parts of your site. The ACF Section Creator was mostly a collection of helpers and presented a simple way of creating customizable sections so the users could easily build sites.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-172"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-170">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-171'
	>
	There was a problem, though. ACF had a tendency to seriously slow down your site if you had a certain number of custom fields. The editing experience was also a step (or three) back from the page builders of the time.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-173">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-174'
	>
	When Gutenberg editor became the norm, we were skeptical at first. However, after giving it some time and practice, we decided to make the switch and base our boilerplate on Gutenberg. Some ideas from our informal discussions at the time actually shaped the current version of our boilerplate. After we created the concept in 2019, the initial version was soon out.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	Using a modern stack with technologies like SASS and Webpack, out-of-the-box linter configs and soon a Storybook support, we were off to a good start.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-181"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-179">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-180'
	>
	Gutenberg editor blocks and components</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-184"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-182">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-183'
	>
	Core Gutenberg editor blocks are mostly what we call static blocks. The representation of the block (HTML + the content you added) is saved to the database as-is. This is a big advantage as you don’t need anything special to parse the data. You can just display the HTML on the front, and that’s it!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-187"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-185">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-186'
	>
	However, static blocks have certain disadvantages. Because they’re stored as raw HTML, the editor must parse that into something the React-based block editor can use. This is fairly simple for basic elements like paragraphs, but with any block more complex than that, it’s a nightmare.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-190"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-188">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-189'
	>
	If you decide to make any changes to your blocks, the Gutenberg editor needs a way of migrating blocks from the “old” versions to the “newer” ones. This doesn’t always work and/or can lead to some unwelcome results on the frontend.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-193"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-191">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-192'
	>
	But fret not, there is a way, and it’s called dynamic blocks. Basically, instead of saving the raw HTML representation of the block, you only save the (data) attributes needed to display it. Everything else is handled by PHP on the frontend and React on the backend. The format used is very simple; it’s a modified version of HTML comments, called Block grammar in WordPress. It contains the block name, JSON-parsed attributes, and the ability to nest inner blocks, if needed.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-36-text js-typography block-highlighted-text__typography'
	data-id='es-194'
	>
	<strong>Eightshift Boilerplate uses dynamic blocks, which have proven to be bulletproof. They also allow block migration, and it makes them even simpler to use. </strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-198"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-196">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-197'
	>
	We have other cool tools in our arsenal as well. For example, the Block transformer can do batch block updates and editing thanks to the simple structure of dynamic blocks (it’s not in Libs yet, though, but stay tuned).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-201"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-199">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-200'
	>
	And to finally get to the components part, they are our way of atomizing blocks and sharing things like typography and images, which can be standardized and re-used between blocks.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-202">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-203'
	>
	Components can also be used to separate tracking, footers, and similar functionalities only rendered through PHP. A block would mean nothing there as it’s meant to be placed in the WordPress block editor.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-205">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-206'
	>
	Manifests</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-210"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-208">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-209'
	>
	Wouldn’t it be wonderful if all your blocks and components had a single source of truth for everything? That’s where manifests come in.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-213"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-211">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-212'
	>
	Manifests are simple JSON files that define all the basics of a block or a component: name, attributes, common options and, in case of blocks, components contained therein. Things like CSS variables outputs, example data for block previews, or block picker’s icon and category, are also defined there.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-216"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-214">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-215'
	>
	Recently, we got a big confirmation that we were on the right track with this idea when the Core introduced theme.json to serve a similar purpose.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-219"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-217">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-218'
	>
	Besides block and component manifests, we also have a manifest for the theme itself. This is where we define what’s common to one theme, like breakpoints, the default font, colors, etc. It also contains some basic general options used by Webpack and some Libs internals.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-222"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-220">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-221'
	>
	Modern tech stack</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-223">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-224'
	>
	The initial versions of our boilerplate used a flexbox-based grid, and most of the attributes that control block styling (e.g. font size) were output as classes. Together with a collection of SASS helpers, this was a pretty good solution.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-226">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-227'
	>
	In 2021, we got the chance to do something new. We were finally able to drop Internet Explorer 11, and the next big thing became fully available to us – CSS variables.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-231"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-229">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-230'
	>
	Version 5.0 of (frontend) Libs brought a major rework of everything. Adding something basic like a color option for a paragraph takes just a few minutes, as you only need a couple of entries in the manifest and a couple of lines of CSS. It’s magical!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-234"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-232">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-233'
	>
	We also changed our way of composing components and standardized the naming of attributes. To keep things consistent, all of the improvements were also reflected in the (backend) Libs.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-237"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-235">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-236'
	>
	With time, we collected a plethora of helpers, and with the addition of WP CLI (command-line interface) commands, we had the pillars of a nice developer experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-240"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-238">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-239'
	>
	Eightshift Boilerplate brings advantages to clients and teams alike</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-243"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-241">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-242'
	>
	If everything stated above isn’t reason enough to use our boilerplate on a project, let’s add some more benefits to the mix. Besides a modern tech stack and great DX, the Eightshift Boilerplate brings advantages both to your clients and teams.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-246"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-244">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-245'
	>
	We are big supporters of focusing on the user experience and making digital products accessible to everyone, and these views are reflected in our WP boilerplate as well.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-249"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-247">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-248'
	>
	Great user (and editor) experience</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-252"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-250">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-251'
	>
	Every project is different, as is every client. With a broad set of building-block editor components, a huge icon set, and a nice collection of default blocks, you can make your blocks as simple or as complex as you want. Your users will fall in love with the process of filling in the content.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-255"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-253">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-254'
	>
	To make layouts easier, our wrapper system allows you to tweak the horizontal positioning of all blocks on a page easily, together with the basics like spacing, background color, and the borders around blocks.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-258"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-256">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-257'
	>
	Optimized for accessibility</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-261"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-259">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-260'
	>
	In 2023, <a href="https://infinum.com/blog/digital-product-accessibility/">accessibility </a>is no longer something that is nice to have, it’s a must. All of our base blocks are compliant with the <a href="https://infinum.com/blog/digital-product-accessibility/">WCAG AA level</a>. Our goal is to make them even more accessible with time.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-264"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-262">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-263'
	>
	A rich collection of plugins</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-267"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-265">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-266'
	>
	Awesomeness doesn’t have to stop at themes. We also have a plugin boilerplate that was used to create great things like Eightshift Forms, a block-based and ultra-powerful form plugin that we use.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-268">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-269'
	>
	Collaboration encouraged</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-271">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-272'
	>
	All parts of our boilerplate are open source. Feel free to ask questions, report issues if you encounter them and, of course, submit a PR or two if you feel like it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-276"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-274">
	<h3	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-275'
	>
	Tried and tested resource</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-279"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-277">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-278'
	>
	Having been developed for a couple of years now, the Eightshift Boilerplate proved to be a great base for themes. The Infinum web, probably the place where you’re reading this, is based on Gutenberg, and so are other popular sites like Productive, UK Safer Internet Centre, or D66. You can check the whole list at <a href="https://eightshift.com/showcase">https://eightshift.com/showcase</a><strong>.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-282"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-280">
	<h3	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-281'
	>
	Constantly evolving</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-285"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-283">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-284'
	>
	We follow all the trends, best practices, and modern technologies. Even though this might bring about unpleasant associations with the early Gutenberg editor, we put a lot of care into backwards compatibility and provide migration guides to make your life easier.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-288"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-286">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-287'
	>
	Of course, sometimes migration is not an option, but what better time to start a new theme!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-291"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-289">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-290'
	>
	Gutenberg editor – rocky start, stellar future </h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-294"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-292">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-293'
	>
	The Gutenberg editor may have been off to a rocky start, but today it is a solid editor that offers a great level of extensibility. With a modern boilerplate to connect all the dots, developing for WordPress becomes pure joy.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-297"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-295">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-296'
	>
	While there will always be space for page builders, we strongly believe that the Gutenberg editor, powered by Eightshift Boilerplate, is the future of WordPress.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/gutenberg-editor-eightshift-boilerplate/">How We Made Gutenberg Editor More Gut</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>