<?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>Containers Archives - The NOKIA Blog</title>
	<atom:link href="https://thenokiablog.com/tag/containers/feed/" rel="self" type="application/rss+xml" />
	<link>https://thenokiablog.com/tag/containers/</link>
	<description></description>
	<lastBuildDate>Wed, 30 Sep 2026 17:04:05 +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>Containers Archives - The NOKIA Blog</title>
	<link>https://thenokiablog.com/tag/containers/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Celebrating Our Newest AWS Heroes – September 2026</title>
		<link>https://thenokiablog.com/celebrating-our-newest-aws-heroes-september-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 30 Sep 2026 17:04:05 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Amplify]]></category>
		<category><![CDATA[AWS Fargate]]></category>
		<category><![CDATA[AWS Heroes]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Serverless]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/celebrating-our-newest-aws-heroes-september-2026/</guid>

					<description><![CDATA[<p>Today, we&#8217;re excited to introduce the newest members of the AWS Heroes program. AWS Heroes are...</p>
<p>The post <a href="https://thenokiablog.com/celebrating-our-newest-aws-heroes-september-2026/">Celebrating Our Newest AWS Heroes – September 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/10/celebrating-our-newest-aws-heroes-september-2026.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Today, we&rsquo;re excited to introduce the newest members of the AWS Heroes program. AWS Heroes are a vibrant, worldwide group of AWS experts who go above and beyond to share knowledge, mentor others, and build thriving communities. These individuals make a real difference in helping developers and organizations succeed with AWS.</p>
<p>This month, we welcome three exceptional community leaders from across the globe, each bringing unique expertise and a deep commitment to empowering builders everywhere.</p>
<h2>Avinash Shashikant Dalvi &ndash; Bengaluru, India</h2>
<p><img decoding="async" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/10/celebrating-our-newest-aws-heroes-september-2026.jpg" width="175" height="263"> Serverless Hero  Avinash Shashikant Dalvi is a tech architect and co-organizer of AWS User Group Bengaluru who is focused on serverless, containers, and production-ready applications on AWS. He has delivered over 40 community talks, publishes the AWS for Product Builders newsletter, and creates technical content covering Amazon ECS, AWS Fargate, AWS Lambda, and AWS Amplify.</p>
<h2>Joanne Skiles &ndash; Orlando, USA</h2>
<p><img decoding="async" loading="lazy" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/10/celebrating-our-newest-aws-heroes-september-2026-1.png" width="175" height="263"> Serverless Hero Joanne Skiles is an engineering leader and educator with over 16 years of experience building full-stack systems, including serverless architecture and AI systems on AWS. She organizes the Orlando AWS User Group and teaches cloud and AI concepts through her YouTube channel, conference talks, and her podcasts Chaotic Commits and Her Career Unplugged. Joanne is also a professor in the Computer Science department at Rollins College, where she runs the Transparent Systems lab.</p>
<h2>Xiaofei Li &ndash; Shanghai, China</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><img decoding="async" loading="lazy" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/10/celebrating-our-newest-aws-heroes-september-2026-2.png" width="175" height="263"> Community Hero Xiaofei Li is an AWS Golden Jacket holder and is an active community leader in the Greater China Region, leading the Kiro, Amazon Quick, and Tokyo Chinese AWS communities. He founded the Kiro Chinese User Community (5,000+ members) and initiated the Chinese localization of AWS Builder Cards across 15 cities and 3,000+ participants. Xiaofei also mentors underserved students and supports Women in Tech initiatives.</p>
<h2>Learn More</h2>
<p>Visit the AWS Heroes webpage if you&rsquo;d like to learn more about the AWS Heroes program, or to connect with a Hero near you. To learn more about how to get involved with the AWS community, visit our AWS Builder Center.</p>
<p>&mdash; Taylor</p>
<p><!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/celebrating-our-newest-aws-heroes-september-2026/">Celebrating Our Newest AWS Heroes – September 2026</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>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>AWS Weekly Roundup: AWS Heroes Summit, Web Search on Amazon Bedrock, Dogwood, Kiro Crew, and more (August 10, 2026)</title>
		<link>https://thenokiablog.com/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 15:45:03 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Amazon DynamoDB]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Heroes]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Transform]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Serverless]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Week in Review]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026/</guid>

					<description><![CDATA[<p>Last week, we brought together AWS Heroes from around the world to connect, collaborate, and celebrate...</p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026/">AWS Weekly Roundup: AWS Heroes Summit, Web Search on Amazon Bedrock, Dogwood, Kiro Crew, and more (August 10, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/08/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Last week, we brought together AWS Heroes from around the world to connect, collaborate, and celebrate the builders who go above and beyond for the AWS community.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-105229" src="https://thenokiablog.com/wp-content/uploads/2026/08/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026.jpg" alt width="1280" height="833"></p>
<p>The AWS Heroes Summit, an invite-only annual gathering, brings global experts specializing in fields like AI, serverless, and containers together for direct collaboration, technical deep-dives, and feedback sessions with internal AWS product and service teams.</p>
<p>Day 1 started with an inspiring fireside chat from AWS CEO Matt Garman. From an insightful AMA with James Hamilton on Day 2 to breakout sessions from various product teams that sparked new ideas, our AWS Heroes excelled at sharing knowledge, lifting each other up, and turning conversations into collaborations. To learn more, read the attendee feedback on LinkedIn.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><strong><u>Last week&rsquo;s launches</u></strong><br>Here are some launches that got my attention:</p>
<ul>
<li>Web Search on Amazon Bedrock: Amazon Bedrock now enables OpenAI models (GPT-5.4, GPT-5.5, and GPT-5.6 Sol/Terra/Luna) to browse and retrieve information from the internet, allowing AI applications to access up-to-date information beyond their training data. This capability opens new possibilities for building AI agents and applications that can answer questions using real-time web content while maintaining data residency within your secured AWS environment with zero data egress. To get started, visit the AI blog post and the Amazon Bedrock User Guide.</li>
<li>Runtime Instances on Amazon Bedrock AgentCore: You can now deploy and run AI agents on dedicated runtime instances through Amazon Bedrock AgentCore, providing more control over agent execution environments with predictable performance and cost. To get started, visit  S&eacute;bastien&rsquo;s blog post and AgentCore documentation.</li>
<li>Vector search for Amazon DynamoDB: You can store and query vector embeddings alongside your existing data in DynamoDB without managing a separate vector database. DynamoDB already supports storing memory for AI agents, and with vector search you can now add semantic retrieval over that memory for agentic grounding, with predictable performance. To learn more, visit Esra&rsquo;s blog post and Amazon DynamoDB Developer Guide.</li>
<li>AWS Transform continuous modernization now generally available: This capability helps engineering teams analyze and remediate technical debt across source code repositories at scale. You can modernize mainframe and legacy workloads with an ongoing, automated approach rather than a one-time migration event. To learn more, visit Micah&rsquo;s preview blog post. You can also try the AWS Transform Kiro Power and agent plugins.</li>
<li>Up to 3,000 Mbps for AWS Lambda function bandwidth: AWS Lambda functions now support increased network bandwidth, enabling data-intensive workloads and faster communication between Lambda functions and other AWS services. This feature enables functions outside a VPC that are configured with 2 GB of memory or more to access network bandwidth that scales proportionally, from 625 Mbps at 2 GB up to 3,000 Mbps at 10 GB.</li>
</ul>
<p>For a full list of AWS announcements, be sure to keep an eye on the What&rsquo;s New with AWS page.</p>
<p><strong><u>Other AWS news</u></strong><br>Here are some additional projects and news items that you may find interesting:</p>
<ul>
<li>Introducing Dogwood: Runtime Verification for AI Agents: AWS open-sourced Dogwood, a purpose-built governance language for AI agents to support Cedar policies and add temporal conditions. Powering Dogwood, Amazon Bedrock AgentCore introduced temporal policies whose decisions depend on the history of an agent&rsquo;s actions within a session, not on the current request alone.</li>
<li>AWS supports Agent Plugins: An Open Standard for Portable Agent Extensions: AWS announced support for Agent Plugins, an open source, vendor-neutral specification that gives AI agent extensions a common packaging format so you can package an extension once and ship it to any client, including Kiro, VS Code, Cursor, or any tool that implements the spec.</li>
<li>Introducing Kiro Crew: Kiro Crew is a persistent, self-evolving workspace that keeps work moving, online or off, enabling collaborative multi-agent development workflows within the Kiro IDE. It&rsquo;s built for engineering work that goes beyond a single chat session, and spans repos, tools, and days. You can run several efforts in parallel or hand work to subagents that report back, so nothing waits in line.</li>
</ul>
<p>For a full list of AWS blog posts, be sure to keep an eye on the AWS Blogs page.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>Learn more about AWS, browse and join upcoming AWS-led in-person and virtual events, startup events, and developer-focused events including AWS Summits and AWS Community Days. Join the AWS Builder Center to connect with builders, share solutions, and access content that supports your development.</p>
<p>That is all for this week. Check back next Monday for another Weekly Roundup!</p>
<p>&mdash; Channy</p>
<p><!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-aws-heroes-summit-web-search-on-amazon-bedrock-dogwood-kiro-crew-and-more-august-10-2026/">AWS Weekly Roundup: AWS Heroes Summit, Web Search on Amazon Bedrock, Dogwood, Kiro Crew, and more (August 10, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Run isolated sandboxes with full lifecycle control: AWS Lambda introduces MicroVMs</title>
		<link>https://thenokiablog.com/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 22:40:07 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Firecracker]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Serverless]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/</guid>

					<description><![CDATA[<p>Today, we are announcing AWS Lambda MicroVMs, a new serverless compute primitive within AWS Lambda that...</p>
<p>The post <a href="https://thenokiablog.com/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/">Run isolated sandboxes with full lifecycle control: AWS Lambda introduces MicroVMs</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/06/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Today, we are announcing AWS Lambda MicroVMs, a new serverless compute primitive within AWS Lambda that lets you run code generated by users or AI in isolated, stateful execution environments. You get virtual machine level isolation, near-instant launch and resume, and direct control over environment lifecycle and state, all without managing infrastructure or building expertise in complex virtualization technologies. Lambda MicroVMs are powered by Firecracker, the same lightweight virtualization technology that has powered over 15 trillions of monthly Lambda function invocations.</p>
<p><strong><span>Why customers need this</span><br>
         <br></strong>Over the past few years a new class of multi-tenant applications has emerged that all share the need to hand each end user their own dedicated execution environment in which to safely run code that the application developer did not write. AI coding assistants, interactive code environments, data analytics platforms, vulnerability scanners, and game servers that run user-supplied scripts all fit this pattern. Building that capability today means making a difficult choice. Virtual machines deliver strong isolation but take minutes to start. Containers launch in seconds, yet their shared-kernel architecture requires significant custom hardening to safely contain untrusted code. Functions as a service are optimized for event-driven, request-response workloads, but are not designed for long-running interactive sessions that need to retain environment state across user interactions. That leaves developers either accepting tradeoffs between performance and isolation, or investing significant engineering resources to build and operate custom virtualization infrastructure to achieve isolated execution while delivering low-latency experiences to end-users. This presents an effort that demands deep expertise and pulls engineering time away from the product they are actually trying to build.</p>
<p>Lambda MicroVMs is purpose-built for exactly this gap. Each MicroVM gives a single end user or session its own isolated environment that launches rapidly, retains memory and disk state for the length of the session, and pauses to a low idle cost when the user steps away. Because the same Firecracker technology already underpins AWS Lambda Functions, you inherit the operational maturity of a service that has been running this stack at scale.</p>
<p><strong><span>Let&rsquo;s try it out</span><br>
         <br></strong>To get started, I navigated to the AWS Lambda console, where Lambda MicroVMs now appears in the left-hand navigation menu. I first need to create a MicroVM Image.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>I packaged a Flask web app and its Dockerfile into a zip file, uploaded it to an Amazon Simple Storage Service (Amazon S3) bucket.</p>
<p>My Flask API &ndash; app.py</p>
<pre class="unlimited-height-code"><code class="lang-python">import logging

from flask import Flask, jsonify

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)


@app.route("/")
def hello():
    app.logger.info("Received request to hello world endpoint")
    return jsonify(message="Hello, World!")


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
</code></pre>
<p>My Dockerfile</p>
<pre class="unlimited-height-code"><code>
FROM public.ecr.aws/lambda/microvms:al2023-minimal
RUN dnf install -y python3 python3-pip &amp;&amp; dnf clean all

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

EXPOSE 5000

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

</code></pre>
<p>I used the following command to create my MicroVM Image.</p>
<pre><code class="lang-bash">aws lambda-microvms create-microvm-image 
--code-artifact uri=&lt;path/to/s3/artifact.zip&gt; --name &lt;VM_image_name&gt; 
--base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 
--build-role-arn &lt;IAM role ARN&gt;</code></pre>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p><img loading="lazy" decoding="async" class="alignnone wp-image-104847 size-large" src="https://thenokiablog.com/wp-content/uploads/2026/06/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms-1.png" alt width="1024" height="577"></p>
<p>You can also create the MicroVM Image in the AWS Console as in the image above. Once I ran the command, Lambda retrieved the zip, ran the Dockerfile, initialized the application, and took a Firecracker snapshot of the running disk and memory state. Build logs streamed in real time to Amazon CloudWatch under <code>/aws/lambda/microvms/&lt;image-name&gt;</code>, and when the image was ready it appeared in the console with its Amazon Resource Name (ARN) and version number.</p>
<pre><code class="lang-bash">aws lambda-microvms run-microvm 
--image-identifier arn:aws:lambda:&lt;region&gt;:&lt;acct&gt;:microvm-image:my-image 
--execution-role-arn arn:aws:iam::&lt;acct&gt;:role/MicroVMExecutionRole 
--idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}'
</code></pre>
<p>Launching can also be done via the AWS Console or the CLI. I passed the image ARN and an idle policy configured to auto-suspend after 15 minutes of inactivity and auto-resume on the next incoming request. No networking setup was required. Lambda assigned the MicroVM a unique ID, returned a dedicated endpoint URL, and started a new MicroVM with my Flask app already running, since it was resumed from a snapshot. My Flask app was already running the moment the launch completed. One API call to get a fully initialized, bootstrapped compute environment.</p>
<p><img decoding="async" loading="lazy" class="alignnone size-large wp-image-104756" src="https://thenokiablog.com/wp-content/uploads/2026/06/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms-2.png" alt width="1024" height="729"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>To send traffic, I generated a short-lived auth token with the CLI and attached it to a plain HTTPS request using the <code>X-aws-proxy-auth</code> header. The request landed on my Flask app immediately. I then let the MicroVM sit idle past the suspend threshold, at which point the MicroVM was suspended, with its memory and disk state snapshotted and stored. I then sent another request, and it resumed with the application state fully intact. From the client side, the pause never happened.</p>
<p><img decoding="async" loading="lazy" class="alignnone size-large wp-image-104757" src="https://thenokiablog.com/wp-content/uploads/2026/06/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms-3.png" alt width="1024" height="229"></p>
<p><strong><span>How it works</span><br>
         <br></strong>Under the covers, Lambda MicroVMs delivers three capabilities that, until today, no single AWS compute service offered together. The first is virtual machine level isolation, which comes from Firecracker. Each session runs in its own dedicated MicroVM with no shared kernel and no shared resources between users, so untrusted code supplied by one user is contained to their execution environment, without access to other environments or the underlying system. The second is rapid launch and resume. The model is image-then-launch: you create a MicroVM Image by supplying a Dockerfile and code packaged as a zip artifact in Amazon S3, and Lambda runs your Dockerfile, initializes your application, and takes a Firecracker snapshot of the running environment&rsquo;s memory and disk state. Every subsequent MicroVM launched from that image resumes from the pre-initialized snapshot rather than booting cold, which means launches and idle resumes both achieve near-instant startup latency. Even a multi-gigabyte interactive session comes back online quickly enough to feel responsive to the end user. The third is stateful execution. A running MicroVM retains memory, disk, and running processes across the user&rsquo;s session. During idle periods, a MicroVM can be suspended &ndash; with memory and disk state intact &ndash; and resumed when traffic arrives. Installed packages, loaded models, and working &#64257;lesets are readily available when the user resumes their session. MicroVMs support up to 8 hours of total runtime and can be suspended automatically after a configurable idle window, which makes it straightforward to build products as varied as software vulnerability scans that complete in minutes, data analytics applications that run for hours, and interactive coding sessions with extended idle periods. As Lambda MicroVMs are started from pre-initialized snapshots, applications generating unique content, establishing network connections, or loading ephemeral data during initialization may need to integrate with service-provided hooks for compatibility.</p>
<p>Lambda MicroVMs is a new resource within AWS Lambda, with a distinct API surface. Lambda Functions remain the right choice for event-driven, request-response workloads, and Lambda MicroVMs is purpose-built for multi-tenant applications that need to hand each end user or session their own isolated environment to execute user- or AI-generated code. The two complement each other. An application using Lambda Functions for its event-driven backbone can call into Lambda MicroVMs for the steps that need to run untrusted code in isolation. You bring the application, and the service delivers the execution environment.</p>
<p><strong><span>Now available</span><br>
         <br></strong>AWS Lambda MicroVMs is available today in the US East (N. Virginia, Ohio), US West (Oregon), Europe (Ireland) and Asia Pacific (Tokyo) Regions, on the ARM64 architecture, with up to 16 vCPUs, 32 GB of memory, and 32 GB of disk per MicroVM. Idle MicroVMs can be suspended explicitly through an API call or automatically through a lifecycle policy, which reduces the running cost while preserving full state for fast resume. Pricing details can be found on the AWS Lambda pricing page.</p>
<p>To get started, visit the AWS Lambda console, or learn more on the Lambda MicroVMs product page. For documentation, see the Lambda MicroVMs Developer Guide.</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/">Run isolated sandboxes with full lifecycle control: AWS Lambda introduces MicroVMs</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Meet Our Newest AWS Heroes – May 2026</title>
		<link>https://thenokiablog.com/meet-our-newest-aws-heroes-may-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 27 May 2026 16:15:05 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Nova]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AWS Heroes]]></category>
		<category><![CDATA[AWS re:Invent]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Serverless]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/meet-our-newest-aws-heroes-may-2026/</guid>

					<description><![CDATA[<p>We&#8217;re excited to welcome four outstanding community leaders as our newest AWS Heroes. These individuals embody...</p>
<p>The post <a href="https://thenokiablog.com/meet-our-newest-aws-heroes-may-2026/">Meet Our Newest AWS Heroes – May 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/meet-our-newest-aws-heroes-may-2026.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>We&rsquo;re excited to welcome four outstanding community leaders as our newest AWS Heroes. These individuals embody the spirit of collaboration and knowledge sharing that makes the AWS community thrive. From building AI-powered tools that help fellow builders navigate AWS re:Invent, to leading some of the largest AWS communities in Latin America, to sharing deep cloud architecture expertise across blogs and events. Their dedication to lifting others up through education, mentorship, and community organizing inspires builders around the world.</p>
<h2>Damiano Giorgi &ndash; Pavia, Italy</h2>
<p><img loading="lazy" decoding="async" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/05/meet-our-newest-aws-heroes-may-2026-1.png" width="175" height="263"> Artificial Intelligence Hero Damiano Giorgi is a Cloud Solutions Architect focused on AI and its evolution, who transitioned from on-premises (on-prem) systems engineering to AWS and never looked back. He helps organize AWS User Group Pavia and AWS User Group Milan, and shares content on his personal blog, &ldquo;Bass and Bytes.&rdquo; Damiano developed the &ldquo;Unofficial post:Invent Session Suggester,&rdquo; powered by Amazon Bedrock and Amazon Nova, to help builders find AWS re:Invent sessions matching their interests. He speaks at conferences across Europe including AWS Summit Milan, AWS Community Day Italy, Adria, Greece, and the Netherlands.</p>
<h2>Darryl Ruggles &ndash; Ottawa, Canada</h2>
<p><img decoding="async" loading="lazy" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/05/meet-our-newest-aws-heroes-may-2026.jpg" width="175" height="263"> Serverless Hero Darryl Ruggles is a Cloud Solutions Architect who spent many years as a software developer before focusing on AWS application and AI/ML architectures. He shares knowledge across serverless, containers, AI/ML, and FinOps through his blog, LinkedIn, and published projects. Darryl is an active member of many online AWS communities including &ldquo;Believe In Serverless&rdquo; and loves interacting with the community at events both online and in person.</p>
<h2>Ricardo Daniel Ceci &ndash; Buenos Aires, Argentina</h2>
<p><img decoding="async" loading="lazy" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/05/meet-our-newest-aws-heroes-may-2026-1.jpg" width="175" height="263"> Artificial Intelligence Hero Ricardo Daniel Ceci leads the AWS User Group Buenos Aires, which is the largest AWS community in Argentina with nearly 2,400 members. He is also the principal organizer of the AWS Community Day Argentina and was recognized as the AWS Community Leader of the Year 2025 for LATAM. Ricardo hosts a podcast featuring conversations with cloud experts, AWS Heroes, and developer advocates across Latin America. He has over fifteen years of experience in cloud and web development, and is passionate about empowering Spanish-speaking builders and lowering the barrier to cloud and AI across LATAM.</p>
<h2>Matias Kreder &ndash; Buenos Aires, Argentina</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><img decoding="async" loading="lazy" class="alignleft" src="https://thenokiablog.com/wp-content/uploads/2026/05/meet-our-newest-aws-heroes-may-2026-2.png" width="175" height="263"> Artificial Intelligence Hero Matias Kreder is an AWS Certification Subject Matter Expert (SME) who contributed to multiple AI/ML certifications, including the AWS Certified AI Practitioner exam. His&nbsp;journey began with AWS DeepRacer where he qualified three times as a finalist, which sparked his community work organizing racing events and ML talks across the region. As an AWS User Group Leader for Buenos Aires, he organized the AWS Community Day Argentina 2025 and speaks at community events throughout LATAM.</p>
<h2>Learn More</h2>
<p>Visit the AWS Heroes webpage if you&rsquo;d like to learn more about the AWS Heroes program, or to connect with a Hero near you.</p>
<p>&mdash; Taylor</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/meet-our-newest-aws-heroes-may-2026/">Meet Our Newest AWS Heroes – May 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Launching S3 Files, making S3 buckets accessible as file systems</title>
		<link>https://thenokiablog.com/launching-s3-files-making-s3-buckets-accessible-as-file-systems/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 19:18:32 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon Elastic Container Service]]></category>
		<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Amazon FSx]]></category>
		<category><![CDATA[Amazon FSx for Lustre]]></category>
		<category><![CDATA[Amazon FSx for NetApp ONTAP]]></category>
		<category><![CDATA[Amazon Simple Storage Service (S3)]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Management Console]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/launching-s3-files-making-s3-buckets-accessible-as-file-systems/</guid>

					<description><![CDATA[<p>I&#8217;m excited to announce Amazon S3 Files, a new file system that seamlessly connects any AWS...</p>
<p>The post <a href="https://thenokiablog.com/launching-s3-files-making-s3-buckets-accessible-as-file-systems/">Launching S3 Files, making S3 buckets accessible as file systems</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/04/launching-s3-files-making-s3-buckets-accessible-as-file-systems.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>I&rsquo;m excited to announce Amazon S3 Files, a new file system that seamlessly connects any AWS compute resource with Amazon Simple Storage Service (Amazon S3).</p>
<p>More than a decade ago, as an AWS trainer, I spent countless hours explaining the fundamental differences between object storage and file systems. My favorite analogy was comparing S3 objects to books in a library (you can&rsquo;t edit a page, you need to replace the whole book) versus files on your computer that you can modify page by page. I drew diagrams, created metaphors, and helped customers understand why they needed different storage types for different workloads. Well, today that distinction becomes a bit more flexible.</p>
<p>With S3 Files, Amazon S3 is the first and only cloud object store that offers fully-featured, high-performance file system access to your data. It makes your buckets accessible as file systems. This means changes to data on the file system are automatically reflected in the S3 bucket and you have fine-grained control over synchronization. S3 Files can be attached to multiple compute resources enabling data sharing across clusters without duplication.</p>
<p>Until now, you had to choose between Amazon S3 cost, durability, and the services that can natively consume data from it or a file system&rsquo;s interactive capabilities. S3 Files eliminates that tradeoff. S3 becomes the central hub for all your organization&rsquo;s data. It&rsquo;s accessible directly from any AWS compute instance, container, or function, whether you&rsquo;re running production applications, training ML models, or building agentic AI systems.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>You can access any general purpose bucket as a native file system on your Amazon Elastic Compute Cloud (Amazon EC2) instances, containers running on Amazon Elastic Container Service (Amazon ECS) or Amazon Elastic Kubernetes Service (Amazon EKS), or AWS Lambda functions. The file system presents S3 objects as files and directories, supporting all Network File System (NFS) v4.1+ operations like creating, reading, updating, and deleting files.</p>
<p>As you work with specific files and directories through the file system, associated file metadata and contents are placed onto the file system&rsquo;s high-performance storage. By default, files that benefit from low-latency access are stored and served from the high performance storage. For files not stored on high performance storage such as those needing large sequential reads, S3 Files automatically serves those files directly from Amazon S3 to maximize throughput. For byte-range reads, only the requested bytes are transferred, minimizing data movement and costs.</p>
<p>The system also supports intelligent pre-fetching to anticipate your data access needs. You have fine-grained control over what gets stored on the file system&rsquo;s high performance storage. You can decide whether to load full file data or metadata only, which means you can optimize for your specific access patterns.</p>
<p>Under the hood, S3 Files uses Amazon Elastic File System (Amazon EFS) and delivers ~1ms latencies for active data. The file system supports concurrent access from multiple compute resources with NFS close-to-open consistency, making it ideal for interactive, shared workloads that mutate data, from agentic AI agents collaborating through file-based tools to ML training pipelines processing datasets.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p><span><strong>Let me show you how to get started.<br>
          <br></strong></span>Creating my first Amazon S3 file system, mounting, and using it from an EC2 instance is straightforward.</p>
<p>I have an EC2 instance and a general purpose bucket. In this demo, I configure an S3 file system and access the bucket from an EC2 instance, using regular file system commands.</p>
<p>For this demo, I use the AWS Management Console. You can also use the AWS Command Line Interface (AWS CLI) or infrastructure as code (IaC).</p>
<p>Here is the architecture diagram for this demo.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-103634" src="https://thenokiablog.com/wp-content/uploads/2026/04/launching-s3-files-making-s3-buckets-accessible-as-file-systems-1.png" alt="S3 Files demo architecture" width="1024" height="596"><strong>Step 1: </strong>Create an S3 file system.</p>
<p>On the Amazon S3 section of the console, I choose <strong>File systems</strong> and then <strong>Create file system</strong>.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-103599" src="https://thenokiablog.com/wp-content/uploads/2026/04/launching-s3-files-making-s3-buckets-accessible-as-file-systems-2.png" alt="S3 Files create file system" width="1024" height="581"></p>
<p>I enter the name of the bucket I want to expose as a file system and choose <strong>Create file system</strong>.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-103600" src="https://thenokiablog.com/wp-content/uploads/2026/04/launching-s3-files-making-s3-buckets-accessible-as-file-systems-3.png" alt="S3 Files create file system, part 2" width="1024" height="526"></p>
<p><strong>Step 2: </strong>Discover the mount target.</p>
<p>A mount target is a network endpoint that will live in my virtual private cloud (VPC). It allows my EC2 instance to access the S3 file system.</p>
<p>The console creates the mount targets automatically. I take notes of the <strong>Mount target ID</strong>s on the <strong>Mount targets</strong> tab.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-103601" src="https://thenokiablog.com/wp-content/uploads/2026/04/launching-s3-files-making-s3-buckets-accessible-as-file-systems-4.png" alt width="1024" height="581"></p>
<p>When using the CLI, two separate commands are necessary to create the file system and its mount targets. First, I create the S3 file system with <code>create-file-system</code>. Then, I create the mount target with <code>create-mount-target.</code></p>
<p><strong>Step 3: </strong>Mount the file system on my EC2 instance.</p>
<p>After it&rsquo;s connected to an EC2 instance, I type:</p>
<p><code>sudo mkdir /home/ec2-user/s3files</code> <code>sudo mount -t s3files fs-0aa860d05df9afdfe:/ /home/ec2-user/s3files</code></p>
<p>I can now work with my S3 data directly through the mounted file system in <code>~/s3files</code>, using standard file operations.</p>
<p>When I make updates to my files in the file system, S3 automatically manages and exports all updates as a new object or a new version on an existing object back in my S3 bucket within minutes.</p>
<p>Changes made to objects on the S3 bucket are visible in the file system within a few seconds but can sometimes take a minute or longer.</p>
<pre><code class="lang-bash"># Create a file on the EC2 file system 
echo "Hello S3 Files" &gt; s3files/hello.txt 

# and verify it's here 
ls -al s3files/hello.txt
 -rw-r--r--. 1 ec2-user ec2-user 15 Oct 22 13:03 s3files/hello.txt 

# See? the file is also on S3 
aws s3 ls s3://s3files-aws-news-blog/hello.txt 
2025-10-22 13:04:04 15 hello.txt 

# And the content is identical! 
aws s3 cp s3://s3files-aws-news-blog/hello.txt . &amp;&amp; cat hello.txt
Hello S3 Files</code></pre>
<p><span><strong>Things to know<br>
          <br></strong></span>Let me share some important technical details that I think you&rsquo;ll find useful.</p>
<p>Another question I frequently hear in customer conversations is about choosing the right file service for your workloads. Yes, I know what you&rsquo;re thinking: AWS and its seemingly overlapping services, keeping cloud architects entertained during their architecture review meetings. Let me help demystify this one.</p>
<p>S3 Files works best when you need interactive, shared access to data that lives in Amazon S3 through a high performance file system interface. It&rsquo;s ideal for workloads where multiple compute resources&mdash;whether production applications, agentic AI agents using Python libraries and CLI tools, or machine learning (ML) training pipelines&mdash;need to read, write, and mutate data collaboratively. You get shared access across compute clusters without data duplication, sub-millisecond latency, and automatic synchronization with your S3 bucket.</p>
<p>For workloads migrating from on-premises NAS environments, Amazon FSx provides the familiar features and compatibility you need. Amazon FSx is also ideal for high-performance computing (HPC) and GPU cluster storage with Amazon FSx for Lustre. It&rsquo;s particularly valuable when your applications require specific file system capabilities from Amazon FSx for NetApp ONTAP, Amazon FSx for OpenZFS, or Amazon FSx for Windows File Server.</p>
<p><span><strong>Pricing and availability<br>
          <br></strong></span>S3 Files is available today in all commercial AWS Regions.</p>
<p class="jss273" data-pm-slice="1 1 []">You pay for the portion of data stored in your S3 file system, for small file read and all write operations to the file system, and for S3 requests during data synchronization between the file system and the S3 bucket. The Amazon S3 pricing page has all the details.</p>
<p>From discussions with customers, I believe S3 Files helps simplify cloud architectures by eliminating data silos, synchronization complexity, and manual data movement between objects and files. Whether you&rsquo;re running production tools that already work with file systems, building agentic AI systems that rely on file-based Python libraries and shell scripts, or preparing datasets for ML training, S3 Files lets these interactive, shared, hierarchical workloads access S3 data directly without choosing between the durability of Amazon S3 and cost benefits and a file system&rsquo;s interactive capabilities. You can now use Amazon S3 as the place for all your organizations&rsquo; data, knowing the data is accessible directly from any AWS compute instance, container, and function.</p>
<p>To learn more and get started, visit the S3 Files documentation.</p>
<p>I&rsquo;d love to hear how you use this new capability. Feel free to share your feedback in the comments below.</p>
<p>       &mdash; seb <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/launching-s3-files-making-s3-buckets-accessible-as-file-systems/">Launching S3 Files, making S3 buckets accessible as file systems</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Announcing managed daemon support for Amazon ECS Managed Instances</title>
		<link>https://thenokiablog.com/announcing-managed-daemon-support-for-amazon-ecs-managed-instances/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 23:31:24 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon Elastic Container Service]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/announcing-managed-daemon-support-for-amazon-ecs-managed-instances/</guid>

					<description><![CDATA[<p>Today, we&#8217;re announcing managed daemon support for Amazon Elastic Container Service (Amazon ECS) Managed Instances. This...</p>
<p>The post <a href="https://thenokiablog.com/announcing-managed-daemon-support-for-amazon-ecs-managed-instances/">Announcing managed daemon support for Amazon ECS Managed Instances</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/04/announcing-managed-daemon-support-for-amazon-ecs-managed-instances.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Today, we&rsquo;re announcing managed daemon support for Amazon Elastic Container Service (Amazon ECS) Managed Instances. This new capability extends the managed instances experience we introduced in September 2025, by giving platform engineers independent control over software agents such as monitoring, logging, and tracing tools, without requiring coordination with application development teams, while also improving reliability by ensuring every instance consistently runs required daemons and enabling comprehensive host-level monitoring.</p>
<p>When running containerized workloads at scale, platform engineers manage a wide range of responsibilities, from scaling and patching infrastructure to keeping applications running reliably and maintaining the operational agents that support those applications. Until now, many of these concerns were tightly coupled. Updating a monitoring agent meant coordinating with application teams, modifying task definitions, and redeploying entire applications, a significant operational burden when you&rsquo;re managing hundreds or thousands of services.</p>
<p><span><strong>Decoupled lifecycle management for daemons<br>
          <br></strong></span>Amazon ECS now introduces a dedicated managed daemons construct that enables platform teams to centrally manage operational tooling. This separation of concerns allows platform engineers to independently deploy and update monitoring, logging, and tracing agents to infrastructure, while enforcing consistent use of required tools across all instances, without requiring application teams to redeploy their services. Daemons are guaranteed to start before application tasks and drain last, ensuring that logging, tracing, and monitoring are always available when your application needs them.</p>
<p>Platform engineers can deploy managed daemons across multiple capacity providers, or target specific capacity providers, giving them flexibility in how they roll out agents across their infrastructure. Resource management is also centralized, allowing teams to define daemon CPU and memory parameters separately from application configurations with no need to rebuild AMIs or update task definitions, while optimizing resource utilization since each instance runs exactly one daemon copy shared across multiple application tasks.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><span><strong>Let&rsquo;s try it out<br>
          <br></strong></span>To take ECS Managed Daemons for a spin, I decided to start with the Amazon CloudWatch Agent as my first managed daemon. I had previously set up an Amazon ECS cluster with a Managed Instance capacity provider using the documentation.</p>
<p>From the Amazon Elastic Container Service console, I noticed a new <strong>Daemon task definitions</strong> option in the navigation pane, where I can define my managed daemons.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-103545" src="https://thenokiablog.com/wp-content/uploads/2026/04/announcing-managed-daemon-support-for-amazon-ecs-managed-instances-1.png" alt="Managed daemons console" width="1024" height="528"></p>
<p>I chose <strong>Create new daemon task definition</strong> to get started. For this example, I configured the CloudWatch Agent with 1 vCPU and 0.5 GB of memory. In the <strong>Daemon task definition family field</strong>, I entered a name I&rsquo;d recognize later.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>For the <strong>Task execution role</strong>, I selected <strong>ecsTaskExecutionRole</strong> from the dropdown. Under the <strong>Container</strong> section, I gave my container a descriptive name and pasted in the image URI: <code>public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest</code> along with a few additional details.</p>
<p>After reviewing everything, I chose <strong>Create</strong>.</p>
<p>Once my daemon task definition was created, I navigated to the <strong>Clusters</strong> page, selected my previously created cluster and found the new <strong>Daemons</strong> tab.</p>
<p><img decoding="async" loading="lazy" class="alignnone size-large wp-image-103546" src="https://thenokiablog.com/wp-content/uploads/2026/04/announcing-managed-daemon-support-for-amazon-ecs-managed-instances-2.png" alt="Managed daemons 2" width="1024" height="553"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>Here I can simply click the <strong>Create daemon</strong> button and complete the form to configure my daemon.</p>
<p><img decoding="async" loading="lazy" class="alignnone size-large wp-image-103547" src="https://thenokiablog.com/wp-content/uploads/2026/04/announcing-managed-daemon-support-for-amazon-ecs-managed-instances-3.png" alt="Managed daemons 3" width="1024" height="575"></p>
<p>Under <strong>Daemon configuration</strong>, I selected my newly created daemon task definition family and then assigned my daemon a name. For <strong>Environment configuration</strong>, I selected the ECS Managed Instances capacity provider I had set up earlier. After confirming my settings, I chose <strong>Create</strong>.</p>
<p>Now ECS automatically ensures the daemon task launches first on every provisioned ECS managed instance in my selected capacity provider. To see this in action, I deployed a sample nginx web service as a test workload. Once my workload was deployed, I could see in the console that ECS Managed Daemons had automatically deployed the CloudWatch Agent daemon alongside my application, with no manual intervention required.</p>
<p>When I later updated my daemon, ECS handled the rolling deployment automatically by provisioning new instances with the updated daemon, starting the daemon first, then migrating application tasks to the new instances before terminating the old ones. This &ldquo;start before stop&rdquo; approach ensures continuous daemon coverage: your logging, monitoring, and tracing agents remain operational throughout the update with no gaps in data collection. The drain percentage I configured controlled the pace of this replacement, giving me complete control over addon updates without any application downtime.</p>
<p><span><strong>How it works<br>
          <br></strong></span>The managed daemon experience introduces a new daemon task definition that is separate from task definitions, with its own parameters and validation scheme. A new <code>daemon_bridge</code> network mode enables daemons to communicate with application tasks while remaining isolated from application networking configurations.</p>
<p>Managed daemons support advanced host-level access capabilities that are essential for operational tooling. Platform engineers can configure daemon tasks as privileged containers, add additional Linux capabilities, and mount paths from the underlying host filesystem. These capabilities are particularly valuable for monitoring and security agents that require deep visibility into host-level metrics, processes, and system calls.</p>
<p>When a daemon is deployed, ECS launches exactly one daemon process per container instance before placing application tasks. This guarantees that operational tooling is in place before your application starts receiving traffic. ECS also supports rolling deployments with automatic rollbacks, so you can update agents with confidence.</p>
<p><span><strong>Now available<br>
          <br></strong></span>Managed daemon support for Amazon ECS Managed Instances is available today in all AWS Regions. To get started, visit the Amazon ECS console or review the Amazon ECS documentation. You can also explore the new managed daemons Application Programming Interface (APIs) by visiting this website.</p>
<p>There is no additional cost to use managed daemons. You pay only for the standard compute resources consumed by your daemon tasks.</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/announcing-managed-daemon-support-for-amazon-ecs-managed-instances/">Announcing managed daemon support for Amazon ECS Managed Instances</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dropdowns Inside Scrollable Containers: Why They Break And How To Fix Them Properly</title>
		<link>https://thenokiablog.com/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly/</guid>

					<description><![CDATA[<p>Dropdowns often work perfectly until they&#8217;re placed inside a scrollable panel, where they can get clipped,...</p>
<p>The post <a href="https://thenokiablog.com/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly/">Dropdowns Inside Scrollable Containers: Why They Break And How To Fix Them Properly</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>Dropdowns often work perfectly until they&rsquo;re placed inside a scrollable panel, where they can get clipped, and half the menu disappears behind the container&rsquo;s edge. Godstime Aburu explains why this happens and offers practical solutions to fix it.</section>
</p>
<p>The scenario is almost always the same, which is a data table inside a scrollable container. Every row has an action menu, a small dropdown with some options, like <strong>Edit</strong>, <strong>Duplicate</strong>, and <strong>Delete</strong>. You build it, it seems to work perfectly in isolation, and then someone puts it inside that scrollable <code>div</code> and things fall apart. I&rsquo;ve seen this exact bug in three different codebases: the container, the stack, and the framework, all different. The bug, though, is totally identical.</p>
<p>The dropdown gets clipped at the container&rsquo;s edge. Or it shows up behind content that should logically be below it. Or it works fine until the user scrolls, and then it drifts.<br>
You reach for <code>z-index: 9999</code>. Sometimes it helps, but other times it does absolutely nothing. That inconsistency is the first clue that something deeper is happening.</p>
<p>The reason it keeps coming back is that three separate browser systems are involved, and most developers understand each one on its own but never think about what happens when all three collide: <strong>overflow</strong>, <strong>stacking contexts</strong>, and <strong>containing blocks</strong>.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="410" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly.jpg" alt="Three browser systems: overflow clipping, stacking contexts, and containing blocks."><figcaption class="op-vertical-bottom">Three browser systems: overflow clipping, stacking contexts, and containing blocks. (Large preview)</figcaption></figure>
<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>Once you understand how all three interact, the failure modes stop feeling random. In fact, they become predictable.</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://www.smashingmagazine.com/images/smashing-cat/cat-scubadiving-panel.svg" alt="Feature Panel" width="257" height="355"></div>


<h2 id="the-three-things-actually-causing-this">The Three Things Actually Causing This</h2>
<p>Let&rsquo;s look at each of those items in detail.</p>
<h3 id="the-overflow-problem">The Overflow Problem</h3>
<p>When you set <code>overflow: hidden</code>, <code>overflow: scroll</code>, or <code>overflow: auto</code> on an element, the browser will clip anything that extends beyond its bounds, including absolutely positioned descendants.</p>
<pre><code class="language-css">.scroll-container {
  overflow: auto;
  height: 300px;
  /* This will clip the dropdown, full stop */
}

.dropdown {
  position: absolute;
  /* Doesn't matter -- still clipped by .scroll-container */
}
</code></pre>
<p>That surprised me the first time I ran into it. I&rsquo;d assumed <code>position: absolute</code> would let an element escape a container&rsquo;s clipping. It doesn&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>In practice, that means an absolutely positioned menu can be cut off by any ancestor that has a non-visible overflow value, even if that ancestor isn&rsquo;t the menu&rsquo;s containing block. Clipping and positioning are separate systems. They just happen to collide in ways that look completely random until you understand both.</p>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="RNGZNPw" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Overflow &amp; Clipping [forked]](https://codepen.io/smashingmag/pen/RNGZNPw) by BboyGT.</p><figcaption>See the Pen Overflow &amp; Clipping [forked] by BboyGT.</figcaption></figure>
<p>This is also an accessibility problem, not just a visual one. When a dropdown is clipped, it&rsquo;s still in the DOM. A keyboard user can still focus on it. They just can&rsquo;t see what they&rsquo;re focusing on. In my testing, I saw screen readers announce menu items that were invisible to sighted users. That disconnect is a real problem. It&rsquo;s also the kind of thing that passes a visual review completely fine.</p>
<h3 id="the-stacking-context-trap">The Stacking Context Trap</h3>
<p>Think of a stacking context as a sealed layer. Whatever is inside it is painted together, as one block. Nothing inside it can escape above something outside it, no matter what <code>z-index</code> you use.</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>The thing is, a lot of CSS properties create a new stacking context. I didn&rsquo;t know half of these triggered a new context until I started debugging <code>z-index</code> issues and had to look them up.</p>
<ul>
<li><code>position</code> with a <code>z-index</code> value other than <code>auto</code>;</li>
<li><code>opacity</code> less than <code>1</code>;</li>
<li><code>transform</code>, <code>filter</code>, <code>perspective</code>, <code>clip-path</code>, or <code>mask</code>;</li>
<li><code>will-change</code> referencing any of the above;</li>
<li><code>isolation: isolate</code>;</li>
<li><code>contain: layout</code> or <code>paint</code>.</li>
</ul>
<p>This is exactly why <code>z-index: 9999</code> sometimes does nothing. If your dropdown is trapped inside a stacking context that paints below another stacking context, its <code>z-index</code> value doesn&rsquo;t matter at all. <code>z-index</code> is only compared between siblings in the same stacking context. That&rsquo;s how a modal with <code>z-index: 1</code> can sit on top of your dropdown with <code>z-index: 9999</code>. They are not in the same context. The comparison never happens.</p>
<p>That kind of <code>z-index</code> war is never going to be won. You&rsquo;re fighting in the wrong arena.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="405" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly-1.jpg" alt="The dropdown&rsquo;s z-index: 9999 only competes inside the card&rsquo;s stacking context. The card paints below the modal, so the fight never happens."><figcaption class="op-vertical-bottom">The dropdown&rsquo;s <code>z-index: 9999</code> only competes inside the card&rsquo;s stacking context. The card paints below the modal, so the fight never happens. (Large preview)</figcaption></figure>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="zxKdxGL" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Stacking Contexts [forked]](https://codepen.io/smashingmag/pen/zxKdxGL) by BboyGT.</p><figcaption>See the Pen Stacking Contexts [forked] by BboyGT.</figcaption></figure>
<h3 id="the-containing-block-surprise">The Containing Block Surprise</h3>
<p>I learned something uncomfortable about containing blocks early on: <strong>Absolute positioning does not mean &ldquo;position anywhere.&rdquo;</strong> The browser finds the nearest positioned ancestor and treats it as the reference frame for that element&rsquo;s coordinates and dimensions.</p>
<p>If that ancestor is deep inside a scroll container, the dropdown&rsquo;s coordinates are calculated relative to it. When the container scrolls, those coordinates don&rsquo;t update. The trigger moves. The dropdown stays put.</p>
<h2 id="why-absolute-positioning-fails-alone">Why Absolute Positioning Fails Alone</h2>
<p>For a long time, <code>position: absolute</code> was my default answer for dropdowns. It works in isolation. The moment you put it inside a real application, though, things start breaking in ways that don&rsquo;t feel connected to anything you changed.</p>
<p>In a clean DOM, <code>position: absolute</code> works fine. Real applications are just messier. There&rsquo;s almost always something up the ancestor tree that creates an unexpected stacking context or clips descendants.</p>
<p>I ran into this with a dropdown inside a table, which lived inside a scrollable <code>div</code>, where a card component somewhere up the tree had <code>transform: translateZ(0)</code> applied as a GPU compositing hint. That transform created a new stacking context. The dropdown was trapped below everything outside the card that had a non-auto <code>z-index</code>. And the scroll container was clipping it regardless.</p>
<p>Debugging this felt like following a trail of ghosts with three different ancestors, three different failure modes, and one invisible dropdown. Once I stopped trying to patch the symptom and started tracing which ancestor was responsible, the root cause became obvious.</p>
<h2 id="the-fixes-that-actually-work">The Fixes That Actually Work</h2>
<p>Here&rsquo;s what does work.</p>
<p>What finally worked for me was getting the dropdown out of the problematic part of the DOM entirely, rendering it directly as a child of <code>document.body</code> instead. In React and Vue, this is called a <strong>portal</strong>. In vanilla JavaScript, it&rsquo;s just <code>document.body.appendChild()</code>.</p>
<p>Once it&rsquo;s at the body level, none of the ancestor clipping or stacking context problems apply. The dropdown is outside all of it. <code>z-index</code> works the way you expect it to.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="400" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly-2.jpg" alt="Portal Pattern: DOM structure before vs. after"><figcaption class="op-vertical-bottom">Portalling moves the dropdown out of the ancestor tree entirely. The overflow and stacking context problems don&rsquo;t follow it because it&rsquo;s no longer a descendant of either ancestor. (Large preview)</figcaption></figure>
<p>Here&rsquo;s a React example using <code>createPortal</code>:</p>
<div class="break-out">
<pre><code class="language-javascript">import { createPortal } from 'react-dom';
import { useState, useEffect, useRef } from 'react';

function Dropdown({ anchorRef, isOpen, children }) {
  const [position, setPosition] = useState({ top: 0, left: 0 });

  useEffect(() =&gt; {
    if (isOpen &amp;&amp; anchorRef.current) {
      const rect = anchorRef.current.getBoundingClientRect();
      setPosition({
        top: rect.bottom + window.scrollY,
        left: rect.left + window.scrollX,
      });
    }
  }, [isOpen, anchorRef]);

  if (!isOpen) return null;

  return createPortal(
    &lt;div
      id="dropdown-demo"
      role="menu"
      className="dropdown-menu"
      style={{ position: 'absolute', top: position.top, left: position.left }}
    &gt;
      {children}
    &lt;/div&gt;,
    document.body
  );
}
</code></pre>
</div>
<figure class="break-out">
<p data-height="480" data-theme-id="light" data-slug-hash="Kwgvwdv" data-user="smashingmag" data-default-tab="result" class="codepen">See the Pen [Portal Fix [forked]](https://codepen.io/smashingmag/pen/Kwgvwdv) by BboyGT.</p><figcaption>See the Pen Portal Fix [forked] by BboyGT.</figcaption></figure>
<p>In my case, the fix required explicit accessibility work. When I <code>portal</code>-led the menu out of the DOM to escape clipping, I also had to restore the logical relationship for keyboard and screen reader users, move focus into the menu when it opens, and reliably return focus to the trigger on close. That extra bit of JavaScript fixes the accessibility gap the portal creates.</p>
<pre><code class="language-html">&lt;button
  id="dropdown-toggle"
  aria-haspopup="menu"
  aria-expanded="false"
  aria-controls="dropdown-demo"
&gt;
  Actions
&lt;/button&gt;

&lt;ul id="dropdown-demo" role="menu" hidden&gt;
  &lt;li role="menuitem"&gt;Edit&lt;/li&gt;
  &lt;li role="menuitem"&gt;Duplicate&lt;/li&gt;
  &lt;li role="menuitem"&gt;Delete&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p>Portals fixed the clipping quickly, but they came with trade-offs, and I learned the hard way. In one repo, the dropdown lost theme context because it rendered outside the provider. In another repo, the close animation felt detached because events were routed differently. Each required a small targeted fix, context forwarding, explicit focus restoration, or moving the animation into the portal, but together they show portals are a surgical tool, not a one-click replacement.</p>
<h3 id="fixed-positioning-and-why-it-s-trickier-than-it-looks">Fixed Positioning (And Why It&rsquo;s Trickier Than It Looks)</h3>
<p>Fixed positioning can feel like a simple solution. Instead of being positioned relative to an ancestor, the element is positioned relative to the viewport itself. But transforms, and other properties as we saw earlier, create containing blocks that can prevent a <code>position: fixed</code> element from escaping a container.</p>
<pre><code class="language-javascript">.dropdown-menu {
  position: fixed;
  /* Coordinates set via JavaScript */
}


function positionDropdown(trigger, dropdown) {
  const rect = trigger.getBoundingClientRect();
  dropdown.style.top = `${rect.bottom}px`;
  dropdown.style.left = `${rect.left}px`;
}
</code></pre>
<p>While debugging, I found a transform on an ancestor that stole the containing block, which explained why the menu behaved as if it were stuck even though it was supposedly fixed.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="385" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly-3.jpg" alt="Fixed Positioning"><figcaption class="op-vertical-bottom"><code>position: fixed</code> uses the viewport as its containing block &mdash; until an ancestor has <code>transform</code>, <code>filter</code>, or <code>will-change</code>. (Large preview)</figcaption></figure>
<p>And, of course, we can&rsquo;t ignore accessibility. Fixed elements that appear over content must still be keyboard-reachable. If the focus order doesn&rsquo;t naturally move into the fixed dropdown, you&rsquo;ll need to manage it using code. It&rsquo;s also worth checking that it doesn&rsquo;t sit over other interactive content with no way to dismiss it. That one bites you in keyboard testing.</p>
<h3 id="css-anchor-positioning-where-i-think-this-is-heading">CSS Anchor Positioning: Where I Think This Is Heading</h3>
<p>CSS Anchor Positioning is the direction I&rsquo;m most interested in right now. I wasn&rsquo;t sure how much of the spec was actually usable when I first looked at it. It lets you declare the relationship between a dropdown and its trigger directly in CSS, and the browser handles the coordinates.</p>
<pre><code class="language-css">.trigger {
  anchor-name: --my-trigger;
}

.dropdown-menu {
  position: absolute;
  position-anchor: --my-trigger;
  top: anchor(bottom);
  left: anchor(left);
  position-try-fallbacks: flip-block, flip-inline;
}
</code></pre>
<p>The <code>position-try-fallbacks</code> property is what makes this worth using over a manual calculation. The browser tries alternative placements before giving up, so a dropdown at the bottom of the viewport automatically flips upward instead of getting cut off.</p>
<p>Browser support is solid in Chromium-based browsers and growing in Safari. Firefox needs a <code>polyfill</code>. The @oddbird/css-anchor-positioning package covers the core spec. I&rsquo;ve hit layout edge cases with it that required fallbacks I didn&rsquo;t anticipate, so treat it as a progressive enhancement or pair it with a JavaScript fallback for Firefox.</p>
<p>In short, promising but not universal yet. Test in your target browsers.</p>
<p>And as far as accessibility is concerned, declaring a visual relationship in CSS doesn&rsquo;t tell the accessibility tree anything. <code>aria-controls</code>, <code>aria-expanded</code>, <code>aria-haspopup</code> &mdash; that part is still on you.</p>
<h3 id="sometimes-the-fix-is-just-moving-the-element">Sometimes The Fix Is Just Moving The Element</h3>
<p>Before reaching for a portal or making coordinate calculations, I always ask one question first: Does this dropdown actually need to live inside the scroll container?</p>
<p>If it doesn&rsquo;t, moving the markup to a higher-level wrapper eliminates the problem entirely, with no JavaScript and no coordinate calculations.</p>
<p>This isn&rsquo;t always possible. If the button and dropdown are encapsulated in the same component, moving one without the other means rethinking the whole API. But when you can do it, there&rsquo;s nothing to debug. The problem just doesn&rsquo;t exist.</p>
<h2 id="what-modern-css-still-doesn-t-solve">What Modern CSS Still Doesn&rsquo;t Solve</h2>
<p>CSS has come a long way here, but there are still places it lets you down.</p>
<p>The <code>position: fixed</code> and <code>transform</code> issues are still there. It&rsquo;s in the spec intentionally, which means no CSS workaround exists. If you&rsquo;re using an animation library that wraps your layout in a transformed element, you&rsquo;re back to needing portals or anchor positioning.</p>
<p>CSS Anchor Positioning is promising, but new. As mentioned earlier, Firefox still needs a <code>polyfill</code> at the time I&rsquo;m writing this. I&rsquo;ve hit layout edge cases with it that required fallbacks I didn&rsquo;t anticipate. If you need consistent behavior across all browsers today, you&rsquo;re still reaching for JavaScript for the tricky parts.</p>
<p>The addition I&rsquo;ve actually changed my workflow for is the HTML Popover API, now available in all modern browsers. Elements with the popover attribute render in the browser&rsquo;s top layer, above everything, with no JavaScript positioning needed.</p>
<div class="break-out">
<pre><code class="language-html">&lt;button popovertarget="dropdown-demo"&gt;Open&lt;/button&gt;
&lt;div id="dropdown-demo" popover="manual" role="menu"&gt;Popover content&lt;/div&gt;
</code></pre>
</div>
<p>Escape handling, dismiss-on-click-outside, and solid accessibility semantics come free for things like tooltips, disclosure widgets, and simple overlays. It&rsquo;s the first tool I reach for now.</p>
<p>That said, it doesn&rsquo;t solve positioning. It solves layering. You still need anchor positioning or JavaScript to align a popover to its trigger. The Popover API handles the layering. Anchor positioning handles the placement. Used together, they cover most of what you&rsquo;d previously reach for a library to do.</p>
<h2 id="a-decision-guide-for-your-situation">A Decision Guide For Your Situation</h2>
<p>After going through all of this the hard way, here&rsquo;s how I actually think about the choice now.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly-4.jpg" alt="A decision guide for broken dropdown."><figcaption class="op-vertical-bottom">Four questions that cover most real-world dropdown bugs. Accessibility applies regardless of which path you take. (Large preview)</figcaption></figure>
<ul>
<li><strong>Use a portal.</strong><br>I&rsquo;d use this when the trigger lives deep in nested scroll containers. I used this pattern for table action menus and paired it with focus restoration and accessibility checks. It&rsquo;s the most reliable option, but budget time for the extra wiring.</li>
<li><strong>Use fixed positioning.</strong><br>This is for when you&rsquo;re in vanilla JavaScript or a lightweight framework and can verify no ancestor applies transforms or filters. It&rsquo;s simple to set up and simple to debug, as long as that one constraint holds.</li>
<li><strong>Use CSS Anchor Positioning.</strong><br>Reach for this when your browser support allows it. If Firefox support is required, pair it with the <code>@oddbird</code> polyfill. This is where the platform is ultimately heading and will eventually become your go-to approach.</li>
<li><strong>Restructure the DOM.</strong><br>Use this when the architecture permits it, and you want zero runtime complexity. I believe it&rsquo;s likely the most underrated option.</li>
<li><strong>Combine patterns.</strong><br>Do this when you want anchor positioning as your primary approach, paired with a JavaScript fallback for unsupported browsers. Or a portal for DOM placement paired with <code>getBoundingClientRect()</code> for coordinate accuracy.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>I used to treat this bug as a one-off issue &mdash; something to patch and move on from. But once I sat with it long enough to understand all three systems involved &mdash; <strong>overflow clipping</strong>, <strong>stacking contexts</strong>, and <strong>containing blocks</strong> &mdash; it stopped feeling random. I could look at a broken dropdown and immediately trace which ancestor was responsible. That shift in how I read the DOM was the real takeaway.</p>
<p>There&rsquo;s no single right answer. What I reached for depended on what I could control in the codebase: portals when the ancestor tree was unpredictable; fixed positioning when it was clean and simple; moving the element when nothing was stopping me; and anchor positioning now, where I can.</p>
<p>Whatever you end up choosing, <strong>don&rsquo;t treat accessibility as the last step</strong>. In my experience, that&rsquo;s exactly when it gets skipped. The ARIA relationships, the focus management, the keyboard behavior &mdash; those aren&rsquo;t polish. They&rsquo;re part of what makes the thing actually work.</p>
<p>Check out the full source code in my GitHub repo.</p>
<h3 id="further-reading">Further Reading</h3>
<p>These are the references I kept coming back to while working through this:</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/03/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/dropdowns-inside-scrollable-containers-why-they-break-and-how-to-fix-them-properly/">Dropdowns Inside Scrollable Containers: Why They Break And How To Fix Them Properly</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>20 years in the AWS Cloud – how time flies!</title>
		<link>https://thenokiablog.com/20-years-in-the-aws-cloud-how-time-flies/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 13:35:54 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Aurora]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Amazon DynamoDB]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon Elastic Container Service]]></category>
		<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Amazon ElastiCache]]></category>
		<category><![CDATA[Amazon EMR]]></category>
		<category><![CDATA[Amazon Kinesis]]></category>
		<category><![CDATA[Amazon Nova]]></category>
		<category><![CDATA[Amazon OpenSearch Service]]></category>
		<category><![CDATA[Amazon Q]]></category>
		<category><![CDATA[Amazon Q Developer]]></category>
		<category><![CDATA[Amazon RDS]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Amazon SageMaker]]></category>
		<category><![CDATA[Amazon SageMaker AI]]></category>
		<category><![CDATA[Amazon WorkSpaces]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[AWS Fargate]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Outposts]]></category>
		<category><![CDATA[AWS re:Invent]]></category>
		<category><![CDATA[AWS Trainium]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[DSQL]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[Graviton]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Responsible AI]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Serverless]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/20-years-in-the-aws-cloud-how-time-flies/</guid>

					<description><![CDATA[<p>AWS has reached its 20th anniversary! With a steady pace of innovation, AWS has grown to...</p>
<p>The post <a href="https://thenokiablog.com/20-years-in-the-aws-cloud-how-time-flies/">20 years in the AWS Cloud – how time flies!</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/03/20-years-in-the-aws-cloud-how-time-flies.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p><img loading="lazy" decoding="async" class="size-full wp-image-103375 alignright" src="https://thenokiablog.com/wp-content/uploads/2026/03/20-years-in-the-aws-cloud-how-time-flies.jpg" alt width="200" height="171">AWS has reached its 20th anniversary! With a steady pace of innovation, AWS has grown to offer over 240 comprehensive cloud services and continues to launch thousands of new features annually for millions of customers. During this time, over 4,700 posts have been published on this blog&mdash;more than double the number since Jeff Barr wrote the 10th anniversary post.</p>
<p><strong><u>AWS changed my life</u></strong><br>
        <br>Reflecting on what I was doing 20 years ago, I met Jeff in Seoul on March 13, 2006, when he came as the keynote speaker for the Korea NGWeb conference. At that time, Amazon was one of the first pioneers to initiate an API economy, introducing ecommerce API services. After the keynote speech, he returned home that evening, and I believe he wrote the Amazon S3 launch blog post on the flight back to the United States.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-103377" src="https://thenokiablog.com/wp-content/uploads/2026/03/20-years-in-the-aws-cloud-how-time-flies-1.jpg" alt width="1000" height="329"></p>
<p>That short meeting with him brought significant changes to my life. He became my role model as a blogger, and I began building API-based services in my company and opening them to third-party developers. When I was a PhD student while taking a break from work, I realized that for individual researchers like me, AWS Cloud services are powerful tools for conducting large-scale research projects. After returning to work, my company became one of the first AWS customers in Korea in 2014. Countless developers&mdash;myself included&mdash;have embraced cloud computing and actively used its capabilities to accomplish what was previously impossible.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>Over the past decade, the technology landscape has transformed dramatically. Deep learning emerged as a breakthrough in AI, evolving through generative AI based on large language models (LLMs) to today&rsquo;s agentic AI technology. Jeff wrote, &ldquo;When looking into the future, you need to be able to distinguish between flashy distractions and genuine trends, while remaining flexible enough to pivot if yesterday&rsquo;s niche becomes today&rsquo;s mainstream technology.&rdquo; This principle guides how AWS approaches innovation&mdash;we start by listening to what customers truly need. The real trend isn&rsquo;t pursuing every emerging technology, but rather reimagining solutions that address customers&rsquo; most critical challenges.</p>
<p><strong><u>20 years of AWS</u></strong><br>
        <br>For the first 10 years, Jeff selected his favorite AWS launches and blog posts. Amazon S3, Amazon EC2 (2006), Amazon Relational Database Service, Amazon Virtual Private Cloud (2009), Amazon DynamoDB, Amazon Redshift (2012), Amazon WorkSpaces, Amazon Kinesis (2013), AWS Lambda (2014), and AWS IoT (2015).</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-103379" src="https://thenokiablog.com/wp-content/uploads/2026/03/20-years-in-the-aws-cloud-how-time-flies-2.jpg" alt width="982" height="329"></p>
<p>While I also hate to play favorites, I want to choose some of my favorite AWS blog posts of the past decade.</p>
<ul>
<li><strong>Deploying containers easily</strong> (2014)&nbsp;&ndash; Amazon Elastic Container Service makes it straightforward for you to run any number of containers across a managed cluster of Amazon EC2 instances using powerful APIs and other tools. In 2017, we launched Amazon Elastic Kubernetes Service as a fully managed Kubernetes service and AWS Fargate as a serverless deployment option.</li>
<li><strong>High availability database at global scale</strong> (2017) &ndash; Amazon Aurora <span class="rggc_8711ccd9 rggc_98b54368 rggc_275611e5" data-rg-n="BodyText">is a modern relational database service offering performance and high availability at scale. In 2018, we launched Amazon Aurora Serverless v1, and this serverless database evolved to Amazon Aurora Serverless v2 to <span data-eb-item-id>scale down to zero. In 2025, we also launched Amazon Aurora DSQL is the fastest serverless distributed SQL database for always available applications.</span></span></li>
<li><strong>Machine learning (ML) at your fingertips </strong>(2017) &ndash; Amazon SageMaker is a fully managed end-to-end ML service that data scientists, developers, and ML experts can use to quickly build, train, and host machine learning models at scale. In 2024, we launched the next generation of Amazon SageMaker, a unified platform for data, analytics, and AI and introduced Amazon SageMaker AI to focus specifically on building, training, and deploying AI and ML models at scale.</li>
<li><span data-eb-item-id><strong>Best price performance for cloud workloads</strong> (2018) &ndash; </span>We launched Amazon EC2 A1 instances powered by the first generation of Arm-based AWS Graviton Processors designed to deliver the best price performance for your cloud workloads. Last year, we previewed EC2 M9g instances powered by AWS Graviton5 processors. Over 90,000 AWS customers have reaped the benefits of Graviton supporting popular AWS services such as Amazon ECS and Amazon EKS, AWS Lambda, Amazon RDS, Amazon ElastiCache, Amazon EMR, and Amazon OpenSearch Service.</li>
<li><strong>Run AWS Cloud in your data center</strong> (2019) &ndash; AWS Outposts is a family of fully managed services delivering AWS infrastructure and services to virtually any on-premises or edge location for a truly consistent hybrid experience. Now, AWS Outposts is available in a variety of form factors, from 1U and 2U Outposts servers to 42U Outposts racks, and multiple rack deployments. Customers such as DISH, Fanduel, Morningstar, Philips, and others use Outposts in workloads requiring low latency access to on-premises systems, local data processing, data residency, and application migration with local system interdependencies.</li>
<li><span data-eb-item-id><strong>Best price performance for ML workloads</strong></span> (2019) &ndash; We launched Amazon EC2 Inf1 instances powered by the first generation of AWS Inferentia chips designed to provide fast, low-latency inferencing. In 2022, we launched Amazon EC2 Trn1 instances powered by the first generation of AWS Trainium chips optimized for high performance AI training. Last year, we launched Amazon EC2 Trn3 UltraServers powered by Trainium3 to deliver the best token economics for next-generation generative AI applications. Customers such as Anthropic, Decart, poolside, Databricks, Ricoh, Karakuri, SplashMusic, and others are realizing performance and cost benefits of Trainium-based instances and UltraServers.</li>
<li><strong>Build your generative AI apps on AWS</strong> (2023) &ndash; Amazon Bedrock is a fully managed service that offers a choice of industry leading AI models along with a broad set of capabilities that you need to build generative AI applications, simplifying development with security, privacy, and responsible AI.&nbsp;Last year, we introduced Amazon Bedrock AgentCore, an agentic platform for building, deploying, and operating effective agents securely at scale. Now, more than 100,000 customers worldwide choose Amazon Bedrock to deliver personalized experiences, automate complex workflows, and uncover actionable insights.</li>
<li><strong>Your AI coding companion</strong> (2023) &ndash; We launched Amazon CodeWhisperer as the industry&rsquo;s first cloud-based AI coding assistant service. The service delivered code generation from comments, open-source code reference tracking, and vulnerability scanning capabilities. In 2024, we rebranded the service to Amazon Q Developer and expanded its features to include a chat-based assistant in the console, project-based code generation, and code transformation tools. In 2025, this service evolved into Kiro, a new agentic AI development tool that brings structure to AI coding through spec-driven development, taking projects from prototype to production. Recently, Kiro previewed an autonomous agent, a frontier agent that works independently on development tasks, maintaining context and learning from every interaction.</li>
<li><strong>Broaden your AI model choices</strong> (2024) &ndash; We launched Amazon Titan models further increasing cost-effective AI model choice for text and multimodal needs in Amazon Bedrock. At AWS re:Invent 2024, we announced Amazon Nova models that delivers frontier intelligence and industry leading price performance. Now Amazon Nova has a portfolio of AI offerings&mdash;including Amazon Nova models, Amazon Nova Forge, a new service to build your own frontier models; and Amazon Nova Act, a new service to build agents that automate browser-based UI workflows powered by a custom Amazon Nova 2 Lite model.</li>
</ul>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p><strong><u>Build with AI: Your path forward</u></strong><br>
        <br>A decade ago, AWS responded to the emergence of deep learning by launching the broadest and deepest ML services, such as Amazon SageMaker, democratizing AI for a wide range of customers&mdash;from individual developers and startups to large enterprises&mdash;regardless of their technical expertise.</p>
<p>AI technology has advanced significantly, but building and deploying AI models and applications still remains complex for many developers and organizations. AWS offers the broadest selection of AI models through Amazon Bedrock, including leading providers such as Anthropic and OpenAI. By using our model training and inference infrastructure and responsible AI both practical and scalable, you can accelerate trusted AI innovation while maintaining control of your data and costs&mdash;all built on our global infrastructure&rsquo;s operational excellence.</p>
<p>Reinvent your idea, keep on learning, build confidently with AI you can trust, and share your successes with us! New AWS customers receive up to $200 in credits to try AWS AI for free. If you&rsquo;re a student, start building with Kiro for free using 1,000 credits per month for one year.</p>
<p>&mdash; Channy</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/20-years-in-the-aws-cloud-how-time-flies/">20 years in the AWS Cloud – how time flies!</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rethinking “Pixel Perfect” Web Design</title>
		<link>https://thenokiablog.com/rethinking-pixel-perfect-web-design/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design Agency]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Responsive Web Design]]></category>
		<category><![CDATA[Web Design]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/rethinking-pixel-perfect-web-design/</guid>

					<description><![CDATA[<p>Amit Sheen takes a hard look at the &#8220;Pixel Perfect&#8221; legacy concept, explaining why it&#8217;s failing...</p>
<p>The post <a href="https://thenokiablog.com/rethinking-pixel-perfect-web-design/">Rethinking “Pixel Perfect” Web Design</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>Amit Sheen takes a hard look at the &ldquo;Pixel Perfect&rdquo; legacy concept, explaining why it&rsquo;s failing us and redefining what &ldquo;perfection&rdquo; actually looks like in a multi-device, fluid world.</section>
</p>
<p>It&rsquo;s 2026. We are operating in an era of incredible technological leaps, where advanced tooling and AI-enhanced workflows have fundamentally transformed how we design, build, and bridge the gap between the two. The web is moving faster than ever, with groundbreaking features and standards emerging almost daily.</p>
<p>Yet, in the middle of this high-speed evolution, there&rsquo;s one thing we&rsquo;ve been carrying with us since the early days of print, a phrase that feels increasingly out of sync with our modern reality: &ldquo;Pixel Perfect.&rdquo;</p>
<figure><img decoding="async" loading="lazy" width="800" height="630" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design.png" alt="Cartoon scene where a large, colorful pixelated painting hangs on the wall with the word &ldquo;PIXEL&rdquo; across it. A man points at the artwork, saying &ldquo;Perfect!!&rdquo; while a woman beside him replies &ldquo;No, it&rsquo;s not!&rdquo;."><figcaption class="op-vertical-bottom">Pixel Perfect? Let&rsquo;s see&hellip; (Large preview)</figcaption></figure>
<p>I&rsquo;ll be honest, I&rsquo;m not a fan. In fact, I believe the idea that we can have pixel-perfection in our designs has become <strong>misleading</strong>, <strong>vague</strong>, and ultimately <strong>counterproductive</strong> to the way we build for the modern web. As a community of developers and designers, it&rsquo;s time we take a hard look at this legacy concept, understand why it&rsquo;s failing us, and redefine what &ldquo;perfection&rdquo; actually looks like in a multi-device, fluid world.</p>
<h2 id="a-brief-history-of-a-rigid-mindset">A Brief History Of A Rigid Mindset</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>To understand why many of us still aim for pixel perfection today, we have to look back at where it all began. It didn&rsquo;t start on the web, but as a stowaway from the era when layout software first allowed us to design for print on a personal computer, and GUI design from the late 1980s and &rsquo;90s.</p>
<p>In the print industry, perfection was absolute. Once a design was sent to the press, every dot of ink had a fixed, unchangeable position on a physical page. When designers transitioned to the early web, they brought this <strong>&ldquo;printed page&rdquo; mentality</strong> with them. The goal was simple: The website must be an exact, pixel-for-pixel replica of the static mockup created in design applications like Photoshop and QuarkXPress.</p>
<figure><img decoding="async" loading="lazy" width="800" height="533" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design.jpg" alt="Printing process in progress"><figcaption class="op-vertical-bottom">Credit: Geri Sakti on Unsplash. (Large preview)</figcaption></figure>
<p>I&rsquo;m old enough to remember working with talented designers who had spent their entire careers in the print world. They would hand over web designs and, with total sincerity, insist on discussing the layout in centimeters and inches. To them, the screen was just another piece of paper, albeit one that glowed.</p>
<p>In those days, we &ldquo;tamed&rdquo; the web to achieve this. We used table-based layouts, nested three levels deep, and stretched 1&times;1 pixel &ldquo;spacer GIFs&rdquo; to create precise gaps. We designed for a single, &ldquo;standard&rdquo; resolution (usually 800&times;600) because, back then, we could actually pretend we knew exactly what the user was seeing.</p>
<div class="break-out">
<pre><code class="language-html">&lt;!-- A typical "Pixel Perfect" layout from 1998 --&gt;
&lt;table width="800" border="0" cellpadding="0" cellspacing="0"&gt;
  &lt;tr&gt;
    &lt;td width="150" valign="top" bgcolor="#CCCCCC"&gt;
      &lt;img src="spacer.gif" width="150" height="1"&gt; &lt;!-- Sidebar --&gt;
    &lt;/td&gt;
    &lt;td width="10"&gt;&lt;img src="spacer.gif" width="10" height="1"&gt;&lt;/td&gt;
    &lt;td width="640" valign="top"&gt;
      &lt;!-- Content goes here --&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre>
</div>
<h2 id="cracks-in-the-foundation">Cracks In The Foundation</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>The first major challenge to the fixed-table mindset came as early as 2000. In his seminal article, &ldquo;A Dao of Web Design&rdquo;, John Allsopp argued that by trying to force the web into the constraints of print, we were missing the point of the medium entirely. He called the quest for pixel-perfection a &ldquo;ritual&rdquo; that ignored the web&rsquo;s inherent fluidity.</p>
<blockquote><p>When a new medium borrows from an existing one, some of what it borrows makes sense, but much of the borrowing is thoughtless, &ldquo;ritual,&rdquo; and often constrains the new medium. Over time, the new medium develops its own conventions, throwing off existing conventions that don&rsquo;t make sense.</p></blockquote>
<p>Nonetheless, the &ldquo;pixel-perfection&rdquo; refused to die. While its meaning has shifted and morphed over the decades, it has rarely been well-defined. Many have tried, such as in 2010 when the design agency <strong>ustwo</strong> released the Pixel Perfect Precision (PPP) (PDF) handbook. But that same year, Responsive Web Design also gained massive momentum, effectively killing the idea that a website could look identical on every screen.</p>
<p>Yet, here we are, still using a term born from the limitations of monitors dated to the &rsquo;90s to describe the complex interfaces of 2026.</p>
<figure><img decoding="async" loading="lazy" width="800" height="283" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design-1.png" alt="A meme stating, &ldquo;You keep using that word. I&rsquo;m not sure it means what you think it means.&rdquo;"><figcaption class="op-vertical-bottom">You keep using that word. I&rsquo;m not sure it means what you think it means&hellip;.(Large preview)</figcaption></figure>
<blockquote><p><strong>Note:</strong> Before we continue, it&rsquo;s important to acknowledge the exceptions. There are, of course, scenarios where pixel precision is non-negotiable. Icon grids, sprite sheets, canvas rendering, game engines, or bitmap exports often require exact, pixel-level control to function correctly. These, however, are specialized technical requirements, not a general rule for modern UI development.</p></blockquote>
<h2 id="why-pixel-perfect-is-failing-the-modern-web">Why &ldquo;Pixel Perfect&rdquo; Is Failing the Modern Web</h2>
<p>In our current landscape, clinging to the idea of &ldquo;pixel perfection&rdquo; isn&rsquo;t just anachronistic, it&rsquo;s actively harmful to the products we build. Here is why.</p>
<h3 id="it-is-fundamentally-vague">It Is Fundamentally Vague</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>Let&rsquo;s start with a simple question: When a designer asks for a &ldquo;pixel-perfect&rdquo; implementation, what are they actually asking for? Is it the colors, the spacing, the typography, the borders, the alignment, the shadows, the interactions? Take a moment to think about it.</p>
<p>If your answer is &ldquo;everything&rdquo;, then you&rsquo;ve just identified the core issue.</p>
<blockquote class="pull-quote">
<p>The term &ldquo;pixel-perfect&rdquo; is so all-encompassing that it lacks any real technical specificity. It&rsquo;s a blanket statement that masks a lack of clear requirements. When we say &ldquo;make it pixel perfect,&rdquo; we aren&rsquo;t giving a directive; we&rsquo;re expressing a feeling.</p>
</blockquote>
<p>The concept of a &ldquo;standard screen size&rdquo; is now a relic of the past. We are building for an almost infinite variety of viewports, resolutions, and aspect-ratios, and this reality is not likely to change any time soon. Plus, the web is no longer confined to a flat, rectangular piece of glass; it can be on a foldable phone that changes aspect ratios mid-session, or on a spatial interface projected into a room.</p>
<p>Every Internet-connected device has its own pixel density, scaling factors, and rendering quirks.</p>
<p>A design that is &ldquo;perfect&rdquo; on one set of pixels is, by definition, imperfect on another. Striving for a single, static &ldquo;perfection&rdquo; ignores the fluid, adaptive nature of the modern web. When the canvas is constantly shifting, the very idea of a fixed pixel implementation becomes a technical impossibility.</p>
<figure><img decoding="async" loading="lazy" width="800" height="353" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design-2.png" alt="A tweet that reads: &ldquo;If you think responsive&rsquo;s simple, I feel bad for you son. We got 99 viewports, but the iPhone&rsquo;s just one.&rdquo;"><figcaption class="op-vertical-bottom">Source: x.com. (Large preview)</figcaption></figure>
<h3 id="the-dynamic-nature-of-content">The Dynamic Nature Of Content</h3>
<p>A static mockup is a snapshot of a single state with a specific set of data. But content is rarely static like that in the real world. Localization is a prime example: a label that fits perfectly inside a button component in English might overflow the container in German or require a different font entirely for CJK languages.</p>
<p>Beyond text length, localization means changes with currency symbols, date formatting, and numeric systems. Any of these variables can significantly impact a page layout. If a design is built to be &ldquo;pixel-perfect&rdquo; based on a specific string of text, it is inherently fragile. A pixel-perfect layout completely collapses the moment content changes.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="272" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design-3.png" alt="A pricing card that looks balanced in English, but shifts or overflows when localized. The fixed-width containers and absolute positioning that work for the English mockup fail to adapt to other languages."><figcaption class="op-vertical-bottom">A pricing card that looks balanced in English, but shifts or overflows when localized. The fixed-width containers and absolute positioning that work for the English mockup fail to adapt to other languages. (Large preview)</figcaption></figure>
<h2 id="accessibility-is-the-real-perfection">Accessibility Is The Real Perfection</h2>
<p>True perfection means a site that works for everyone. If a layout is so rigid that it breaks when a user increases their font size or forces a high-contrast mode, it isn&rsquo;t perfect &mdash; it&rsquo;s broken. &ldquo;Pixel perfect&rdquo; often prioritizes visual aesthetics over functional accessibility, creating barriers for users who don&rsquo;t fit the &ldquo;standard&rdquo; profile.</p>
<h2 id="think-systems-not-pages">Think Systems, Not Pages</h2>
<p>We no longer build pages; we build design systems. We create components that must work in isolation and a variety of contexts, whether in headers, in sidebars, or in dynamic grids. Trying to match a component to a specific pixel coordinate in a static mockup is a fool&rsquo;s errand.</p>
<p>A pure &ldquo;pixel-perfect&rdquo; approach treats every instance as a unique snowflake, which is the antithesis of a scalable, component-based architecture. It forces developers to choose between following a static image and maintaining the integrity of the system.</p>
<h2 id="perfection-is-technical-debt">Perfection Is Technical Debt</h2>
<p>When we prioritize exact visual matching over sound engineering, we aren&rsquo;t just making a design choice; we are incurring technical debt. Chasing that last pixel often forces developers to bypass the browser&rsquo;s natural layout engine.</p>
<p>Working in exact units leads to &ldquo;magic numbers&rdquo;, those arbitrary <code>margin-top: 3px</code> or <code>left: -1px</code> hacks, sprinkled throughout the codebase to force an element into a specific position on a specific screen. This creates a fragile, brittle architecture, leading to a never-ending cycle of &ldquo;visual bug&rdquo; tickets.</p>
<pre><code class="language-css">/* The "Pixel Perfect" Hack */
.card-title {
  margin-top: 13px; /* Matches the mockup exactly on 1440px */
  margin-left: -2px; /* Optical adjustment for a specific font */
}
/* The "Design Intent" Solution */
.card-title {
  margin-top: var(--space-m); /* Part of a consistent scale */
  align-self: start; /* Logical alignment */
}
</code></pre>
<p>By insisting on pixel-perfection, we are building a foundation that is difficult to automate, difficult to refactor, and ultimately, more expensive to maintain. We have much more flexible ways to calculate sizing in CSS, thanks to relative units.</p>
<h2 id="moving-from-pixels-to-intent">Moving From Pixels To Intent</h2>
<p>So far, I&rsquo;ve spent a lot of time talking about what we <em>shouldn&rsquo;t</em> do. But let&rsquo;s be clear: Moving away from &ldquo;pixel perfection&rdquo; isn&rsquo;t an excuse for sloppy implementation or a &ldquo;close enough&rdquo; attitude. We still need consistency, we still want our products to look and feel high-quality, and we still need a shared methodology for achieving that.</p>
<p>So, if &ldquo;pixel perfection&rdquo; is no longer a viable goal, what <em>should</em> we be striving for?</p>
<p>The answer, I believe, lies in shifting our focus from individual pixels to <strong>design intent</strong>. In a fluid world, perfection isn&rsquo;t about matching a static image, but ensuring that the core logic and visual integrity of the design are preserved across every possible context.</p>
<h3 id="design-intent-over-static-values">Design Intent Over Static Values</h3>
<p>Instead of asking for a <code>margin: 24px</code> in a design, we should be asking: <em>Why is this margin here?</em> Is it to create a visual separation between sections? Is it part of a consistent spacing scale? When we understand the intent, we can implement it using fluid units and functions (like <code>rem</code> and <code>clamp()</code>, respectively) and use advanced tools, like CSS Container Queries, that allow the design to breathe and adapt while still feeling &ldquo;right&rdquo;.</p>
<div class="break-out">
<pre><code class="language-css">/* Intent: A heading that scales smoothly with the viewport */
h1 {
  font-size: clamp(2rem, 5vw + 1rem, 4rem);
}
/* Intent: Change layout based on the component's own width, not the screen */
.card-container {
  container-type: inline-size;
}
@container (min-width: 400px) {
  .card {
    display: grid;
    grid-template-columns: 1fr 2fr;
  }
}
</code></pre>
</div>
<h3 id="speaking-in-tokens">Speaking In Tokens</h3>
<p>Design tokens are the bridge between design and code. When a designer and developer agree on a token like <code>--spacing-large</code> instead of <code>32px</code>, they aren&rsquo;t just syncing values, but instead syncing logic. This ensures that even if the underlying value changes to accommodate a specific condition, the relationship between elements remains perfect.</p>
<pre><code class="language-css">:root {
  /* The logic is defined once */
  --color-primary: #007bff;
  --spacing-unit: 8px;
  --spacing-large: calc(var(--spacing-unit) * 4);
}

/* And reused everwhere */
.button {
  background-color: var(--color-primary);
  padding: var(--spacing-large);
}
</code></pre>
<h3 id="fluidity-as-a-feature-not-a-bug">Fluidity As A Feature, Not A Bug</h3>
<p>We need to stop viewing the web&rsquo;s flexibility as something to be tamed and start seeing that flexibility as its greatest strength. A &ldquo;perfect&rdquo; implementation is one that looks intentional at 320px, 1280px, and even in a 3D spatial environment. This means embracing intrinsic web design based on an element&rsquo;s natural size in any context &mdash; and using modern CSS tools to create layouts that &ldquo;know&rdquo; how to arrange themselves based on the available space.</p>
<h2 id="death-to-the-handover">Death To The &ldquo;Handover&rdquo;</h2>
<p>In this intent-driven world, the &ldquo;handover&rdquo; of traditional design assets has become another relic of the past. We no longer pass static Photoshop files across a digital wall and hope for the best. Instead, we work within living design systems.</p>
<p>Modern tooling allows designers to specify behaviors, not just positions. When a designer defines a component, they aren&rsquo;t just drawing a box; they&rsquo;re defining its constraints, its fluid scales, and its relationship to the content. As developers, our job is to implement that logic.</p>
<p>The conversation has shifted from <em>&ldquo;Why is this</em> <em>three</em> <em>pixels off?&rdquo;</em> to <em>&ldquo;How should this component behave when the container shrinks?&rdquo;</em> and <em>&ldquo;What happens to the hierarchy when the text is translated to a longer language?&rdquo;</em></p>
<h2 id="better-language-better-outcomes">Better Language, Better Outcomes</h2>
<p>Speaking of conversations, when we aim for &ldquo;pixel perfection&rdquo;, we set ourselves up for friction. Mature teams have long moved past this binary &ldquo;match-or-fail&rdquo; mindset towards a more descriptive vocabulary that reflects the complexity of our work.</p>
<p>By replacing &ldquo;pixel perfect&rdquo; with more precise terms, we create shared expectations and eliminate pointless arguments. Here are a few phrases that have served me well for productive discussions around intent and fluidity:</p>
<ul>
<li><strong>&ldquo;Visually consistent with the design system.&rdquo;</strong><br>Instead of matching a specific mockup, we ensure the implementation follows the established rules of our system.</li>
<li><strong>&ldquo;Matches spacing and hierarchy.&rdquo;</strong><br>We focus on the relationships and rhythm between elements rather than their absolute coordinates.</li>
<li><strong>&ldquo;Preserves proportions and alignment logic.&rdquo;</strong><br>We ensure that the <em>intent</em> of the layout remains intact, even as it scales and shifts.</li>
<li><strong>&ldquo;Acceptable variance across platforms.&rdquo;</strong><br>We acknowledge that a site will look different, within a defined and agreed-upon range of variation, and that&rsquo;s okay as long as the experience remains high-quality.</li>
</ul>
<blockquote class="pull-quote">
<p>Language creates reality. Clear language doesn&rsquo;t just improve the code, but the relationship between designers and developers. It moves us toward a shared ownership of the final, living product. When we speak the same language, &ldquo;perfection&rdquo; stops being a demand and starts being a collaborative achievement.</p>
</blockquote>
<h2 id="a-note-to-my-design-colleagues">A Note To My Design Colleagues</h2>
<p>When you hand over a design, don&rsquo;t give us a fixed width, but a set of rules. Tell us what should stretch, what should stay fixed, and what should happen when the content inevitably overflows. Your &ldquo;perfection&rdquo; lies in the logic you define, not the pixels you draw.</p>
<figure><img decoding="async" loading="lazy" width="800" height="511" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design-4.png" alt="On the left, a styled food photo labeled &ldquo;The Photo (Mockup)&rdquo;; on the right, a recipe layout labeled &ldquo;The Recipe (Rules)&rdquo;."><figcaption class="op-vertical-bottom">Don&rsquo;t give us the photo, give us the recipe. (Large preview)</figcaption></figure>
<h2 id="the-new-standard-of-excellence">The New Standard Of Excellence</h2>
<p>The web was never meant to be a static gallery of frozen pixels. It was born to be a messy, fluid, and gloriously unpredictable medium. When we cling to an outdated model of &ldquo;pixel perfection&rdquo;, we are effectively trying to put a leash on a hurricane. It&rsquo;s unnatural in today&rsquo;s front-end landscape.</p>
<p>In 2026, we have the tools to build interfaces that think, adapt, and breathe. We have AI that can generate layouts in seconds and spatial interfaces that defy the very concept of a &ldquo;screen&rdquo;. In this world, perfection isn&rsquo;t a fixed coordinate but a promise; <strong>it&rsquo;s the promise that no matter who is looking, or what they are looking through, the <em>soul</em> of the design remains intact</strong>.</p>
<p>So, let&rsquo;s bury the term once and for all. Let&rsquo;s leave the centimeters to the architects and the spacer GIFs to the digital museums. If you want something to look exactly the same for the next hundred years, carve it in stone or print it on a high-quality cardstock. But if you want to build for the web, embrace the chaos.</p>
<p>Stop counting pixels. Start building <em>intent</em>.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/01/rethinking-pixel-perfect-web-design-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/rethinking-pixel-perfect-web-design/">Rethinking “Pixel Perfect” Web Design</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Weekly Roundup: Amazon ECS, Amazon CloudWatch, Amazon Cognito and more (December 15, 2025)</title>
		<link>https://thenokiablog.com/aws-weekly-roundup-amazon-ecs-amazon-cloudwatch-amazon-cognito-and-more-december-15-2025/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Mon, 15 Dec 2025 16:42:05 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Amazon Aurora]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon Cognito]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Fargate]]></category>
		<category><![CDATA[AWS PrivateLink]]></category>
		<category><![CDATA[AWS re:Inforce]]></category>
		<category><![CDATA[AWS re:Invent]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[DSQL]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Week in Review]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/aws-weekly-roundup-amazon-ecs-amazon-cloudwatch-amazon-cognito-and-more-december-15-2025/</guid>

					<description><![CDATA[<p>Can you believe it? We&#8217;re nearly at the end of 2025. And what a year it&#8217;s...</p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-amazon-ecs-amazon-cloudwatch-amazon-cognito-and-more-december-15-2025/">AWS Weekly Roundup: Amazon ECS, Amazon CloudWatch, Amazon Cognito and more (December 15, 2025)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2025/12/aws-weekly-roundup-amazon-ecs-amazon-cloudwatch-amazon-cognito-and-more-december-15-2025.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Can you believe it? We&rsquo;re nearly at the end of 2025. And what a year it&rsquo;s been! From re:Invent recap events, to AWS Summits, AWS Innovate, AWS re:Inforce, Community Days, and DevDays and, recently, adding that cherry on the cake, re:Invent 2025, we have lived through a year filled with exciting moments and technology advancements which continue to shape our new modern world.</p>
<p>Speaking of re:Invent, if you haven&rsquo;t caught up yet on all the new releases and announcements (and there were plenty of exciting launches across every area), be sure to check out our curated post highlighting the top announcements from AWS re:Invent 2025. We&rsquo;ve organized all the key releases into easy-to-navigate categories and included links so you can dive deeper into anything that sparks your interest.</p>
<p>While the year may be wrapping up, our teams are still busy working on things that you have either asked for as customers or that we pro-actively create to make your lives easier. Last week had quite a few interesting releases as usual, so let&rsquo;s look at a few that I think could be useful for many of you out there.</p>
<p><span><strong>Last week&rsquo;s launches</strong></span></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/aws-weekly-roundup-passkey-mfa-malware-protection-on-amazon-s3-and-more-june-17-2024-amazon-web-services/" class="template-2"><span class="cta">Read more</span><span class="postTitle">AWS Weekly Roundup: Passkey MFA, Malware Protection on Amazon S3, and more (June 17, 2024) | Amazon Web Services</span></a></div><p>Amazon WorkSpaces Secure Browser introduces Web Content Filtering &ndash; Organizations can now control web access through category-based filtering across 25+ predefined categories, granular URL policies, and integrated compliance logging. The feature works alongside existing Chrome policies and integrates with Session Logger for enhanced monitoring and is available at no additional cost in 10 AWS Regions with pay-as-you-go pricing.</p>
<p>Amazon Aurora DSQL now supports cluster creation in seconds&nbsp;&ndash; Developers can now instantly provision Aurora DSQL databases with setup time reduced from minutes to seconds, enabling rapid prototyping through the integrated AWS console query editor or AI-powered development via the Aurora DSQL Model Context Protocol server. Available at no additional cost in all AWS Regions where Aurora DSQL is offered, with AWS Free Tier access available.</p>
<p>Amazon Aurora PostgreSQL now supports integration with Kiro powers &ndash; Developers can now accelerate Aurora PostgreSQL application development using AI-assisted coding through Kiro powers, a repository of pre-packaged Model Context Protocol servers. The Aurora PostgreSQL integration provides direct database connectivity for queries, schema management, and cluster operations, dynamically loading relevant context as developers work. Available for one-click installation in Kiro IDE across all AWS Regions.</p>
<p>Amazon ECS now supports custom container stop signals on AWS Fargate&nbsp;&ndash; Fargate tasks now honor the stop signal configured in container images, enabling graceful shutdowns for containers that rely on signals like SIGQUIT or SIGINT instead of the default SIGTERM. The ECS container agent reads the STOPSIGNAL instruction from OCI-compliant images and sends the appropriate signal during task termination. Available at no additional cost across all AWS Regions.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/aws-weekly-roundup-aws-rtb-fabric-aws-customer-carbon-footprint-tool-aws-secret-west-region-and-more-october-27-2025/" class="template-2"><span class="cta">Read more</span><span class="postTitle">AWS Weekly Roundup: AWS RTB Fabric, AWS Customer Carbon Footprint Tool, AWS Secret-West Region, and more (October 27, 2025)</span></a></div><p>Amazon CloudWatch SDK supports optimized JSON, CBOR protocols&nbsp;&ndash; CloudWatch SDK now defaults to JSON and CBOR protocols, delivering lower latency, reduced payload sizes, and decreased client-side CPU and memory usage compared to the traditional AWS Query protocol. Available at no additional cost across all AWS Regions and SDK language variants.</p>
<p>Amazon Cognito identity pools now support private connectivity with AWS PrivateLink &ndash; Organizations can now securely exchange federated identities for temporary AWS credentials through private VPC connections, eliminating the need to route authentication traffic over the public internet. Available in all AWS Regions where Cognito identity pools are supported, except AWS China (Beijing) and AWS GovCloud (US) Regions.</p>
<p>AWS Application Migration Service supports IPv6&nbsp;&ndash; Organizations can now migrate applications using IPv6 addressing through dual-stack service endpoints that support both IPv4 and IPv6 communications. During replication, testing, and cutover phases, you can use IPv4, IPv6, or dual-stack configurations to launch servers in your target environment. Available at no additional cost in all AWS Regions that support MGN and EC2 dual-stack endpoints.</p>
<p>And that&rsquo;s it for the AWS News Blog Weekly Roundup&hellip;not just for this week, but for 2025! We&rsquo;ll be taking a break and returning in January to continue bringing you the latest AWS releases and updates.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/secure-eks-clusters-with-the-new-support-for-amazon-eks-in-aws-backup/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Secure EKS clusters with the new support for Amazon EKS in AWS Backup</span></a></div><p>As we close out 2025, it&rsquo;s remarkable to look back at just how much has changed since the beginning of year. From groundbreaking AI capabilities to transformative infrastructure innovations, AWS has delivered an incredible year of releases that have reshaped what&rsquo;s possible in the cloud. Throughout it all, the AWS News Blog has been right here with you every week with our Weekly Roundup series, helping you stay informed and ready to take advantage of each new opportunity as it arrived. We&rsquo;re grateful you&rsquo;ve joined us on this journey, and we can&rsquo;t wait to continue bringing you the latest AWS innovations when we return in January 2026.</p>
<p>Until then, happy building, and here&rsquo;s to an even more exciting year ahead!</p>
<p>       Matheus Guimaraes | @codingmatheus <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-amazon-ecs-amazon-cloudwatch-amazon-cognito-and-more-december-15-2025/">AWS Weekly Roundup: Amazon ECS, Amazon CloudWatch, Amazon Cognito and more (December 15, 2025)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
