<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="preload" as="image" href="https://bytes.dev/images/bytes-banner-rounded.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/eyes.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/cig-offer.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/fb-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/li-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/tw-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/em-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/oracle-logo.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/cera-floating.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/content/spot-the-bug.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/cool-bits.png">
<link rel="preload" as="image" href="https://bytes.dev/images/bytes-icon.png">
<title>Bytes: Cloudflare built its own WordPress</title>
<meta name="color-scheme" content="light dark">
<meta name="supported-color-schemes" content="light dark">
<link href="https://fonts.googleapis.com/css2?family=Fira+Mono&family=Outfit:wght@400;500;700;900&family=Paytone+One" rel="stylesheet">
<style>@media (prefers-color-scheme: dark) {
.email-wrapper {
color: #F9F4DA !important;
background-color: #0F0D0E !important;
}
hr {
border-color: #262422 !important;
}
mark {
background-color: #231F20 !important;
color: #F9F4DA !important;
}
pre {
background-color: #231F20 !important;
border: 1px solid #231F20 !important;
color: #F9F4DA !important;
}
.bg-alt {
background-color: #231F20 !important;
}
.unsubscribe-link {
color: #504C48 !important;
}
.token.punctuation {
color: #f9f4da !important;
}
}
@media screen and (min-width: 600px) {
.mobile-break {
display: none;
}
}</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table class="email-wrapper" border="0" cellspacing="0" width="100%" style="background-color: #FFF; border-collapse: collapse; color: #231F20; font-family: Outfit, sans-serif; font-size: 16px; width: 100%;"><tbody><tr>
<td style="border-collapse: collapse !important; word-break: normal;"></td>
<td width="600px" style="border-collapse: collapse !important; width: 600px; word-break: normal;"><div style="max-width:600px;padding-top:80px">
<div style="text-align:center"><img width="600" style="max-width: 100%; padding-bottom: 40px;" src="https://bytes.dev/images/bytes-banner-rounded.png" alt="Bytes"></div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Today’s issue:</strong> Dario drinks goat blood, Turborepo almost invents time travel, and supply chain attackers pretend to be your girlfriend.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Welcome to <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/g3hnhwum94e8lzhr/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDc2" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777078">#476</a>.</p>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="80" src="https://bytes.dev/images/content/eyes.png" alt="Eyeballs logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">The Main Thing</h2>
</div>
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; max-width: 100%; padding: 24px; padding-bottom: 12px;">
<img src="https://bytes.dev/images/content/cig-offer.jpg" alt="Two guys offering a cigarette to the camera" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 15px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">Cloudflare devs offering me another knock-off project<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Cloudflare built its own WordPress</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">On April 1st, Cloudflare released an open-source TypeScript CMS that they called <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/9qhzhdudwogv6gf9/aHR0cHM6Ly9ibG9nLmNsb3VkZmxhcmUuY29tL2VtZGFzaC13b3JkcHJlc3Mv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777079">the spiritual successor to WordPress</a>. Then they spent the next 24 hours trying to convince everyone that it wasn’t an April Fools joke.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">They named the project EmDash. And that’s actually a very fitting name because, like their recent Next.js fork, this project was built by AI agents over a couple of months with the occasional human nudge from Matt Kane and Matt “TK” Taylor.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">And what single punctuation mark has become most synonymous with AI slop writing in the past 3 years? The em dash. I’m not sure if this means the Cloudflare team is refreshingly self-aware or not at all self-aware, but I’ll leave that up to you.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Matt & Matt say they built EmDash to solve “the WordPress plugin security crisis” and provide a more modern CMS, while WordPress co-founder Matt Mullenweg says <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/3ohphdu3meq527ir/aHR0cHM6Ly9tYS50dC8yMDI2LzA0L2VtZGFzaC1mZWVkYmFjay8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777080">it was created to sell more Cloudflare services</a>. And they both might be right. Here’s what’s actually different about it:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Built on Astro</strong> — EmDash is powered by Astro, the content-focused web framework Cloudflare acquired back in January. It stores content as structured JSON instead of HTML and is serverless by default. It’s definitely a more modern take on WordPress, but it also definitely is meant to sell more Cloudflare services.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Sandboxed plugins</strong> — WordPress plugins have full access to your database and filesystem, which is why 96% of its security vulnerabilities come from them. EmDash instead runs each plugin in its own V8 sandbox with declared permissions, like OAuth scopes for plugins. The catch is that this only fully works on Cloudflare’s runtime, which Mullenweg pointed out immediately.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">AI-native from the start</strong> — Built-in MCP server, Agent Skills for autonomous site management, and x402 micropayments so AI bots can pay for content access. Mullenweg called the Skills strategy “brilliant” and said WordPress needs to copy it immediately.</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Line:</strong> As someone who built my entire newsletter-writing career with an overreliance on em dashes, I’ll never forgive the clankers for what they took from me.</p>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse: collapse; margin-top: 40px; text-align: center;"><tbody><tr><td style="border-collapse: collapse !important; padding-top: 12px; word-break: normal;">
<a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/48hvh7uml40dp6tx/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDc2" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1845777082"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/fb-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/wnh2h6uq7er2kgi7/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NzY=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1845777083"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/li-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/reh8h9umdgql3ns2/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9QnJlYWtpbmclMjBkb3duJTIwQ2xvdWRmbGFyZSUyN3MlMjBuZXclMjBvcGVuLXNvdXJjZSUyMFdvcmRQcmVzcyUyMGZvcmsmdXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NzY=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1845777084"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/tw-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/08hwhgu2e3m69nfl/bWFpbHRvOj9zdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0YmYm9keT1UaG91Z2h0JTIweW91JTI3ZCUyMGxvdmUlMjB0aGlzJTIwd2VlayUyN3MlMjBCeXRlcyUwQS0tLSUwQUJyZWFraW5nJTIwZG93biUyMENsb3VkZmxhcmUlMjdzJTIwbmV3JTIwb3Blbi1zb3VyY2UlMjBXb3JkUHJlc3MlMjBmb3JrJTBBaHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjQ3Ng==" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1845777085"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/em-share-icon.png"></a>
</td></tr></tbody></table>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="150" src="https://bytes.dev/images/content/oracle-logo.png" alt="Oracle logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;"><span>Our Friends <br class="mobile-break">(With Benefits)</span></h2>
</div>
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; max-width: 100%; padding: 24px; padding-bottom: 12px;">
<img src="https://bytes.dev/images/content/cera-floating.jpg" alt="Michael Cera head floating and chasing a running Michael Cera" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 15px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">My AI agent after getting stuck in another loop<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/8ghqh3uodmg62zbk/aHR0cHM6Ly9mYW5kZi5jby80bFlHaDJy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777086">Technical deep dive: What is the AI Agent Loop?</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">There’s only one difference between a chatbot and an AI agent: the agent loop.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It’s what allows agents to perceive, reason, call tools, and loop until a job is finished.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Casius Lee wrote a great deep dive that explains the core architecture behind it, how it works, and the code you need to get started.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It covers:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">How the agent loop actually works <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/8ghqh3uodmg62zbk/aHR0cHM6Ly9mYW5kZi5jby80bFlHaDJy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777086">in code</a></p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">The two things that kill agents in production: low observability and runaway token costs (up to 15x more token usage than chat)</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">When <em>not</em> to use an agent loop</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">If you’re building anything agentic right now, the blog post provides a very helpful mental model. <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/8ghqh3uodmg62zbk/aHR0cHM6Ly9mYW5kZi5jby80bFlHaDJy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777086">Read it here</a>.</p>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px">
<h4 style="font-size: 19px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/l2heh6ul28omn7u6/aHR0cHM6Ly9nby5jbGVyay5jb20vcElFQjNrcw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777088">Clerk</a>
</h4>
<p style="font-family: Outfit, sans-serif; font-size: 16px; line-height: 1.5; margin-top: 5px; padding-left: 24px; padding-right: 24px;"><em>They just partnered with Stripe for the <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/l2heh6ul28omn7u6/aHR0cHM6Ly9nby5jbGVyay5jb20vcElFQjNrcw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777088">Stripe Projects initiative</a>, so now you can provision Clerk from your terminal with just</em> <code style="font-size: 14px;">stripe projects add clerk</code>.</p>
</div>
</div>
<pre class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><code class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 14px;">todoReducer</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> action</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">switch</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>type<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">case</span> <span class="token string" style="color: #f99157; font-size: 14px;">'ADD_TODO'</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> todos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> state<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>todos
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token operator" style="color: #12b5e5; font-size: 14px;">...</span>state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">todos</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
todos<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">concat</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>payload<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">case</span> <span class="token string" style="color: #f99157; font-size: 14px;">'REMOVE_TODO'</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> todos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> state<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>todos
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> newTodos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> todos<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">filter</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">todo</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span> todo<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id <span class="token operator" style="color: #12b5e5; font-size: 14px;">!==</span> action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id
<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">...</span>state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">todos</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> newTodos <span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">default</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> state
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
</code></pre>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/cool-bits.png" alt="Cool Bits logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Cool Bits</h2>
</div>
<ol>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Bram Cohen wrote about how <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/m2h7h6u35do6qpim/aHR0cHM6Ly9icmFtY29oZW4uY29tL3AvdGhlLWN1bHQtb2YtdmliZS1jb2RpbmctaXMtaW5zYW5l" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777089">the cult of vibe coding has gone too far</a>. But personally, I think people are overreacting to that photo of Sama and Dario dripping in goat’s blood.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/e0hph0u7v8k3l8u8/aHR0cHM6Ly9ibG9ncy53aW5kb3dzLmNvbS93aW5kb3dzZGV2ZWxvcGVyLzIwMjYvMDMvMjYvYW5ub3VuY2luZy1iYWJ5bG9uLWpzLTktMC8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777091">Babylon.js 9.0</a> is the “biggest and most feature rich update yet” for Microsoft’s open game and rendering engine.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/owhkhwuw924m60bv/aHR0cHM6Ly9zcnYuYnV5c2VsbGFkcy5jb20vYWRzL2xvbmcveC9USFJHSUxTUVRUVFRUVDRUTUQzQ0xUVFRUVFREWlZOVDI2VFRUVFRUV1RNS05CVlRUVFRUVEFMQzVKS1dZWUlVR1FOVzROSURQSEtVQ0o3V1FRMkNMS1NNNVFWVD9jaWQ9MzY4NzAw" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777093">Stop babysitting your coding agents</a>. Unblocked gives them the organizational knowledge to generate mergeable code without the back and forth. It pulls context from your stack, resolves conflicts, and cuts the rework cycle by delivering only what agents need for the task at hand. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Our very own Lynn Fisher shared <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/p8hehqu46n9w2vfq/aHR0cHM6Ly9seW5uYW5kdG9uaWMuY29tL3Rob3VnaHRzL2VudHJpZXMvaG93LWktcmVtZW1iZXItbGluay1hbmQtaW1hZ2UtbWFya2Rvd24tc3ludGF4Lw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777095">a neat way to remember link and image markdown syntax</a>. Turns out, I’ve been misusing Roy G Biv this whole time.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/6qhehoulrmp8wkuo/aHR0cHM6Ly92ZXJjZWwuY29tL2Jsb2cvbWFraW5nLXR1cmJvcmVwby1uaW5ldHktc2l4LXBlcmNlbnQtZmFzdGVyLXdpdGgtYWdlbnRzLXNhbmRib3hlcy1hbmQtaHVtYW5z" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777097">Turborepo 2.9</a> is now 96% faster. Just 4% more to go until you’re actually moving backwards in time every time your app loads.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/7qh7h2u9lr0288fz/aHR0cHM6Ly9mYW5kZi5jby80dDlxUENJ" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777099">Flox</a> is a cross-platform package and environment manager that lets you <code style="font-size: 14px;">flox activate</code> your way into a fully reproducible dev setup, without containers or system pollution. You get the right Node, right Python, and right Postgres - and your teammates get the exact same environment with one command. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Dani Akash wrote about <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/owhkhwuw924mnlsv/aHR0cHM6Ly9kYW5pYWthc2guY29tL3Bvc3RzL3NpbXBsZXN0LXN1cHBseS1jaGFpbi1kZWZlbnNlLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777100">an underrated supply chain defense</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Patrick Meenan made the case for why we should <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/z2hgh7ue6qo278cp/aHR0cHM6Ly9ibG9nLnBhdHJpY2ttZWVuYW4uY29tLzIwMjYvMDQvMDYvc2hpcHBpbmctcmVhY3Qtd2l0aC1jaHJvbWUv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777101">ship jQuery and React with the browser</a>. I agree, and think that every new Gmail account should also come pre-subscribed to the world’s most preeminent JavaScript newsletter.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/p8hehqu46n9wd7uq/aHR0cHM6Ly9yYWlsd2F5LmNvbS8_cmVmZXJyYWxDb2RlPWZpcmVzaGlw" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777102">Railway lets you deploy any app in a few clicks (or prompts)</a>. Just connect your repo, and it reads your code to automatically set up the right config for your project – or let your agents handle it using the Railway CLI. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">GitHub introduced <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/x0hph3ue25nvzna5/aHR0cHM6Ly9naXRodWIuYmxvZy9haS1hbmQtbWwvZ2l0aHViLWNvcGlsb3QvZ2l0aHViLWNvcGlsb3QtY2xpLWNvbWJpbmVzLW1vZGVsLWZhbWlsaWVzLWZvci1hLXNlY29uZC1vcGluaW9uLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777103">Rubber Duck</a> to the Copilot CLI. It’s an experimental feature that uses a different AI family to give you a second opinion on your coding agent’s recommendations. A great way to use double the tokens and half the brain cells.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">The Fig team wrote about <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/kkhmh2unwk80enfl/aHR0cHM6Ly9leHBvLmRldi9ibG9nL2hvdy1maWcta2VlcHMtbWlsbGlvbnMtZWF0aW5nLXNhZmVseS13aXRoLWEtZml2ZS1lbmdpbmVlci10ZWFtLWFuZC1leHBv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777105">how their 5-person engineering team uses the Expo SDK</a> to scale their dietary restrictions app to millions of users.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">The Axios team shared <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/58hvh8ugxr5d0ks6/aHR0cHM6Ly9zaW1vbndpbGxpc29uLm5ldC8yMDI2L0Fwci8zL3N1cHBseS1jaGFpbi1zb2NpYWwtZW5naW5lZXJpbmcv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777106">a post mortem on the recent supply chain attack</a>, including how social engineering was used to compromise a maintainer’s credentials. A good reminder that sexi lady bots on Twitter aren’t your real friends, no matter how well-informed they seem on geopolitical matters.</p>
</li>
</ol>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug: Solution</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px"><h4 style="font-size: 19px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/l2heh6ul28omn7u6/aHR0cHM6Ly9nby5jbGVyay5jb20vcElFQjNrcw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1845777088">Clerk</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">The <code style="font-size: 14px;">todos</code> variable is being re-declared within the same block. Variables declared with <code style="font-size: 14px;">const</code> and <code style="font-size: 14px;">let</code> are block-scoped, meaning they don’t exist outside of the block they were called in. Blocks are created with <code style="font-size: 14px;">{}</code> brackets around <code style="font-size: 14px;">if/else</code> statements, loops, and functions.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">There are many solutions, including changing the variable name in the different cases or removing the variable altogether. We can also wrap each of our cases in a block to isolate the variables.</p>
<pre class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><code class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 14px;">todoReducer</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> action</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">switch</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>type<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">case</span> <span class="token string" style="color: #f99157; font-size: 14px;">'ADD_TODO'</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> todos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> state<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>todos
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token operator" style="color: #12b5e5; font-size: 14px;">...</span>state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">todos</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
todos<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">concat</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>payload<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">case</span> <span class="token string" style="color: #f99157; font-size: 14px;">'REMOVE_TODO'</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> todos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> state<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>todos
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> newTodos <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> todos<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">filter</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">todo</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span> todo<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id <span class="token operator" style="color: #12b5e5; font-size: 14px;">!==</span> action<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id
<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">...</span>state<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">todos</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> newTodos <span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">default</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> state
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
</code></pre>
<div style="text-align:center;padding-bottom:80px;padding-top:80px">
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; padding: 24px;"><div style="margin-top:-40px">
<img src="https://bytes.dev/images/bytes-icon.png" alt="Bytes" width="55px" style="max-width: 100%; width: 55px;"><h5 style="font-size:18px;font-weight:400;margin-bottom:24px">Want us to say nice things <br> about your company?</h5>
<div style="margin-bottom:16px"><a style="background-color: #FCBA28; border: 1px solid #231F20; border-radius: 100px; color: #231F20; font-size: 14px; font-weight: 600; padding: 8px 14px; text-decoration: none;" href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/25h2h9u39k7pgdi3/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1845777107">Sponsor Bytes</a></div>
<div style="margin-bottom:20px"><a style="color: #FCBA28; font-size: 14px; font-weight: 600; text-decoration: underline;" href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/qvh8h8udw98mvqul/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1845777108">or share it</a></div>
<p style="font-family: Outfit, sans-serif; font-size: 14px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Built with ❤️ by<!-- --> <a style="color: #ed203d; font-weight: 600; text-decoration: underline;" href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/g3hnhwum94e8ngtr/aHR0cHM6Ly9maXJlc2hpcC5kZXY=" url-id="1845777109">Fireship</a></p>
</div></div>
<p style="font-family: Outfit, sans-serif; font-size: 14px; line-height: 1.5; opacity: 0.5; padding-left: 24px; padding-right: 24px;">50 W Broadway Ste 333 PMB 51647 Salt Lake City, Utah 84101</p>
<div style="font-family:Papyrus, cursive"><a class="unsubscribe-link" href="https://c5e21242.click.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov/9qhzhdudwogvx0f9/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1845777110">Unsubscribe from Bytes</a></div>
</div>
</div></td>
<td style="border-collapse: collapse !important; word-break: normal;"></td>
</tr></tbody></table>
<span style="display: none"><a href="https://c5e21242.unsubscribe.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov">Unsubscribe</a></span>
<!-- -->
<img src="https://c5e21242.open.convertkit-mail.com/5quqzqpw00b7hn2zgopa6h9lde5dxbnhxdov" alt="">
</body>
</html>