<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CSS Archives - The NOKIA Blog</title>
	<atom:link href="https://thenokiablog.com/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>https://thenokiablog.com/tag/css/</link>
	<description></description>
	<lastBuildDate>Tue, 06 Oct 2026 10:00:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://thenokiablog.com/wp-content/uploads/2024/03/cropped-Cjdowner-Cryptocurrency-Flat-ICON-ICX.512-32x32.png</url>
	<title>CSS Archives - The NOKIA Blog</title>
	<link>https://thenokiablog.com/tag/css/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>A Practical Guide To Naming Things</title>
		<link>https://thenokiablog.com/a-practical-guide-to-naming-things/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 06 Oct 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Figma]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[UI Components]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/a-practical-guide-to-naming-things/</guid>

					<description><![CDATA[<p>A practical guide to naming UI components, with useful resources, naming conventions, and structures. Brought to...</p>
<p>The post <a href="https://thenokiablog.com/a-practical-guide-to-naming-things/">A Practical Guide To Naming Things</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="c-garfield-summary">
<section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>A practical guide to naming UI components, with useful resources, naming conventions, and structures. Brought to you by Design Patterns For AI Interfaces, <strong>friendly video courses on UX</strong> and design patterns by Vitaly.</section>
</div>
<p>Naming is hard. The language we use shapes the way we think about things, but also the conversation we have about it. That&rsquo;s why we have so much confusion about colors, icons, UI components, features &mdash; and that&rsquo;s why we struggle to name design tokens, HTML classes, and variables.</p>
<p>Sometimes, the names we choose are <strong>too generic</strong>, so it&rsquo;s difficult to understand what exactly is meant. And sometimes they are <strong>too specific</strong>, leaving little room for flexibility and reuse. How do we choose the right names? And which naming conventions work best? Let&rsquo;s take a closer look.</p>
<h2 id="how-to-name-things">How To Name Things</h2>
<p>If you&rsquo;re looking for some inspiration for naming HTML classes, CSS properties, or JavaScript functions, Classnames is a wonderful resource jam-packed with ideas that get you <strong>thinking outside the box</strong>.</p>
<figure><img decoding="async" loading="lazy" width="800" height="887" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things.jpg" alt="Inspiration For Naming Things"><figcaption class="op-vertical-bottom">Classnames provides thematically grouped lists of words you can use for naming. (Large preview)</figcaption></figure>
<p>The site provides thematically grouped lists of words perfect for naming. You&rsquo;ll find terms to describe different kinds of behavior, likeness between things, order, grouping, and association, but also <strong>themed collections of words</strong> that wouldn&rsquo;t instantly come to one&rsquo;s mind when it comes to code, among them words from nature, art, theater, music, architecture, fashion, and publishing.</p>
<h2 id="how-to-name-colors">How To Name Colors</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>How would you choose the right name for a given color? Fortunately, David Aerne maintains a tremendous repository of color names, currently with <strong>30355 unique color names</strong>, sourced from various references and 1000s of user contributions.</p>
<figure><img decoding="async" loading="lazy" width="800" height="768" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-1.jpg" alt="Inspiration For Naming Colors"><figcaption class="op-vertical-bottom">Color Parrot provides a name for a given color (originally via a tweet, but you can type it in the URL as well). (Large preview)</figcaption></figure>
<p>Of course, the repository comes with a color picker and name search and plenty of other color pickers as well. Tremendous work, which is also a fantastic reference to keep nearby.</p>
<h2 id="how-to-name-layers-and-groups">How To Name Layers and Groups</h2>
<p>What makes a good name? Javier Cuello summarized a set of naming best practices that help you name your <strong>layers, groups, and components</strong> in a consistent and scalable way.</p>
<figure><img decoding="async" loading="lazy" width="800" height="760" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-2.jpg" alt="Inspiration For Naming Things"><figcaption class="op-vertical-bottom">Javier Cuello explores in all the fine details what makes an effective name. (Large preview)</figcaption></figure>
<p>As Javier points out, a good name has a logical structure, is short, meaningful, known by everyone, and not related to visual properties. He shares <strong>do&rsquo;s and don&rsquo;ts</strong> to illustrate how to achieve that and also takes a closer look at all the fine little details you need to consider when naming sizes, colors, groups, layers, and components.</p>
<h2 id="how-to-name-design-tokens">How To Name Design Tokens</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>How to build a flexible design token taxonomy that works across different products? That was the challenge that the team at Intuit faced. The parent company of products such as Mailchimp, QuickBooks, TurboTax, and Mint developed a <strong>flexible token system</strong> that goes beyond the brand theme to serve as the foundational system for a wide array of products.</p>
<figure><img decoding="async" loading="lazy" width="800" height="391" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things.png" alt="Insiration For Naming Things"><figcaption class="op-vertical-bottom">Nate Baldwin shares insights into Intuit&rsquo;s flexible design token taxonomy. (Large preview)</figcaption></figure>
<p>Nate Baldwin wrote a case study in which he shares valuable insights into the making of <strong>Intuit&rsquo;s design token taxonomy</strong>. It dives deeper into the pain points of the old taxonomy system, the criteria they defined for the new system, and how it was created. Lots of takeaways for building your own robust and flexible token taxonomy are guaranteed.</p>
<h2 id="frequent-names-for-ui-components">Frequent Names For UI Components</h2>
<p>Looking at what other people call similar things is a great way to start when you&rsquo;re <strong>struggling with naming</strong>. And what better source could there be than other design systems? Before you end up in the design system rabbit hole, Iain Bean did the research for you and created the Component Gallery.</p>
<figure><img decoding="async" loading="lazy" width="800" height="468" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-1.png" alt="Inspiration For Naming Things"><figcaption class="op-vertical-bottom">The Component Gallery collects interface components from real-world design systems. (Large preview)</figcaption></figure>
<p>It&rsquo;s a collection that <strong>includes plenty of examples</strong> for more than 50 UI components &mdash; from accordion to visually hidden &mdash; and also lists other names that the UI components go by. A fantastic resource, and not only with regard to naming.</p>
<blockquote><p>Bonus: Name That UI, a <strong>visual dictionary</strong> of common UI components.</p></blockquote>
<h2 id="how-to-name-new-features">How To Name New Features</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Features often have low adoption due to <strong>poor discoverability</strong>. Feature adoption needs time &mdash; first the feature must be discovered, then understood, then tried, learned, and eventually built into <strong>existing workflow</strong>. Erin Gannon has written a helpful practical guide on how to make sure all of it happens.</p>
<figure><img decoding="async" loading="lazy" width="800" height="1298" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-3.jpg" alt="So What Do We Call That Feature?: illustrated guide to naming features that people discover, understand and actually use"><figcaption class="op-vertical-bottom">&lsquo;What Do We Call This Thing?&rsquo; by Erin Gannon: practical guidelines on naming features people can discover, understand and actually use. (Large preview)</figcaption></figure>
<p>Good names are driven by user needs and problems. They should signal the value or outcome of a feature (the job-to-be-done), and &mdash; most importantly! &mdash; tap into the user&rsquo;s own language. So ask people to explain a feature in their own words and then use the words they use.</p>
<h2 id="how-to-name-variables-taxonomy-map">How To Name Variables (Taxonomy Map)</h2>
<p>A wonderful example of naming guidelines for a complex multi-brand, multi-themed design system comes from the Vodafone UK Design System team. Their Variables Taxonomy Map breaks down the <strong>anatomy and categorization of a design token</strong> into a well-orchestrated system of collections.</p>
<figure><img decoding="async" loading="lazy" width="800" height="450" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-2.png" alt="Inspiration For Naming Things"><figcaption class="op-vertical-bottom">Vodafone&rsquo;s Variables Taxonomy Map accommodates a complex multi-brand, multi-themed design system. (Large preview)</figcaption></figure>
<p>The map illustrates four collections required to support the system and connections between tokens &mdash; <strong>from brand and primitives to semantics and pages</strong>. It builds on top of Nathan Curtis&rsquo; work on naming design tokens and enables everyone to gather insight about where a token is used and what it represents, just from its name.</p>
<p>If you want to explore more approaches to naming design tokens, I&rsquo;ve put together a list of useful Figma kits and resources that are worth checking out.</p>
<h2 id="design-token-naming-guide-inventory">Design Token Naming Guide + Inventory</h2>
<p>Romina Kavcic created a helpful little tool for <strong>naming design tokens</strong> &mdash; from learning how they work and how to name them well to configuring your own naming structure with components, categories, states, and roles.</p>
<figure><img decoding="async" loading="lazy" width="800" height="608" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-4.jpg" alt="Free Design Token Naming Guide + Builder &mdash; interactive tool for building your own token naming structure with components, categories, states and roles"><figcaption class="op-vertical-bottom">Free Design Token Naming Guide + Builder. (Large preview)</figcaption></figure>
<blockquote><p>Bonus: The Design Token Names Inventory spreadsheet, with a simple structure with four levels to give you a bird&rsquo;s-eye view of all your design tokens. You can easily add rows, themes, and modes without losing track, and <strong>filter your tokens</strong>.</p></blockquote>
<h2 id="naming-products-or-services">Naming Products or Services</h2>
<p>If you are looking for the right name for your product or service, Onym is a fantastic <strong>open-source repository</strong> that organizes tools and resources for finding names for brainstorming, vetting, guides, sprints, etymologies &mdash; all the way to cautionary tales and agencies that name things, as well as useful books to take a look at.</p>
<figure><img decoding="async" loading="lazy" width="800" height="795" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-5.jpg" alt="Inspiration For Naming Things"><figcaption class="op-vertical-bottom">The Onym, a neat little helper with tools, methodologies and prompts to encourage new ways of thinking. (Large preview)</figcaption></figure>
<h2 id="useful-bookmarks-for-naming-things">Useful Bookmarks for Naming Things</h2>
<p>A quick-reference list of tools and guides for naming just about&hellip; well, <em>anything</em>, in one place:</p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>The right name is the one that&rsquo;s well-understood and used by the team and users. So much time is wasted speaking about the very same thing but in <strong>different dialects</strong> &mdash; the designer&rsquo;s dialect, the developer&rsquo;s dialect, the product manager&rsquo;s dialect, and the user&rsquo;s dialect. That&rsquo;s what often causes frustration and confusion.</p>
<p>So if you see low adoption, it might be merely because of the name. And pay attention to potential <strong>naming conflicts</strong> and put them in a backlog of things to address later. It&rsquo;s one of those fine little details that can reduce frustration and confusion and help teams work together better.</p>
<h2 id="meet-design-patterns-for-ai-interfaces">Meet &ldquo;Design Patterns For AI Interfaces&rdquo;</h2>
<p>Meet Design Patterns For AI Interfaces, Vitaly&rsquo;s new <strong>video course</strong> with practical examples from real-life products &mdash; with a live UX training happening soon. Jump to a free preview.</p>
<figure class="article__image"><img decoding="async" loading="lazy" width="800" height="414" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-3.png" alt="Design Patterns For AI Interfaces promo picture"><figcaption class="op-vertical-bottom">Meet Design Patterns For AI Interfaces, Vitaly&rsquo;s video course on interface design &amp; UX.</figcaption></figure>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/10/a-practical-guide-to-naming-things-4.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/a-practical-guide-to-naming-things/">A Practical Guide To Naming Things</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Stop Treating CSS Container Queries Like Traditional Media Queries</title>
		<link>https://thenokiablog.com/stop-treating-css-container-queries-like-traditional-media-queries/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 16 Sep 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/stop-treating-css-container-queries-like-traditional-media-queries/</guid>

					<description><![CDATA[<p>Despite broad browser support, container queries remain surprisingly underused and frequently misunderstood. Let&#8217;s look at how...</p>
<p>The post <a href="https://thenokiablog.com/stop-treating-css-container-queries-like-traditional-media-queries/">Stop Treating CSS Container Queries Like Traditional Media Queries</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>Despite broad browser support, container queries remain surprisingly underused and frequently misunderstood. Let&rsquo;s look at how they differ from media queries, when to reach for each, and how container queries help reusable components respond naturally to the contexts in which they appear.</section>
</p>
<p>To be completely honest with you, I missed the news when CSS Container Queries first shipped. And when I finally heard about it, my very first thought was, <em>&ldquo;Why exactly do I need this when media queries already exist?&rdquo;</em></p>
<p>I&rsquo;m not proud of that reaction, knowing what I know now, but it was comforting to know that I wasn&rsquo;t alone. In fact, there are legions of us out there.</p>
<p>What baffles me is that container queries aren&rsquo;t a new feature, as it currently sits at around 94% browser support. And yet, very few people are actually using it. According to the State of CSS survey, 86% of developers are aware of container queries, but only 41.4% actually use them. Surveys can be biased and not completely representative of our entire field, but this one is certainly the best indicator we&rsquo;ve got.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Kevin Powell also talked about this at SmashingConf Amsterdam 2026: <strong>Container Queries adoption has been terrible.</strong> And that is so strange to me, knowing that the ability for components to adapt to the size of their outer container has been at the top of so many CSS wishlists over the years.</p>
<p>I&rsquo;m not particularly interested in how many people are using container queries as much as in <em>how</em> they are using them. I can&rsquo;t account for everyone, but from what I&rsquo;ve seen &mdash; including in my own early attempts &mdash; many of us are using them <em>wrong</em>.</p>
<p>The bottom line is that incorrect use comes down to the same impression I had when learning about them: <strong>they absolutely look just like media queries at first glance</strong>. And since they look similar, it&rsquo;s easy to assume they serve similar purposes and work the same way.</p>
<p>They don&rsquo;t.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p><strong>Note</strong>: I should state up front that what I&rsquo;m focusing on in this article is using container <em>size</em> queries, i.e., a responsive design technique for responding to the size of a particular container. There are also container <em>style</em> queries that respond to a container&rsquo;s computed styles (and are experimental at the time of this writing). You can catch up on those in Juan Diego&rsquo;s piece here on Smashing Magazine where he examines their possible use cases.</p>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://thenokiablog.com/wp-content/uploads/2026/09/stop-treating-css-container-queries-like-traditional-media-queries.png" alt="Feature Panel" width="480" height="697"></div>


<p>The viewport is a proxy. It always has been. Media queries are what gave us the illusion that screen width alone is responsible for how responsive apps adapt to their environment.</p>
<p>Ask yourself this: When you write <code>@media</code>, what are you asking the browser?</p>
<pre><code class="language-css">@media (min-width: 1024px) {
  .card {
    display: flex;
  }
</code></pre>
<p>I, like most developers, am asking the browser: <em>How wide is the screen right now?</em> That&rsquo;s it.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Media queries answer that beautifully, but what happens when this <code>.card</code> component is placed in a grid cell that&rsquo;s <code>300px</code> wide on a <code>1920px</code> desktop screen?</p>
<p>The media query doesn&rsquo;t care; it does its job. The viewport is still <code>1920px</code>, so <code>min-width: 1024px</code> fires and the matched query styles are applied, even though the card only has <code>300px</code> of space to work with. Eventually, everything in the card deforms, overflows, or cramps up.</p>
<blockquote><p>&ldquo;Media queries are dumb. Not dumb in terms of the concept, but dumb in that they don&rsquo;t know very much. In fact, most people assume that they know more than they do.&rdquo;</p>
<p>&mdash; Kevin Powell</p>
</blockquote>
<p>It&rsquo;s common to think of responsive design purely as a system for updating complete page layouts, like going from two columns on a large screen to a single column on a small screen.</p>
<h2 id="container-queries-look-inward">Container Queries Look Inward</h2>
<p>Container queries are smarter than that. They make responsive layouts more reliant on what&rsquo;s happening <strong>inside</strong> a component rather than on the outer context that has no insight into a component&rsquo;s contents. It is more like: <em>&ldquo;How much space is available for me in this specific spot, right now?&rdquo;</em></p>
<p>Here is the same card code example we looked at in the last section, but with a container query:</p>
<pre><code class="language-css">.card-wrapper {
  container-name: card;
  container-type: inline-size;
}

@container card (min-width: 450px) {
  .card {
    display: flex;
    flex-direction: row;
  }
}
</code></pre>
<p>This changes everything. The card isn&rsquo;t influenced by the viewport; its only concern is whether the <code>.card</code> component&rsquo;s parent wrapper has at least <code>450px</code> of inline (i.e., horizontal in a left-to-right writing mode) space. If that condition is true, the component goes horizontal; if not, it goes to its default <code>block</code> display.</p>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="RNpoLNX" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Viewport vs Container [forked]](https://codepen.io/smashingmag/pen/01a0a73d-6f39-709f-8dae-037f6b588852) by Vayo.</p><figcaption>See the Pen Viewport vs Container [forked] by Vayo.</figcaption></figure>
<h2 id="macro-layout-vs-micro-layouts">&ldquo;Macro&rdquo; Layout Vs. &ldquo;Micro&rdquo; Layouts</h2>
<p>A very interesting way to distinguish <code>@media</code> and <code>@container</code> queries is the <strong>layout type</strong>.</p>
<p>Media queries are for the &ldquo;macro&rdquo; layout; they look outward. Stuff like page structure, the header that spans the window, footers, main grid layout, system preferences (<code>prefers-color-scheme</code>), device capabilities (touch screens). You know, anything that is majorly true to the entire page structure.</p>
<p>Container queries, I&rsquo;d say, are for &ldquo;micro&rdquo; layouts, i.e., most things that live inside the &ldquo;macro&rdquo; layout. We use them when any content needs to responsively fit whatever space it is allocated. Components that come to mind are things like cards, widgets, forms, navigation, and so on.</p>
<p>In other words, think <strong>&ldquo;page layout&rdquo; vs. &ldquo;component layout&rdquo;</strong>.</p>
<p>An element shouldn&rsquo;t magically become &ldquo;tablet-sized&rdquo; just because the width exceeds an abstract width threshold like <code>768px</code>. Instead, it should switch layout when it has enough space to do so, whether that happens on a mobile viewport or inside a desktop sidebar.</p>
<p>In case you&rsquo;re still not convinced, did you know there are over 2,300 unique viewport sizes on the modern web? Do you think it is possible to account for all of them?</p>
<blockquote class="pull-quote">
<p>I&rsquo;m not hating on media queries. It&rsquo;s that in this era of responsiveness and component re-use, layout logic is closer to the container than the viewport. When we think in terms of containers and components, we&rsquo;re effectively relying on the content to determine layout, not the viewport.</p>
</blockquote>
<p>This is how it should be.</p>
<h2 id="example-fluid-typography-inside-a-component">Example: Fluid Typography Inside A Component</h2>
<p>Responsive typography is a good example of something many of us have relied on media queries for. The fact that media queries come with their own CSS units &mdash; e.g., <code>vw</code>, <code>vh</code>, and so on &mdash; that are relative to the viewport size makes media queries look really good for adjusting font size based on the user&rsquo;s screen size.</p>
<pre><code class="language-css">.card-title {
  font-size: clamp(100%, 1rem + 2vw, 24px);
}
</code></pre>
<p>This works until that same component is moved into a different context, like a sidebar, where the viewport is completely irrelevant. Now, because we tied the responsiveness to the wrong reference point, the scaled typography can get too big or too small.</p>
<p>Container queries come with their very own units &mdash; <code>cqi</code>, <code>cqw</code>, <code>cqb</code>, among others &mdash; and we can take responsive components further by coupling those units with the CSS <code>clamp()</code> function, using it for fluid typography that scales with the component rather than the viewport:</p>
<pre><code class="language-css">
.card-title {
  font-size: clamp(1rem, .5rem + 3cqi, 2rem);
}
</code></pre>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="rayWGVd" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Fluid Typography [forked]](https://codepen.io/smashingmag/pen/01a0a73f-1a44-750c-8b40-9b0ab774d981) by Vayo.</p><figcaption>See the Pen Fluid Typography [forked] by Vayo.</figcaption></figure>
<p>With this in place, the entire code is self-contained to that element&rsquo;s specific container.</p>
<h2 id="example-flexbox-wrap-detection">Example: Flexbox Wrap Detection</h2>
<p>Interestingly, container queries can, in a way, detect the state of a component&rsquo;s internal layout. It&rsquo;s not bulletproof, but it is also something media queries simply cannot do because they only observe the external browser window and are structurally blind to internal layout events like when, for example, flex items wrap onto a new line. Let&rsquo;s poke at that.</p>
<p>Flexbox is superb at wrapping content (<code>flex-wrap: wrap</code>), allowing flex items to automatically wrap to new lines when the flex container runs out of space to fit them in a single row. But CSS by itself can&rsquo;t tell when that wrap happens. There isn&rsquo;t something like a <code>:wrapped</code> pseudo-class or a media query like <code>@media (flex-wrapped: true)</code> that would get us there.</p>
<p>Media queries only observe the browser window, as they can&rsquo;t see internal changes. That is pretty much what flex wrapping is: a width state change on the item itself.</p>
<p>For example, if you have a horizontal menu that is lined up with flexbox and you want the items to restyle themselves only when wrapped, you&rsquo;d be in JavaScript territory, using <code>ResizeObserver</code> to get that information. However, when we nest container queries inside flex items, we can come up with a workaround to get what we need without JavaScript, thanks to this technique I learned from Kevin Powell. The core idea is to allow a flex item to <code>flex-grow: 1</code> when we query the container&rsquo;s inline size.</p>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="rayWGVd" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Fluid Typography [forked]](https://codepen.io/smashingmag/pen/01a0a73f-1a44-750c-8b40-9b0ab774d981) by Vayo.</p><figcaption>See the Pen Fluid Typography [forked] by Vayo.</figcaption></figure>
<figure><img decoding="async" loading="lazy" width="800" height="674" src="https://thenokiablog.com/wp-content/uploads/2026/09/stop-treating-css-container-queries-like-traditional-media-queries.jpg" alt="Normal and wrapped states of two responsive items."><figcaption class="op-vertical-bottom">(Large preview)</figcaption></figure>
<p>The logic works like this:</p>
<ol>
<li>When there&rsquo;s enough room, both items (<code>.flex-item</code>) sit side-by-side, each exactly half the parent container&rsquo;s width.</li>
<li>When there is limited space, the second item wraps to the next line.</li>
<li>Because <code>flex-grow</code> is active on each item, the wrapped items stretch to fill most of the parent&rsquo;s width.</li>
<li>If the item is a container itself, it detects the sudden width expansion and fires.</li>
</ol>
<pre><code class="language-css">/* The flex parent */
.flex-layout {
  display: flex;
  flex-wrap: wrap;
}

/* Register a flex item as a container */
.flex-item {
  container-type: inline-size;
  flex: 1 1 390px; /* Grow to fill space, wrap at 390px */
}

/* Default Card Styles (narrow / side-by-side) */
.card {
  display: flex;
  flex-direction: column;
  background: #f4f4f4;
}

/* Once there's enough room for a full row */
@container (min-width: 600px) {
  .card {
    flex-direction: row;
    align-items: center;
    background: #e2f0d9;
  }
}
</code></pre>
<p>This works. As the parent size shrinks and the cards wrap to two lines, the card item expands, the container query fires, and applies the necessary styles.</p>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="ByWQwLz" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Flex Wrap Detection Using Container Queries [forked]](https://codepen.io/smashingmag/pen/01a0a752-150a-754e-a77a-07fe1b046658) by Vayo.</p><figcaption>See the Pen Flex Wrap Detection Using Container Queries [forked] by Vayo.</figcaption></figure>
<h2 id="container-queries-do-have-side-effects">Container Queries Do Have Side Effects</h2>
<p>Container queries, like all things, come with some side effects or caveats you will want to watch for before reaching for them.</p>
<p>Container queries need something similar to a parent-child relationship to function as expected. Let&rsquo;s say we have this markup:</p>
<pre><code class="language-html">&lt;div class="card"&gt;
  &lt;div class="card-content"&gt;...&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>We can&rsquo;t actually query the <code>.card</code> component to adjust the <code>.card-content</code>, like this:</p>
<pre><code class="language-css">/* DOES NOT WORK */
.card {
  container-name: card;
  container-type: inline-size;
}

@container card (min-width: 400px) {
  .card {
    display: flex;
  }
}
</code></pre>
<p>This doesn&rsquo;t work because a container cannot query itself. In that last example, we&rsquo;re querying a <code>card</code> container and then attempting to adjust that container&rsquo;s display based on its size. It&rsquo;s an infinite loop.</p>
<p>Instead, we need an additional wrapper that makes the <code>.card</code> a descendant of the container:</p>
<pre><code class="language-html">&lt;div class="cards"&gt;
  &lt;div class="card"&gt;
    &lt;div class="card-content"&gt;...&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>From there, we can query the <code>.cards</code> container and adjust the <code>.card</code> layout accordingly:</p>
<pre><code class="language-css">.cards {
  container-name: cards;
  container-type: inline-size;
}

@container cards (min-width: 400px) {
  .card {
    display: flex;
  }
}
</code></pre>
<p>In media queries, this doesn&rsquo;t matter as <code>@media</code> does not care which element you style inside the block; its only concern is the viewport, which is always available. So you can just slap a condition on any element and call it a day.</p>
<h3 id="2-querying-a-container-s-size-could-collapse-your-layout">2. Querying A Container&rsquo;s <code>size</code> Could Collapse Your Layout</h3>
<p>This happens when querying the container&rsquo;s <code>size</code> (i.e., its block, or vertical, size) instead of its <code>inline-size</code>:</p>
<pre><code class="language-css">/* Collapses to 0px even if it has content inside */
.hero-banner {
  container-type: size;
}
</code></pre>
<p>Why? Because the browser calculates the container&rsquo;s dimensions without looking at its children. If we don&rsquo;t give the <code>.hero-banner</code> an explicit <code>height</code> (or <code>min-height</code> or <code>aspect-ratio</code>), the browser sets a height of <code>0px</code>.</p>
<p>For that reason, it&rsquo;s often better to query a container by its <code>inline-size</code> instead. That is, unless you genuinely need to query the container&rsquo;s block size.</p>
<p>Media queries aren&rsquo;t affected by this, as they treat height the same way they treat <code>@media (min-height: ...)</code> does, i.e., ask the viewport and move on.</p>
<h3 id="3-queries-cannot-accept-custom-properties">3. Queries Cannot Accept Custom Properties</h3>
<p>Another container query limitation: we can&rsquo;t query against a custom property value:</p>
<pre><code class="language-css">:root {
  --breakpoint-lg: 1600px;
}

/* DOES NOT WORK */
@container (min-width: var(--breakpoint-lg)) {
  /* ... */
}
</code></pre>
<p>This is because custom properties depend on values that cascade down the DOM tree. There&rsquo;s the possibility that a container query that relies on a custom property can change that same custom property. And it can quickly get complicated:</p>
<pre><code class="language-css">:root {
  --breakpoint-lg: 1600px;
}

/* DOES NOT WORK */
@container cards (min-width: var(--breakpoint-lg)) {
  .card {
    --breakpoint-lg: 1000px;
  }
}
</code></pre>
<p>I don&rsquo;t think any project should wholesale use <code>@container</code> instead of <code>@media</code>. Media queries still play an important role in responsive layouts. It&rsquo;s about understanding the separation of concerns.</p>
<p>I tend to reach for container queries when a component is used in more than one layout context. For example, a <code>.card</code> element could live in a full-width grid or a narrower sidebar. If that&rsquo;s the case, then we&rsquo;ll want the component&rsquo;s content to determine when it adjusts rather than a media query that looks at the outer viewport.</p>
<p>Similarly, I reach for media queries when a component solely exists at the page level. This would be something like a main navigation that always sits at the top of the page. It is directly influenced by the viewport&rsquo;s size, meaning that the viewport is a reliable reference for when the navigation needs to adjust. Again, it&rsquo;s all about &ldquo;macro&rdquo; layout versus &ldquo;micro&rdquo; layouts.</p>
<p>Here&rsquo;s a diagram for how I reason about which type of query to use:</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="632" src="https://thenokiablog.com/wp-content/uploads/2026/09/stop-treating-css-container-queries-like-traditional-media-queries-1.jpg" alt="Flowchart for choosing between media and container queries"><figcaption class="op-vertical-bottom">(Large preview)</figcaption></figure>
<h2 id="conclusion">Conclusion</h2>
<p>At the end of the day, the core reason why container queries look incredibly similar to media queries is simply familiarity. They&rsquo;re not exactly &ldquo;new&rdquo;, but they are way less understood and adopted than media queries. But media queries have plenty of their own limitations; otherwise, we wouldn&rsquo;t need container queries to fill those gaps.</p>
<p>What we have is a more effective feature for detecting when a specific component&rsquo;s context changes and a means for adjusting styles based on its content, as it should be when that component can exist in multiple contexts.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/09/stop-treating-css-container-queries-like-traditional-media-queries-1.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(gg, yk)</span></div>
<p>The post <a href="https://thenokiablog.com/stop-treating-css-container-queries-like-traditional-media-queries/">Stop Treating CSS Container Queries Like Traditional Media Queries</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Death Of The Button: Why The Best Interface Is No Interface</title>
		<link>https://thenokiablog.com/the-death-of-the-button-why-the-best-interface-is-no-interface/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 09 Sep 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Figma]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Sliders]]></category>
		<category><![CDATA[Tailwind CSS]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[Web Design]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/the-death-of-the-button-why-the-best-interface-is-no-interface/</guid>

					<description><![CDATA[<p>The web is evolving beyond menus, forms, and endless clicks toward experiences shaped around human intent....</p>
<p>The post <a href="https://thenokiablog.com/the-death-of-the-button-why-the-best-interface-is-no-interface/">The Death Of The Button: Why The Best Interface Is No Interface</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>The web is evolving beyond menus, forms, and endless clicks toward experiences shaped around human intent. For UX designers, understanding this shift means re-evaluating their role, moving from designing visible interfaces to guiding transparent, intent-driven AI experiences.</section>
</p>
<p>Ever since the commercialisation of the Graphical User Interface pioneered by systems like the Xerox Star and popularised by the original Apple Macintosh, software has relied heavily on point-and-click interactions. If you wanted to book a trip, buy a pair of shoes, or research a health symptom, you were expected to navigate a labyrinth of user interfaces. You click menus, adjust range sliders, fill out multi-step forms, deal with cookie pop-ups, and open dozens of browser tabs just to cross-reference basic information. We have become accustomed to spending more time <em>managing the software</em> rather than actually achieving our goals.</p>
<p>That contract is officially changing. Driven by advances in artificial intelligence and large language models, a new generation of web tools is pioneering a radical philosophy: <strong>Intent-Driven Design</strong>. Rather than expecting our users to learn complex menus and click through elaborate sales funnels, these platforms operate by capturing high-level human goals and silently executing the grunt work in the background.</p>
<p>This vision builds on long-standing HCI concepts like Golden Krishna&rsquo;s &ldquo;The Best Interface Is No Interface&rdquo; and Don Norman&rsquo;s principles of human-centered design.</p>
<blockquote class="pull-quote">
<p>The ultimate goal of modern web design is no longer to build prettier buttons or flashy animations; it is to eliminate the interface entirely.</p>
</blockquote>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Well, at least what we understand based on our current experience.</p>
<p>It is essential for UX designers to understand the changes we&rsquo;re witnessing and even <strong>re-evaluate our role</strong>, shifting our focus from <strong>designing visible interfaces</strong> to guiding transparent, <strong>intent-driven AI experiences</strong>.</p>
<h2 id="the-death-of-the-10-click-process">The Death Of The &ldquo;10-click&rdquo; Process</h2>
<p>To understand where web design is going, we first have to look at the friction we have accepted as &ldquo;normal&rdquo; for decades.</p>
<p>Consider the traditional workflow of buying a flight online. The user experience is intentionally hyper-interactive:</p>
<ol>
<li>Navigate to a travel aggregator or airline website.</li>
<li>Select &ldquo;Round Trip&rdquo; from a dropdown menu.</li>
<li>Type the origin city and wait for auto-complete.</li>
<li>Type the destination city and wait for auto-complete.</li>
<li>Click a calendar modal, toggle through months, and select departure and return dates.</li>
<li>Choose the number of passengers and cabin class.</li>
<li>Click &ldquo;Search&rdquo; and wait for the results page to load.</li>
<li>Filter by price, layover duration, departure time, and airline.</li>
<li>Sort the results and scan through dozens of individual options.</li>
<li>Click through a three-page checkout funnel dodging upsells for rental cars and travel insurance.</li>
</ol>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>This is a classic <strong>point-and-click UI paradigm</strong>. The computer acts as a passive container of data, and the human acts as the orchestrator, manually inputting parameters, interpreting raw outputs, and executing each micro-step along the way.</p>
<p>Intent-driven design flips this dynamic entirely. Instead of forcing you to navigate the mechanical steps of <em>how</em> to find a flight, the interface asks a simple question: <strong><em>What are you trying to accomplish?</em></strong></p>
<p>When you express a goal, such as <em>&ldquo;Find me a non-stop flight to Chicago next weekend under $300 that arrives before 5 PM&rdquo;</em>, the software reads your intent, executes the multi-step search query behind the scenes, compares the options, and presents a single actionable resolution. The ten clicks dissolve into one clear intent outcome.</p>
<figure><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface.png" alt="10-click process vs AI-driven intent flow."><figcaption class="op-vertical-bottom">10-click process vs AI-driven intent flow. Image generated by Gemini. (Large preview)</figcaption></figure>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://www.smashingmagazine.com/images/smashing-cat/cat-scubadiving-panel.svg" alt="Feature Panel" width="257" height="355"></div>


<h2 id="three-web-platform-examples-replacing-buttons-with-intent">Three Web Platform Examples Replacing Buttons With Intent</h2>
<p>This shift isn&rsquo;t a theoretical vision of the distant future. Some of the world&rsquo;s most accessible websites allow you to experience intent-capturing systems already.</p>
<h3 id="1-perplexity-ai-search-without-the-open-tabs">1. Perplexity AI: Search Without The Open Tabs</h3>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Traditional search engines like Google were built as directories. You typed a keyword, and the interface rewarded you with ten blue links. The actual work of opening five tabs, skimming long articles, dodging ads, and manually assembling an answer was left to you. Although this is now changing, with AI content appearing first when you search on Google.</p>
<p>Perplexity AI allows anyone to perform instant intent-based searches. Instead of forcing you to click into multiple tabs, the interface synthesises the perfect result for your context.</p>
<ul>
<li><strong>The interaction:</strong> You ask a complex question in plain English: <em>&ldquo;Compare the top three budget laptops for a computer science student, focusing on battery life and keyboard quality.&rdquo;</em></li>
<li><strong>The invisible work:</strong> In under two seconds, the platform searches the web, reads dozens of articles, evaluates hardware specifications, and cross-references user reviews.</li>
</ul>
<figure><img decoding="async" loading="lazy" width="800" height="443" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface-1.png" alt="Perplexity AI comparing three budget laptops in a table."><figcaption class="op-vertical-bottom">Image source: Perplexity AI. (Large preview)</figcaption></figure>
<ul>
<li><strong>The result:</strong> (See screen above) Instead of throwing web pages at you, Perplexity dynamically generates a single custom answer complete with formatted comparison tables, pros and cons lists, and concise inline citations. You get the outcome of thirty clicks in just one.</li>
</ul>
<figure><img decoding="async" loading="lazy" width="800" height="459" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface-2.png" alt="Domains exclusively cited by Bing Copilot, Google AI Overviews, Perplexity, and ChatGPT."><figcaption class="op-vertical-bottom">Synthesized answer output bypassing traditional link tabs. (Image source: SE Ranking) (Large preview)</figcaption></figure>
<h3 id="2-vercel-v0-web-design-without-dragging-and-dropping">2. Vercel v0: Web Design Without Dragging And Dropping</h3>
<p>For years, creating a website meant using visual builders like Figma or drag-and-drop web editors. As designers, we spent hours manually drawing rectangles, picking hexadecimal colour codes, adjusting padding values, and sometimes writing CSS code.</p>
<p>Vercel v0 lets anyone test its generative interface builder right from the home page without signing in.</p>
<ul>
<li><strong>The Interaction:</strong> A user types a descriptive goal into the input prompt: <em>&ldquo;Create a modern dark-mode dashboard for a subscription SaaS app showing monthly revenue, active users, and a customer churn chart.&rdquo;</em></li>
<li><strong>The invisible work:</strong> The underlying AI understands layout principles, accessibility guidelines, UI component libraries, and responsiveness. It writes clean HTML, Tailwind CSS, and React code in real time.</li>
<li><strong>The result:</strong> Rather than spending an afternoon manipulating elements, the user receives a fully functional, pixel-perfect user interface in seconds! The traditional visual design tool disappears, replaced by raw human intent.</li>
</ul>
<figure><img decoding="async" loading="lazy" width="800" height="443" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface-3.png" alt="Generated SaaS dashboard UI built by Vercel v0. Source: v0.app"><figcaption class="op-vertical-bottom">Generated SaaS dashboard UI built by Vercel v0. Source: v0.app. (Large preview)</figcaption></figure>
<h3 id="3-goblin-tools-breaking-down-overwhelming-tasks">3. Goblin.tools: Breaking Down Overwhelming Tasks</h3>
<p>Many traditional productivity tools require you to manually construct task lists, drag items across Kanban boards, and assign micro-deadlines. Goblin.tools is a free, single-page suite of single-task AI tools designed specifically for neurodivergent users or anyone feeling overwhelmed, requiring zero sign-ups or configuration.</p>
<figure> dashboard.&rdquo;&gt;<figcaption class="op-vertical-bottom">Goblin.tools dashboard. (Large preview)</figcaption></figure>
<ul>
<li><strong>The interaction:</strong> You enter a vague, intimidating goal into the <strong>Magic Todo</strong> tool, such as <em>&ldquo;Prepare for a job interview&rdquo;</em>.</li>
<li><strong>The invisible work:</strong> Instead of forcing you to plan every step, the system analyses the cognitive load of the goal and automatically breaks it down into small, actionable sub-tasks adjusted to your preferred level of detail.</li>
<li><strong>The result:</strong> The interface eliminates the stressful task-planning phase and presents a clean checklist tailored to your exact goal.</li>
</ul>
<figure><img decoding="async" loading="lazy" width="800" height="425" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface-4.png" alt="The checklist results of planning for a job interview."><figcaption class="op-vertical-bottom">The checklist results of planning for a job interview. (Large preview)</figcaption></figure>
<h2 id="the-core-pillars-of-intent-driven-web-design">The Core Pillars Of Intent-driven Web Design</h2>
<p>When you remove traditional menus, sidebars, and forms, how do you keep a website usable? Designers pioneering this space rely on three core pillars:</p>
<table class="tablesaw break-out">
<thead>
<tr>
<th>Pillar</th>
<th>Traditional UX approach</th>
<th>Intent-driven UX approach</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>User input</strong></td>
<td>Micro-actions (Clicks, dropdowns, toggles)</td>
<td>1. High-level goals (Natural language, context, habits)</td>
</tr>
<tr>
<td><strong>Interface state</strong></td>
<td>Static layouts (Everyone sees the same page)</td>
<td>2. Generative UI (Layouts created dynamically on the fly)</td>
</tr>
<tr>
<td><strong>Task execution</strong></td>
<td>Manual execution by the user</td>
<td>3. Autonomous execution by background AI agents</td>
</tr>
</tbody>
</table>
<h3 id="1-high-level-goals">1. High-level Goals</h3>
<p>An invisible interface doesn&rsquo;t always wait for you to type a command &mdash; it leverages context to anticipate user needs. Guided by industry standards like Apple&rsquo;s Human Interface Guidelines on Contextual &amp; Ambient Design, modern systems read environmental metadata, such as device state, location, and past interaction patterns, to trigger proactive actions.</p>
<p>For example:</p>
<ul>
<li><strong>Time and location:</strong> A food delivery web app prioritising your saved home address and dinner items automatically at 6:30 PM on a weekday.</li>
<li><strong>Cross-app history:</strong> A calendar application noticing an email about an upcoming appointment and surfacing a one-click <em>&ldquo;Add to Schedule&rdquo;</em> card without forcing you to copy and paste event details manually.</li>
</ul>
<h3 id="2-generative-ui">2. Generative UI</h3>
<p>In traditional web design, every user sees the exact same layout. An e-commerce store shows the same navigation bar whether you are a first-time visitor looking for customer support or a returning customer tracking a package.</p>
<p>As highlighted in the Nielsen Norman Group&rsquo;s analysis on AI as a new UX paradigm, computing is shifting from command-based interaction to outcome-specification. This enables <strong>Generative UI</strong>, where interfaces are rendered dynamically on the fly based on what you are trying to do in that exact moment. For example, platforms like Vercel v0 demonstrate how raw intent can instantly render functional code components without manual layout building. If you express a desire to compute complex financial data, the interface generates a dynamic calculator widget on demand, receding once your goal is completed.</p>
<h3 id="3-execution-by-ai-agents">3. Execution by AI Agents</h3>
<p>Traditional interfaces are obsessed with prevention, constantly peppering users with confirmation pop-ups (<em>&ldquo;Are you sure you want to delete this file?&rdquo;</em>).</p>
<p>Intent-driven interfaces adapt Jakob Nielsen&rsquo;s 10 Usability Heuristics on User Control and Error Recovery by shifting the safety net from <em>prevention</em> to <em>easy reversibility</em>. Because autonomous agents take actions on your behalf, products prioritise frictionless rollback mechanisms. A prominent &ldquo;Undo&rdquo; button, simple revision prompts (<em>&ldquo;Make this summary shorter&rdquo;</em>), and transparent audit logs replace intrusive warning modals.</p>
<h3 id="the-hidden-risks">The Hidden Risks</h3>
<p>While removing interface friction is liberating, stripping away visual controls introduces significant product design challenges. When software acts on inferred intent rather than direct point-and-click commands, designers must navigate critical ethical and technical pitfalls.</p>
<h3 id="the-illusion-of-control">The Illusion Of Control</h3>
<p>When a website makes decisions for you, it can quickly feel patronising or invasive. As explored by the Stanford Human-Computer Interaction (HCI) Group, automation must maintain <strong>clear boundaries</strong> to prevent user frustration. Furthermore, ethical frameworks from the Center for Humane Technology emphasise that product designers must guard against manipulative defaults.</p>
<p>Designers must strike a delicate balance: <strong>automate routine execution, but explicitly prompt the user for high-stakes confirmations</strong> (such as financial transactions, publishing public content, or altering privacy settings).</p>
<h3 id="the-black-box-problem">The Black Box Problem</h3>
<p>In a traditional UI, if you get an unexpected result, you can usually diagnose the issue &mdash; perhaps you checked the wrong filter box or selected an incorrect date.</p>
<p>With an intent-driven interface, troubleshooting becomes harder. To address this &ldquo;black box&rdquo; challenge, the Google PAIR (People + AI Research) Guidebook advocates for transparent feedback loops. The system must explicitly state its interpretation (<em>&ldquo;Searching for non-stop flights to Chicago under $300&hellip;&rdquo;</em>) so users can calibrate trust and correct misinterpretations instantly.</p>
<h3 id="from-a-ux-perspective">From A UX Perspective</h3>
<p>As a UX designer, always being curious to understand how our design approach is changing in the world of AI, I find it essential that we re-evaluate the foundational elements of our craft.</p>
<blockquote class="pull-quote">
<p>Rather than designing static buttons and rigid forms, we need to learn to map and present dynamic, generative UI components that adapt on the fly to user intent.</p>
</blockquote>
<p>By mastering these evolving patterns, like ambient feedback, inline prompts, and transparent AI status indicators, we can ensure that screenless, agent-driven tools remain intuitive, ethical, and deeply human-centered.</p>
<h2 id="conclusion">Conclusion</h2>
<blockquote><p>The ultimate goal: The best design is no design.</p></blockquote>
<p>For decades, the digital industry has evaluated software success through engagement metrics like <em>time spent in app</em>, <em>click-through rates</em>, and <em>page views per session</em>. Websites were deliberately engineered to maximise visual engagement and interaction volume.</p>
<p>The philosophy behind Golden Krishna&rsquo;s seminal book The Best Interface Is No Interface, aligned with the broader Center for Humane Technology&rsquo;s Time Well Spent movement, turns these metrics on their head. The ultimate test of a modern digital product is no longer how visually captivating its buttons are, but rather: <strong>How effectively did this software solve the problem and get out of the user&rsquo;s way?</strong>,</p>
<p>We are entering an era where web applications will no longer be measured by the beauty of their interfaces, but by their ability to render those complex interfaces completely obsolete. The future of the web isn&rsquo;t more interaction &mdash; it is <strong>seamless, invisible completion</strong>.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/09/the-death-of-the-button-why-the-best-interface-is-no-interface-5.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(ah, yk)</span></div>
<p>The post <a href="https://thenokiablog.com/the-death-of-the-button-why-the-best-interface-is-no-interface/">The Death Of The Button: Why The Best Interface Is No Interface</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Best WordPress Hosting in 2026</title>
		<link>https://thenokiablog.com/the-best-wordpress-hosting-in-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 09:25:27 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Freelance]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Management Tools]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Web Hosting]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Agency]]></category>
		<category><![CDATA[WordPress AI]]></category>
		<category><![CDATA[WordPress Developer]]></category>
		<category><![CDATA[WordPress Hosting]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/the-best-wordpress-hosting-in-2026/</guid>

					<description><![CDATA[<p>Choosing the best WordPress hosting is not as simple as comparing prices and picking the cheapest...</p>
<p>The post <a href="https://thenokiablog.com/the-best-wordpress-hosting-in-2026/">The Best WordPress Hosting in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Choosing the best WordPress hosting is not as simple as comparing prices and picking the cheapest plan. Hosting affects how fast your website loads, how well it handles traffic, how often it goes offline, and how much work you need to keep everything running properly.</p>
<p>There are also big differences between hosting providers. Some focus on low-cost shared hosting, while others offer managed WordPress hosting, cloud hosting, or plans built for businesses and agencies. The tools included with each plan can vary just as much. Backups, staging sites, caching, security, migrations, CDN access, and developer tools may be included, limited, or cost extra.</p>
<p>This comparison looks at six popular WordPress hosts: <strong>WordPress.com</strong>, <strong>Bluehost</strong>, <strong>Pressable</strong>, <strong>Cloudways</strong>, <strong>Kinsta</strong>, and <strong>SiteGround</strong>. Each provider has been tested and compared across the areas that matter when running a WordPress website.</p>
<p>The goal isn&rsquo;t to name one host that works for everyone. A personal blog, WooCommerce store, client website, and busy online publication have very different hosting needs. Instead, the results should make it easier to see where each provider works well, where it falls short, and which type of WordPress website it suits best.</p>
<h2 id="quick-recommendations"><span id="Best_WordPress_Hosting_Quick_Recommendations">Best WordPress Hosting: Quick Recommendations</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Not everyone needs to compare every plan and technical detail. These recommendations offer a quick starting point based on common WordPress projects. Each host has been selected for a different type of user, with performance, management tools, support, pricing, and the overall hosting experience taken into account.</p>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Category</strong></th>
<th><strong>Recommended Host</strong></th>
<th><strong>Best For</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Best Overall WordPress Host</strong></td>
<td>WordPress.com </td>
<td>Most WordPress websites, from blogs and business sites to larger projects.</td>
</tr>
<tr>
<td><strong>Best WordPress Managed Host</strong></td>
<td>Kinsta </td>
<td>Sites that need strong performance and a fully managed WordPress setup.</td>
</tr>
<tr>
<td><strong>Best WordPress Blogger Host</strong></td>
<td>Cloudways </td>
<td>Growing blogs that need more resources and control than basic shared hosting.</td>
</tr>
<tr>
<td><strong>Best WordPress Developer Host</strong></td>
<td>Pressable </td>
<td>Developers building, testing, migrating, and maintaining WordPress websites.</td>
</tr>
<tr>
<td><strong>Best WordPress Agency Host</strong></td>
<td>SiteGround </td>
<td>Agencies and teams managing multiple WordPress websites.</td>
</tr>
<tr>
<td><strong>Best WooCommerce Host</strong></td>
<td>WordPress.com </td>
<td>WooCommerce stores that need managed hosting and room to grow.</td>
</tr>
<tr>
<td><strong>Best Budget WordPress Host</strong></td>
<td>Bluehost </td>
<td>New and smaller WordPress websites where keeping costs low matters.</td>
</tr>
</tbody>
</table>
</div>
<h2 id="best-overall"><span id="Best_Overall_WordPress_Host_WordPresscom">Best Overall WordPress Host: WordPress.com </span></h2>
<p><strong>WordPress.com</strong> is our best overall host because it combines managed WordPress hosting with the flexibility and ease of use many websites need. It works well for blogs and business sites, with plans suitable for larger publications and WooCommerce stores.</p>
<p>Much of the technical work is handled for you, including caching, security, updates, SSL, and CDN access. All paid plans now support third-party plugins and custom theme uploads. <strong>Business</strong> adds daily backups, staging, SFTP, SSH, database access, WP-CLI, and other developer tools.</p>
<p><img fetchpriority="high" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026.jpg" alt="WordPress.com - Our Recommended WordPress" width="900" height="323"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>WordPress.com is run by Automattic, a company with deep ties to the WordPress open-source project and WordPress.org. That experience carries through to its managed hosting and support, which is useful when a problem involves both WordPress and the hosting platform.</p>
<p>There is less server maintenance to handle, while developers can choose <strong>Business</strong> when they need more advanced access. Those needing full server control may prefer cloud or VPS hosting.</p>
<p>Pricing varies between plans, so always compare promotional rates with the normal renewal price.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-1.jpg" width="150" height="150" alt="Cloudways WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="WordPresscom_Plans_Pricing">WordPress.com Plans &amp; Pricing</span></h3>
<ul>
<li><strong>Personal:</strong> Supports third-party plugins and themes, custom CSS and code, along with security, support, and migration tools.</li>
<li><strong>Premium:</strong> Includes everything in <strong>Personal</strong>, with additional design, analytics, SEO, advertising, and monetization tools.</li>
<li><strong>Business:</strong> Adds daily backups, staging, SFTP, SSH, WP-CLI, database access, GitHub deployments, and other developer tools.</li>
<li><strong>Commerce:</strong> Includes the tools available with Business and adds WooCommerce and online selling tools.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Personal</strong></td>
<td>$4 <small>Per Month</small></td>
<td>$8 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Premium</strong></td>
<td>$8 <small>Per Month</small></td>
<td>$18 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Business</strong></td>
<td>$25 <small>Per Month</small></td>
<td>$40 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Commerce</strong></td>
<td>$45 <small>Per Month</small></td>
<td>$70 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<h2 id="best-managed-wordpress-host"><span id="Best_WordPress_Managed_Host_Kinsta">Best WordPress Managed Host: Kinsta </span></h2>
<p><strong>Kinsta</strong> is our choice for the best managed WordPress host. It is built for WordPress sites that need strong performance, reliable hosting, and useful management tools without the site owner having to manage the server.</p>
<p>Every WordPress site runs in its own isolated container, with access to Kinsta&rsquo;s cloud infrastructure and a choice of 30 data center locations. Server caching, edge caching, a Cloudflare-powered CDN, security, daily backups, and performance monitoring are included.</p>
<p><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-2.jpg" alt="Kinsta - Our Recommended Managed WordPress Host" width="900" height="323" class="size-full wp-image-181739"></p>
<p>Kinsta also provides a strong set of developer tools, including DevKinsta. SSH and SFTP are included with all WordPress hosting plans, WP-CLI is installed by default, and staging gives developers a separate platform to test changes. MyKinsta also offers database management, logs, analytics, and Kinsta&rsquo;s APM performance tool.</p>
<p>The main drawback is price. Kinsta costs more than budget WordPress hosting, so it is harder to justify for a small personal site. But for businesses, busy publications, stores, and other sites where performance and support matter, the extra cost makes sense.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-3.jpg" width="150" height="150" alt="Kinsta WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="Kinsta_Plans_Pricing">Kinsta Plans &amp; Pricing</span></h3>
<ul>
<li><strong>Single Site Plans:</strong> Built for one WordPress website, with several levels based on traffic or bandwidth. All include CDN, edge caching, daily backups, staging, security, migrations, SSH, SFTP, and WP-CLI.</li>
<li><strong>Multiple Site Plans:</strong> Designed for users who manage several WordPress installations. These plans increase the number of sites and available resources while keeping them under one Kinsta account.</li>
<li><strong>Agency Plans:</strong> Made for agencies that manage larger collections of client sites. They provide higher limits and more capacity while retaining the same managed WordPress platform and development tools.</li>
<li><strong>Custom Plans:</strong> Available for WordPress projects that need more resources than the standard plans provide. These are better suited to very busy sites and projects with unusual hosting requirements.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Single Site</strong></td>
<td>$35 <small>Per Month</small></td>
<td>$35 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Multiple Site</strong></td>
<td>$70 <small>Per Month</small></td>
<td>$70 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Agency</strong></td>
<td><small>Starting at</small> $340 <small>Per Month</small></td>
<td><small>Starting at</small> $340 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<h2 id="best-wordpress-blogger-host"><span id="Best_WordPress_Blogger_Host_Cloudways">Best WordPress Blogger Host: Cloudways </span></h2>
<p><strong>Cloudways</strong> is our choice for the best WordPress blogger host, particularly for established blogs and publications that have grown beyond basic shared hosting. It provides managed cloud hosting while still giving site owners more control over server resources than most managed WordPress platforms.</p>
<p>With Cloudways Flexible, WordPress can run on cloud infrastructure from DigitalOcean, Vultr, Linode, AWS, or Google Cloud. You choose the provider, server size, and location, while Cloudways handles much of the server setup and management. Resources can also be increased as traffic grows.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-4.jpg" alt="Cloudways Managed WordPress Hosting" width="900" height="400" class="alignnone size-full wp-image-174575"></p>
<p>WordPress tools include server caching, staging, cloning, automated backups, SSL, migrations, security tools, SSH, SFTP, Git, and WP-CLI. Multiple WordPress sites can also run on the same server, provided it has enough resources.</p>
<p>This flexibility is why Cloudways works well for established bloggers. A growing publication can increase its hosting resources without moving to another platform. The tradeoff is complexity. There are more server settings to understand than with WordPress.com or Kinsta. But for bloggers comfortable managing WordPress, that extra control can be useful.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-5.jpg" width="150" height="150" alt="Cloudways WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="Cloudways_Plans_Pricing">Cloudways Plans &amp; Pricing</span></h3>
<ul>
<li><strong>DigitalOcean:</strong> The most practical starting point for many WordPress blogs. Plans provide dedicated cloud resources, SSD or NVMe storage, vertical scaling, and a choice of server locations.</li>
<li><strong>Vultr:</strong> Offers a broad choice of data center locations and server configurations. It is useful when the main audience is closer to a Vultr location or a different server setup is required.</li>
<li><strong>Linode:</strong> Another option for blogs that want predictable cloud resources and a choice of server locations while keeping Cloudways responsible for much of the server management.</li>
<li><strong>AWS:</strong> Uses Amazon Web Services infrastructure and provides more server configuration choices. It is generally more expensive and is better suited to sites with requirements that justify the added cost.</li>
<li><strong>Google Cloud:</strong> Runs WordPress on Google Compute Engine through the Cloudways dashboard. Like AWS, it provides flexible server resources but usually costs more than the simpler cloud options.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>DigitalOcean Micro</strong></td>
<td>$11 <small>Per Month</small></td>
<td>$11 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>DigitalOcean Small</strong></td>
<td>$24 <small>Per Month</small></td>
<td>$24 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>DigitalOcean Medium</strong></td>
<td>$46 <small>Per Month</small></td>
<td>$46 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<h2 id="best-wordpress-developer-host"><span id="Best_WordPress_Developer_Host_Pressable">Best WordPress Developer Host: Pressable </span></h2>
<p><strong>Pressable</strong> is our choice for the best WordPress developer host. It is a fully managed WordPress platform from Automattic, the company behind WordPress.com and WooCommerce, and runs on its WP Cloud infrastructure. That WordPress focus is one of the main reasons it works so well for development work.</p>
<p>Developers get staging and sandbox environments for every site, along with SSH, SFTP, WP-CLI, Git, database access, and other tools needed for building and maintaining WordPress sites. DupliKits can also be used to create reusable site templates, which can save time when several projects start with a similar setup.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-6.jpg" alt="Pressable Managed WordPress Hosting" width="900" height="340" class="alignnone size-full wp-image-174632"></p>
<p>Pressable handles much of the hosting work in the background. Hourly and daily backups, caching, security monitoring, automatic scaling, a global CDN, and site migrations are included. There is also 24/7 support from a team that works with WordPress every day.</p>
<p>Pricing is higher than budget hosting, but that is not really what Pressable is competing with. The value comes from reducing server maintenance while keeping the development tools needed for regular WordPress work. For freelance developers and teams managing several sites, that balance makes Pressable a strong choice.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-7.jpg" width="150" height="150" alt="Pressable WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="Pressable_Plans_Pricing">Pressable Plans &amp; Pricing</span></h3>
<ul>
<li><strong>Signature 1:</strong> Supports one WordPress site, 30,000 monthly visits, and 20GB of storage. Suitable for developers managing a single business or client site.</li>
<li><strong>Signature 2:</strong> Supports three WordPress sites, 50,000 monthly visits, and 30GB of storage. Useful for developers who manage a small collection of client sites.</li>
<li><strong>Signature 3:</strong> Supports five WordPress sites, 75,000 monthly visits, and 35GB of storage. Offers more room for freelancers maintaining several active WordPress projects.</li>
<li><strong>Signature 4:</strong> Supports ten WordPress sites, 150,000 monthly visits, and 50GB of storage. Excellent for developers and small teams that manage a larger group of websites.</li>
<li><strong>Signature 5 and Above:</strong> Plans increase from 20 to 100 WordPress installations, with higher traffic and storage limits. They are aimed at larger development teams and agencies with many sites.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Signature 1</strong></td>
<td>$25 <small>Per Month</small></td>
<td>$25 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Signature 2</strong></td>
<td>$45 <small>Per Month</small></td>
<td>$45 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Signature 3</strong></td>
<td>$60 <small>Per Month</small></td>
<td>$60 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Signature 4</strong></td>
<td>$90 <small>Per Month</small></td>
<td>$90 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Signature 5</strong></td>
<td>$155 <small>Per Month</small></td>
<td>$155 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<h2 id="best-wordpress-agency-host"><span id="Best_WordPress_Agency_Host_SiteGround">Best WordPress Agency Host: SiteGround </span></h2>
<p><strong>SiteGround</strong> is our choice for the best WordPress agency host. It combines managed WordPress hosting with tools for building, testing, managing, and handing client websites once a project is complete and launched. <strong>GrowBig</strong> and <strong>GoGeek</strong> also allow multiple websites under one account, which makes them better suited to agency work than the single site <strong>StartUp</strong> plan.</p>
<p>SiteGround handles many routine hosting jobs, including WordPress updates, daily backups, caching, CDN access, SSL, security, and server maintenance. GrowBig and GoGeek also include WordPress staging, while developers have access to SSH, SFTP, WP-CLI, databases, and other common development tools.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-8.jpg" alt="SiteGround Managed WordPress Hosting" width="900" height="340" class="alignnone size-full wp-image-174647"></p>
<p>The agency tools are the main reason for choosing SiteGround here. Team members can be added as collaborators without sharing the main account login. Finished websites can also be transferred to clients while the agency remains attached as a collaborator. GoGeek adds white label client access, so clients using Site Tools do not see SiteGround branding.</p>
<p>The main drawback is renewal pricing. SiteGround offers large discounts for the first year, but regular rates are much higher. Agencies should use those renewal prices when calculating the long-term cost of hosting client websites.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-9.jpg" width="150" height="150" alt="SiteGround WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="SiteGround_Plans_Pricing">SiteGround Plans &amp; Pricing</span></h3>
<ul>
<li><strong>StartUp:</strong> Supports one website, around 10,000 monthly visits, and 10GB of storage. It includes managed WordPress tools, daily backups, caching, CDN access, SSL, and email. The single site limit makes it less useful for agency hosting.</li>
<li><strong>GrowBig:</strong> Supports unlimited websites within its resource limits, around 100,000 monthly visits, and 50GB of storage. It adds more server resources, WordPress staging, on-demand backups, and collaboration tools. This is a good starting point for smaller agencies.</li>
<li><strong>GoGeek:</strong> Supports unlimited websites within its resource limits, around 400,000 monthly visits, and 100GB of storage. It provides more server resources and adds white-label client access, making it the strongest shared hosting plan for agencies managing client websites.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>StartUp</strong></td>
<td>$2.99 <small>Per Month</small></td>
<td>$17.99 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>GrowBig</strong></td>
<td>$4.99 <small>Per Month</small></td>
<td>$29.99 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>GoGeek</strong></td>
<td>$7.99 <small>Per Month</small></td>
<td>$44.99 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<p><strong>WordPress.com</strong> is our choice for the best WooCommerce host. WooCommerce can now be installed on any paid WordPress.com plan, giving store owners more choice over how much hosting and how many store tools they actually need.</p>
<p>The close connection with WooCommerce is a major advantage. WordPress.com and WooCommerce are both part of Automattic, so the hosting platform is built and supported by people with a deep understanding of WordPress and WooCommerce. This becomes useful when a problem involves the store, WordPress, and the hosting environment.</p>
<p>For larger stores, the <strong>Commerce</strong> plan includes everything in <strong>Business</strong>, along with WooCommerce and additional selling tools. This includes real-time backups, staging, SFTP, SSH, database access, payment tools, shipping integrations, automated taxes, product recommendations, and other WooCommerce extensions.</p>
<p>WordPress.com also handles much of the hosting work, including caching, security, updates, SSL, and server management. Store owners can concentrate on products, orders, customers, and sales rather than maintaining the server. It may cost more than basic WooCommerce hosting, but the managed setup makes more sense as a store becomes busier.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-1.jpg" width="150" height="150" alt="WordPress.com Commerce WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="WordPresscom_Commerce_Plans_Pricing">WordPress.com Commerce Plans &amp; Pricing</span></h3>
<ul>
<li><strong>Personal:</strong> WooCommerce can be installed alongside third-party plugins and themes. It provides a low-cost starting point for a very small store, but it does not include the advanced backups, staging, and developer tools available on higher plans.</li>
<li><strong>Premium:</strong> Includes everything in Personal, along with additional design, analytics, SEO, advertising, and monetization tools. WooCommerce can be installed, although growing stores may benefit from the stronger hosting tools available with Business.</li>
<li><strong>Business:</strong> Adds real-time backups, staging, SFTP, SSH, database access, WP-CLI, and other developer tools. WooCommerce can be installed normally, making Business a good choice for store owners who want to build their own WooCommerce setup.</li>
<li><strong>Commerce:</strong> Includes everything in Business and adds WooCommerce with a collection of store tools and extensions. It supports unlimited products and orders, payments, shipping integrations, automated taxes, product recommendations, abandoned cart emails, and other selling tools.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Personal</strong></td>
<td>$4 <small>Per Month</small></td>
<td>$8 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Premium</strong></td>
<td>$8 <small>Per Month</small></td>
<td>$18 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Business</strong></td>
<td>$25 <small>Per Month</small></td>
<td>$40 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Commerce</strong></td>
<td>$45 <small>Per Month</small></td>
<td>$70 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<h2 id="best-budget-wordpress-host"><span id="Best_Budget_WordPress_Host_Bluehost">Best Budget WordPress Host: Bluehost </span></h2>
<p><strong>Bluehost</strong> is our choice for the best budget WordPress host. Its lower-priced plans provide the tools needed to run a blog, portfolio, small business site, or other WordPress project without paying the higher monthly cost of premium managed hosting.</p>
<p>WordPress hosting includes managed updates, SSL, CDN access, malware scanning, backups, migration tools, and a domain for the first year. Bluehost also provides a 99.99% uptime SLA and several server locations. WordPress setup and site management are handled through a dashboard aimed at users who may not have much hosting experience.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-10.jpg" alt="Bluehost Managed WordPress Hosting" width="900" height="340" class="alignnone size-full wp-image-174636"></p>
<p><strong>Starter</strong> is the obvious choice for smaller sites, while Business provides more storage, supports more websites, and adds further security and backup tools. Higher performance plans are available when a site needs more resources, so there is room to move beyond the entry-level packages.</p>
<p>The main issue is renewal pricing. Bluehost offers large discounts for the initial term, but the regular price is considerably higher. That needs to be included when comparing it with other budget hosts. For a smaller WordPress site where keeping the initial cost low matters, Bluehost still provides a strong set of hosting tools for the money.</p>
<div class="further-information">
<div class="further-information-logo">
        <img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/the-best-wordpress-hosting-in-2026-11.jpg" width="150" height="150" alt="Bluehost WordPress Hosting">
    </div>
<div class="further-information-content">
<p><strong class="further-information-title">Further Information:</strong></p>
</div>
</div>
<h3><span id="Bluehost_Plans_Pricing">Bluehost Plans &amp; Pricing</span></h3>
<ul>
<li><strong>Starter:</strong> Supports up to ten websites with 10GB of NVMe storage. It includes managed WordPress updates, CDN access, SSL, malware scanning, weekly backups, migration tools, and a domain for the first year. It is the best fit for blogs and smaller WordPress sites.</li>
<li><strong>Business:</strong> Supports up to 50 websites with 50GB of NVMe storage. It provides more room for growing sites and is better suited to users managing several WordPress installations or a busier business website.</li>
</ul>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plan</strong></th>
<th><strong>First Year Monthly Cost</strong></th>
<th><strong>Second Year Renewal Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Starter</strong></td>
<td>$4.79 <small>Per Month</small></td>
<td>$11.99 <small>Per Month</small></td>
</tr>
<tr>
<td><strong>Business</strong></td>
<td>$7.79 <small>Per Month</small></td>
<td>$15.99 <small>Per Month</small></td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<p>Most WordPress hosts include more than just server space. Backups, staging sites, caching, CDN access, SSL, security, and migration tools reduce the amount of work needed to maintain a site. A host may advertise backups but run them only weekly, or offer staging only on its more expensive plans.</p>
<p>There is also a difference between a tool being included and it being well connected to the hosting platform. The right setup depends on whether the project needs simple management or greater control.</p>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Host</strong></th>
<th><strong>Backups</strong></th>
<th><strong>Staging</strong></th>
<th><strong>CDN</strong></th>
<th><strong>Server Caching</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>WordPress.com</strong></td>
<td>Plan dependent</td>
<td>Plan dependent</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Bluehost</strong></td>
<td>Plan dependent</td>
<td>Plan dependent</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Pressable</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Cloudways</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Available</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Kinsta</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>SiteGround</strong></td>
<td>Yes</td>
<td>Plan dependent</td>
<td>Yes</td>
<td>Yes</td>
</tr>
</tbody>
</table>
</div>
<p>Developer requirements can be very different from those of someone running a single blog. Staging sites, SSH, SFTP, WP-CLI, Git, database access, logs, and local development tools will save a lot of time. They are also useful when testing updates or tracking down a problem without making changes directly on a live site.</p>
<p><strong>Cloudways</strong> provides the greatest server control of the hosts compared here, while <strong>Kinsta</strong> and <strong>Pressable</strong> combine strong development tools with a more managed setup. <strong>WordPress.com</strong> also provides many common development tools on suitable plans. <strong>SiteGround</strong> covers most everyday development needs, while <strong>Bluehost</strong> provides enough access for many smaller projects.</p>
<p>The main question is how much control is actually required. More server access is useful for some developers, but it also means taking responsibility for more of the hosting setup.</p>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Host</strong></th>
<th><strong>SSH</strong></th>
<th><strong>WP-CLI</strong></th>
<th><strong>Git</strong></th>
<th><strong>Staging</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>WordPress.com</strong></td>
<td>Plan dependent</td>
<td>Plan dependent</td>
<td>Plan dependent</td>
<td>Plan dependent</td>
</tr>
<tr>
<td><strong>Bluehost</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Limited</td>
<td>Plan dependent</td>
</tr>
<tr>
<td><strong>Pressable</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Cloudways</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>Kinsta</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><strong>SiteGround</strong></td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Plan dependent</td>
</tr>
</tbody>
</table>
</div>
<p>AI tools are starting to appear in WordPress hosting platforms. Many providers now use it to help monitor websites, detect security threats, improve performance, and simplify routine management tasks. Some platforms also include AI assistants that can answer questions, troubleshoot common issues, or help configure hosting settings.</p>
<p>While these tools can save time, they shouldn&rsquo;t be the main reason for choosing a host. Performance, reliability, support, and security still matter more. AI is best viewed as a useful addition rather than a replacement for a well-managed hosting platform.</p>
<p>The table below shows how the six hosts in this comparison currently approach AI.</p>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Host</strong></th>
<th><strong>AI Tools</strong></th>
<th><strong>What They Can Do</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>WordPress.com</strong></td>
<td>AI Website Builder, WordPress Agent, AI Support, MCP</td>
<td>Build sites, edit pages and layouts, create and edit content and images, get AI support, and connect outside AI agents such as ChatGPT and Claude to WordPress.</td>
</tr>
<tr>
<td><strong>Bluehost</strong></td>
<td>AI Site Creation Tools</td>
<td>Uses AI during the site creation process to help generate a starting design and content for a new WordPress website.</td>
</tr>
<tr>
<td><strong>Pressable</strong></td>
<td>WordPress AI Compatibility</td>
<td>Focuses on providing managed WordPress hosting that can run third-party AI plugins and services rather than supplying a large collection of its own AI tools.</td>
</tr>
<tr>
<td><strong>Cloudways</strong></td>
<td>AI Assistant and Hosting Tools</td>
<td>Uses AI within parts of its hosting platform to help with hosting management and support while allowing WordPress AI plugins to run normally.</td>
</tr>
<tr>
<td><strong>Kinsta</strong></td>
<td>AI Traffic and Bot Management</td>
<td>Does not currently focus on AI site creation. Its newer tools include controls for managing AI crawlers and automated traffic reaching WordPress sites.</td>
</tr>
<tr>
<td><strong>SiteGround</strong></td>
<td>AI Website and Content Tools</td>
<td>Provides AI-assisted site creation and content tools, with AI used mainly to help users build and manage website content.</td>
</tr>
</tbody>
</table>
</div>
<p class="data-check"><small><strong>All data correct as of August, 2026.</strong></small></p>
<p><strong>WordPress.com</strong> currently has the most complete AI setup of the hosts compared here. Its AI website builder can create a new WordPress site, while WordPress Agent continues working inside the site after it has been built. It can help with content, layouts, images, pages, and other editing jobs.</p>
<p>The more interesting addition for developers is MCP support. WordPress.com can connect with outside AI agents such as ChatGPT, Claude, Cursor, and other compatible tools. These agents can read site information and, with permission, carry out tasks such as creating posts, managing content, working with media, and changing site settings. MCP is available across paid WordPress.com plans.</p>
<p>Other hosts are using AI in narrower ways, often concentrating on initial site creation, content generation, or hosting support. Those tools can still be useful, but they should not be a major reason to choose a host on their own. Hosting performance, support, backups, security, development tools, and long-term cost still matter much more.</p>
<h2 id="choose-wordpress-host"><span id="How_to_Choose_a_WordPress_Host">How to Choose a WordPress Host</span></h2>
<p>Choosing a WordPress host is one of the biggest decisions you&rsquo;ll make for your website. Your hosting provider affects performance, reliability, security, and how easy your site is to manage. The right host will keep your website running smoothly and give you access to support when you need it.</p>
<p>No hosting plan suits every website. A personal blog has different needs than an online store or an agency managing client sites. Knowing what your website requires before comparing providers will help you narrow your options and avoid paying for services you won&rsquo;t use.</p>
<p>When comparing hosts, look at uptime, page speed, server locations, backups, staging sites, security, support, and renewal pricing. These factors often matter just as much as the monthly cost.</p>
<p>The articles below cover the main topics involved in choosing a WordPress host. Whether you&rsquo;re building your first website or moving to a new provider, they&rsquo;ll help you compare your options and make a confident choice.</p>
<h2 id="wordpress-hosting-different-needs"><span id="WordPress_Hosting_for_Different_Needs">WordPress Hosting for Different Needs</span></h2>
<p>Choosing a hosting plan that matches your needs can improve performance, make your website easier to manage, and help you avoid paying for resources you won&rsquo;t use. As your website grows, you can move to a plan with more storage, power, and management tools.</p>
<p>Whether you&rsquo;re building your first WordPress website, running an online store, or managing client sites, understanding the strengths of each hosting option will make it easier to choose the right provider.</p>
<h2 id="wordpress-performance-security"><span id="WordPress_Performance_Security">WordPress Performance &amp; Security</span></h2>
<p>A good hosting provider gives your WordPress website a solid foundation, but hosting is only part of the picture. Your website&rsquo;s setup, the tools you use, and your security practices all affect performance, reliability, and keeping your visitors safe.</p>
<p>Many WordPress hosts include caching, content delivery networks (CDNs), backups, malware scanning, and SSL certificates. Knowing how these features work will help you get more from your hosting plan. Regular maintenance also helps keep your website running well. Updating WordPress, plugins, and themes, monitoring performance, and following good security practices can prevent many common problems.</p>
<p>The articles below cover the tools and techniques that can improve website speed, strengthen security, and simplify day-to-day management.</p>
<h2 id="managing-wordPress-hosting"><span id="Managing_Your_WordPress_Hosting">Managing Your WordPress Hosting</span></h2>
<p>Launching a WordPress website is only the start. Regular maintenance helps keep your website secure, reliable, and running smoothly. Many hosting providers include tools that simplify routine tasks, but it still helps to understand how they work.</p>
<p>Common tasks include migrating websites, installing SSL certificates, updating PHP, managing domains, restoring backups, and monitoring uptime. Learning these skills will help you solve problems more quickly and get more from your hosting provider.</p>
<p>Whether you&rsquo;re looking after one website or several client projects, a regular maintenance routine can reduce downtime and keep your websites in good shape.</p>
<p>The articles below cover the most common hosting management tasks and show you how to handle them with confidence.</p>
<ul class="hosting-collection-links">
<li>
<div class="content">
<p>When Your WordPress Website Has Outgrown its Hosting </p>
<p>How do you know when a hosting change is needed? Here are a few things to consider.</p>
</div>
</li>
<li>
<div class="content">
<p>Hosting Your Client&rsquo;s WordPress Website </p>
<p>Learn how to avoid common hosting mistakes when hosting WordPress sites for clients.</p>
</div>
</li>
<li>
<div class="content">
<p>Understanding Your Web Host </p>
<p>Your host may not cover all your needs. Take these steps to ensure your website runs smoothly.</p>
</div>
</li>
<li>
<div class="content">
<p>Building a Performant WordPress Website </p>
<p>Learn how to boost performance with better hosting, lighter themes, and smart optimzation strategies.</p>
</div>
</li>
<li>
<div class="content">
<p>What To Know About Your Client&rsquo;s WordPress Website </p>
<p>We cover what to check first, including themes, plugins, custom code, hosting, and unused tools.</p>
</div>
</li>
<li>
<div class="content">
<p>Add an SSL Certificate to Your WordPress Website </p>
<p>A quick SSL certificate setup can mean big benefits for your site and visitors.</p>
</div>
</li>
<li>
<div class="content">
<p>WordPress Website Email Issues </p>
<p>Learn how to test sending, check logs, change the from address, set up SMTP, or use a mail delivery service.</p>
</div>
</li>
</ul>
<h2 id="final-verdict"><span id="Final_Verdict_Which_WordPress_Host_Should_You_Choose">Final Verdict: Which WordPress Host Should You Choose?</span></h2>
<p>WordPress.com is our best overall choice because it works for a broad range of WordPress projects while handling much of the hosting management. It is suitable for blogs, business websites, larger publications, and WooCommerce stores, with access to plugins, themes, staging, backups, security, caching, and development tools on suitable plans.</p>
<p>Kinsta is the better choice for users who want premium managed WordPress hosting and are willing to pay more for it. Cloudways suits established bloggers and publications that want greater control over server resources. Pressable is our choice for developers because its managed platform includes a strong set of WordPress development tools.</p>
<p>SiteGround makes sense for agencies managing several client websites, particularly when collaboration and site management tools are needed. And Bluehost remains the budget choice for smaller WordPress sites where keeping the hosting bill low matters more than having advanced management tools.</p>
<p>No host wins every category because WordPress websites have different requirements. The best option is the provider that has enough performance and resources for the site, includes the tools that will actually be used, and remains affordable after introductory pricing ends. For most WordPress users looking for a balance across those areas, <strong>WordPress.com</strong> gets our overall recommendation.</p>
<h2 id="wordpress-hosting-faq"><span id="WordPress_Hosting_FAQs">WordPress Hosting FAQs</span></h2>
<p>WordPress hosting can look more complicated than it needs to be. Hosting companies use different plan names, prices, limits, and technical terms, even when the services are similar. These answers cover some of the most common questions about choosing and using WordPress hosting.</p>
<ul class="faq">
<li><strong>What is the best hosting for WordPress?</strong><br><strong>WordPress.com</strong> is our best overall WordPress host because it combines managed hosting with good performance, security, backups, CDN access, and WordPress support. <strong>Kinsta</strong> is our choice for managed hosting, <strong>Cloudways</strong> for bloggers, <strong>Pressable</strong> for developers, <strong>SiteGround</strong> for agencies, and <strong>Bluehost</strong> for smaller budgets.</li>
<li><strong>How much should WordPress hosting cost?</strong><br>Basic WordPress hosting can cost only a few dollars per month, while managed hosting may cost $20 to $50 per month or more. Larger sites and stores can cost considerably more. Always check the regular renewal price because introductory rates can make the first term look much cheaper.</li>
<li><strong>Do I need managed WordPress hosting?</strong><br>No. Smaller blogs, portfolios, and business sites can run well on lower-cost hosting. Managed WordPress hosting becomes more useful for busy sites, stores, and businesses that benefit from automatic backups, security, caching, staging, and WordPress-focused support.</li>
<li><strong>Can I change WordPress hosts later?</strong><br>Yes. WordPress sites can be moved between hosting providers. Many hosts provide migration tools or will move the site for you. Keep the old hosting active until the new site has been checked and the domain is pointing to the new server.</li>
<li><strong>Does better hosting make WordPress faster?</strong><br>Better hosting can improve WordPress performance by providing faster servers, more resources, caching, and CDN access. But hosting cannot fix every problem. Large images, heavy themes, slow plugins, external scripts, and database problems can still make a site slow.</li>
<li><strong>Is WordPress hosting different from regular web hosting?</strong><br>WordPress hosting is web hosting set up with WordPress in mind. It may include WordPress updates, caching, backups, security, staging, WP-CLI, and specialist support. WordPress can also run on regular hosting as long as the server meets its requirements.</li>
<li><strong>Do I need separate hosting for WooCommerce?</strong><br>No. WooCommerce runs on WordPress and does not require a separate type of hosting. But stores can need more server resources because carts, checkout pages, customer accounts, orders, and stock changes create more database activity than a typical WordPress site.</li>
<li><strong>How much traffic can WordPress hosting handle?</strong><br>There is no single number. A cached blog and a busy WooCommerce store can use very different resources even with the same number of visitors. Check the host&rsquo;s traffic, bandwidth, storage, CPU, memory, and other resource limits before choosing a plan.</li>
</ul>
<hr>
<section class="hosting-changelog">
<h2><span id="Updates_to_This_Guide">Updates to This Guide</span></h2>
<p>We regularly review this guide to keep pricing, plan details, hosting tools, and recommendations up to date. Major changes are recorded below.</p>
<dl>
<dt>August 26, 2026:</dt>
<dd>Reviewed hosting plan limits, and renewal costs across all recommended providers.</dd>
<dt>August 26, 2026:</dt>
<dd>Article Published.</dd>
</dl>
</section>
<hr>
<div class="topics">
<h2>Related Topics</h2>
</div>
<p>                Read more articles by Paul Andrew
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/the-best-wordpress-hosting-in-2026/">The Best WordPress Hosting in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>6 Best WordPress Plugins for Improving Website Accessibility in 2026</title>
		<link>https://thenokiablog.com/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 25 Aug 2026 17:09:45 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Accessibility]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Plugins]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026/</guid>

					<description><![CDATA[<p>Accessibility should be a top priority when building a website. However, things can degrade over time....</p>
<p>The post <a href="https://thenokiablog.com/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026/">6 Best WordPress Plugins for Improving Website Accessibility in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Accessibility should be a top priority when building a website. However, things can degrade over time. Clients adding content could forget basics such as <code>ALT</code> attributes and logical heading order. Best practices often fall through the cracks as a site ages. Thus, every website requires vigilance.</p>
<p>Part of the challenge is that it&rsquo;s not always easy to identify accessibility issues. It often requires digging deeper to find and fix them. This is where the right WordPress plugin can be useful.</p>
<p>Some plugins allow users to adjust visual elements like font size and color contrast. Even better, some scan your content and alert you to problems. You might be surprised to find out how many issues can pop up in your theme and other installed plugins. The results may lead you to consider different options.</p>
<p>With that in mind, let&rsquo;s look at some of the best WordPress accessibility plugins on the market. They won&rsquo;t fix every issue, but they can help you learn and improve your site.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Accessibility Checker isn&rsquo;t a band-aid for your site&rsquo;s shortcomings. However, it will add missing skip links, focus outlines, and form labels upon request. It also scans your site&rsquo;s content and creates a laundry list of potential issues. It catches common problems, such as ambiguous link text and missing <code>ALT</code> attributes.</p>
<p>Like all automated tools, you may find some false-positive results. As such, a manual inspection is required to verify them. But the plugin offers tips for fixing any issues it finds. The free version scans your site&rsquo;s pages and posts, while the pro version includes custom post types and other handy features.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026.jpg" alt="Accessibility Checker WordPress Plugin" width="900" height="400"></p>
<p>Use WP Accessibility to fix common issues, such as missing language/text direction attributes, missing <code>ARIA</code> labels for navigation, and viewports that don&rsquo;t scale. It will also enforce ALT attributes in the editor and identify media with missing descriptive text.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>These are optional and can be activated as needed. The other big feature here is a front-end toolbar that controls page zooming and color contrast. This gives users more control over how they view your site.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026-1.jpg" alt="WP Accessibility WordPress Plugin" width="900" height="400"></p>
<p>We&rsquo;re starting to see AI used for a variety of purposes, including accessibility improvements. Alt Text AI automatically analyzes uploaded images and generates an <code>ALT</code> description.</p>
<p>The feature can save you a lot of time and effort &ndash; just be sure to double-check to ensure the description is accurate. Note that the plugin requires purchasing AI &ldquo;credits&rdquo; to work. There&rsquo;s a free trial for trying the plugin before you buy.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026-2.jpg" alt="Alt Text AI WordPress Plugin" width="900" height="400"></p>
<p>Are you looking to provide visitors with accessibility options? This plugin adds a widget with a variety of optional feature modules. Users can change the font size and contrast. But there are also tools for switching to a dyslexia-friendly font, highlighting titles, and pausing animations.</p>
<p>You&rsquo;ll also find a feature that helps you create an accessibility statement. Experiment to see which features will benefit your visitors.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026-3.jpg" alt="AccessiYes Accessibility Widget WordPress Plugin" width="900" height="400"></p>
<p>Accessibility is about more than fixing issues &ndash; it&rsquo;s also about adding accessible features. SimpleTOC creates a WCAG 2.2-conforming table of contents for your content. It&rsquo;s a great way to help users navigate longer pages and blog posts. By default, the plugin adds zero CSS or JavaScript to your site.</p>
<p>Instead, it relies on HTML details and summary tags, which work natively in your browser. When it comes to accessibility, simple is always better.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026-4.jpg" alt="SimpleTOC WordPress Plugin" width="900" height="400"></p>
<p>Media embeds, particularly from third-party services, can be difficult to use. Some are bloated with JavaScript and other code that inhibit accessibility. Able Player offers an accessibility-first solution and implements an HTML5 media player via a configurable shortcode.</p>
<p>It works with locally uploaded files and videos from YouTube and Vimeo. The shortcode offers several options impacting the style and functionality of the player.</p>
<h2><span id="Leave_No_User_Behind">Leave No User Behind</span></h2>
<p>Accessibility is not a &ldquo;nice-to-have&rdquo; feature &ndash; it&rsquo;s an obligation. It&rsquo;s also an ongoing process that requires your attention. Thankfully, there are tools to help you find potential issues and fix the most common ones. The WordPress plugins above will help you in your quest. Bonus: Some will add accessible elements that benefit everyone.</p>
<p>No singular plugin can make your site fully accessible. But they can make your job easier. We hope you find a solution to do just that.</p>
<h2><span id="Website_Accessibility_Plugins_at_a_Glance"> Website Accessibility Plugins at a Glance</span></h2>
<div>
<table class="table-wrapped">
<thead>
<tr>
<th><strong>Plugin</strong></th>
<th><strong>Description</strong></th>
<th><strong>Primary Use</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Accessibility Checker</strong></td>
<td>Scans content for accessibility issues and can add missing skip links, focus outlines, and form labels, with guidance for fixing problems.</td>
<td>Accessibility auditing</td>
</tr>
<tr>
<td><strong>WP Accessibility</strong></td>
<td>Fixes common accessibility issues and adds front-end controls for page zooming and color contrast.</td>
<td>Accessibility improvements</td>
</tr>
<tr>
<td><strong>Alt Text AI</strong></td>
<td>Automatically analyzes uploaded images and generates ALT descriptions, with the option to review the generated text for accuracy.</td>
<td>Image ALT text</td>
</tr>
<tr>
<td><strong>AccessiYes Accessibility Widget</strong></td>
<td>Adds visitor controls for font size, contrast, dyslexia-friendly fonts, highlighted titles, paused animations, and other accessibility options.</td>
<td>Visitor accessibility controls</td>
</tr>
<tr>
<td><strong>SimpleTOC</strong></td>
<td>Creates a WCAG 2.2-conforming table of contents using native HTML without adding CSS or JavaScript by default.</td>
<td>Accessible content navigation</td>
</tr>
<tr>
<td><strong>Able Player</strong></td>
<td>Adds an accessibility-focused HTML5 media player for local files, YouTube, and Vimeo using a configurable shortcode.</td>
<td>Accessible media playback</td>
</tr>
</tbody>
</table>
<hr>
<div class="explore-more">
<h2><span id="More_Essential_Free_WordPress_Plugins">More Essential Free WordPress Plugins</span></h2>
<p>here. He recently started a writing service for WordPress products: WP Product Writeup.  He also has an opinion on just about every subject. You can follow his rants on Bluesky @karks.com.</p>
<p>
                        Read more articles by Eric Karkovack
                    </p>

<hr>
</div></div><p>The post <a href="https://thenokiablog.com/6-best-wordpress-plugins-for-improving-website-accessibility-in-2026/">6 Best WordPress Plugins for Improving Website Accessibility in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Building Tactile UX: Honoring Intentional Design With Lottie</title>
		<link>https://thenokiablog.com/building-tactile-ux-honoring-intentional-design-with-lottie/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 11 Aug 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Events]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/building-tactile-ux-honoring-intentional-design-with-lottie/</guid>

					<description><![CDATA[<p>When tasked with building a highly interactive, tactile web experience, the architecture must serve the art...</p>
<p>The post <a href="https://thenokiablog.com/building-tactile-ux-honoring-intentional-design-with-lottie/">Building Tactile UX: Honoring Intentional Design With Lottie</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>When tasked with building a highly interactive, tactile web experience, the architecture must serve the art direction. In this article, Alexey Kopytin explains their architectural rationale for building a digital stress-relief squeeze toy game using Lottie animations, DOM events, and distance-based math to maintain absolute control over their designers&rsquo; intentional motion.</section>
</p>
<p>When front-end developers and UX engineers are tasked with building a web interface that feels tactile, bouncy, or destructive, the industry instinct is almost always the same: reach for a physics engine. Frameworks like Matter.js, Cannon.js, or custom WebGL solutions have become the gold standard for creating immersive, gamified websites.</p>
<p>When our team at Isadora Agency set out to build Stress Release, a digital stress-relief squeeze toy designed to let burnt-out creatives smash, stretch, and distort animated UI characters, we initially explored that route. The goal was to build a <strong>highly tactile experience</strong> where every click yielded a satisfying, squishy reaction.</p>
<p>But as we began prototyping, we realized something crucial: Physics engines produce plausible motion, but in our case, the animators produced <strong>intentional motion</strong>.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>We didn&rsquo;t need our characters to act like realistic rubber balls bouncing uncontrollably around a canvas. We needed them to react in very specific, highly designed ways. So, we scrapped the physics engine entirely.</p>
<p>In this article, we&rsquo;ll break down how we built a real-time stress-relief squeeze toy <strong>without a single line of WebGL or Matter.js</strong>, relying entirely on programmatic Lottie state controls, DOM manipulation, and distance-based math.</p>
<figure><img decoding="async" loading="lazy" width="800" height="600" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie.png" alt="A browser-based game interface displaying a shelf of colorful animated stress-relief characters with playful speech bubbles and a soft pastel UI."><figcaption class="op-vertical-bottom">The Stress Release character shelf introduces players to a collection of animated stress-relief toys, each powered by bespoke Lottie animation states. (Large preview)</figcaption></figure>
<h2 id="the-design-requirements-intentional-motion">The Design Requirements: Intentional Motion</h2>
<p>Our core requirement for <em>Stress Release</em> was <strong>absolute deterministic control</strong>. Our animators had crafted bespoke <code>.json</code> Lottie files that required exact, frame-by-frame sequencing.</p>
<p>For instance, our &lsquo;mega squeeze&rsquo; reaction required a precise 181-frame build-up followed by a specific release sequence. To honor this design, we needed an architecture that wouldn&rsquo;t overwrite the animators&rsquo; crafted keyframes with algorithmic approximations.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>The tighter the click-feedback loop (click &rarr; squish &rarr; score), the more you need deterministic frame control. By choosing programmatic state control using Lottie&rsquo;s native API, we ensured that the interaction layer acted as a flawless trigger for the animation layer.</p>
<figure><img decoding="async" loading="lazy" width="800" height="600" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie-1.png" alt="A collection of illustrated character cards scattered across a purple background, each featuring a unique stress-relief toy character with bold typography and playful styling."><figcaption class="op-vertical-bottom">Character cards showcase the intentionally designed personalities and visual identities that informed each animation sequence and interaction state. (Large preview)</figcaption></figure>
<h2 id="creating-tactile-feedback-mapping-dom-elements-to-lottie-states">Creating Tactile Feedback: Mapping DOM Elements To Lottie States</h2>
<p>Because our architecture relied on Lottie and the standard DOM, rendering is handled directly by the Lottie runtime, which plays the JSON-based vector animations as SVGs internally. We selected elements directly by ID and CSS class, driving their behavior using a combination of Lottie animation segments, CSS transforms, and click-event math.</p>
<p>To achieve a deeply satisfying &ldquo;tactile feel&rdquo; upon hitting a character, we used <strong>radial input mapping</strong>. The first step was converting the click from page coordinates into the character&rsquo;s local coordinate space.</p>
<p>Every click was measured against the character&rsquo;s center point, then translated into score, feedback intensity, and explosion placement:</p>
<div class="break-out">
<pre><code class="language-javascript">// Character's center point in its own coordinate space
var x_center = parseFloat($("#playChar").width()  / 2);
var y_center = parseFloat($("#playChar").height() / 2);

// Click position relative to the character's top-left corner
var offset = $("#playChar").offset(); // document-relative position
var X = parseFloat(e.pageX - offset.left);
var Y = parseFloat(e.pageY - offset.top);

// Vector from center to click point
var a = parseFloat(X - x_center);
var b = parseFloat(Y - y_center);
</code></pre>
</div>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Then we calculate the straight-line distance from the center of the click using the Pythagorean theorem:</p>
<pre><code class="language-javascript">var distance = Math.hypot(a, b);
</code></pre>
<p>That single number drives everything: the score, the feedback intensity, and where the explosion animation appears:</p>
<pre><code class="language-javascript">// Distance zones map to point rewards
if      (distance &lt; 10)  givePts = 100; // bullseye
else if (distance &lt; 40)  givePts = getRndInteger(70, 90);
else if (distance &lt; 70)  givePts = getRndInteger(40, 70);
else if (distance &lt; 100) givePts = getRndInteger(20, 40);
else if (distance &lt; 120) givePts = getRndInteger(10, 20);
else if (distance &lt; 145) givePts = getRndInteger(1,  10);
else givePts = 0; // miss

// Explosion Lottie repositioned to the exact click point
var shiftPosition = window.innerWidth &lt; 1023 ? -20 : 200;
$("#explosionChar").css({
  "margin-left": a + shiftPosition + "px",
  "margin-top":  b + shiftPosition + "px",
});

// Fire the squish animation instantly
explosion.goToAndPlay(0);
</code></pre>
<p>The result is a concentric zone system &mdash; a perfect circle of scoring rings around the character&rsquo;s center, similar to a dartboard. The visual complexity of the Lottie SVG is completely irrelevant to hit detection; the hitbox is always a clean circle. Critically, the explosion Lottie animation is repositioned to (a, b) &mdash; the same vector used for scoring, so it always appears exactly where the player clicked. This spatial accuracy creates the tactile <em>&ldquo;I hit that&rdquo;</em> sensation entirely through math and DOM positioning.</p>
<figure><img decoding="async" loading="lazy" width="800" height="600" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie-2.png" alt="A gameplay screen showing a cartoon character reacting to a click impact with particle effects, score feedback, and a visible interaction point."><figcaption class="op-vertical-bottom">Distance-based click detection and synchronized Lottie reactions create the tactile sensation of physically hitting the character. (Large preview)</figcaption></figure>
<h2 id="interaction-handling-controlling-the-narrative">Interaction Handling: Controlling The Narrative</h2>
<p>Because the experience used DOM-managed SVG elements, desktop clicks and mobile taps could be handled directly through native event listeners. This avoided extra raycasting or coordinate remapping layers, while keeping the interaction model aligned with how the animations were rendered.</p>
<p>Since the game requires a visual reaction at a specific point, Lottie handles all the squish and bounce feelings internally through its animation curves. Each character has a defined set of animation sections (idle loops, reaction frames, and end states) stored as frame ranges. When a click lands, we jump directly to the exact segment that matches the current game state:</p>
<pre><code class="language-javascript">// Animation sections defined as frame ranges per character
const play_segments = [{
  charId: 0,
  sections: {
    idle:     [0,  40],   // looping idle state
    squeeze1: [41, 80],   // light reaction
    squeeze2: [81, 120],  // medium reaction
    squeeze3: [121, 160], // heavy reaction
  },
  playOrder: ["squeeze1", "squeeze2", "squeeze3"],
  endAnimation: [161, 200]
}];
</code></pre>
<p>On every click, we advance through the play order and fire the next segment:</p>
<div class="break-out">
<pre><code class="language-javascript">function stepAnim() {
  let p         = play_segments[0];
  let i         = p["playOrder"][curr_order_play];
  let playNow   = p["sections"][i];

  playChar.stop();                    // halt current segment immediately
  playChar.loop = false;              // no looping - play once and stop
  playChar.playSegments(playNow, true); // jump to exact frames, force immediately

  curr_order_play++;
  canPlayAnim = 0;                    // lock out further clicks mid-animation

  if (curr_order_play &gt; p["playOrder"].length - 1) {
    curr_order_play = 0;              // cycle back to start of sequence
  }
}
</code></pre>
</div>
<p>When the segment completes, control returns to the idle loop:</p>
<pre><code class="language-javascript">playChar.onComplete = function() {
  canPlayAnim = 1;          // unlock clicks again
  if (!playEnd) playIdleState();
};

function playIdleState() {
  playChar.playSegments([0, 40], true); // return to idle loop
  playChar.loop = true;
}
</code></pre>
<figure><img decoding="async" loading="lazy" width="800" height="600" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie-3.png" alt="A gameplay interface showing a heavily distorted animated character exploding outward with confetti-like effects and score indicators during interaction."><figcaption class="op-vertical-bottom">By triggering precise Lottie animation segments programmatically, the interaction layer maintains deterministic control over every squash and distortion state. (Large preview)</figcaption></figure>
<p>And for the mega squeeze build-up, the bar loops on a specific frame range until triggered:</p>
<pre><code class="language-javascript">// Loop the "ready to release" frames until player activates
indikL.loop = true;
indikL.playSegments([181, 302], true);

// On activation - play the release sequence once
indikL.loop = false;
indikL.playSegments([96, 396], true);
indikL.goToAndStop(0, true); // hard reset after completion
</code></pre>
<h2 id="the-responsive-benefit-of-dom-elements">The Responsive Benefit Of DOM Elements</h2>
<p>Another major factor in our architectural decision was <strong>responsive behavior</strong>. Because we built <em>Stress Release</em> in the DOM, we bypassed the complexities of scaling bounding boxes and collision vectors across different devices.</p>
<p>We handled responsive resizing entirely through <strong>CSS variables</strong>. By recalculating CSS custom properties on every resize, the layout simply reacts to the updated variables, and the Lottie SVGs scale naturally inside their containers without losing their state:</p>
<pre><code class="language-javascript">const appHeight = () =&gt; {
  const doc = document.documentElement;
  doc.style.setProperty("--doc-height", `${window.innerHeight}px`);
  doc.style.setProperty("--doc-width", `${doc.clientWidth}px`);
};
window.addEventListener("resize", appHeight);
appHeight(); // run immediately on init
</code></pre>
<h2 id="mobile-performance-optimization-the-cost-of-lottie">Mobile Performance Optimization: The Cost Of Lottie</h2>
<p>While this architecture gave us total control over the art direction, it introduced a different challenge: <strong>file size</strong>.</p>
<p>Lottie JSON files can be heavy. We had 21 different character animations, plus multiple explosion variants that all needed to load. To ensure the experience remained fluid &mdash; especially on mobile devices &mdash; we implemented a few aggressive optimization strategies:</p>
<ul>
<li><strong>Connection monitoring</strong><br>We tracked initial asset load time using <code>performance.now()</code> to detect slow connections and flag when load times exceeded 5 seconds.</li>
<li><strong>Sequential asset loading</strong><br>Rather than initialising all 21 character animations simultaneously, we load them in pairs using await, advancing only when each pair completes. This prevents a burst of simultaneous network requests and render work from blocking the browser on low-end devices.</li>
<li><strong>Aggressive memory management</strong><br>Instead of keeping our heavy explosion animations in memory, we destroy and recreate them on the fly. This trades a tiny instantiation cost for a much lower idle memory footprint.</li>
<li><strong>Dynamic quality reduction</strong><br>Quality reduction is a single API call applied immediately after each shelf character loads. The key is applying different quality levels depending on the character&rsquo;s role in the scene:</li>
</ul>
<div class="break-out">
<pre><code class="language-javascript">// Shelf screen - 21 animations playing simultaneously
shelf = lottie.loadAnimation({
  container: document.getElementById("charShelf" + i),
  renderer: "svg",
  loop: true,
  autoplay: true,
  path: "assets/shelf/" + shelfFolders[i] + "/" + shelfFolders[i] + ".json",
});
lottie.setQuality(0.5); // 50% quality - reduces interpolation calculations
shelf.setSpeed(0.6);    // 60% speed - fewer frame calculations per second

// Play screen - single focused character
playChar = lottie.loadAnimation({
  container: document.getElementById("playChar"),
  renderer: "svg",
  loop: true,
  autoplay: true,
  path: chosenChar.url,
});
lottie.setQuality(1); // full quality - only one animation at a time
</code></pre>
</div>
<h2 id="conclusion-choosing-the-right-tech-for-the-design">Conclusion: Choosing The Right Tech For The Design</h2>
<p>When determining the stack for a gamified web experience, it is critical to let the design requirements dictate the technology.</p>
<figure><img decoding="async" loading="lazy" width="800" height="600" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie-4.png" alt="A stylized gameplay screen featuring a stretched animated character against a dramatic swirling background with scoring UI and interaction effects."><figcaption class="op-vertical-bottom">The &ldquo;Mega Squeeze&rdquo; state combines layered animation sequences, background transitions, and timed interaction feedback to heighten the sense of impact. (Large preview)</figcaption></figure>
<p>Because our interactions required bespoke, highly controlled visual reactions, we opted for <strong>programmatic state control</strong> over emergent simulation. This decision empowered the animators to dictate the exact feel of the experience, leaving the code to do what it does best: listen, calculate, and trigger.</p>
<blockquote class="pull-quote">
<p>By mapping Lottie&rsquo;s native timeline capabilities to the DOM, you can deliver incredibly rich, tactile user experiences while maintaining absolute control over the art direction.</p>
</blockquote>
<h3 id="further-resources">Further Resources</h3>
<p>Want to try implementing this yourself, or see exactly how it feels in the browser? Check out these resources:</p>
<ul>
<li><strong>Play with the code.</strong><br>We have prepared a simplified demo example on CodePen demonstrating a character reacting to a click using <code>playSegments()</code>.</li>
<li><strong>See the final product.</strong><br>Check out the live Stress Release site to see all 21 characters and the optimization strategies in action.</li>
<li><strong>Read the docs.</strong><br>Explore the official Lottie Web documentation to learn more about the player controls we utilized. Specifically, explore <code>loadAnimation()</code>, <code>playSegments()</code>, <code>setSpeed()</code>, and <code>setQuality()</code> &mdash; the four methods that power the entire interaction layer described in this article.</li>
</ul>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/building-tactile-ux-honoring-intentional-design-with-lottie-5.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/building-tactile-ux-honoring-intentional-design-with-lottie/">Building Tactile UX: Honoring Intentional Design With Lottie</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Hide WordPress Blocks Based on Device</title>
		<link>https://thenokiablog.com/how-to-hide-wordpress-blocks-based-on-device/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Sun, 09 Aug 2026 09:42:46 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Learn WordPress]]></category>
		<category><![CDATA[Scrolling]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Block Editor]]></category>
		<category><![CDATA[WordPress Designer]]></category>
		<category><![CDATA[WordPress Developer]]></category>
		<category><![CDATA[WordPress Gutenberg]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/how-to-hide-wordpress-blocks-based-on-device/</guid>

					<description><![CDATA[<p>Responsive controls are a long-sought-after feature for the WordPress Block Editor. Changing a page&#8217;s design or...</p>
<p>The post <a href="https://thenokiablog.com/how-to-hide-wordpress-blocks-based-on-device/">How to Hide WordPress Blocks Based on Device</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Responsive controls are a long-sought-after feature for the WordPress Block Editor. Changing a page&rsquo;s design or layout based on a user&rsquo;s device is a staple of modern web design. Yet, doing so in WordPress has typically required a third-party solution, such as a page builder. Thankfully, that&rsquo;s changing.</p>
<p>The WordPress project is slowly but surely inching toward responsive block settings. Version 6.9 introduced the Block Visibility feature, allowing you to temporarily disable a block without deleting it from a post. WordPress 7.0 took it a step further by adding options to hide a block based on device.</p>
<p>Perhaps it&rsquo;s a niche feature. But it&rsquo;s also quite handy for targeting mobile or desktop users with specific blocks. And it&rsquo;s also a gateway to more responsive controls landing in WordPress 7.1.</p>
<p>Today&rsquo;s tip will show you how easy it is to show or hide a block based on a user&rsquo;s device. Here we go!</p>
<h2><span id="Sample_Project_Simplify_a_Hero_Area_for_Mobile_Users">Sample Project: Simplify a Hero Area for Mobile Users</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Here&rsquo;s a common scenario: Your website has a large hero area, complete with a high-resolution image, text, and a call to action (CTA). It looks great on a desktop device but is clunky on a phone. The image is too big, and there&rsquo;s too much text for users to digest. What to do?</p>
<p>The responsive Block Visibility controls will make this a piece of cake. We&rsquo;ll create two hero areas &ndash; one for desktop and another optimized for mobile. The result will be a better user experience for everyone.</p>
<h3><span id="Step_1_Create_Desktop_and_Mobile_Hero_Areas">Step 1: Create Desktop and Mobile Hero Areas</span></h3>
<p>The first step is to create the two hero areas for our page. We&rsquo;ll grab one from the WordPress Block Pattern library and see what we can do with it.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device.webp" alt="A hero area optimized for desktop screens." width="900" height="400"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>Our desktop hero area is beautiful on the big screen! It should also work well on tablets, such as an iPad. However, it may be overwhelming for mobile users.</p>
<p>Let&rsquo;s simplify. We duplicated the desktop hero and made a few changes:</p>
<ul>
<li>We replaced the image with a cropped version that is optimized for smaller screens.</li>
<li>We centered the text and CTA.</li>
<li>We replaced the three columns of text with one, shorter passage.</li>
<li>Finally, we tightened up the spacing to reduce scrolling.</li>
</ul>
<p>The mobile hero offers the same immersive look without the extra bulk.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device-1.webp" alt="The revised hero area is optimized for mobile screens." width="900" height="400"></p>
<h3><span id="Step_2_Assign_Hero_Areas_to_Their_Respective_Devices">Step 2: Assign Hero Areas to Their Respective Devices</span></h3>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>As of now, our page has two hero areas, each contained within a Group block. The next step is to set one of them to display on desktop/tablet devices, and the other on mobile. We&rsquo;ll use the Block Visibility feature to make it happen.</p>
<p><strong>Desktop/Tablet Devices:</strong></p>
<ul>
<li>Click on the <strong>Desktop Hero</strong> block we created.</li>
<li>Click on the <strong>Options</strong> menu (<strong>&#8942;</strong>) and select <strong>Hide Block</strong>.</li>
<li>Choose the <strong>Hide on Mobile</strong> option.</li>
<li>Click the <strong>Apply</strong> button and <strong>save the page</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device-2.webp" alt="Hiding the desktop version of our hero area on mobile devices." width="900" height="600"></p>
<p><strong>Mobile Devices:</strong></p>
<ul>
<li>Click on the <strong>Mobile Hero</strong> block we created.</li>
<li>Click on the <strong>Options</strong> menu (<strong>&#8942;</strong>) and select <strong>Hide Block</strong>.</li>
<li>We&rsquo;ll choose two options this time: <strong>Hide on Desktop</strong>, <strong>Hide on Tablet</strong></li>
<li>Click the <strong>Apply</strong> button and <strong>save the page</strong>.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device-3.webp" alt="Our mobile hero area is now hidden on desktop and tablet devices." width="900" height="600"></p>
<p>You may notice that the <strong>mobile hero</strong> <strong>no longer displays</strong> on the Block Editor canvas. That&rsquo;s the desired result, as it won&rsquo;t be in the way when working in Desktop preview mode.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device-4.webp" alt="We see the correct hero area in Desktop preview mode." width="900" height="400"></p>
<p>Switch to <strong>Mobile</strong> preview mode, and you&rsquo;ll see the opposite effect. The desktop hero is hidden, allowing the mobile version to take over. You can edit these blocks when in the appropriate preview mode.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-to-hide-wordpress-blocks-based-on-device-5.webp" alt="Mobile preview mode hides the desktop version." width="900" height="400"></p>
<p>Note that you can also view and edit these blocks using the Document Overview (List View) feature (<code>Shift+Alt+O</code>). Select the block, click on the <strong>Options</strong> menu (<strong>&#8942;</strong>), and select <strong>Show</strong> from the menu. You can hide it again once you&rsquo;re finished editing.</p>
<p>Oh, and be sure to test on different devices! It&rsquo;s not enough to shrink your desktop&rsquo;s browser window. You can use your browser&rsquo;s dev tools to emulate a mobile device if you don&rsquo;t have one handy.</p>
<h2><span id="Use_Different_WordPress_Blocks_on_Different_Devices">Use Different WordPress Blocks on Different Devices</span></h2>
<p>It&rsquo;s often the little extras that make the biggest difference. Targeting different devices via the Block Visibility feature is a prime example. Its release didn&rsquo;t draw much fanfare. However, it makes WordPress more flexible for designers.</p>
<p>Before WordPress 7.0, we&rsquo;d have to work around this limitation. That could mean installing a specialized plugin or writing custom CSS rules in a theme. Now, we&rsquo;re only a few clicks away from choosing which blocks display on a given device.</p>
<p>The feature saves us time, improves the user experience, and won&rsquo;t hog server resources. Most of all, it&rsquo;s a sign of things to come for WordPress.</p>
<div class="darp-related-posts">
<h2>Related Articles</h2>
</div>
<div class="topics">
<h2>Related Topics</h2>
</div>
<p>                here. He recently started a writing service for WordPress products: WP Product Writeup.  He also has an opinion on just about every subject. You can follow his rants on Bluesky @karks.com.</p>
<p>
                        Read more articles by Eric Karkovack
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/how-to-hide-wordpress-blocks-based-on-device/">How to Hide WordPress Blocks Based on Device</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How Baseline Can Help You Ship Less JavaScript</title>
		<link>https://thenokiablog.com/how-baseline-can-help-you-ship-less-javascript/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 07 Aug 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Scrolling]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/how-baseline-can-help-you-ship-less-javascript/</guid>

					<description><![CDATA[<p>The gap between &#8220;you need a library for this&#8221; and &#8220;the browser does this&#8221; keeps closing....</p>
<p>The post <a href="https://thenokiablog.com/how-baseline-can-help-you-ship-less-javascript/">How Baseline Can Help You Ship Less JavaScript</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>The gap between &ldquo;you need a library for this&rdquo; and &ldquo;the browser does this&rdquo; keeps closing. A practical guide to auditing your dependencies and finding what the web platform can now handle for you.</section>
</p>
<p>Most of us install a dependency once and never look at it again. It does its job, the tests pass, and we move on. But the web platform keeps moving too, and a surprising number of the libraries sitting in your <code>package.json</code> today are now built into the browser.</p>
<p>In a typical mid-sized JavaScript app, you can often find somewhere between 60KB and 90KB (minified and gzipped) of dependencies that the platform can now handle on its own. Date and number formatting, HTTP requests, modals, tooltips, deep cloning, grouping arrays: these were all real gaps a few years ago. A lot of them aren&rsquo;t gaps anymore.</p>
<p>The reason those libraries stick around isn&rsquo;t laziness. It&rsquo;s that most teams don&rsquo;t re-audit their dependencies on a Baseline cadence, or are simply not aware of how fast browsers are shipping these days. You check <code>npm audit</code> for security, but <em>is this library still doing something the browser can&rsquo;t?</em> is a question that rarely gets asked. So the libraries stay.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>In this article, we&rsquo;ll run that audit together. Instead of going through dependencies one by one, we&rsquo;ll work in clusters, because the wins tend to come in groups. We&rsquo;ll do the bundle math, build a small decision framework you can reuse, and stay honest about the cases where the platform still falls short. By the end, you&rsquo;ll have a repeatable process you can run on your own <code>package.json</code>.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="340" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-baseline-can-help-you-ship-less-javascript.png" alt="Git diff showing removed npm dependencies highlighted in red from a package.json file, illustrating how Baseline helps reduce JavaScript bundle size."><figcaption class="op-vertical-bottom">(Large preview)</figcaption></figure>
<h2 id="what-baseline-actually-means">What &ldquo;Baseline&rdquo; Actually Means</h2>
<p>Before we start deleting things, let&rsquo;s quickly recap what Baseline is. Feel free to skip this section if you&rsquo;re already familiar.</p>
<p>Baseline is a project from the WebDX Community Group that tells you, in plain terms, how safe a web feature is to use across the major browsers (Chrome, Edge, Firefox, and Safari). A feature can be in one of three states:</p>
<ul>
<li><strong>Limited availability</strong><br>The feature hasn&rsquo;t shipped in all the major engines yet. Not safe to rely on without a fallback.</li>
<li><strong>Baseline Newly available</strong><br>The feature has just landed in all the major engines. It works for users on up-to-date browsers, but older devices in the wild may not have it yet.</li>
<li><strong>Baseline Widely available</strong><br>The feature has been in all the major engines for 30 months. At this point, you can reach for it without much thought.</li>
</ul>
<p>That 30-month gap between &ldquo;Newly&rdquo; and &ldquo;Widely&rdquo; matters a lot for this audit. A feature that&rsquo;s Widely available is something you can usually drop a library for today. A feature that&rsquo;s only Newly available is something you can drop a library for <em>if</em> you check your audience first, or if you&rsquo;re comfortable with a small feature check. We&rsquo;ll treat those two cases differently throughout.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>You can look any feature up on webstatus.dev, on MDN (every reference page shows a Baseline badge near the top), or programmatically with the <code>web-features</code> npm package. We&rsquo;ll use all three later when we run the audit on a real project.</p>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-baseline-can-help-you-ship-less-javascript-1.png" alt="Feature Panel" width="481" height="698"></div>


<h2 id="a-decision-framework-before-you-delete-anything">A Decision Framework Before You Delete Anything</h2>
<p>It&rsquo;s tempting to read <em>&ldquo;the browser does this now&rdquo;</em> and start ripping libraries out. Let&rsquo;s not do that. A swap that looks free on paper can quietly break things for a chunk of your users, or cost you a feature you were relying on without realizing it.</p>
<p>So before dropping any library, ask three questions. We&rsquo;ll reuse these in every cluster below.</p>
<p><strong>1. Is the replacement Baseline-safe for</strong> <strong><em>my</em></strong> <strong>audience?</strong></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Not <em>&ldquo;is it Baseline&rdquo;</em> in the abstract, but <em>&ldquo;is it safe for the people who actually use my app.&rdquo;</em> If the native feature is Widely available, this is usually a yes. If it&rsquo;s only Newly available, check your analytics or your <code>browserslist</code> config and see what share of your users would miss out. A B2B dashboard where everyone&rsquo;s on the latest browser is a very different situation from a public-facing site with a long tail of old Android devices.</p>
<p><strong>2. What does the swap actually cost?</strong></p>
<p>Dropping a library isn&rsquo;t always free. Sometimes the native feature isn&rsquo;t supported widely enough yet, so you&rsquo;d reach for a polyfill. If that polyfill is heavier than the library you&rsquo;re removing, you&rsquo;ve made your bundle <em>bigger</em>, unless you load it conditionally. We&rsquo;ll see exactly this with Temporal later.</p>
<p><strong>3. Does the platform feature cover my real use case?</strong></p>
<p>Libraries often do more than the platform feature they resemble. <code>axios</code> isn&rsquo;t just <code>fetch</code> with automatic JSON parsing; it has interceptors, request cancellation, and retries. If you&rsquo;re using those, a straight swap to <code>fetch</code> will leave you reimplementing them. Check what you actually use before assuming it&rsquo;s a drop-in replacement.</p>
<p>Keep these three in mind. Every cluster below is really just these questions applied to a different corner of your dependencies.</p>
<h2 id="cluster-1-internationalization-the-biggest-drop-today-win">Cluster 1: Internationalization (The Biggest Drop Today Win)</h2>
<p>This is the cluster where you&rsquo;ll usually find the most KBs sitting on top of features that are already Widely available. The browser ships a whole family of formatting tools under the <code>Intl</code> namespace, and a lot of small, popular libraries became unnecessary.</p>
<p>Here are the usual suspects and what replaces them:</p>
<ul>
<li><code>timeago.js</code> (1 KB gz) &rarr; <code>Intl.RelativeTimeFormat</code></li>
<li><code>pluralize</code> (2.3 KB gz) &rarr; <code>Intl.PluralRules</code></li>
<li><code>numeral</code> (3.9 KB gz) &rarr; <code>Intl.NumberFormat</code></li>
<li><code>humanize-duration</code> (6.6 KB gz) &rarr; <code>Intl.DurationFormat</code></li>
<li>list-joining helpers &rarr; <code>Intl.ListFormat</code></li>
</ul>
<p>Let&rsquo;s walk through some of them.</p>
<h3 id="relative-time">Relative Time</h3>
<p><code>timeago.js</code> exists to turn a timestamp into <em>&ldquo;3 hours ago&rdquo;</em>. <code>Intl.RelativeTimeFormat</code> does the same thing, and it&rsquo;s Baseline Widely available.</p>
<pre><code class="language-javascript">const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });

rtf.format(-1, "day"); // "yesterday"
rtf.format(3, "hour"); // "in 3 hours"
rtf.format(-2, "week"); // "2 weeks ago"
</code></pre>
<p>The <code>numeric: "auto"</code> option is the nice touch here: it gives you &ldquo;yesterday&rdquo; instead of &ldquo;1 day ago&rdquo; where the language has a word for it. You pass a number and a unit, and you get a localized string back.</p>
<p>You may be wondering about the one thing <code>timeago.js</code> does that this snippet doesn&rsquo;t: it picks the unit for you. Given a date, <code>timeago.js</code> decides whether to say &ldquo;seconds&rdquo; or &ldquo;days.&rdquo; <code>Intl.RelativeTimeFormat</code> expects you to do that part. It&rsquo;s a few lines of arithmetic (work out the difference, find the largest unit that fits), and once you&rsquo;ve written that helper, you don&rsquo;t need the library anymore.</p>
<h3 id="numbers-currency-and-lists">Numbers, Currency, And Lists</h3>
<p><code>Intl.NumberFormat</code> covers most of what number-formatting libraries do: thousands separators, currency, percentages, and compact notation.</p>
<div class="break-out">
<pre><code class="language-javascript">new Intl.NumberFormat("en-US").format(1234567.89);
// "1,234,567.89"

new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" }).format(
  1234.5,
);
// "$1,234.50"

new Intl.NumberFormat("en", { notation: "compact" }).format(1200000);
// "1.2M"
</code></pre>
</div>
<p>And <code>Intl.ListFormat</code>, Widely available, handles the &ldquo;join an array into a sentence&rdquo; problem, including the Oxford comma, which is the kind of thing people write fiddly helper functions for:</p>
<div class="break-out">
<pre><code class="language-javascript">const lf = new Intl.ListFormat("en", { style: "long", type: "conjunction" });

lf.format(["Alice", "Bob", "Carol"]);
// "Alice, Bob, and Carol"
</code></pre>
</div>
<h3 id="the-one-caveat-durations">The One Caveat: Durations</h3>
<p><code>humanize-duration</code> turns a number of milliseconds into <em>&ldquo;1 hour, 30 minutes&rdquo;</em>. The platform equivalent is <code>Intl.DurationFormat</code>:</p>
<pre><code class="language-javascript">const df = new Intl.DurationFormat("en", { style: "long" });

df.format({ hours: 1, minutes: 30 });
// "1 hour, 30 minutes"
</code></pre>
<p>One thing to keep in mind is that <code>Intl.DurationFormat</code> is Baseline <em>Newly</em> available at the time of writing, not Widely available. It landed in all the major engines in March 2025, and it&rsquo;s on track to become Widely available in 2027. So this one fails question 1 for broad-audience apps unless you check your traffic first or add a fallback. For an internal tool on modern browsers, it&rsquo;s fine today. For a public site with old devices, give it another year or guard it with a feature check.</p>
<h3 id="the-math-on-this-cluster">The Math On This Cluster</h3>
<p>If your app uses the full set (<code>humanize-duration</code>, <code>timeago.js</code>, <code>pluralize</code>, <code>numeral</code>), that&rsquo;s roughly <strong>14 KB gzipped</strong> of dependencies, most of it replaceable right now with Widely available APIs. The internationalization cluster is usually the easiest win in the whole audit.</p>
<h2 id="cluster-2-http-clients">Cluster 2: HTTP Clients</h2>
<p>This cluster is more nuanced, so it&rsquo;s a good one to slow down on.</p>
<p>The browser HTTP libraries people reach for are <code>axios</code> (17 KB gz) and <code>superagent</code> (19 KB gz). For most requests, <code>fetch</code> plus <code>AbortController</code> covers what you need, and both are Widely available.</p>
<p>A basic GET looks like this:</p>
<pre><code class="language-javascript">// axios
const { data } = await axios.get("/api/users");

// fetch
const res = await fetch("/api/users");
const data = await res.json();
</code></pre>
<p>The one extra line (<code>res.json()</code>) is <code>fetch</code> being explicit where <code>axios</code> was implicit. That&rsquo;s the pattern across this whole cluster: <code>fetch</code> does less for you by default, and you decide whether you want the things it leaves out.</p>
<h3 id="timeouts">Timeouts</h3>
<p><code>axios</code> has a <code>timeout</code> option. <code>fetch</code> has <code>AbortSignal.timeout()</code>:</p>
<pre><code class="language-javascript">const res = await fetch("/api/users", {
  signal: AbortSignal.timeout(5000), // abort after 5 seconds
});
</code></pre>
<h3 id="where-fetch-doesn-t-replace-axios">Where <code>fetch</code> Doesn&rsquo;t Replace <code>axios</code></h3>
<p>This is where question 3 does most of the work, so let&rsquo;s be specific about the gaps:</p>
<ul>
<li><strong><code>fetch</code> doesn&rsquo;t reject on HTTP errors.</strong><br>A <code>404</code> or <code>500</code> is a resolved promise, not a rejection. You have to check <code>res.ok</code> yourself. <code>axios</code> rejects on any non-2xx status.</li>
<li><strong>No interceptors.</strong><br>If you rely on <code>axios</code> interceptors to attach auth tokens or handle 401s in one place, <code>fetch</code> has no equivalent. You&rsquo;d wrap <code>fetch</code> in your own function or class to get the same behavior.</li>
<li><strong>No automatic retries.</strong><br><code>axios</code> (with a plugin) can retry failed requests. With <code>fetch</code>, that&rsquo;s your code to write.</li>
<li><strong>No upload progress.</strong><br><code>fetch</code> still can&rsquo;t report upload progress in a first-class way. If you have a file uploader with a progress bar, that&rsquo;s a real reason to keep a library.</li>
</ul>
<p>I personally heavily rely on <em>interceptors</em> in my interactive online courses, such as Learn JavaScript, and I have solved that for years using a custom <code>class</code> on top of <code>fetch</code>. I&rsquo;ve shipped this to millions of users and have seen lots of success with it.</p>
<p>None of these are hard to rebuild, and most apps only use one or two of them. But this is exactly the kind of cluster where you shouldn&rsquo;t do a blind find-and-replace. Look at how you actually use your HTTP client first. If it&rsquo;s plain GETs and POSTs, dropping <code>axios</code> for a thin <code>fetch</code> wrapper saves you about <strong>17 KB gzipped</strong>.</p>
<h2 id="cluster-3-ui-primitives">Cluster 3: UI Primitives</h2>
<p>This cluster has some of the most satisfying swaps, because the platform features don&rsquo;t just match the libraries, they&rsquo;re often more accessible than what teams ship by hand.</p>
<p>The libraries here are modal dialogs (something like <code>a11y-dialog</code>, 1.8 KB gz), tooltip and popover libraries (<code>tippy.js</code>, 14 KB gz, which bundles Popper for positioning), <code>focus-trap</code> (6.6 KB gz), and <code>body-scroll-lock</code> (1.3 KB gz). They get replaced by three platform features: the <code>&lt;dialog&gt;</code> element, the Popover API, and CSS anchor positioning.</p>
<h3 id="the-dialog-element">The <code>&lt;dialog&gt;</code> Element</h3>
<p>A huge amount of modal-related code exists to solve accessibility problems: trapping focus inside the modal, closing on <code>Escape</code>, restoring focus to the previous element when the dialog is closed, and rendering above everything else. The <code>&lt;dialog&gt;</code> element, Widely available, does all of that for you.</p>
<div class="break-out">
<pre><code class="language-javascript">&lt;dialog id="confirm"&gt;
  &lt;form method="dialog"&gt;
    &lt;p&gt;Delete this file?&lt;/p&gt;
    &lt;button value="cancel"&gt;Cancel&lt;/button&gt;
    &lt;button value="delete"&gt;Delete&lt;/button&gt;
  &lt;/form&gt;
&lt;/dialog&gt;

const dialog = document.querySelector("#confirm");

dialog.showModal(); // focus moves in, background goes inert, Escape closes it

dialog.addEventListener("close", () =&gt; {
  console.log(dialog.returnValue); // "cancel" or "delete"
});
</code></pre>
</div>
<p>Calling <code>showModal()</code> does the work that <code>focus-trap</code> was installed for: focus moves into the dialog, the rest of the page becomes inert so you can&rsquo;t tab out of it, <code>Escape</code> closes it, and focus returns to the element that opened it. The dialog renders in the browser&rsquo;s <em>Top layer</em>, so you don&rsquo;t fight <code>z-index</code>. You also get a <code>::backdrop</code> pseudo-element to style the overlay.</p>
<p>That single element can replace your modal library <em>and</em> <code>focus-trap</code>. The one piece it doesn&rsquo;t handle on its own is locking the background from scrolling, which is what <code>body-scroll-lock</code> was for. That&rsquo;s now one line of CSS:</p>
<pre><code class="language-css">body:has(dialog:modal) {
  overflow: hidden;
}
</code></pre>
<p>If you&rsquo;re wondering why we&rsquo;re using <code>dialog:modal</code> instead of <code>dialog[open]</code>, it&rsquo;s because the <code>open</code> attribute is set as soon as you call <code>show()</code>, but the dialog isn&rsquo;t actually <em>modal</em> so you don&rsquo;t want to lock scrolling yet. The <code>:modal</code> pseudo-class is only true when the dialog is actually <em>modal</em>, which is the case when you call <code>showModal()</code>.</p>
<p>So three libraries collapse into one element and one CSS rule.</p>
<h3 id="popover-api-and-anchor-positioning">Popover API And Anchor Positioning</h3>
<p>For things that aren&rsquo;t full modals (dropdown menus, tooltips, the small floating panels that <code>tippy.js</code> handles), the Popover API gives you light-dismiss behavior, top-layer rendering, and <code>Escape</code>-to-close with no JavaScript at all:</p>
<pre><code class="language-html">&lt;button popovertarget="menu" id="options"&gt;Options&lt;/button&gt;

&lt;div id="menu" popover&gt;
  &lt;!-- menu content --&gt;
&lt;/div&gt;
</code></pre>
<p>Clicking the button toggles the popover. Clicking outside it closes it. It&rsquo;s Baseline Newly available (since January 2025).</p>
<p>The other half of what a tooltip library does is <em>positioning</em>: keeping the floating element pinned to its trigger and flipping it when it would overflow the viewport. That&rsquo;s what Popper (bundled inside <code>tippy.js</code>) handles, and it&rsquo;s now a CSS feature called anchor positioning. Here it pins the same <code>#menu</code> popover directly under its trigger button:</p>
<pre><code class="language-css">#options {
  anchor-name: --trigger;
}

.tooltip {
  position-anchor: --trigger;
  position-area: top;
  margin: 0;
}
</code></pre>
<p>Anchor positioning is the newest feature in this article. It became Baseline Newly available in January 2026, when Firefox 147 shipped it (Chrome had it since version 125, and Safari since version 26). Because it&rsquo;s this fresh, it&rsquo;s squarely a question-1 feature: great for modern audiences, but check your traffic, and note that some of the more advanced parts (like position-try fallbacks) have uneven support across versions. Keep a sensible fallback for older browsers.</p>
<p>Between <code>&lt;dialog&gt;</code>, the Popover API, and anchor positioning, the UI primitives cluster (tooltip library, modal library, <code>focus-trap</code>, <code>body-scroll-lock</code>) adds up to roughly <strong>24 KB gzipped</strong>, and you come out the other side with better accessibility defaults than most hand-rolled solutions.</p>
<h2 id="cluster-4-lodash-utilities">Cluster 4: Lodash Utilities</h2>
<p>Lodash is rarely imported whole anymore, but its individual functions show up everywhere, either as the full <code>lodash</code> package (25 KB gz) or as standalone installs like <code>lodash.clonedeep</code> and <code>lodash.groupby</code>. Several of the most common ones now have direct platform equivalents.</p>
<h3 id="grouping">Grouping</h3>
<p><code>lodash.groupby</code> reorganizes an array into an object keyed by some property. <code>Object.groupBy</code> does exactly that:</p>
<pre><code class="language-javascript">const products = [
  { name: "Apple", category: "fruit" },
  { name: "Carrot", category: "vegetable" },
  { name: "Banana", category: "fruit" },
];

const grouped = Object.groupBy(products, (product) =&gt; product.category);
// {
//   fruit: [{ name: "Apple", ... }, { name: "Banana", ... }],
//   vegetable: [{ name: "Carrot", ... }],
// }
</code></pre>
<p>There&rsquo;s also <code>Map.groupBy</code> for when you want a <code>Map</code> instead of a plain object (handy if your keys aren&rsquo;t strings). Both are Baseline Newly available, since March 2024, and on track to become Widely available in late 2026.</p>
<h3 id="deep-cloning">Deep Cloning</h3>
<p><code>lodash.clonedeep</code> makes a deep copy of an object. <code>structuredClone</code> is the platform version, and it&rsquo;s Widely available:</p>
<pre><code class="language-javascript">const original = { user: { name: "Sam", roles: ["admin"] } };

const copy = structuredClone(original);
copy.user.roles.push("editor");

original.user.roles; // ["admin"] (unchanged)
</code></pre>
<p><code>structuredClone</code> handles the tricky cases that trip up <code>JSON.parse(JSON.stringify(...))</code>: it clones <code>Date</code>, <code>Map</code>, <code>Set</code>, <code>ArrayBuffer</code>, and circular references correctly. The limit to know about (question 3 again) is that it can&rsquo;t clone functions, DOM nodes, or class instances; it throws on functions and drops the prototype on class instances. For plain data, which is what most people deep-clone, it&rsquo;s a clean replacement.</p>
<h3 id="set-operations">Set Operations</h3>
<p>If you&rsquo;ve ever pulled in a Lodash helper for <code>union</code>, <code>intersection</code>, or <code>difference</code>, the <code>Set</code> object now has these built in. They&rsquo;re Baseline Newly available, since June 2024:</p>
<pre><code class="language-javascript">const admins = new Set(["sam", "alex", "jo"]);
const editors = new Set(["alex", "kim"]);

admins.intersection(editors); // Set { "alex" }
admins.union(editors); // Set { "sam", "alex", "jo", "kim" }
admins.difference(editors); // Set { "sam", "jo" }
</code></pre>
<p>The full set of methods is <code>union</code>, <code>intersection</code>, <code>difference</code>, <code>symmetricDifference</code>, <code>isSubsetOf</code>, <code>isSupersetOf</code>, and <code>isDisjointFrom</code>.</p>
<h3 id="what-s-worth-keeping">What&rsquo;s Worth Keeping</h3>
<p>Not all of Lodash has moved into the platform. <code>debounce</code> and <code>throttle</code> still have no native equivalent, and they&rsquo;re genuinely useful, so cherry-picking <code>lodash.debounce</code> is reasonable. The point of this cluster isn&rsquo;t &ldquo;delete Lodash,&rdquo; it&rsquo;s &ldquo;stop shipping the parts the browser already has.&rdquo; Dropping <code>lodash.clonedeep</code> and <code>lodash.groupby</code> alone is about <strong>8 KB gzipped</strong>, and if you were importing the full <code>lodash</code> for a handful of functions, replacing the platform-covered ones can let you drop it entirely.</p>
<h2 id="cluster-5-temporal-a-case-study-in-not-dropping-a-library-yet">Cluster 5: Temporal, A Case Study In Not Dropping A Library Yet</h2>
<p>Every cluster so far has ended in &ldquo;go ahead, drop it.&rdquo; This one is the opposite, and that&rsquo;s why it&rsquo;s worth including: it shows the framework telling you to wait.</p>
<p><code>Temporal</code> is the long-awaited replacement for JavaScript&rsquo;s <code>Date</code>, and it&rsquo;s a genuinely better API: immutable objects, sane time zone handling, and no more month indexes starting at zero. It reached TC39 Stage 4 in March 2026 and is part of the ES2026 specification. Firefox shipped it in version 139 (in 2025), and Chrome shipped it in version 144 (January 2026). Safari hasn&rsquo;t shipped it in a stable release yet; it&rsquo;s in Safari Technology Preview, with stable support expected later in 2026.</p>
<p>If Temporal is news to you, check out the Temporal Cheatsheet for a quick overview of the API and a comparison to <code>Date</code>.</p>
<p>However, <code>Temporal</code> is <em>not</em> Baseline. It&rsquo;s still in <em>limited availability</em>, because Safari users don&rsquo;t have it. To use it across all browsers today, you need a polyfill, and this is where the math turns against you.</p>
<p>The official <code>@js-temporal/polyfill</code> is about <strong>44 KB gzipped</strong>. There&rsquo;s a smaller polyfill that internally does not depend on BigInt and it weighs <strong>19 KB gzipped</strong>. A lightweight date library like <code>dayjs</code> is about <strong>3 KB gzipped</strong>. So if you swap <code>dayjs</code> for <code>Temporal</code> plus its polyfill right now, you&rsquo;re not saving 3 KB, you&rsquo;re <em>adding</em> roughly 41 KB to your bundle, unless you are able to load the polyfill conditionally.</p>
<p>Run it through the framework:</p>
<ul>
<li><strong>Question 1 (audience):</strong> Temporal isn&rsquo;t Baseline. For a broad audience, that&rsquo;s a lot of people.</li>
<li><strong>Question 2 (cost):</strong> the polyfill is more than ten times the size of the library you&rsquo;d remove. The swap makes your bundle bigger.</li>
<li><strong>Question 3 (feature gap):</strong> Temporal actually wins here; it does more than <code>dayjs</code>. But that doesn&rsquo;t matter while questions 1 and 2 are failing.</li>
</ul>
<p>The verdict is generally clear: keep <code>dayjs</code> (or <code>date-fns</code>) for now. The moment to revisit is when Safari ships Temporal in a stable release and it reaches Baseline. At that point you can use Temporal natively and conditionally load the polyfill for users on older browsers. This is a feature to write down and check again in a few months, not one to act on today.</p>
<h2 id="how-to-run-this-audit-on-your-own-package-json">How To Run This Audit On Your Own <code>package.json</code></h2>
<p>The clusters above are a starting map, but your dependencies are your own. Here&rsquo;s a repeatable process you can run this quarter.</p>
<h3 id="step-1-list-your-production-dependencies">Step 1: List Your Production Dependencies</h3>
<p>Start by listing what actually ships to users:</p>
<pre><code class="language-bash">npm ls --omit=dev --depth=0
</code></pre>
<h3 id="step-2-measure-what-each-one-costs">Step 2: Measure What Each One Costs</h3>
<p>For a quick per-package number, Bundlephobia gives you the minified and gzipped size of any npm package. For the real picture (what each dependency costs <em>in your actual bundle</em>, after tree-shaking and deduplication), run a bundle analyzer against your build. <code>npx source-map-explorer</code> works on most bundles, and <code>npx vite-bundle-visualizer</code> works for Vite projects.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="447" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-baseline-can-help-you-ship-less-javascript-2.png" alt="Bundlephobia website showing that axios weighs 44kb minified and 16.6kb minified &amp; gzipped. Such package takes 331ms to download on slow 3G and 19ms on emerging 4G."><figcaption class="op-vertical-bottom">(Large preview)</figcaption></figure>
<h3 id="step-3-check-the-baseline-status-of-each-replacement">Step 3: Check The Baseline Status Of Each Replacement</h3>
<p>For each candidate, find the platform feature that would replace it and check its Baseline status. The quickest way is webstatus.dev or the Baseline badge on the feature&rsquo;s MDN page.</p>
<h3 id="step-4-run-the-three-questions">Step 4: Run The Three Questions</h3>
<p>For each library with a platform replacement, go back to the framework: Is it Baseline-safe for your audience? What does the swap cost? Does the feature cover how you actually use the library? Most of your decisions will fall out of question 1 (check the feature&rsquo;s status against your <code>browserslist</code>) and question 3 (check your own usage).</p>
<h3 id="step-5-swap-behind-progressive-enhancement-where-needed">Step 5: Swap Behind Progressive Enhancement Where Needed</h3>
<p>For Widely available features, swap and move on. For Newly available ones, either confirm your audience is on modern browsers or guard the new code with a quick feature check and keep a fallback:</p>
<pre><code class="language-javascript">if (typeof Intl.DurationFormat === "function") {
  // use the platform feature
} else {
  // fall back to the library, or a simpler format
}
</code></pre>
<p>That way you ship less code to the users who can run it, without breaking the ones who can&rsquo;t.</p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>Add the clusters up, and the picture is concrete. The internationalization cluster is around 14 KB gzipped, HTTP is around 17 KB, the UI primitives are around 24 KB, and the Lodash utilities are 8 KB or more depending on how much of the library you were shipping. For a typical mid-sized app, that&rsquo;s somewhere between 60 KB and 90 KB gzipped of dependencies you can hand back to the platform, and more if you were shipping the full <code>lodash</code> or several of these libraries at once. (The uncompressed numbers are two to three times larger, which is what you&rsquo;ll see in a bundle analyzer before gzip.)</p>
<p>I&rsquo;ve chosen relatively lean packages for most of these features, but some individual packages could still be heavy. Your dialog package, for instance, could alone weigh as much as 50KB gzipped depending on what you&rsquo;re using.</p>
<p>A few features are worth keeping an eye on over the next year, because they&rsquo;ll open up further swaps:</p>
<ul>
<li><strong>Temporal going native.</strong><br>Once Safari ships it in a stable release and it reaches Baseline, you can drop both your date library <em>and</em> the polyfill, turning today&rsquo;s regression into a real win.</li>
<li><strong>CSS anchor positioning maturing.</strong><br>It became Baseline Newly available in January 2026. As it ages toward Widely available, dropping tooltip and popover positioning libraries gets safer for broad audiences.</li>
<li><strong><code>Object.groupBy</code> and friends crossing into Widely available.</strong><br>The 2024 batch (array grouping, Set methods) is on track to become Widely available in late 2026, which moves them from &ldquo;check your audience&rdquo; to &ldquo;just use it.&rdquo;</li>
</ul>
<p>None of this is a one-time cleanup. The platform ships new features constantly, and the gap between <em>&ldquo;you need a library for this&rdquo;</em> and <em>&ldquo;the browser does this&rdquo;</em> keeps closing. The habit worth building is small: once a quarter, run the audit. List your dependencies, check what&rsquo;s now Baseline, and hand back what you can.</p>
<p>Pick one cluster from this article, open your <code>package.json</code>, and see how much of it the browser already does for you.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/how-baseline-can-help-you-ship-less-javascript-3.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/how-baseline-can-help-you-ship-less-javascript/">How Baseline Can Help You Ship Less JavaScript</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>When It Makes Sense To “Block” The Main Thread</title>
		<link>https://thenokiablog.com/when-it-makes-sense-to-block-the-main-thread/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Messaging]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/when-it-makes-sense-to-block-the-main-thread/</guid>

					<description><![CDATA[<p>The common rule of thumb is to never &#8220;block&#8221; the browser&#8217;s main thread when running JavaScript...</p>
<p>The post <a href="https://thenokiablog.com/when-it-makes-sense-to-block-the-main-thread/">When It Makes Sense To “Block” The Main Thread</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>The common rule of thumb is to never &ldquo;block&rdquo; the browser&rsquo;s main thread when running JavaScript tasks. But is this a hard rule? Victor Ayomipo describes a use case he encountered involving a screenshot extension where he made an exception to the rule and decided that blocking the main thread was absolutely the right thing to do.</section>
</p>
<p>We&rsquo;ve all heard of the sacred rule in modern web development, the rule never to be broken. The rule of <em>&ldquo;Never block the main thread.&rdquo;</em></p>
<p>You almost can&rsquo;t miss it as a web developer; it&rsquo;s in almost every performance guide, and to be fair, it is good advice. We all know the browser&rsquo;s main thread is <strong>single-threaded</strong>, meaning it can only do one thing at a time.</p>
<p>Plus, as we know, the main thread isn&rsquo;t ours alone; we share it with the browser&rsquo;s rendering engine, input handlers, and other critical tasks. As a result, the less time we hold onto the main thread, the more responsive an app feels. That leads us to share tasks with background workers as we&rsquo;ve convinced ourselves there should be a hard line between the UI and any computation, and that line shouldn&rsquo;t be crossed.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>And that is what a &ldquo;recommended&rdquo; architecture looks like.</p>
<p>But I dare say that *sometimes*<em>,</em> moving the data to a worker is slower than just letting the main thread do the work.</p>
<p>I found this out a few months ago while building a Chrome extension with screenshotting features called Fastary. I kept finding a latency of about 2 to 3 seconds in all my testing, even after using an Offscreen Document (a background process in Chrome extensions) to handle the canvas operations. A screenshot task should feel instant without lag, after all.</p>
<p>It is quite ironic that by reflex, we move work away from the main thread to avoid freezing the UI, but sometimes the act of moving that work (e.g., serializing, copying, and deserializing) can also freeze the UI. And <em>sometimes</em> the recommended approach of letting the background do the work can be slower than just doing the work on the main thread.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>Let&rsquo;s talk about that.</p>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://thenokiablog.com/wp-content/uploads/2026/07/when-it-makes-sense-to-block-the-main-thread.png" alt="Feature Panel" width="481" height="698"></div>


<h2 id="the-architecture-of-browser-context-isolation">The Architecture Of Browser Context Isolation</h2>
<p>To put things in perspective, let&rsquo;s understand why we isolate browser contexts and how they communicate with each other, with emphasis on the <em>communication</em> part.</p>
<p>A browser is more than a single environment. Different environments are running at the same time, each having its own memory space, what it can access, and rules:</p>
<ul>
<li>The <strong>main thread</strong> is what we are most familiar with; this is where JavaScript logic runs, where the DOM lives, where styles get rendered, and where users interact.</li>
<li>The <strong>Web Workers</strong> are separate threads that can also execute JavaScript without DOM access. We mostly use this for heavy data tasks.</li>
<li>The <strong>Service Workers</strong> are network-related proxies in charge of intercepting network requests and can even run when the page is closed.</li>
<li>And then there are <strong>Chrome extension contexts</strong>, where we have background service workers, content scripts, and Offscreen Documents (the relevant ones for this article).</li>
</ul>
<p>Each one of these is isolated from the others. A web worker or background script lives in a different memory space from the main thread. They cannot just reach and read each other&rsquo;s variables or logic, and this is known as the <strong>&ldquo;shared-nothing&rdquo; architecture</strong>.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>How do these isolated environments communicate? They explicitly message each other back and forth using APIs, like <code>postMessage()</code>.</p>
<h3 id="the-structured-clone-algorithm">The Structured Clone Algorithm</h3>
<p><code>postMessage()</code> tells the browser to take a piece of data and deliver it to the context that requested it. But to do this, the browser relies on the Structured Clone Algorithm (SCA).</p>
<p>You&rsquo;re probably familiar with <code>JSON.stringify()</code>. SCA is similar, but much stronger and smarter. In its simplest form, SCA is a deep, recursive copy operation, i.e., cloning. It walks through the entire data structure it is given, clones every single value, serializes it into a transportable format, ships those bytes to the target contexts, and then reconstructs the original object on the receiving side.</p>
<p>SCA is fast, or maybe fast-<em>ish</em>&hellip; For a small regular config object like <code>{theme: "dark"}</code>, it is imperceptible; you don&rsquo;t even notice it. The story changes, however, when dealing with heavy data because the SCA is a synchronous blocking <code>O(n)</code> operation, i.e., the cost increases linearly with the size of your data.</p>
<p>Let&rsquo;s put that into perspective. A user clicks a button, and internally, an 8MB image payload is sent to a background worker for processing. When you call <code>postMessage()</code>, the main thread must immediately stop what it is doing to run this serialization and copying process.</p>
<blockquote><p>So, if the time it takes to pack, ship, unpack the data, and go back to the start is longer than the time to just process the data on the main thread, why not do that instead?</p></blockquote>
<h2 id="what-about-transferable-objects">What About Transferable Objects?</h2>
<p>I&rsquo;m sure some of you are already thinking, <em>&ldquo;Why not just use Transferable objects?&rdquo;</em> And that is a valid point. Let&rsquo;s talk about that.</p>
<p>Developers who really pursue ultra-high-performance web apps usually use Transferable objects (e.g., <code>ArrayBuffer</code>, <code>ImageBitmap</code>, or <code>MessagePort</code>) to bypass the Structured Clone Algorithm. This is because when you transfer an object, you&rsquo;re not making a copy (like SCM). Instead, the browser switches ownership of the data from one context to another.</p>
<p>The browser performs a hand-off whereby the sending context loses access to the data instantly, and the receiving context takes full control. It is actually insanely fast. According to Chrome Developers&rsquo; benchmark, transferring a massive 32MB <code>ArrayBuffer</code> can take under 7ms, compared to about 300ms when cloning with SCM. That&rsquo;s a 43x speed boost.</p>
<figure><img decoding="async" loading="lazy" width="800" height="315" src="https://thenokiablog.com/wp-content/uploads/2026/07/when-it-makes-sense-to-block-the-main-thread-1.png" alt="Structured cloning vs. Transferable Objects by Chrome Developers"><figcaption class="op-vertical-bottom">Structured cloning vs. Transferable Objects by Chrome Developers. (Image source: Chrome for Developers) (Large preview)</figcaption></figure>
<p>But like all good things, there are downsides. To name a few:</p>
<ul>
<li><strong>You lose it once you send it.</strong><br>If the UI still needs that data (like to show an image preview), you can&rsquo;t access it anymore.</li>
<li><strong>Not all data is transferable.</strong><br>A plain JS object is not. A Blob is not. Even a Base64 string is not.</li>
<li><strong>API limitations.</strong><br>In the context of browser extensions, Chrome&rsquo;s internal messaging (<code>chrome.runtime.sendMessage</code>) traditionally forces everything through JSON serialization.</li>
</ul>
<p>So, as far as my screenshot extension went, Transferable objects were not an option.</p>
<h2 id="why-we-isolate-contexts-anyway">Why We Isolate Contexts Anyway</h2>
<p>Why do we even bother isolating contexts at all? Why not just leave it all to the main thread?</p>
<p>Offloading long-running CPU tasks to a background thread is absolutely the right thing to do. The browser needs to paint a new frame <strong>every 16.6ms</strong> to keep things fluid; that means any task that takes &gt;50ms is generally considered &ldquo;long&rdquo;. Offloading to the background is absolutely the right thing to do.</p>
<p>The issue, however, is that we&rsquo;ve turned this <em>&ldquo;never block the main thread&rdquo;</em> into an absolute rule, without asking <em>is this task expensive to process or expensive to move?</em></p>
<blockquote class="pull-quote">
<p>I have come to realize now that the rule is less &ldquo;never block the main thread&rdquo; than &ldquo;never block the main thread for too long.&rdquo;</p>
</blockquote>
<h2 id="when-the-right-architecture-is-the-wrong-architecture">When The Right Architecture Is The Wrong Architecture</h2>
<p>My goal with the Fastary extension was to make it feel like a native app, running as smoothly and instantly as you would expect a native app to.</p>
<p>As you already know, I took the recommended approach to use the Offscreen Document to handle DOM work in the background. But to my surprise, that took a different turn.</p>
<p>The Offscreen Document API is a clear winner. You create a hidden, undisplayed document that runs entirely in the background. It has a DOM and supports Canvas. For example, if I want to crop a screenshot, stitch multiple screenshots together, perform heavy image manipulation, or add a watermark, Offscreen Document was made for that.</p>
<p>Turns out that was not the best approach. This was my architecture:</p>
<ol>
<li>The background Service Worker captures a screenshot with <code>chrome.tabs.captureVisibleTab()</code>, which returns a Base64-encoded data URL string.</li>
<li>The background Service Worker uses <code>chrome.runtime.sendMessage()</code> to ship this image payload to the Offscreen Document.</li>
<li>The Offscreen Document receives the image, loads it into an <code>&lt;img&gt;</code> element, then draws it onto a canvas before it applies the user&rsquo;s crop coordinates, encodes the result, and sends the processed image back to the background worker.</li>
</ol>
<p>But when I tested it, the screenshot didn&rsquo;t feel instant. As I said earlier, there was a consistent 2&ndash;3 second lag.</p>
<p>I figured out that when <code>captureVisibleTab()</code> takes a screenshot, it returns a Base64 URL string, and on a standard 1080p screen, that string could be approximately 1MB or more, depending on how detailed the image is. It gets even more interesting on modern Retina displays (e.g., MacBooks) as they tend to automatically double the image&rsquo;s size by default.</p>
<p>Keep in mind that since the image payload could be doubled and extension messaging relies on JSON serialization (as of this writing), we potentially deal with <strong>massive synchronous communication</strong> that costs an entire round trip.</p>
<p>The image string data is JSON-serialized at least twice: once when going into the Offscreen Document and once coming back out with the processed results to the background worker. The actual image processing (cropping) done inside the Offscreen Document was fast, no doubt, but I can&rsquo;t say the same about the transfer overhead.</p>
<h3 id="the-retina-high-dpi-problem">The Retina High-DPI Problem</h3>
<p>As if the latency itself wasn&rsquo;t enough, I noticed a rather subtle bug &mdash; which, now that I think of it, was more of my ignorance. After a screenshot was taken, the crop result was completely off in a way that either weirdly scaled the image or resulted in incorrect coordinates.</p>
<p>It turns out that when a user selects a region to crop, the content script gets the box coordinates using <code>getBoundingClientRect()</code>, which is measured in <strong>CSS pixels</strong>; this is what the DOM uses. But when the screenshot is captured natively in Chrome, the browser doesn&rsquo;t crop it automatically; it instead uses the <strong>physical hardware pixels</strong> to get the full screen capture. And the browser uses <code>devicePixelRatio</code> (DPR) to know how many physical pixels should represent one CSS pixel. Basically, if a user on a Retinal display (DPR = 2) highlights an area of 400&times;300 CSS pixels, the actual captured image area is 800&times;600 physical pixels.</p>
<blockquote><p><strong>Note:</strong> One CSS pixel is equal to 1 physical pixel (DPR of 1) on a standard monitor. On a Mac Retina display or a modern 4K monitor, however, the DPR is usually 2 or 3.</p></blockquote>
<p>For an accurate crop, I needed to apply these two different measurement systems with the right DPR, i.e., scale the crop coordinates by the DPR. But remember, Offscreen Documents have no physical display. Processing any image would have a default DPR equal to 1. To fix this, I would have to capture the exact <code>devicePixelRatio</code> from the active tab, serialize it, pass it alongside the image payload, and manually do the scaling math inside the Offscreen Document. The complexity starts to compound.</p>
<p><em>What if I broke the golden rule and did the work on the main thread instead?</em></p>
<h2 id="working-on-the-main-thread">Working On The Main Thread</h2>
<p>Some developers will argue that UI tasks are the only things that should run on the main thread, but I don&rsquo;t fully agree with that. Personally, I believe that user explicitly-invoked actions that need immediate results can sometimes get a solid pass to run on the main thread, provided the work is incredibly <em>fast</em> (e.g., 1s).</p>
<p>That&rsquo;s what I did: scrap out the Offscreen Document and reengineer the logic. Instead of:</p>
<div class="break-out">
<pre><code class="language-markdown">Background &rarr; [serialize] &rarr; Offscreen Document &rarr; [serialize] &rarr; Background &rarr; Content Script</code></pre>
</div>
<p>&hellip;I decided to run the whole image processing in the active tab:</p>
<ol>
<li>The background Service Worker captures the screen and gets the Base64 string (same as before).</li>
<li>The background sends the payload directly to the content script in the active tab using <code>chrome.scripting.executeScript()</code>.</li>
<li>The content script (running on the main thread) receives the payload, draws it to a canvas, performs the crop using the correct DPR value, and copies the result to the clipboard.</li>
</ol>
<div class="break-out">
<pre><code class="language-javascript">// Background Script
const screenshotUrl = await chrome.tabs.captureVisibleTab(undefined, { format: "png" });

// Inject the processing function into the active tab as a content script
await chrome.scripting.executeScript({
  target: { tabId: activeTab.id },
  func: processAndCopyImage,
  args: [{ base64Image: screenshotUrl, cropData: userSelection }]
});
</code></pre>
</div>
<p>This approach completely clears out multiple context hops and round trips that JSON serialization requires. The only cross-context transfer involves sending the data URL from the background to the content script.</p>
<p>The Retina DPI issue essentially solved itself, as the content script runs directly inside the real, active browser tab because it knows the monitor&rsquo;s real <code>devicePixelRatio</code>.</p>
<p>But there&rsquo;s an elephant in the room that you may have noticed.</p>
<p>Sure, the image is now processed on the main thread, and the background manipulates the canvas in the active tab. I could technically be blocking the main thread. That&rsquo;s where I amended the &ldquo;no blocking the main thread&rdquo; rule to &ldquo;no blocking the main thread <em>for too long</em>.&rdquo; In this specific case, at least, blocking the main thread for a task the user requests for approximately one second is justifiable. It works conversely as well: maybe <strong>don&rsquo;t isolate processes if the data transfer cost is greater than the processing cost</strong>.</p>
<h2 id="conclusion-when-to-isolate-and-when-not-to">Conclusion: When To Isolate And When Not To</h2>
<p>I&rsquo;ve boiled it down to a mental model that depends on whether the task is:</p>
<h3 id="1-compute-heavy-tasks-cpu-bound">1. Compute-Heavy Tasks (CPU-Bound)</h3>
<p>These are tasks where the primary cost is computation and not the size of the data itself. These are tasks where most of the time is spent on doing calculations or heavy transformations, e.g., image compression, audio profiling, physics simulation, etc.</p>
<p>The transfer cost for these tasks is minuscule compared to the actual work.</p>
<h3 id="2-data-heavy-tasks-data-bound">2. Data-Heavy Tasks (Data-Bound)</h3>
<p>These tasks are the exact opposite. These tasks are only expensive because of the size. The processing time is almost insignificant, but the data is expensive to transport, e.g., image cropping, filtering an array, shallow copy, etc.</p>
<p>In my specific case, offloading the task to the background falls mostly into <strong>negative-sum efficiency</strong>. If we are talking about moving megabytes of data to perform a 50ms operation, there is no benefit to offloading it to the background.</p>
<p>Perhaps we can think of it like this:</p>
<pre><code class="language-markdown">Total Time = Serialization Cost
  + Transit
  + Background Processing Time
  + Deserialization Cost
</code></pre>
<p>Looking at this, if the <strong>&ldquo;background processing time&rdquo;</strong> is the most dominant task in your operation, then isolation is the clear winner. But if serialization, plus deserialization, plus transit exceeds that cost, then there&rsquo;s no need to isolate things.</p>
<p>And if you can&rsquo;t figure out if the task is CPU-heavy or data-heavy, it certainly doesn&rsquo;t hurt to measure it, for example, using performance.mark() and performance.measure() around <code>postMessage</code> calls to profile the transfer cost.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/07/when-it-makes-sense-to-block-the-main-thread-5.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(gg, yk)</span></div>
<p>The post <a href="https://thenokiablog.com/when-it-makes-sense-to-block-the-main-thread/">When It Makes Sense To “Block” The Main Thread</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Meet Kirki: WordPress’s First Visual Builder With An Infinite Canvas</title>
		<link>https://thenokiablog.com/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Design Trends]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Figma]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas/</guid>

					<description><![CDATA[<p>We have been building websites inside boxes for years on WordPress. Let&#8217;s take a closer look...</p>
<p>The post <a href="https://thenokiablog.com/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas/">Meet Kirki: WordPress’s First Visual Builder With An Infinite Canvas</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="c-garfield-summary">
<section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>We have been building websites inside boxes for years on WordPress. Let&rsquo;s take a closer look at Kirki, the first freeform visual builder with an infinite canvas, and explore how it redefines the experience with cleaner performance, full design freedom, and zero plugin dependency.</section>
</div>
<p>For years, WordPress users have relied on traditional page builders to create websites without writing code. While these builders made web design more accessible, many still come with familiar compromises &mdash; rigid layouts, reliance on multiple third-party plugins, bloated code, and performance trade-offs that can slow down your site.</p>
<p>Kirki takes a different approach. Instead of building on the conventions of older page builders, it reimagines the website creation experience with a freeform infinite canvas, an integrated CMS, and a comprehensive set of built-in features. The result is a streamlined workflow that gives you greater creative freedom while producing cleaner, faster websites.</p>
<p>Whether you&rsquo;re a designer seeking pixel-perfect control, a developer looking for cleaner output, or a business owner who simply wants to build a professional website without unnecessary complexity, Kirki aims to remove many of the limitations that have long been associated with WordPress page builders.</p>
<p>In this review, we&rsquo;ll compare Kirki with traditional WordPress builders across the factors that matter most when choosing a website builder, including:</p>
<ul>
<li>Pricing and overall value,</li>
<li>Impact on website performance,</li>
<li>Ease of use versus design flexibility,</li>
<li>Built-in features and functionality,</li>
<li>Theme compatibility and layout customization.</li>
</ul>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>By the end, you&rsquo;ll have a clear understanding of where Kirki stands and whether it&rsquo;s the right choice for your next WordPress project.</p>
<h2 id="a-closer-looks-at-kirki">A Closer Looks At Kirki</h2>
<p>Kirki is a no-code visual website builder for WordPress, designed to bridge the gap where other page builders fall short.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="419" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas.jpg" alt="Kirki banner"><figcaption class="op-vertical-bottom">(Large preview)</figcaption></figure>
<p>Unlike other page builders, Kirki is an all-in-one solution that aims to provide everything you need to build websites without any third-party dependencies, shifting from the norm in WordPress!</p>
<p>And the best part? It&rsquo;s all included in your subscription, so you won&rsquo;t be hit with surprise upgrades.</p>
<h3 id="the-most-feature-packed-free-wordpress-builder">The Most Feature-Packed Free WordPress Builder</h3>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>Before anything else, <strong>Kirki has a free version, and it&rsquo;s genuinely powerful.</strong></p>
<p>You can download Kirki for free directly from WordPress.org and start building right away. The free version is not a watered-down teaser. It&rsquo;s a heavily feature-packed builder that lets you design modern websites on an infinite canvas without spending a cent.</p>
<h3 id="scale-without-limits-with-the-pro-plan">Scale Without Limits With the Pro Plan</h3>
<p>For those who want to unlock the full Kirki experience, the Pro plans are surprisingly affordable for the value they deliver.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-1.jpg" alt="Screenshot displaying Kirki&rsquo;s pricing plans and features."><figcaption class="op-vertical-bottom">Overview of Kirki&rsquo;s affordable and transparent pricing plans. (Large preview)</figcaption></figure>
<p>The <strong>Starter plan</strong> is just <strong>$59/year</strong> for one site and includes all premium features. Compare that with Elementor Pro&rsquo;s Essential plan, which starts at $60/year and still keeps several essentials behind paywalls. With Kirki, what you see is what you get, everything included from day one.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Kirki also offers a <strong>Lifetime plan</strong> for a one-time payment of <strong>$499</strong>, giving you unlimited use forever. No renewals, no upcharges, no surprises.</p>
<p>While most page builders upsell critical features or require multiple add-ons to function properly, Kirki keeps it simple. One platform, all features, no hidden costs. Dynamic content, pop-up builder, form builder, submission manager, the entire growing template library &mdash; all included from the start across every plan.</p>
<p>Explore Kirki pricing.</p>
<h2 id="website-performance-comparison">Website Performance Comparison</h2>
<p>Performance directly impacts user experience, SEO, and conversion rates. So, to get a clear picture of how different page builders impact performance, we put Kirki and Elementor to the test under identical conditions to see how each builder stacks up.</p>
<p>We installed both on a clean WordPress setup using the default Twenty Twenty-Five theme to ensure a fair comparison. Then, we created identical layouts using comparable design elements and ran Lighthouse performance audits to measure load time, responsiveness, and Core Web Vitals.</p>
<p><strong>Test Conditions:</strong></p>
<ul>
<li>Clean WordPress installation,</li>
<li>Same theme: Twenty Twenty-Five,</li>
<li>Same layout structure and design elements,</li>
<li>Lighthouse is used for performance scoring.</li>
</ul>
<p><strong>Sample Layout:</strong></p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-2.jpg" alt="Image of a website layout built for performance testing comparison."><figcaption class="op-vertical-bottom">Sample website layout used for benchmarking performance tests. (Large preview)</figcaption></figure>
<p><strong>Kirki&rsquo;s Performance:</strong></p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-3.jpg" alt="Performance test scores showing Kirki&rsquo;s website speed and responsiveness."><figcaption class="op-vertical-bottom">Performance results showing Kirki&rsquo;s fast loading times and metrics. (Large preview)</figcaption></figure>
<p><strong>Elementor&rsquo;s Performance:</strong></p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-4.jpg" alt="Performance test scores showing Elementor&rsquo;s website speed and responsiveness."><figcaption class="op-vertical-bottom">Performance results illustrating Elementor&rsquo;s load times and metrics. (Large preview)</figcaption></figure>
<p><strong>Kirki&rsquo;s Code Output:</strong></p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="445" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas.png" alt="Screenshot of Kirki&rsquo;s clean semantic HTML code structure."><figcaption class="op-vertical-bottom">Clean and minimal code output generated by Kirki for optimized websites. (Large preview)</figcaption></figure>
<p><strong>Elementor&rsquo;s Code Output:</strong></p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-1.png" alt="Screenshot of Elementor&rsquo;s complex and heavily nested HTML code."><figcaption class="op-vertical-bottom">Nested and bulky code output produced by Elementor, affecting performance. (Large preview)</figcaption></figure>
<p>The difference was immediately clear. Kirki generated a much cleaner DOM with significantly fewer <code>&lt;div&gt;</code>s and no unnecessary wrappers, resulting in faster load times and higher scores across all boards.</p>
<p>Elementor, on the other hand, added heavily nested markup and extra scripts, even on this simple layout, which dragged down its performance.</p>
<p>If clean code, fast loading, and technical efficiency are priorities for you, Kirki clearly comes out ahead.</p>
<h2 id="exploring-the-features">Exploring The Features</h2>
<p>Now that we&rsquo;ve seen how Kirki outperforms the competition and does so at a highly competitive price, let&rsquo;s dive into the features to see what makes it such a powerful all-in-one builder.</p>
<h3 id="freeform-infinite-canvas-for-true-design-freedom">Freeform Infinite Canvas For True Design Freedom</h3>
<p>What makes Kirki different from the existing page builders is its infinite canvas.</p>
<p>With Kirki, you finally get the layout flexibility modern design demands, and no longer need to place elements into rigid structures.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-5.jpg" alt="Interface screenshot of Kirki&rsquo;s drag-and-drop freeform visual canvas."><figcaption class="op-vertical-bottom">Kirki&rsquo;s flexible freeform canvas enables pixel-perfect design freedom. (Large preview)</figcaption></figure>
<p>Design on an <strong>infinite canvas</strong> where you can pan freely, zoom in and out, place elements exactly where you want, overlap sections, layer backgrounds, and build complex interactions, all visually.</p>
<p>Every element&rsquo;s layout behavior is editable on canvas, giving you pixel-level control without touching code.</p>
<p>The editor supports both light and dark modes for a more comfortable, focused workspace.</p>
<p>If you&rsquo;ve used Figma or Webflow, you&rsquo;ll feel instantly at home. If you haven&rsquo;t, this is the most natural way to design websites you&rsquo;ve ever tried.</p>
<h3 id="concurrent-editing-across-all-responsive-views">Concurrent Editing Across All Responsive Views</h3>
<p>With Kirki&rsquo;s infinite canvas, all your responsive views, Desktop, Tablet, Landscape, and Mobile, are visible side by side simultaneously. You don&rsquo;t switch modes. You work across all of them at once, in real time, on the same canvas.</p>
<p>This means you can spot a layout issue on mobile while designing the desktop version, fix it instantly, and move on without ever breaking your flow. No back and forth.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-6.jpg" alt="Interface screenshot of Kirki&rsquo;s drag-and-drop freeform visual canvas."><figcaption class="op-vertical-bottom">Concurrent editing across all responsive views on an infinite canvas. (Large preview)</figcaption></figure>
<p>And because Kirki uses a cascading system, changes made at larger breakpoints automatically flow down to smaller ones, so you&rsquo;re never starting from scratch at every screen size. You only step in where you need to, making adjustments where the design requires it and letting the rest handle itself.</p>
<h3 id="instant-figma-to-kirki-handoff">Instant Figma to Kirki Handoff</h3>
<p>Talking about Figma, if you have a design ready in Figma, you can instantly import it into Kirki to create a functional website with no need to rebuild from scratch.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-7.jpg" alt="Screencast showing Figma design being imported into Kirki builder."><figcaption class="op-vertical-bottom">Seamless import of Figma designs directly into Kirki for fast development. (Large preview)</figcaption></figure>
<p>Your imported design comes in fully responsive by default, adapting to all screen sizes, including any custom breakpoints you define.</p>
<p>And it supports unlimited breakpoints, too. You can define layout behavior exactly how you want it, and styles will cascade intelligently across smaller screens.</p>
<h3 id="no-third-party-plugins-needed-for-dynamic-content">No Third-Party Plugins Needed for Dynamic Content</h3>
<p>In traditional WordPress, handling dynamic content means installing the ACF or other third-party plugins.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-8.jpg" alt="Image showing Kirki&rsquo;s dynamic content management capabilities."><figcaption class="op-vertical-bottom">Kirki&rsquo;s native dynamic content management without third-party plugins. (Large preview)</figcaption></figure>
<p>But with Kirki, all of that is natively integrated. It comes with a powerful Dynamic Content Manager that lets you:</p>
<ul>
<li>Create custom content types and fields.</li>
<li>Use reference and multi-reference relationships.</li>
<li>Build dynamic templates visually.</li>
<li>Add dynamic SEO to template pages.</li>
<li>Apply advanced filtering to Collection elements.</li>
</ul>
<p>All without writing a single line of code or relying on external plugins.</p>
<h3 id="reusable-styling-with-class-based-editing">Reusable Styling With Class-Based Editing</h3>
<p>Kirki also has an efficient way to manage design at scale without repetitive work.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-9.jpg" alt="Screenshot of Kirki&rsquo;s CSS class management panel."><figcaption class="op-vertical-bottom">Efficient class-based styling system for reusable and scalable designs. (Large preview)</figcaption></figure>
<p>It uses a class-based styling system that brings structure and scalability to your design process. When you style an element, those styles are automatically saved as reusable CSS classes.</p>
<p>Here&rsquo;s what that means for you:</p>
<ul>
<li>You can <strong>create global classes</strong> for common components like buttons, cards, or headings.</li>
<li><strong>Reuse those styles</strong> across pages and projects with consistency.</li>
<li>Update a class once, and every instance updates instantly.</li>
<li>You can also <strong>create subclasses</strong> to make slight variations, like secondary buttons, while still inheriting styles from the parent.</li>
</ul>
<h3 id="css-variables-for-global-styling">CSS Variables for Global Styling</h3>
<p>Kirki takes styling even further with Global Variables, allowing you to define design tokens like colors, fonts, spacing, and sizing that can be reused across your entire site.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-10.jpg" alt="Interface displaying CSS variables used for colors, fonts, and spacing in Kirki."><figcaption class="op-vertical-bottom">Global CSS variables powering consistent and easy-to-update site styling. (Large preview)</figcaption></figure>
<p>You can pair these global variables with your class-based structure to:</p>
<ul>
<li>Maintain visual consistency.</li>
<li>Update values globally with a single change.</li>
<li>Easily manage themes like switching between light and dark modes with one click.</li>
</ul>
<p>And while Kirki offers a fully visual experience, it doesn&rsquo;t limit advanced users. You can write custom CSS for any class or element, and even inject JavaScript at the page or element level when needed.</p>
<h3 id="build-complex-interactions-and-animations-visually">Build Complex Interactions and Animations Visually</h3>
<p>When it comes to modern animations and interactive design, Kirki leaves traditional WordPress page builders far behind.</p>
<p>Its fully visual interaction builder lets you create dynamic, immersive experiences.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-11.jpg" alt="Image of Kirki&rsquo;s timeline-based animation and interaction editor."><figcaption class="op-vertical-bottom">Visual interaction builder allowing advanced animations without coding. (Large preview)</figcaption></figure>
<p>You can build scroll-based animations, hover and click effects, interactive sections that respond across devices, and control visibility, motion, and behavior all within a visual interface.</p>
<p>For advanced users, Kirki includes a <strong>timeline-based editor</strong> where you can:</p>
<ul>
<li>Create multi-step animations.</li>
<li>Fine-tune transitions with precise timing, easing, delays, and sequencing.</li>
</ul>
<p>Even text animations get special attention.</p>
<p>You can animate text by character, word, or full element. Choose custom triggers (scroll, hover, load, etc.) and select from various transition styles or create your own.</p>
<p>Kirki no-code website builder truly helps you move past generic and create unique animations and complex interactions.</p>
<h3 id="seamless-integration-management-with-kirki-apps">Seamless Integration Management with Kirki Apps</h3>
<p>Kirki takes the hassle out of connecting third-party tools with its intuitive <strong>Kirki Apps</strong> system. You can install and manage essential integrations such as analytics, CRMs, email marketing platforms, support widgets, and more, all from within the Kirki editor itself.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-12.jpg" alt="Kirki Apps interface showing available integrations for analytics, CRM, and more."><figcaption class="op-vertical-bottom">Centralized integrations management with Kirki Apps. (Large preview)</figcaption></figure>
<p>This centralized approach means you never have to leave your workspace. The clean, user-friendly interface guides you through the connection process visually, making setup fast and straightforward even if you&rsquo;re not a technical expert.</p>
<p>Kirki brings the first real multi-user co-editing experience to WordPress. Multiple team members can work on the same page, at the same time, seeing each other&rsquo;s changes unfold live on the canvas.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-13.jpg" alt="Screenshot of Kirki&rsquo;s real-time collaboration &amp; co-editing."><figcaption class="op-vertical-bottom">First True Multi-user Co-editing Experience in a WordPress Builder. (Large preview)</figcaption></figure>
<p>You see your teammates&rsquo; cursors moving in real time. You watch edits happen as they happen. Every change is color-coded and attributed, so the entire team stays oriented without ever having to ask.</p>
<p>Your team can also leave comments directly on the canvas, pinned exactly where the change needs to happen. For agencies, freelancers working with clients, and in-house teams juggling multiple contributors, this makes a huge of a difference.</p>
<p>Before you publish your site, Kirki helps ensure your site is technically sound with its built-in Page Audit tool.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-14.jpg" alt="Interface showing Kirki&rsquo;s quality control, including alt text and broken links."><figcaption class="op-vertical-bottom">Page Audit tool ensuring SEO, accessibility, and technical quality before publishing. (Large preview)</figcaption></figure>
<p>It automatically scans your layout for:</p>
<ul>
<li>Missing alt text on images,</li>
<li>Broken links,</li>
<li>Unassigned or duplicate classes,</li>
<li>Accessibility issues,</li>
<li>And more.</li>
</ul>
<p>So you&rsquo;re not just building beautiful pages &mdash; you&rsquo;re shipping fast, accessible, SEO-ready websites with confidence.</p>
<h2 id="theme-layout-options">Theme &amp; Layout Options</h2>
<p>Kirki has a growing library of high-quality templates and modular layout options, so you&rsquo;re never out of options.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-15.jpg" alt="Preview of Kirki&rsquo;s template library and layout options."><figcaption class="op-vertical-bottom">Extensive library of templates, pre-designed pages, and modular sections. (Large preview)</figcaption></figure>
<h3 id="template-kits-full-website-packs">Template Kits: Full Website Packs</h3>
<p>Kirki&rsquo;s Template Kits include complete multi-page website designs for every industry. Pick a template, update the content, and you&rsquo;re ready to launch.</p>
<p>New template kits are added regularly, so you&rsquo;re always equipped with the latest design trends. And the best part? At no additional cost. You get access to the finest designs without ever paying extra.</p>
<h3 id="pre-designed-pages">Pre-Designed Pages</h3>
<p>Need just a landing page or a pricing page? Kirki also offers standalone pre-designed pages you can drop into your project and customize instantly.</p>
<h3 id="pre-made-sections">Pre-Made Sections</h3>
<p>Prefer to build from scratch but don&rsquo;t want to start with a blank canvas? It also has ready-made sections like hero banners, testimonials, pricing blocks, and FAQs. You can visually assemble your layout in minutes using these.</p>
<h2 id="how-easy-is-kirki-to-use">How Easy Is Kirki To Use?</h2>
<p>Kirki has come a long way in terms of accessibility.</p>
<p>The interface has been refined, the workflow is more intuitive, and a growing library of pre-made blocks, sections, pages, and full templates means you&rsquo;re rarely starting from a blank canvas unless you want to.</p>
<p>That said, if you want something dead simple just to build a basic five-page site fast, there are lighter options out there like Elementor. But they come at the cost of power, performance, design control, and long-term flexibility.</p>
<p>Kirki is built for people who care about what they&rsquo;re building. If you want pixel-level control, clean code output, truly responsive layouts, dynamic content, advanced interactions, and a site that scales without breaking, Kirki delivers all of that, and it&rsquo;s more accessible than ever to get there.</p>
<p>To help you get up to speed quickly, Kirki includes:</p>
<ul>
<li>A refined, intuitive interface that&rsquo;s easier to navigate than ever;</li>
<li>An extensive and growing library of templates, pages, pre-built sections, UI components, and wireframes to kickstart any project instantly;</li>
<li>Guided onboarding to walk you through the essentials;</li>
<li>An AI generator that can scaffold entire pages and layouts in seconds.</li>
</ul>
<p>The bottom line is that Kirki rewards the time you put into learning it. And with everything that&rsquo;s been added recently, that time is shorter than ever.</p>
<h2 id="what-users-are-saying">What Users Are Saying</h2>
<p>For many users, Kirki is more than just a builder. It&rsquo;s the all-in-one tool WordPress has been waiting for. They are calling it the future of WordPress, a truly great alternative to tools like Framer and Webflow.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="512" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-16.jpg" alt="Image showing customer reviews and feedback on Kirki&rsquo;s website builder."><figcaption class="op-vertical-bottom">User testimonials praising Kirki&rsquo;s power, performance, and design freedom. (Large preview)</figcaption></figure>
<h2 id="why-kirki-outshines-traditional-website-builders">Why Kirki Outshines Traditional Website Builders</h2>
<p>Building a professional WordPress website shouldn&rsquo;t mean compromising on speed, flexibility, or performance. Kirki is designed to give designers, developers, and businesses a modern visual building experience that goes beyond the limitations of traditional page builders.</p>
<h3 id="modern-freeform-visual-builder">Modern Freeform Visual Builder</h3>
<p>Design without being restricted by rigid rows or predefined layouts. Kirki&rsquo;s intuitive freeform canvas lets you place, arrange, and customize elements exactly where you want them, giving you complete creative freedom.</p>
<h3 id="real-time-responsive-editing">Real-Time Responsive Editing</h3>
<p>Perfect your website for every screen size with side-by-side responsive editing. Instantly preview and fine-tune your desktop, tablet, and mobile layouts simultaneously, eliminating the guesswork from responsive design.</p>
<h3 id="everything-you-need-in-one-builder">Everything You Need in One Builder</h3>
<p>Forget installing multiple add-ons and third-party extensions. Kirki includes the essential tools, widgets, and features you need in a single, integrated platform, reducing complexity while improving reliability.</p>
<h3 id="performance-optimized-code-output">Performance-Optimized Code Output</h3>
<p>Great websites don&rsquo;t just look good&mdash;they load fast. Kirki generates clean, lightweight, and optimized code that helps improve page speed, user experience, and search engine performance.</p>
<h3 id="seamless-figma-to-wordpress-workflow">Seamless Figma to WordPress Workflow</h3>
<p>Transform your Figma designs into fully functional WordPress pages with minimal effort. Reduce development time and maintain design accuracy from concept to launch.</p>
<p>Create dynamic websites with data-driven content, engaging animations, sophisticated interactions, and global styling controls that keep your branding consistent across every page.</p>
<h3 id="a-powerful-free-version-to-get-your-site-ready">A Powerful Free Version To Get Your Site Ready</h3>
<p>Start building immediately with a feature-rich free version that includes everything you need to create a polished, professional website before deciding to upgrade.</p>
<p>After putting Kirki through its paces, the answer is a clear <strong>yes</strong>. Kirki not only matches traditional WordPress page builders where it counts, but it surpasses them in nearly every critical area.</p>
<p>From its cleaner, faster code output and outstanding performance to its unparalleled design freedom and powerful built-in features, Kirki solves many of the pain points that users have accepted for years.</p>
<p>Its all-in-one approach eliminates the need for multiple plugins, saving time, money, and technical headaches. If you&rsquo;re serious about building high-quality, scalable, and visually stunning websites, Kirki isn&rsquo;t just an alternative; it&rsquo;s the future of WordPress site building.</p>
<p>Ready to experience the difference yourself? Try Kirki today and start building faster, cleaner, and smarter.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas-2.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/meet-kirki-wordpresss-first-visual-builder-with-an-infinite-canvas/">Meet Kirki: WordPress’s First Visual Builder With An Infinite Canvas</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Quick Tip: How To Use WordPress Block Notes</title>
		<link>https://thenokiablog.com/quick-tip-how-to-use-wordpress-block-notes/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 17:11:45 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Code Snippet]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Learn WordPress]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Block Editor]]></category>
		<category><![CDATA[WordPress Developer]]></category>
		<category><![CDATA[WordPress Gutenberg]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/quick-tip-how-to-use-wordpress-block-notes/</guid>

					<description><![CDATA[<p>The WordPress Block Editor is great for creating custom layouts. There are plenty of core and...</p>
<p>The post <a href="https://thenokiablog.com/quick-tip-how-to-use-wordpress-block-notes/">Quick Tip: How To Use WordPress Block Notes</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The WordPress Block Editor is great for creating custom layouts. There are plenty of core and third-party blocks to choose from. They bring a world of possibilities &ndash; all without writing a line of code. Add a block theme, and get a browser-based design and development experience.</p>
<p>There is one valuable thing that WordPress blocks left behind, however: code commenting. They&rsquo;re common when building custom PHP templates and writing CSS. We use them to provide context for what a code snippet does or why it was implemented.</p>
<p>There are times when that extra context is useful in the Block Editor. For example, you might want to share information about a block with clients or colleagues. Perhaps it&rsquo;s locked or requires a specific setting to display correctly. Sometimes we need to remind ourselves why we did something.</p>
<p>That&rsquo;s where the WordPress Notes feature comes in handy. Use it to add notes to specific blocks and even keep a threaded conversation. It&rsquo;s another way to improve your editorial workflow and provide a quick reference for users.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Here&rsquo;s a look at how the feature works. We&rsquo;ll show you how to add and retrieve notes to any block on your site. In addition, we&rsquo;ll share a few tips and hidden gems worth knowing about.</p>
<h2><span id="Sample_Project_Lets_Collaborate_With_Blocks">Sample Project: Let&rsquo;s Collaborate With Blocks</span></h2>
<p>The WordPress Notes feature is part of the larger Gutenberg Collaboration phase. At the very least, it&rsquo;s a way to add reminders or have an asynchronous discussion with other site users. That second part is what we&rsquo;ll focus on here.</p>
<p>We&rsquo;ll simulate a discussion of colleagues regarding a Group block. We promise it will be quick and easy!</p>
<h3><span id="Step_1_Choose_a_Block">Step 1: Choose a Block</span></h3>
<p>The first step is to open a page or post in the Block Editor and <strong>select a block</strong>. We&rsquo;ll choose a Group block at the top of the page. We want to discuss its styling with a colleague.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes.webp" alt="We chose the Group block to add our note" width="900" height="400"></p>
<h3><span id="Step_2_Add_a_Note">Step 2: Add a Note</span></h3>
<p>Now that we know which block we want to discuss, it&rsquo;s time to add a note.</p>
<ol>
<li>Click on the <strong>Options</strong> menu (<strong>&#8942;</strong>) and select <strong>Add note</strong>.</li>
<li>A note dialog appears on the right side of the screen. We can add our note in this space.</li>
<li>Click the <strong>Add note</strong> button to save the note.</li>
</ol>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes-1.webp" alt="The Add Note feature lives in the block Options menu" width="900" height="400"></p>
<p>For reference, we asked if our Group block should have a background color to stand out from the rest of the content.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes-2.webp" alt="We add a note to our Group block" width="900" height="400"></p>
<p>Next, we&rsquo;ll wait for our colleague to reply to our note. When they click the block in question, they&rsquo;ll see a user avatar that indicates a note is available.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes-3.webp" alt="An avatar icon signals that a note is available for this block" width="900" height="400"></p>
<h3><span id="Step_3_Our_Colleague_Replies">Step 3: Our Colleague Replies</span></h3>
<p><strong>Here&rsquo;s a handy feature:</strong> WordPress will send you an email when someone replies to your note (it&rsquo;s based on the existing comment system). As such, we don&rsquo;t have to keep checking our page for the latest news.</p>
<p>Our colleague replied to our note and acted on our design suggestion. When we visit the page, we notice that their avatar has also been added to the block&rsquo;s note notification.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes-4.webp" alt="Our colleague replied to the block note" width="900" height="400"></p>
<h3><span id="Step_4_Reply_and_Resolve">Step 4: Reply and Resolve</span></h3>
<p>We love what our colleague did to dress up the Group block on the page. The last steps are to reply and mark the note as resolved.</p>
<p>To resolve the note, we&rsquo;ll <strong>click the checkmark</strong> on the upper right of the dialog. Keep in mind that the note will stay in place unless we manually delete it from the block.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/06/quick-tip-how-to-use-wordpress-block-notes-5.webp" alt="We marked our note as resolved. It will stay attached to the block until we remove it" width="900" height="400"></p>
<h2><span id="An_Easy_Way_To_Collaborate_in_WordPress">An Easy Way To Collaborate in WordPress</span></h2>
<p>The WordPress Notes feature is a great way to relay information to others or remind yourself of something important. And it will continue to be enhanced as more collaborative features are added to the content management system (CMS).</p>
<p>Even better, you don&rsquo;t need a plugin to get started &ndash; it&rsquo;s already built into WordPress. That being the case, there are ways to customize the experience. We recommend checking out this guide to tapping into that potential.</p>
<p>Whether you&rsquo;re part of a team or working solo, give WordPress Notes a try. You may wonder how you lived without it!</p>
<div class="topics">
<h2>Related Topics</h2>
</div>
<p>                here. He recently started a writing service for WordPress products: WP Product Writeup.  He also has an opinion on just about every subject. You can follow his rants on Bluesky @karks.com.</p>
<p>
                        Read more articles by Eric Karkovack
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/quick-tip-how-to-use-wordpress-block-notes/">Quick Tip: How To Use WordPress Block Notes</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>8 CSS &#038; JavaScript Snippets for Adding Scroll Effects to Your Website</title>
		<link>https://thenokiablog.com/8-css-javascript-snippets-for-adding-scroll-effects-to-your-website/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 07:36:22 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS Effect Snippets]]></category>
		<category><![CDATA[CSS Snippets]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript Snippets]]></category>
		<category><![CDATA[Long Scrolling]]></category>
		<category><![CDATA[Parallax Scrolling]]></category>
		<category><![CDATA[Scrolling]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[UI Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/8-css-javascript-snippets-for-adding-scroll-effects-to-your-website/</guid>

					<description><![CDATA[<p>Scrolling is among the most boring necessities of digital design. Or is it? It&#8217;s easy for...</p>
<p>The post <a href="https://thenokiablog.com/8-css-javascript-snippets-for-adding-scroll-effects-to-your-website/">8 CSS &amp; JavaScript Snippets for Adding Scroll Effects to Your Website</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/06/8-css-javascript-snippets-for-adding-scroll-effects-to-your-website.jpg" class="ff-og-image-inserted"></div>
<p>Scrolling is among the most boring necessities of digital design. Or is it? It&rsquo;s easy for both designers and users to ignore. Yet, we spend much of our days moving up, down, and all around. There&rsquo;s something to be said for going the extra mile.</p>
<p>Thankfully, there is an opportunity to do more. Scroll effects can add an element of fun to the mix. They&rsquo;re also great for adding context and drawing attention to important content. Some effects even create a sense of immersion.</p>
<p>Web developers have found all manner of creative use cases. We scoured the CodePen archives to find eight prime examples of how CSS and JavaScript level up the user experience. We were quite impressed with the results.</p>
<p>Below, you&rsquo;ll find everything from basic elements to jaw-dropping visual presentations. You&rsquo;re sure to find inspiration for your next project. Let&rsquo;s get started!</p>
<h2><span id="Premium_ScrollTrigger_Panels">Premium ScrollTrigger Panels</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p class="title-details">Created by Ashish Ranjan</p>
<p>Here&rsquo;s a unique way to scroll through the sections of a webpage. This pen creates a &ldquo;stacking&rdquo; effect, where each new section is layered on top of the last. The previous section zooms and fades out, allowing you to read the current content distraction-free.</p>
<p>Impressively, scrolling up reverses the effect. The technique uses GSAP scroll trigger and makes a long page seem shorter.</p>
<p class="codepen" data-height="450" data-pen-title="PinStack Showcase - Premium ScrollTrigger Panels" data-preview="true" data-default-tab="result" data-slug-hash="JoKXJYQ" data-user="ash1198">See the Pen PinStack Showcase &ndash; Premium ScrollTrigger Panels by Ashish Ranjan</p>
<h2><span id="Scrolling_Text_Rotating_3D_Gallery">Scrolling Text &amp; Rotating 3D Gallery</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p class="title-details">Created by Luis Alberto Martinez Riancho</p>
<p>This 3-D gallery turns the classic carousel on its head. It combines scrolling text with a rotating cube that syncs in perfect harmony. Notice the shading and textures used to create a photorealistic feel.</p>
<p>The button-based navigation lets you avoid scrolling altogether, if that&rsquo;s your thing.</p>
<p class="codepen" data-height="450" data-pen-title="Six Faces / Walking The Cow" data-preview="true" data-default-tab="result" data-slug-hash="ZYpyoRV" data-user="luis-lessrain">See the Pen Six Faces / Walking The Cow by Luis Alberto Martinez Riancho</p>
<h2><span id="Stars_Scroll_Effect">Stars Scroll Effect</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p class="title-details">Created by Aleksa Rakocevic</p>
<p>Scroll effects don&rsquo;t have to be bold. There are times when subtlety is called for and appreciated by visitors. This starry background features a parallax motif with a hint of sparkles.</p>
<p>The result is a fun, yet classy, trip down the page. Consider it for blogs or other long-form content.</p>
<p class="codepen" data-height="450" data-pen-title="Stars scroll effect" data-preview="true" data-default-tab="result" data-slug-hash="QwEEWam" data-user="aleksa-rakocevic">See the Pen Stars scroll effect by Aleksa Rakocevic</p>
<h2><span id="Smooth_Scroll_Behavior">Smooth Scroll Behavior</span></h2>
<p class="title-details">Created by Margarita</p>
<p>Staying with the subtle aesthetic, the on-scroll effects of this pen are a great way to dress up an article. Text gently appears as you make your way down the page.</p>
<p>HTML scroll-behavior is used to ensure a smooth ride and add some flair to static content. This one is appropriate for virtually everyone.</p>
<p class="codepen" data-height="450" data-pen-title=" It Was Never A Competition &mdash; Full Story" data-preview="true" data-default-tab="result" data-slug-hash="OPRxZmV" data-user="Margarita-the-solid">See the Pen It Was Never A Competition &mdash; Full Story by Margarita</p>
<h2><span id="Infinite_Loop_Spiral">Infinite Loop Spiral</span></h2>
<p class="title-details">Created by Toc</p>
<p>Are you looking for a completely twisted take on a photo gallery? This spiral masterpiece will certainly grab attention. Scroll down, and this 3-D ribbon-shaped gallery spins through each image.</p>
<p>Use your mouse or finger to change perspectives. The effect is silky-smooth and will enhance your portfolio projects.</p>
<p class="codepen" data-height="450" data-pen-title="Infinite loop spiral" data-preview="true" data-default-tab="result" data-slug-hash="MYjZpOJ" data-user="ol-ivier">See the Pen Infinite loop spiral by Toc</p>
<h2><span id="CSS_Scroll-Timeline_Word_Highlight">CSS Scroll-Timeline Word Highlight</span></h2>
<p class="title-details">Created by Daniel Haim</p>
<p>Here&rsquo;s a way to list your services and/or accomplishments with style. The text on the left stays put as you scroll, while the right side jumps to the next word or phrase. </p>
<p>It uses the scroll-snap-align and scroll-snap-type CSS properties to keep the presentation tidy. JavaScript sets properties based on user action. The result is an attractive method for making an impact with typography.</p>
<p class="codepen" data-height="450" data-pen-title="CSS Scroll-Timeline Word Highlight" data-preview="true" data-default-tab="result" data-slug-hash="azmBEPL" data-user="danielhaim">See the Pen CSS Scroll-Timeline Word Highlight by Daniel Haim</p>
<h2><span id="Springy_Section_Edges">Springy Section Edges</span></h2>
<p class="title-details">Created by Tom Miller</p>
<p>Scrolling from one page section to another doesn&rsquo;t have to be boring. A small effect, like this &ldquo;springy&rdquo; animation, adds context and entertainment value to the process. Reach the bottom of a section, and you&rsquo;re welcomed with a bounce.</p>
<p>Here&rsquo;s an idea: maybe add some confetti when you reach the end of the page. After all, loyal visitors should be celebrated!</p>
<p class="codepen" data-height="450" data-pen-title="Springy Section Edges" data-preview="true" data-default-tab="result" data-slug-hash="WboQLVe" data-user="creativeocean">See the Pen Springy Section Edges by Tom Miller</p>
<h2><span id="Reverse_Scrolling_Columns">Reverse Scrolling Columns</span></h2>
<p class="title-details">Created by Ryan Yu</p>
<p>This photo gallery&rsquo;s multi-column scrolling is reminiscent of a slot machine. The columns are synced, but the middle section moves in the reverse direction. It&rsquo;s fun and immersive without overwhelming users.</p>
<p>Once again, GSAP scroll trigger serves as the secret sauce to the effect.</p>
<p class="codepen" data-height="450" data-pen-title="Reverse scrolling columns" data-preview="true" data-default-tab="result" data-slug-hash="XJdvXym" data-user="iamryanyu">See the Pen Reverse scrolling columns by Ryan Yu</p>
<h2><span id="Use_Scroll_Effects_To_Enhance_User_Experience">Use Scroll Effects To Enhance User Experience</span></h2>
<p>Scrolling doesn&rsquo;t have to be an afterthought in your design projects. The examples above demonstrate what&rsquo;s possible with a little code and imagination.</p>
<p>In some cases, these effects can be the star of the show. Consider the photo galleries in our roundup. They become more interesting and interactive when you go beyond the default grid layout. You get high-end form and functionality.</p>
<p>On the other hand, subtlety also has a place when adding scroll effects to more traditional pages. A hint of elegance can transform static content into something more memorable.</p>
<p>The decision is yours to make. Consider your audience and accessibility needs, then choose the effect that makes the most sense.</p>
<p>Want to see even more awesome scroll effects? Check out our CodePen collection!</p>
<h2><span id="More_CSS_Effects_Snippets">More CSS Effects Snippets</span></h2>
<p>here. He recently started a writing service for WordPress products: WP Product Writeup.  He also has an opinion on just about every subject. You can follow his rants on Bluesky @karks.com.</p>
<p>
                        Read more articles by Eric Karkovack
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/8-css-javascript-snippets-for-adding-scroll-effects-to-your-website/">8 CSS &amp; JavaScript Snippets for Adding Scroll Effects to Your Website</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
