<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Artem Kireev</title>
    <description>The latest articles on DEV Community by Artem Kireev (@artemkireev).</description>
    <link>https://dev.to/artemkireev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4199029%2F09d8f562-69c2-4b63-91a5-5c4be8263887.jpg</url>
      <title>DEV Community: Artem Kireev</title>
      <link>https://dev.to/artemkireev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/artemkireev"/>
    <language>en</language>
    <item>
      <title>Black Friday code freeze: what design can still change</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Fri, 13 Nov 2026 16:31:36 +0000</pubDate>
      <link>https://dev.to/artemkireev/black-friday-code-freeze-what-design-can-still-change-5d85</link>
      <guid>https://dev.to/artemkireev/black-friday-code-freeze-what-design-can-still-change-5d85</guid>
      <description>&lt;p&gt;Black Friday is November 27 this year, and most freeze guides put the lock on theme, app and checkout changes between November 13 and 20. Today is the 13th. If your team treats "freeze" as "stop thinking about the storefront", you are about to spend the busiest two weeks of the year leaving known checkout problems in place.&lt;br&gt;
This article argues that a freeze should lock code, not design. It shows which checkout and product page fixes are safe because they are content, not code, ranks them by what the research says costs you orders, and gives a plan for the 14 days left.&lt;/p&gt;

&lt;h2&gt;
  
  
  A freeze protects code, and that is all it protects
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1713947506242-8fcae733d158%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8b25saW5lJTIwc2hvcHBlciUyMGNoZWNraW5nJTIwb3V0JTIwb24lMjBwaG9uZXxlbnwxfDB8fHwxNzk0NTg3MzE3fDA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1713947506242-8fcae733d158%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8b25saW5lJTIwc2hvcHBlciUyMGNoZWNraW5nJTIwb3V0JTIwb24lMjBwaG9uZXxlbnwxfDB8fHwxNzk0NTg3MzE3fDA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A shopper holding a phone to complete an online purchase" width="1600" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The reason for a freeze is simple. A new bug in browsing or checkout costs the most when traffic peaks. &lt;a href="https://thegood.com/insights/holiday-code-freeze/" rel="noopener noreferrer"&gt;The Good's holiday code freeze guide&lt;/a&gt; says it plainly. Feature changes that need code wait until the freeze ends.&lt;/p&gt;

&lt;p&gt;Look at how those guides define the line, though. The Shopify-focused &lt;a href="https://craftshift.com/shopify-code-freeze-black-friday/" rel="noopener noreferrer"&gt;Craftshift 2026 plan&lt;/a&gt; sorts work by how fast you can undo it. Theme code, app installs, checkout customizations and Shopify Functions are red, because rollback takes hours. App settings and styling are amber, with rollback in minutes. Prices, banners, product copy, images and collection membership are green, and you can undo them in seconds. Its dates are one vendor's recommendation, not Shopify policy, but the logic holds. Risk follows rollback time, not whether a designer touched it.&lt;/p&gt;

&lt;p&gt;The same Craftshift plan locks configuration on Friday, November 13 and code on November 20. So you have a week where content and data stay open, and a few days where only critical fixes ship. Too many teams spend that week waiting.&lt;/p&gt;

&lt;p&gt;That is a mistake, because checkout problems are mostly not exotic. They are well documented, and several of them live in copy and data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rank the fixes by what actually loses orders
&lt;/h2&gt;

&lt;p&gt;Start from the evidence instead of the backlog. &lt;a href="https://baymard.com/lists/cart-abandonment-rate" rel="noopener noreferrer"&gt;Baymard's cart abandonment research&lt;/a&gt; averages 50 studies at a 70.22% abandonment rate. Among shoppers who intended to buy, it lists the reasons. 40% cite extra costs such as shipping, tax and fees, 20% slow delivery, 19% distrust of the site with card details, 18% forced account creation, 17% a long or complicated checkout, 12% a total cost that was not visible up front, and 13% an unsatisfactory returns policy.&lt;/p&gt;

&lt;p&gt;Now sort those by rollback speed. Extra costs and a hidden total are a data and copy problem for many stores. Think shipping thresholds, delivery estimates, a line on the product page. Delivery speed is partly a promise you can state more clearly. Returns policy is a page. Trust is wording, badges and payment method labels. Account creation is a setting on Shopify and most other platforms. Only a long checkout is a real code problem.&lt;/p&gt;

&lt;p&gt;Baymard also says that fixing solvable checkout usability issues could raise conversion by 35.26% for a large site. Treat that as an upper bound for sites with many unfixed problems, not a forecast. Baymard has also said it is retesting its checkout research and expects new findings in the second quarter of 2027, so the exact percentages may move. The ranking of reasons has been stable for years, which is why I trust it for a two-week decision.&lt;/p&gt;

&lt;p&gt;The point is that most of the top reasons for abandonment can be addressed with changes your freeze policy already calls green or amber.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show the total cost before the cart
&lt;/h2&gt;

&lt;p&gt;Since extra costs are the top reason, start there. A shopper who sees a $9 shipping fee for the first time on the payment step reads it as a trick, however fair the fee is.&lt;/p&gt;

&lt;p&gt;The no-code fixes are boring and effective. Put the free shipping threshold in the announcement bar and on the cart drawer with a live "you are $14 away" line, which is a content block on most themes. Add estimated delivery dates by region to the product page, because for Black Friday orders the question "will it arrive by December 24?" is the one on people's minds. State your holiday returns window in one sentence near the buy button. Make guest checkout the default and hide account creation until after payment.&lt;/p&gt;

&lt;p&gt;If you cannot show exact tax, show a range and say it is an estimate. A range that is roughly right beats a surprise that is exactly right.&lt;/p&gt;

&lt;p&gt;Check each change against one question. Could this break a payment? Copy, banners and threshold messages do not touch the payment flow. A new fee calculator does, so it waits until December.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test less, but do not stop looking
&lt;/h2&gt;

&lt;p&gt;Many guides argue about whether to run A/B tests during the holidays. The honest answer is that most stores should not start new ones now. &lt;a href="https://convert.com/blog/a-b-testing/should-you-test-during-holidays" rel="noopener noreferrer"&gt;Convert's guide&lt;/a&gt; says Black Friday through Cyber Monday is a two to four day window of hyper-shopping, and that conversion rate, average order value and revenue per visitor swing sharply, with flash deals, ad spend and competitor offers all changing the conditions. A test that starts on November 24 and ends on November 30 tells you about Black Friday, not about your store in March.&lt;/p&gt;

&lt;p&gt;The Good takes the opposite line. More traffic means faster significance, and "your biggest risk is doing nothing". Both can be right. That article is from 2021 and gives no data, so I read it as a reminder, not as proof. Traffic does speed things up, but only for questions that matter in a normal week.&lt;/p&gt;

&lt;p&gt;My rule is this. If a test can reach a readable result by about November 20, let it finish. If not, ship the obviously better version to everyone only when you have a documented reason, not a hunch, and write it down. Baymard's reasons are such a reason. A hidden shipping cost is not a hypothesis to test during Black Friday.&lt;/p&gt;

&lt;p&gt;What you should do is watch. Heatmaps, session recordings and customer service tickets cost nothing in risk terms. Set up your conversion tracking before traffic arrives, as The Good advises, so that you have clean data for the first week of December.&lt;/p&gt;

&lt;h2&gt;
  
  
  A plan for the next 14 days
&lt;/h2&gt;

&lt;p&gt;Here is the sequence I would run, assuming a Shopify store and a team of one to three people.&lt;/p&gt;

&lt;p&gt;Today and tomorrow, take a snapshot. Duplicate the live theme as a restore point, export your settings and list who can publish. The Craftshift plan recommends the same, plus one monitoring dashboard and a rollback rule agreed in advance, such as "revert if checkout completion drops by a set amount over an hour".&lt;/p&gt;

&lt;p&gt;By Monday, audit the green list against Baymard's reasons. Open your store on a phone, add a product to the cart and go through checkout as a stranger. Write down every moment where you learned a cost, a date or a policy for the first time. Each one is a copy or data fix.&lt;/p&gt;

&lt;p&gt;By Wednesday, ship the fixes. That means a threshold message, delivery dates, returns line, guest checkout default, and payment method icons. Log each change with a time and the person who made it, so a bad hour is easy to explain.&lt;/p&gt;

&lt;p&gt;From November 20, touch nothing in code. Content stays open, including prices, stock, banners and emails. Keep the thaw date at December 1 or later, since Cyber Monday orders arrive until midnight.&lt;/p&gt;

&lt;p&gt;Last, keep a list of the red items you wanted and could not ship, such as a faster checkout step, a new cart design or an app. That list is your January plan, and it will be better informed because you watched real peak traffic first. For help judging whether your conversion numbers are healthy when peak week ends, my &lt;a href="https://dev.to/blog/shopify-conversion-rate-benchmarks"&gt;Shopify conversion benchmarks piece&lt;/a&gt; explains why published figures disagree.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/black-friday-code-freeze-checklist" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>ux</category>
      <category>design</category>
    </item>
    <item>
      <title>Click to cancel for SaaS: redesign your cancellation flow</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Tue, 10 Nov 2026 15:19:54 +0000</pubDate>
      <link>https://dev.to/artemkireev/click-to-cancel-for-saas-redesign-your-cancellation-flow-68k</link>
      <guid>https://dev.to/artemkireev/click-to-cancel-for-saas-redesign-your-cancellation-flow-68k</guid>
      <description>&lt;p&gt;New York City's click-to-cancel rule took effect on October 1, 2026. It says that if a customer signed up online, they must be able to cancel online. Most coverage is written by lawyers for lawyers, and it ends at "review your terms of service."&lt;/p&gt;

&lt;p&gt;This article is for the people who own the screens. It argues that the real compliance work is a design audit of every path into your subscription, and that the federal rule being dead does not take you off the hook. It helps SaaS founders, product managers and designers who sell to individuals or small teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  The federal rule died, the obligation did not
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1556155092-490a1ba16284%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8bGFwdG9wJTIwd2l0aCUyMHN1YnNjcmlwdGlvbiUyMHNldHRpbmdzJTIwb24lMjBzY3JlZW58ZW58MXwwfHx8MTc5NDMyMzg2Nnww%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1556155092-490a1ba16284%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8bGFwdG9wJTIwd2l0aCUyMHN1YnNjcmlwdGlvbiUyMHNldHRpbmdzJTIwb24lMjBzY3JlZW58ZW58MXwwfHx8MTc5NDMyMzg2Nnww%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A laptop on a desk showing an account settings screen" width="1600" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of product teams relaxed in 2025. The Eighth Circuit vacated the FTC's click-to-cancel amendments in July of that year on procedural grounds, which put the old 1973 Negative Option Rule back in place. According to a &lt;a href="https://subtracker.io/best/subscription-cancellation-rights-us-federal" rel="noopener noreferrer"&gt;summary of the current federal position&lt;/a&gt;, the FTC opened a new rulemaking in March 2026, comments closed in April, and nothing has replaced the vacated rule.&lt;/p&gt;

&lt;p&gt;That is true and mostly irrelevant. The same summary points out that the Restore Online Shoppers' Confidence Act (ROSCA) was never affected. It still requires clear disclosure, informed consent to charges and a simple way to stop recurring charges. Section 5 of the FTC Act still bans unfair and deceptive practices. State auto-renewal laws, with California's the most developed, apply whatever Washington does.&lt;/p&gt;

&lt;p&gt;The enforcement record shows how seriously this is taken. In September 2025 Amazon agreed to pay &lt;a href="https://www.streamtvinsider.com/technology/amazon-pay-25b-settle-ftc-charges-over-deceptive-prime-practices" rel="noopener noreferrer"&gt;$2.5 billion to settle FTC claims over Prime&lt;/a&gt;: a $1 billion civil penalty plus $1.5 billion in refunds. The complaint described a cancellation path of four pages, six clicks and fifteen options. The order requires a cancellation method that matches how the customer signed up and is not difficult, costly or time-consuming.&lt;/p&gt;

&lt;p&gt;Now add a city. On October 1, 2026 the NYC Department of Consumer and Worker Protection rule took effect. &lt;a href="https://www.nyc.gov/main/click-to-cancel" rel="noopener noreferrer"&gt;The city's own page&lt;/a&gt; says businesses must offer a "straightforward cancellation process in the same method as sign up", with civil penalties starting at $525 per violation and possible refund liability. One city, one rule, and it is the first municipal version in the country according to &lt;a href="https://natlawreview.com/article/nyc-mayor-and-dcwp-commissioner-announce-first-nation-municipal-click-cancel-rule" rel="noopener noreferrer"&gt;the National Law Review&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "same method as sign up" means on a screen
&lt;/h2&gt;

&lt;p&gt;Read that sentence as a designer, not a lawyer. It is a parity test between two flows. If a customer needed three steps and a card form to start, they should not need a phone call and a support ticket to leave.&lt;/p&gt;

&lt;p&gt;The part the legal write-ups skip is that most SaaS products have more than one front door. A customer can start a trial on the marketing site, from inside the product, through a sales-assisted checkout, through an app store, or through a partner marketplace. Each door is a "method". Each one needs a matching exit, or a clear and visible route to wherever the exit lives.&lt;/p&gt;

&lt;p&gt;This is where teams get caught. Self-serve signup works beautifully. Cancellation lives in a billing portal that only the original purchaser can see. Annual plans bought through a reseller can only be cancelled by emailing an account manager. None of these were designed as dark patterns. They are the residue of how billing was wired, and a regulator reads the outcome, not the intent.&lt;/p&gt;

&lt;p&gt;My advice is to map it as a table. Rows are every way a person can become a paying customer. Columns are the number of steps to start, the number of steps to stop, the channel for each, and who can do it. Any row where stop is longer than start, or sits in a different channel, is a defect. It takes an afternoon, and I would run it before reading a single clause of the rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the rule stops and your exposure starts
&lt;/h2&gt;

&lt;p&gt;Be honest about scope. The rule covers automatic renewal and continuous service offers sold to consumers in New York City. Pure enterprise contracts negotiated by procurement are a different animal. &lt;a href="https://natlawreview.com/article/nyc-mayor-and-dcwp-commissioner-announce-first-nation-municipal-click-cancel-rule" rel="noopener noreferrer"&gt;The National Law Review's account of the proposal&lt;/a&gt; describes it as applying to any subscription that qualifies as an automatic renewal or continuous service offer, and the public sources I could read do not say how it treats self-serve plans bought by a freelancer on a company card. I do not know, and I would not bet the answer is favorable.&lt;/p&gt;

&lt;p&gt;That ambiguity is the argument for designing to the strictest reading. Self-serve SaaS with a monthly card plan sits closest to the consumer line. Prosumer tools, creator software and small-team plans all live there. If you bill people with a credit card and a pricing page, assume you are in scope somewhere.&lt;/p&gt;

&lt;p&gt;Two facts make the cost of getting this wrong higher than the $525 headline. First, the city's page says liability can include refunding the customer. A refund exposure scales with your customer base, not with a per-violation fine. Second, a flow that is clean in New York but painful elsewhere is a flow you still have to defend under ROSCA and your state law. Building a second, hidden "New York version" is more work than fixing the original.&lt;/p&gt;

&lt;p&gt;And do not treat a phone number as a fix. A support line is a separate channel. If signup was a web form, a call centre is not parity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Save offers and the line between persuasion and obstruction
&lt;/h2&gt;

&lt;p&gt;Retention teams will ask whether the exit survey, the pause option and the discount offer all have to go. The sources I found do not address retention offers directly, so this is judgment, not law. My view is that offers are fine and obstruction is not.&lt;/p&gt;

&lt;p&gt;The test I would use is whether the customer can finish cancelling without engaging with the offer. A discount shown on the confirmation screen, with a clear "Cancel anyway" button of equal weight, is a choice. A discount that must be declined across three modals, or a "Are you sure?" that moves the real button, is friction by design. The Amazon order is explicit that declining must be possible without manipulative phrasing, and that standard is a good proxy for where regulators look.&lt;/p&gt;

&lt;p&gt;Pause and downgrade are the most useful saves because they are real alternatives. A customer who cancels because of a budget freeze may take a three-month pause. A customer who uses one feature may take the cheaper plan. Offer them once, on one screen, in plain language, and let the primary action stay cancellation.&lt;/p&gt;

&lt;p&gt;One more measurable point. Do not bill after the first cancellation attempt. Charges that land after a customer has tried to leave are the clearest way to turn a clumsy flow into a violation. Show an unambiguous confirmation on screen, send the same by email with the date access ends, and make the end date match what billing will actually do.&lt;/p&gt;

&lt;h2&gt;
  
  
  A one-week plan
&lt;/h2&gt;

&lt;p&gt;Day one, build the entry-and-exit table described above and mark every mismatch. Include app store and reseller channels, even when you do not control the billing, because you control what your product tells the customer about them.&lt;/p&gt;

&lt;p&gt;Day two, walk the cancel flow with a stopwatch and a fresh account, on mobile as well as desktop. Count taps and screens. If the path to "Cancel subscription" is more than two clicks from account settings, or the word "cancel" is not on the first screen, rewrite the labels before you rewrite anything else.&lt;/p&gt;

&lt;p&gt;Day three, strip the flow down to its legally necessary parts: terms of the cancellation, the end date, a final confirm. Then add back at most one save offer and one optional reason question. The reason question must be skippable. Your churn data is more honest when it is.&lt;/p&gt;

&lt;p&gt;Day four, fix the account-ownership gaps. If only the billing owner can cancel, say so at the point of need and give a self-serve way to request transfer. Remove every "contact sales to cancel" on plans that were bought without talking to sales.&lt;/p&gt;

&lt;p&gt;Day five, test the confirmations. Cancel, wait, and check that the email arrives, the access end date is correct and no invoice is generated afterward. Write the findings down and put the table in a place where whoever changes billing next will see it.&lt;/p&gt;

&lt;p&gt;Then repeat it each time you add a plan, a marketplace listing or a new way to buy. Parity is not a one-time audit. It is a property you have to keep, and the cheapest moment to keep it is when the new door is being built.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/click-to-cancel-saas-cancellation-flow" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>saas</category>
      <category>ux</category>
      <category>design</category>
    </item>
    <item>
      <title>Figma MCP design system prep for AI agents</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Fri, 06 Nov 2026 15:20:57 +0000</pubDate>
      <link>https://dev.to/artemkireev/figma-mcp-design-system-prep-for-ai-agents-l61</link>
      <guid>https://dev.to/artemkireev/figma-mcp-design-system-prep-for-ai-agents-l61</guid>
      <description>&lt;p&gt;Figma now lets coding agents write straight to the canvas, and on October 29 it explained how its own editing model learns to do the same. Both posts say agents work "using your components and variables." Neither says what your files need to look like for that to be true.&lt;/p&gt;

&lt;p&gt;This article argues that the gap is where teams lose the benefit. The agent follows the rules you write down and the structure you actually built, not the system in your head. It is for design leads and product managers who are about to let an agent touch a production library.&lt;/p&gt;

&lt;h2&gt;
  
  
  The announcement skips the part you have to do
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1570215171424-f74325192b55%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8ZGVzaWduZXIlMjB3b3JraW5nJTIwYXQlMjBsYXB0b3AlMjB3aXRoJTIwaW50ZXJmYWNlJTIwd2lyZWZyYW1lc3xlbnwxfDB8fHwxNzkzOTc4MjkyfDA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1570215171424-f74325192b55%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8ZGVzaWduZXIlMjB3b3JraW5nJTIwYXQlMjBsYXB0b3AlMjB3aXRoJTIwaW50ZXJmYWNlJTIwd2lyZWZyYW1lc3xlbnwxfDB8fHwxNzkzOTc4MjkyfDA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A designer working on interface wireframes at a laptop" width="1600" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In March, Figma opened the canvas to agents. Its &lt;a href="https://www.figma.com/blog/the-figma-canvas-is-now-open-to-agents/" rel="noopener noreferrer"&gt;launch post&lt;/a&gt; says the &lt;code&gt;use_figma&lt;/code&gt; tool works with your components and variables, and that auto layout, components and variables are the structures agents operate on. Claude Code, Codex, Cursor, Copilot and others can connect.&lt;/p&gt;

&lt;p&gt;The same post gives no guidance on preparing a file. It points to the help center and developer docs for the rest. Figma's &lt;a href="https://help.figma.com/hc/en-us/articles/39252411778583-Figma-MCP-server-FAQs" rel="noopener noreferrer"&gt;MCP server FAQ&lt;/a&gt; fills in some practical limits. You need a Full seat to write outside your drafts. Fonts must be uploaded to your Figma account. Components must be published before Code Connect mappings can be completed. And the output "is beta quality and may need manual review and cleanup."&lt;/p&gt;

&lt;p&gt;That last line matters most. Figma is telling you the agent is a fast first pass, not a finished one. How much cleanup you face depends on inputs you control.&lt;/p&gt;

&lt;p&gt;On October 29, Figma's VP of engineering described the model behind the agent in &lt;a href="https://www.figma.com/blog/training-a-figma-fluent-editing-model/" rel="noopener noreferrer"&gt;How we're training a Figma-fluent editing model&lt;/a&gt;. The post is candid about one thing worth repeating. Post-training improves the model's part of a larger system that also includes canvas context, design system context and tools. Two of those three are your files. A better model does not rescue a messy library.&lt;/p&gt;

&lt;h2&gt;
  
  
  What goes wrong when you just point an agent at a library
&lt;/h2&gt;

&lt;p&gt;Bitovi ran the agent against real components and wrote up the result in &lt;a href="https://bitovi.com/blog/figma-just-opened-the-canvas-to-agents.-heres-what-actually-happens" rel="noopener noreferrer"&gt;Figma just opened the canvas to agents&lt;/a&gt;. The good news first. From an existing Button, the agent produced a component set with correct variants, styles and clean layer names.&lt;/p&gt;

&lt;p&gt;The agent "doesn't pick up on a linked design system unless you tell it to. Every time." It used plain frames for some components while using real library components for others. Left to defaults, it hardcoded colors, spacing and type. Bitovi's summary is the line I would put on a wall: the agent optimizes for the literal goal you gave it, not the implicit standards in your head.&lt;/p&gt;

&lt;p&gt;Hardcoded values are not a model flaw you wait out. A designer who never opened the variables panel produces the same output. The agent is a very literal junior, so every gap in your system gets reproduced, quickly.&lt;/p&gt;

&lt;p&gt;Treat one test with care. Bitovi's piece is one team's experience, and output varies between runs. The pattern is useful. No one has published a failure rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five file problems that make agents guess
&lt;/h2&gt;

&lt;p&gt;Practitioner guides, such as the &lt;a href="https://camoa.github.io/dev-guides/ai-tooling/figma-mcp/figma-file-best-practices" rel="noopener noreferrer"&gt;Figma file best practices&lt;/a&gt; in the camoa dev guides and a &lt;a href="https://uxdesign.cc/agentic-ai-design-systems-figma-a-practical-guide-6ab0b681718d" rel="noopener noreferrer"&gt;uxdesign.cc practical guide&lt;/a&gt;, agree on the problems. They are blog advice, not Figma documentation, so read them as heuristics. I rank them by cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardcoded fills and spacing.&lt;/strong&gt; If a button's fill is a hex value instead of a variable, the agent has nothing to bind to and copies the hex. Bind every fill, stroke, radius and gap to a variable first. This single fix removes the failure Bitovi saw most clearly.&lt;/p&gt;

&lt;p&gt;Primitives and semantic tokens matter here. A variable named &lt;code&gt;blue-500&lt;/code&gt; tells the agent a color. A variable named &lt;code&gt;action-primary&lt;/code&gt; tells it a purpose. Agents choose by purpose when you ask for "a primary action", so semantic names carry the instruction.&lt;/p&gt;

&lt;p&gt;Generic layer names come next. "Frame 234" and "Group 1" give the agent no hint about what a thing is, and the code it produces inherits the vagueness. Name layers the way an engineer would name a component, and match component and property names to your code (a "Style" property in Figma against a "variant" prop in code is enough to break mapping).&lt;/p&gt;

&lt;p&gt;Then structure. Agents read auto layout as intent. If a card has fixed positions instead of padding, gap and direction, the agent cannot tell what should grow and what should wrap. Guides also warn against nesting auto layout very deeply, though I have not seen a measured threshold, so treat any specific number as folklore.&lt;/p&gt;

&lt;p&gt;Finally, missing descriptions. Guides report that component descriptions reach the agent as context. A two-line note on a star rating component, saying what its states mean and when not to use it, costs nothing and is read every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why rules matter more than a better prompt
&lt;/h2&gt;

&lt;p&gt;Figma's answer to inconsistency is skills, which are markdown files that spell out workflow steps, sequencing and conventions. The foundational &lt;code&gt;/figma-use&lt;/code&gt; skill teaches the agent how the tool works, and teams can add their own. Figma says skills make output more predictable because the same prompt can yield different results from a non-deterministic model.&lt;/p&gt;

&lt;p&gt;Read that as a statement about where your effort belongs. A prompt lives for one request. A skill lives for every request after it. Bitovi's suggested directives show the right grain. Check for a linked design system before generating anything, and use variables for color and spacing.&lt;/p&gt;

&lt;p&gt;This is the logic behind &lt;a href="https://dev.to/blog/ai-agent-approval-ux"&gt;approval UX for agents&lt;/a&gt;. You cannot review every action at agent speed, so judgment moves into rules written in advance.&lt;/p&gt;

&lt;p&gt;My first skill would be short.       Name the library to use and require the agent to load it before drawing anything. State that every color, space and radius comes from a variable, and that a missing token should be reported, not invented. Say which components to use for buttons, inputs and cards, and that plain frames are never acceptable as stand-ins. Describe the naming pattern for new layers. End with what to report: any value the agent could not bind, and any component it had to build.&lt;/p&gt;

&lt;p&gt;An agent that lists its own exceptions turns cleanup from a hunt into a checklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the model gains help, and where they do not
&lt;/h2&gt;

&lt;p&gt;Figma's own numbers show real progress. Typical tasks are about 20% faster than in beta. Against expert designers in head-to-head testing, the new agent beats or matches the previous production agent 62% of the time. User ratings are 33% higher and users undo the agent's work 60% less often.&lt;/p&gt;

&lt;p&gt;Those are Figma's internal results, measured on its own tasks, and the post itself says one evaluation is only one input among many. They show the model improving. They do not show your library behaving.&lt;/p&gt;

&lt;p&gt;The post also names errors that remain, such as overlapping icons and text and clipped arrows. These are visual faults that structure alone will not prevent. They are why Figma's agent takes a screenshot of its own output and iterates on mismatches, and why you should still look at what it makes.&lt;/p&gt;

&lt;p&gt;A better model helps everyone equally. An agent-ready file helps only you, and it makes each model upgrade mean less cleanup.&lt;/p&gt;

&lt;h2&gt;
  
  
  A one-week plan for a production library
&lt;/h2&gt;

&lt;p&gt;Do this on a duplicate of your library, as Figma recommends, never on the live file.&lt;/p&gt;

&lt;p&gt;On day one, audit variables. Find every fill, stroke, radius and spacing value in your core components that is not bound to a variable. Start with the 20 most used components.&lt;/p&gt;

&lt;p&gt;On day two, rename. Replace generic layer names in those components, and align component and property names with the code names your engineers use.&lt;/p&gt;

&lt;p&gt;On day three, check auto layout in your cards, forms and navigation. Every container should express direction, gap and padding rather than fixed positions.&lt;/p&gt;

&lt;p&gt;On day four, add descriptions to components that have states or usage rules. Keep each to two or three lines.&lt;/p&gt;

&lt;p&gt;On day five, write your first skill using the template above and run five fixed prompts against the duplicate, such as a settings page, a card variant, a form with errors, an empty state and a mobile screen. Record how many values were hardcoded and how many components were faked with frames. Run the same five after any change to the skill.&lt;/p&gt;

&lt;p&gt;That count is your metric. If you already test your system visually, the method in &lt;a href="https://dev.to/blog/ai-agent-visual-regression-testing"&gt;AI agent visual regression testing for design systems&lt;/a&gt; pairs well with it, since it catches the clipped and overlapping output Figma admits still happens.&lt;/p&gt;

&lt;p&gt;If the first week shows twenty hardcoded values, you have learned something real about your library, and you learned it before the agent shipped the same flaws into a product. That is the point. The agent is a mirror, and it is more honest than a design review.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/figma-mcp-design-system-for-agents" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>Shopify script tags deprecation: what breaks on March 1, 2027</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Tue, 03 Nov 2026 15:24:32 +0000</pubDate>
      <link>https://dev.to/artemkireev/shopify-script-tags-deprecation-what-breaks-on-march-1-2027-4pa4</link>
      <guid>https://dev.to/artemkireev/shopify-script-tags-deprecation-what-breaks-on-march-1-2027-4pa4</guid>
      <description>&lt;p&gt;On March 1, 2027, Shopify stops injecting script tags into storefronts. Since October 1, 2026, apps can no longer create or update them. Anything an old app added to your store through that mechanism, such as a review widget, a popup, a sticky bar or an upsell, will vanish without an error message.&lt;/p&gt;

&lt;p&gt;This article is for store owners and e-commerce leads, not app developers. It explains why the quiet failure is the real risk, how to find out in an afternoon which parts of your storefront depend on script tags, and what to do before the deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  A deadline that comes with no warning banner
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1496181133206-80ce9b88a853%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8bGFwdG9wJTIwb25saW5lJTIwc3RvcmUlMjB3ZWJzaXRlJTIwb24lMjBkZXNrfGVufDF8MHx8fDE3OTM3MTg4ODl8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1496181133206-80ce9b88a853%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8bGFwdG9wJTIwb25saW5lJTIwc3RvcmUlMjB3ZWJzaXRlJTIwb24lMjBkZXNrfGVufDF8MHx8fDE3OTM3MTg4ODl8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A laptop on a desk showing an online store" width="1600" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dates are simple. According to &lt;a href="https://shopify.dev/docs/apps/build/online-store/script-tag-deprecation/storefront.md" rel="noopener noreferrer"&gt;Shopify's developer documentation&lt;/a&gt;, from October 1, 2026 the create and update calls for script tags return a permission error on every API version. Existing tags keep running. On March 1, 2027 Shopify stops loading them, and "any dependent features stop for that store."&lt;/p&gt;

&lt;p&gt;Here is what makes this different from a normal deprecation. Shopify planned a warning banner for app users and then dropped it. In a September post on the &lt;a href="https://community.shopify.dev/t/deprecation-script-tags-will-stop-running-on-march-1-2027/37108" rel="noopener noreferrer"&gt;Shopify developer community&lt;/a&gt;, a Shopify staff member said the install warning would not ship on October 1, that an earlier email had been overstated, and that the dates had not changed. Shopify said it would watch script tag usage through the fourth quarter and revisit the question in January.&lt;/p&gt;

&lt;p&gt;Read that as a merchant. The platform will not tell you which of your apps still depend on the old mechanism. The developers who wrote those apps are complaining in public that they cannot reach their own customers. One developer in the thread said 70 to 75 percent of their users still rely on script tags. I can't verify that number, but even if it is half right, a lot of stores will hit March with live features that quietly stop.&lt;/p&gt;

&lt;p&gt;Your analytics will not flag it either. A missing review widget is not a 500 error. It is a page that looks slightly emptier, and the conversion rate drifts down over a few weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which storefront features usually depend on script tags
&lt;/h2&gt;

&lt;p&gt;Script tags were the easy way for an app to put JavaScript on every page of a store without touching the theme. That makes them common in the parts of a storefront that sit on top of the design rather than inside it. Think review stars on product cards, exit-intent popups, free-shipping progress bars, countdown timers, currency or language switchers, cookie banners, size guides, chat bubbles and cross-sell drawers.&lt;/p&gt;

&lt;p&gt;These are also the features that carry conversion weight. Reviews are the clearest case. Northwestern's &lt;a href="https://spiegel.medill.northwestern.edu/How-Online-Reviews-Influence-Sales" rel="noopener noreferrer"&gt;Spiegel Research Center report&lt;/a&gt; found that a product with five reviews is 270 percent more likely to be purchased than one with none. Treat that number carefully. It comes largely from one retailer's data and is higher for expensive products. The same report says nearly all of the lift arrives within the first 10 reviews. So the loss from a vanished review widget depends on how many reviews you have, how pricey the product is, and whether shoppers can still find the reviews anywhere else on the page.&lt;/p&gt;

&lt;p&gt;Few stores will lose anything like 270 percent. The risk is that these features are ones a design review never checks, because they live in the browser, injected after load, not in the theme code.&lt;/p&gt;

&lt;p&gt;A related shutdown has already happened at checkout. A vendor write-up from &lt;a href="https://www.aimerce.ai/blogs/shopify-retiring-additional-scripts-is-your-tracking-safe" rel="noopener noreferrer"&gt;Aimerce&lt;/a&gt; reports that Additional Scripts on the Thank You and Order Status pages stopped for non-Plus stores after August 26, 2026, and that conversion pixels for Meta, Google or TikTok stop firing with no error in the admin. It is a vendor blog selling its own fix, so weigh its advice accordingly. Its audit trick is still good. Compare conversions reported in each ad platform against orders in Shopify, and a growing gap means lost tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The replacement is not automatic
&lt;/h2&gt;

&lt;p&gt;Shopify's documented replacement is an app embed block, shipped inside a theme app extension. For tracking only, the replacement is a web pixel. The two behave very differently for you.&lt;/p&gt;

&lt;p&gt;A web pixel needs no action from the merchant. You approve permissions when you install or update the app, and it runs. An app embed block is the opposite. In Shopify's words, "app embed blocks are inactive until an app user turns them on." The developer is supposed to send you to the theme editor with the embed switched on, and confirm it is active on the published theme before deleting the old script tag. Otherwise, as the docs put it, "you leave a gap where neither works."&lt;/p&gt;

&lt;p&gt;That creates three failure modes you can plan for.&lt;/p&gt;

&lt;p&gt;First, the app updated, but nobody told you to flip the toggle. The developer thread says there is currently no programmatic way to enable an embed for existing merchants, so some developers are relying on emails that merchants don't read. Second, embeds are per theme. If you duplicate your theme for a holiday redesign and publish the copy, the embed has to be turned on again. Third, both versions can run at once. Shopify warns that doing so loads the script twice, which can double-count analytics or show a popup twice.&lt;/p&gt;

&lt;p&gt;Stores on legacy themes have a further problem. App blocks need JSON templates, though Shopify says embed blocks work on vintage and Online Store 2.0 themes. Developers in the thread asked what happens to merchants who cannot move, and the thread shows no Shopify commitment to an exception. If your theme is more than a few years old and heavily edited, this is the most likely place for surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  A one-afternoon audit before the deadline
&lt;/h2&gt;

&lt;p&gt;You do not need a developer to find out how exposed you are. You need a list of apps, a browser and a few hours.&lt;/p&gt;

&lt;p&gt;Start in Shopify admin and list every installed app. For each one, write down what it shows shoppers and where. If an app has no visible storefront element, such as a pure back-office tool, cross it out. What remains is your risk list.&lt;/p&gt;

&lt;p&gt;Next, open your live store in a private window with the browser's developer tools on the Network tab, and load the home page, a collection page, a product page and the cart. Filter requests to JavaScript. Files served from &lt;code&gt;cdn.shopify.com&lt;/code&gt; with an app's name in the path, or from the app vendor's own domain, tell you which apps inject code. Write down the app, the page and the visible feature it controls. This gives you a map from feature to app, which is the document most stores don't have.&lt;/p&gt;

&lt;p&gt;Then contact each vendor on the risk list with one precise question. Ask whether the app still uses script tags on your store, and if so, what you need to do and by when. Ask them to confirm in writing that the app has moved to an app embed block or a web pixel. If the answer is vague, treat it as a no.&lt;/p&gt;

&lt;p&gt;Finally, work out your fallback. For any feature that drives revenue, such as reviews, upsells or shipping thresholds, decide now what you will do if it disappears in March. That might be a different app that already uses theme extensions, or a native theme section. Shopify also describes a route for admin-created custom apps. Move the script into the theme itself, ideally as a custom Liquid block. The catch is that the script stays after the app is removed, and Shopify notes that editing theme code takes the theme out of automatic upgrades.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do this month
&lt;/h2&gt;

&lt;p&gt;Treat the deadline as a release date for your own store. Work backward from March 1 and leave a buffer, because app vendors will be answering the same question from thousands of merchants at the same time in February.&lt;/p&gt;

&lt;p&gt;In November, build the feature-to-app map and email vendors. In December, avoid redesigns and new theme publishes if you can, since each one resets the embed activation question. In January, check the Shopify developer changelog, because Shopify has said it will revisit the situation then and may announce targeted notices. Between mid-January and mid-February, have each vendor activate its embed on a staging copy of the theme, then do the same on the published theme, with a before-and-after screenshot of every template that carries an app feature.&lt;/p&gt;

&lt;p&gt;After each change, compare the page with your screenshots. Watch for a doubled popup, a missing badge, a layout shift where a widget used to load, and a conversion pixel that fires twice. Compare ad platform conversions against Shopify orders for a week afterward.&lt;/p&gt;

&lt;p&gt;One habit for later. At every app demo, ask whether it runs through a theme app extension and web pixel, or still injects a script tag.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/shopify-script-tags-deprecation" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>ux</category>
      <category>design</category>
    </item>
    <item>
      <title>AI agent visual regression testing for design systems</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Fri, 30 Oct 2026 16:12:35 +0000</pubDate>
      <link>https://dev.to/artemkireev/ai-agent-visual-regression-testing-for-design-systems-27kn</link>
      <guid>https://dev.to/artemkireev/ai-agent-visual-regression-testing-for-design-systems-27kn</guid>
      <description>&lt;p&gt;AI coding agents now edit interface code all day, and they do it without looking at the screen. The code compiles, the tests pass, and a button three screens away has quietly changed color. Trail of Bits found the same pattern in security patches this month, and the UI version is easier to miss because nobody greps for "slightly off".&lt;/p&gt;

&lt;p&gt;This article argues that visual regression testing is the review step product teams are skipping, and that the hard part is not the tooling but deciding what counts as a change. It is written for designers, product managers and founders who let agents touch a shared component library and want a setup they can put in place this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents fix the thing you asked and change the things you did not
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1629904853716-f0bc54eea481%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8ZGV2ZWxvcGVyJTIwbW9uaXRvcnMlMjBzaG93aW5nJTIwdXNlciUyMGludGVyZmFjZSUyMGRlc2lnbiUyMG9uJTIwc2NyZWVufGVufDF8MHx8fDE3OTMzNzY1NjB8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1629904853716-f0bc54eea481%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8ZGV2ZWxvcGVyJTIwbW9uaXRvcnMlMjBzaG93aW5nJTIwdXNlciUyMGludGVyZmFjZSUyMGRlc2lnbiUyMG9uJTIwc2NyZWVufGVufDF8MHx8fDE3OTMzNzY1NjB8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="Monitors showing interface code and a design on screen" width="1600" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On October 21, Trail of Bits published &lt;a href="https://blog.trailofbits.com/2026/10/21/your-ai-agent-fixed-the-bug-but-what-else-did-it-change/" rel="noopener noreferrer"&gt;a review of its own merged patches&lt;/a&gt;. Across more than 130 merged pull requests, it confirmed 21 regressions: 16 functional, 1 performance and 4 in build or tests. A first agent pass flagged 58 candidates, and only 21 were real, about 36% precision. The lesson is not that agents write bad patches. It is that a change is judged against the bug it fixes, and nobody checks everything the diff touched.&lt;/p&gt;

&lt;p&gt;That is a security team looking at server code. Interfaces have it worse. A functional test asks whether the checkout button submits the form. It does not ask whether the button is still the same green as the one on the pricing page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.augmentcode.com/guides/visual-regression-testing-ai-generated-uis" rel="noopener noreferrer"&gt;Augment Code's guide to testing AI-generated UIs&lt;/a&gt; describes the failure plainly. Agent edits can pass linting, type checks and functional tests while still shipping layout shifts, broken CSS and styling drift. It is a vendor guide, so treat its benchmark numbers with care. The mechanism it describes matches what any team with a shared component library has seen.&lt;/p&gt;

&lt;p&gt;My view is that this is a review problem, not a model problem. Better models will drift less, but they will also be given bigger tasks. The check has to live outside the author.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why code review does not catch visual drift
&lt;/h2&gt;

&lt;p&gt;A reviewer reading a diff sees &lt;code&gt;--primary: #1a7f4b&lt;/code&gt; changing to &lt;code&gt;--primary: #1b8250&lt;/code&gt;. Both are valid. Neither looks wrong. The reviewer cannot see that the token feeds hover states, disabled states, focus rings and the dark theme.&lt;/p&gt;

&lt;p&gt;In shadcn/ui style setups the component source is copied into your repo, which means an agent can edit it directly. Augment notes that a change to &lt;code&gt;--primary&lt;/code&gt; reaches every component that references it. One token, many consumers, one screen checked by the person who wrote the prompt.&lt;/p&gt;

&lt;p&gt;Agents also vary run to run. Similar prompts can produce different spacing, different token choices and different responsive behavior. A spacing value of 14px is numerically fine and still off a 4px grid. A linter will not object. A person scanning a pull request will not either.&lt;/p&gt;

&lt;p&gt;The fix is to stop asking humans to compute rendered output in their heads. Render it, compare it with the last approved render, and let the human judge only the differences.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a visual test actually checks
&lt;/h2&gt;

&lt;p&gt;The mechanism is simple. &lt;a href="https://playwright.dev/docs/test-snapshots" rel="noopener noreferrer"&gt;Playwright's snapshot testing&lt;/a&gt; saves a reference screenshot on the first run with &lt;code&gt;expect(page).toHaveScreenshot()&lt;/code&gt;, then compares every later run against it. &lt;a href="https://storybook.js.org/docs/writing-tests/visual-testing" rel="noopener noreferrer"&gt;Storybook's visual testing&lt;/a&gt; does the same per story. Once enabled, every story becomes a test, and the first run creates the baselines.&lt;/p&gt;

&lt;p&gt;Two details decide whether this helps or annoys your team.&lt;/p&gt;

&lt;p&gt;First, thresholds. Playwright's per-pixel &lt;code&gt;threshold&lt;/code&gt; defaults to 0.2 on a 0 to 1 scale, and &lt;code&gt;maxDiffPixels&lt;/code&gt; is unset by default. That default will pass a subtle color shift on a large button. Tighten it for token-level components, loosen it for pages with photography.&lt;/p&gt;

&lt;p&gt;Second, environment. Playwright's docs warn that rendering varies with the operating system, browser, hardware and headless mode, and baselines are named per browser and platform. A baseline made on a designer's laptop will fail in CI. Generate baselines in the same container image that runs the checks, or every run opens with false alarms and people learn to ignore the check.&lt;/p&gt;

&lt;p&gt;Pixel diffing has a blind spot too. It tells you something changed, not whether the change was intended. That judgment is the part worth spending human attention on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the components, then the flows that earn money
&lt;/h2&gt;

&lt;p&gt;Teams usually start by screenshotting whole pages. I would start one level down. Shared components carry the blast radius, so cover each state of each one: default, hover, focus, disabled, loading, error. Storybook makes that cheap because the states already exist as stories.&lt;/p&gt;

&lt;p&gt;Then add a short list of flows where a visual break costs revenue. For a SaaS product that is sign-up, the first-run screen and billing. For a store it is the product page, the cart and checkout. Five or six screens at two viewport widths is a better start than sixty screens nobody maintains.&lt;/p&gt;

&lt;p&gt;Keep the noise out. Disable animations, wait for fonts, and mask regions that change by design, such as timestamps, rotating banners and ads. Playwright lets you move the mouse off interactive elements so hover styles do not leak into the shot, and a custom stylesheet can hide volatile content. Each of these removes a reason for someone to mute the check.&lt;/p&gt;

&lt;p&gt;Where agents come in, give them the screenshots too. An agent that can see the rendered result can catch its own mistake before a human does. It should still not be the one to approve a baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The approval rule that makes it work
&lt;/h2&gt;

&lt;p&gt;The weak point of every visual test suite is the update command. In Playwright it is &lt;code&gt;npx playwright test --update-snapshots&lt;/code&gt;. In Storybook you accept the change in the panel. Both are one click, and an agent that sees a red check will happily click it for you.&lt;/p&gt;

&lt;p&gt;That turns the test into a rubber stamp. So write one rule down: an agent may propose a baseline change, a person who owns that component approves it. Make the UI check a required status on pull requests, which Storybook's Chromatic integration supports, and put the component owner on review for any file that changes a baseline.&lt;/p&gt;

&lt;p&gt;The second half of the rule is about intent. Augment calls the failure "intent drift", where a change is visually clean but diverges from what the component is for. No screenshot diff finds that. Only someone who knows why the button is that size can, which is where a designer earns the review.&lt;/p&gt;

&lt;p&gt;There is a catch worth admitting. Visual tests also report your own design lag. If the design file was not updated after a scope change, the test will flag the code as a regression when the design is stale. Fix the source of truth first, then the baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  A setup you can start on Monday
&lt;/h2&gt;

&lt;p&gt;You do not need a platform purchase to begin. Here is a sequence that fits in a week.&lt;/p&gt;

&lt;p&gt;Day one, list the ten components and five flows where a visual mistake would cost the most. Day two, write screenshot tests for them in Playwright, or turn on Storybook visual tests if you already keep stories. Day three, pin the browser and container image, and generate baselines there.&lt;/p&gt;

&lt;p&gt;Day four, set thresholds. Start strict on tokens and buttons, looser on image-heavy pages, and review the first week of failures to see which are noise. Day five, make the check required, name an owner per component, and write the rule that agents propose baselines while people accept them.&lt;/p&gt;

&lt;p&gt;After that, add one habit. When an agent task touches a token file or a shared component, the pull request description must list the screens it expects to change. If the diff shows others, the reviewer has a concrete question to ask.&lt;/p&gt;

&lt;p&gt;None of this makes agents safer on its own. It makes their side effects visible, which is what Trail of Bits was trying to do for code. The cost is a few hours of setup and a review step that sometimes says no.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/ai-agent-visual-regression-testing" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>AI agent approval UX: show the side effects, not a yes/no</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Tue, 27 Oct 2026 15:46:41 +0000</pubDate>
      <link>https://dev.to/artemkireev/ai-agent-approval-ux-show-the-side-effects-not-a-yesno-2e16</link>
      <guid>https://dev.to/artemkireev/ai-agent-approval-ux-show-the-side-effects-not-a-yesno-2e16</guid>
      <description>&lt;p&gt;Anthropic reported this year that users accept 93% of the permission prompts its coding agent shows them. That is not a sign of trust. It is a sign that the prompt has stopped carrying information, and every SaaS team shipping an "Approve" button for an agent is building the same prompt.&lt;/p&gt;

&lt;p&gt;This article argues that approval screens fail because they ask about the command instead of showing the consequence. It covers what to put on the screen, how to tier actions so people see fewer prompts, and how to tell when your own gate has turned into a rubber stamp. It is for product designers and PMs adding agents to a SaaS product.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 93% approval rate is a design failure
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1758876017801-f5a892ee460a%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8cGVyc29uJTIwcmV2aWV3aW5nJTIwZG9jdW1lbnRzJTIwYXQlMjBkZXNrJTIwbGFwdG9wfGVufDF8MHx8fDE3OTMxMTU5MDl8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1758876017801-f5a892ee460a%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8cGVyc29uJTIwcmV2aWV3aW5nJTIwZG9jdW1lbnRzJTIwYXQlMjBkZXNrJTIwbGFwdG9wfGVufDF8MHx8fDE3OTMxMTU5MDl8MA%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A person reviewing documents at a desk with a laptop" width="1600" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The default way to make an agent safe is to ask the human first. Before it sends the email, edits the record or runs the command, a dialog appears with two buttons. It feels responsible, and it is easy to ship.&lt;/p&gt;

&lt;p&gt;The data on how that goes is not kind. In its write-up of Claude Code's auto mode, Anthropic says that "in practice users accept 93%" of manual prompts, and that this leads to "approval fatigue, where people stop paying close attention to what they're approving." Anthropic's own answer was to automate most of the decisions with a classifier. That is a reasonable move for a developer tool. A customer-facing SaaS product has a different problem. You cannot hand the decision to a classifier and tell a finance manager it was fine.&lt;/p&gt;

&lt;p&gt;A write-up on &lt;a href="https://tianpan.co/blog/2026-05-17-permission-prompt-ux-bug-human-rubber-stamp" rel="noopener noreferrer"&gt;permission prompts as a UX bug&lt;/a&gt; makes the useful point that "the user approved it" should not end a post-mortem. The question is whether the interface made an informed approval possible. If the dialog shows &lt;code&gt;UPDATE invoices SET status = 'void' WHERE ...&lt;/code&gt;, the answer is no, and the approval means nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A high approval rate is the symptom, not the goal.&lt;/strong&gt; Teams often read it as proof the agent is accurate. It can equally mean nobody is reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents change more than you asked
&lt;/h2&gt;

&lt;p&gt;The bigger reason a bare confirmation fails is that the thing being confirmed is rarely the whole change. Trail of Bits looked at every patch its engineers wrote with AI agents and that maintainers merged upstream. In &lt;a href="https://blog.trailofbits.com/2026/10/21/your-ai-agent-fixed-the-bug-but-what-else-did-it-change/" rel="noopener noreferrer"&gt;their review&lt;/a&gt;, over 130 merged pull requests contained 21 confirmed regressions, 16 of them functional. The agent fixed the reported bug and broke something nearby.&lt;/p&gt;

&lt;p&gt;That is code, but the pattern carries over to product work. Ask an agent to "clean up duplicate contacts" and the stated action is a merge. The side effects are a changed owner on 40 deals, a deleted email thread and a broken automation that keyed on the old ID. The person approving sees "Merge 212 contacts?" and says yes.&lt;/p&gt;

&lt;p&gt;Trail of Bits found that the fix on their side was evidence, not more confirmation. Their regression tool traces the change to real interfaces and demands a live reproduction for every claim. If a step cannot produce proof, the result is marked inconclusive. Strip the security language out and the design principle is simple: do not ask the human to trust a summary.&lt;/p&gt;

&lt;p&gt;For approval UX, that means the screen should show the second-order effects the agent already knows about or can compute. Which records change, which other objects reference them, what stops working, and what cannot be undone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put the consequence on the screen
&lt;/h2&gt;

&lt;p&gt;Four elements turn a confirmation into a review. None needs new technology. They need the backend to expose a dry run, which is the real cost of doing this well.&lt;/p&gt;

&lt;p&gt;First, a diff. Show before and after for the fields that change, the way a code review does. "Status changes from Active to Void" on 212 rows is readable. Group identical changes and let the reviewer expand one example.&lt;/p&gt;

&lt;p&gt;Second, the blast radius. Say how many records, which customers, which downstream systems. A count that stands out ("1 of 212 is a customer with an open dispute") does more than a paragraph of explanation.&lt;/p&gt;

&lt;p&gt;Third, reversibility, stated plainly. "Undo available for 30 days" and "Cannot be undone" should look different, because they call for different levels of attention. The &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/agentic-ai-lens/agentsec04-bp02.html" rel="noopener noreferrer"&gt;Amazon Bedrock confirmation pattern&lt;/a&gt; that AWS documents returns only the function name and parameter values for a yes/no. AWS's own guidance lists "the proposed action only, without the reasoning chain, data sources, or potential consequences" as an anti-pattern that turns review into a formality. Read that as a warning about default framework behavior. The stock approval step is the thing to design past.&lt;/p&gt;

&lt;p&gt;Fourth, the reason. One line on why the agent chose this action, linked to the evidence. If the reason is weak, the reviewer should be able to see that it is weak.&lt;/p&gt;

&lt;p&gt;I would also drop the bright green Approve button. Make the primary action "Apply 212 changes" so the button repeats the scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fewer prompts, tiered by reversibility
&lt;/h2&gt;

&lt;p&gt;Richer screens only work if people see fewer of them. The tianpan write-up estimates, as the author's own rough figure rather than a measured one, that people give roughly 10 to 20 genuinely attentive approvals per session before they start pattern-matching. Treat attention as a budget and spend it where it matters.&lt;/p&gt;

&lt;p&gt;AWS gives a workable baseline: read-only operations proceed on their own, low-risk writes need one reviewer, and financial transactions, data deletion and external communications need stricter approval. A product designer can sort any agent action into three bins.&lt;/p&gt;

&lt;p&gt;Reads and drafts need no gate. Show the result and let the user edit it. Reversible changes run, then appear in an activity feed with an undo button. This is review after the fact, and for most actions it beats a blocking dialog because the user sees the real result rather than a prediction. Irreversible or external actions block. Think sending to customers, refunding money, deleting data and changing permissions. These get the full diff, blast radius and reason.&lt;/p&gt;

&lt;p&gt;Two cautions. Trust should not leak across categories. A user who approved ten report exports has told you nothing about whether they want the agent to issue refunds. And AWS warns against wildcard grants such as "always allow this type of action", which remove oversight for a whole class. Bound any "don't ask again" to a specific object, parameter shape or time window, and let people revoke it from one screen.&lt;/p&gt;

&lt;p&gt;The classifier that sorts actions into tiers should be deterministic rules, not another model reading the same untrusted input. AWS makes this point directly, because adversarial content can talk a model into labeling a request low-risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure whether your gate is real
&lt;/h2&gt;

&lt;p&gt;You can tell if an approval step works by instrumenting it. Most teams log approvals for audit and never look at them as a design signal.&lt;/p&gt;

&lt;p&gt;Track three numbers per action type. The approve rate. A flat 100% means the gate is decorative or the action should not be gated. Time to decision. The tianpan article suggests alerting on approvals faster than about 800 milliseconds, which is a heuristic, but a click that quick cannot include reading. And the trend within a session, because latency that falls as the session goes on is fatigue showing up in your data.&lt;/p&gt;

&lt;p&gt;Then run one cheap test this week. Take your three most common agent actions and plant a deliberately wrong proposal in a staging build, such as a refund to the wrong customer or a merge that includes a record that should not be touched. See how many reviewers catch it, with the current dialog and with a diff version. Anthropic's classifier testing found that humans caught a disguised dangerous command only 13.6% of the time, a figure reported in a &lt;a href="https://devops.com/?p=187317" rel="noopener noreferrer"&gt;DevOps.com summary&lt;/a&gt; of the auto mode work that I could not confirm against Anthropic's own post, so treat it as indicative. Your own catch rate is the number that counts.&lt;/p&gt;

&lt;p&gt;A checklist for the sprint. List every action the agent can take. Mark each as read, reversible or irreversible. Delete the prompt on the first two and replace it with an activity feed and undo. For the third, build the dry run and render the diff, blast radius, reversibility and reason. Ship the instrumentation with it. If catch rates do not improve, the screen is not doing its job yet.&lt;/p&gt;

&lt;p&gt;The same logic applies when the agent is not yours. Stores are already deciding how to handle outside shoppers' bots, as I covered in &lt;a href="https://dev.to/blog/ai-shopping-agents-checkout-policy"&gt;AI shopping agents at checkout&lt;/a&gt;. Whether the agent is inside your product or knocking at its door, the question is the same. What will a human be able to see before it acts?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/ai-agent-approval-ux" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>Shopify conversion rate benchmarks: why the numbers disagree</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Fri, 23 Oct 2026 15:11:53 +0000</pubDate>
      <link>https://dev.to/artemkireev/shopify-conversion-rate-benchmarks-why-the-numbers-disagree-2jll</link>
      <guid>https://dev.to/artemkireev/shopify-conversion-rate-benchmarks-why-the-numbers-disagree-2jll</guid>
      <description>&lt;p&gt;Search for the average Shopify conversion rate and you get 1.4%, 1.74%, 2.5% or "2 to 3%", all published in 2026, all stated with confidence. A store at 1.6% is either below average, above average or right in the middle, depending on which page you read.&lt;/p&gt;

&lt;p&gt;This article explains where the gaps come from, why a benchmark is a weaker tool than it looks, and how to build a comparison you can trust with the data you already have. It is for store owners and e-commerce leads who are about to set a conversion target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four benchmarks, four answers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1551288049-bebda4e38f71%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8YW5hbHl0aWNzJTIwZGFzaGJvYXJkJTIwbGFwdG9wJTIwb25saW5lJTIwc3RvcmV8ZW58MXwwfHx8MTc5Mjc2ODA1MXww%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1551288049-bebda4e38f71%3Fixid%3DM3wxMTA5NTI5fDB8MXxzZWFyY2h8MXx8YW5hbHl0aWNzJTIwZGFzaGJvYXJkJTIwbGFwdG9wJTIwb25saW5lJTIwc3RvcmV8ZW58MXwwfHx8MTc5Mjc2ODA1MXww%26ixlib%3Drb-4.1.0%26w%3D1600%26fm%3Dwebp%26q%3D78%26fit%3Dmax" alt="A laptop showing an analytics dashboard with charts" width="1600" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start with what the sources actually say. Shogun's benchmark page covers 803 active Shopify stores from January through September 2026 and reports a &lt;a href="https://getshogun.com/benchmarks/ecommerce-conversion-rate" rel="noopener noreferrer"&gt;median conversion rate of 1.74% and a mean of 2.54%&lt;/a&gt;. Littledata, which pulls data from 433 stores that send events to Google Analytics 4, reports a &lt;a href="https://www.littledata.io/benchmarks" rel="noopener noreferrer"&gt;median of 1.4%&lt;/a&gt; and says 2.7% puts a store in the top 20%. Cartylabs, a Shopify app vendor, gives a &lt;a href="https://cartylabs.com/blog/shopify-checkout-conversion-benchmarks/" rel="noopener noreferrer"&gt;median band of 2.0 to 3.0%&lt;/a&gt; and calls 3.5 to 5.0% the top quartile.&lt;/p&gt;

&lt;p&gt;That is a spread of more than a full point on the median, and the top-tier thresholds differ even more. Shogun's 75th percentile is 3.32%. Cartylabs' top quartile starts at 3.5% and runs to 5.0%.&lt;/p&gt;

&lt;p&gt;None of these numbers is fake. They answer different questions. The first mistake teams make is treating "Shopify conversion benchmark" as one number with a few sources that disagree by rounding. It is several numbers measuring different populations with different rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the same metric gives different answers
&lt;/h2&gt;

&lt;p&gt;Three things move a benchmark before your store enters the picture.&lt;/p&gt;

&lt;p&gt;The first is who is in the sample. Littledata only counts stores that use its app and feed GA4. Shogun only counts stores in its own customer base, and it drops stores below 0.1% or above 25% conversion as "non-representative." Both filters are sensible, and both shape the result. A cohort of stores that pay for analytics tooling is probably more mature than the Shopify average. A cohort that excludes the 0.1% tail looks healthier than one that keeps it.&lt;/p&gt;

&lt;p&gt;The second is the measurement. Littledata defines conversion as the share of sessions with at least one purchase, counted in GA4. Your Shopify admin and your GA4 property may not count sessions identically, and I could not find either tool documenting that they do. A store comparing one against a benchmark built on the other should check before trusting the gap. Cartylabs notes a trap on the checkout side: Shop Pay accelerated checkout can skip the &lt;code&gt;checkout_started&lt;/code&gt; event, which makes checkout completion look higher than it is.&lt;/p&gt;

&lt;p&gt;The third is who wrote the page. Cartylabs does not disclose its sample sizes per segment, the time window or how it computed percentiles, and it sells a checkout app. That doesn't make its numbers wrong. It means you should weight them below a benchmark that states its sample, period and exclusions.&lt;/p&gt;

&lt;p&gt;I'd rank these by transparency: a page that tells you the store count, the date range and the filters beats a page that reports a band with no method. By that rule, the Shogun and Littledata figures are the ones to use as a rough anchor, and the 2 to 3% "median" should be read as marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mean is the wrong number to chase
&lt;/h2&gt;

&lt;p&gt;Look at Shogun's own figures again. The median is 1.74% and the mean is 2.54%. The page describes the mean as "pulled by top performers." Its middle 50% of stores run from 0.83% to 3.32%, so the typical store sits in a band that is wider than the median itself.&lt;/p&gt;

&lt;p&gt;That has a practical consequence. If you set a goal of "reach the average," you may be aiming at a number that most stores in the sample never hit. Half the stores are under 1.74%. A handful of very good stores drag the mean up.&lt;/p&gt;

&lt;p&gt;Industry matters even more. Shogun's industry medians range from 3.22% for health and wellness and 3.15% for beauty down to 1.39% for consumer electronics and 1.20% for sports and outdoors. A sporting goods store at 1.5% is above its category median. The same 1.5% in beauty is less than half of it.&lt;/p&gt;

&lt;p&gt;Price does the same thing. Cartylabs' checkout-completion bands fall from a 50 to 62% median for orders under $30 to 15 to 28% above $750. Those bands come with the caveats above, but the direction is plausible and matches what you would expect: the more a shopper spends, the more they hesitate. A store selling $900 items that benchmarks itself against the whole platform is measuring its catalogue, not its checkout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversion rate hides where the leak is
&lt;/h2&gt;

&lt;p&gt;Site-wide conversion divides orders by all sessions. That includes visitors who arrived from a podcast mention, bounced from a blog post or never meant to buy. Many of those sessions cannot convert.&lt;/p&gt;

&lt;p&gt;Checkout completion is a cleaner signal because it only counts shoppers who already started. Even here the sources diverge. Littledata's median is 51%, with 67% at the top 20%. Cartylabs puts the median at 38 to 48%. Both describe the same metric in plain words, and they are about ten points apart.&lt;/p&gt;

&lt;p&gt;The better instrument is the reason shoppers leave. Baymard's compilation of 50 studies puts &lt;a href="https://baymard.com/lists/cart-abandonment-rate" rel="noopener noreferrer"&gt;average cart abandonment at 70.22%&lt;/a&gt;. That figure alone tells you little, because Baymard points out that many abandonments are just browsing, and it attributes 42% of US abandonments to "I was just browsing / not ready to buy." It then removes that group and lists what is left: 40% cite extra costs, 20% slow delivery, 19% a lack of trust with card details, 18% a forced account, 17% a long checkout and 17% site errors.&lt;/p&gt;

&lt;p&gt;Those are fixable. A benchmark tells you that you are slow. These reasons tell you what to change. If a shopper abandons because shipping appears at the last step, a better button will not help.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to build a benchmark you can use
&lt;/h2&gt;

&lt;p&gt;Skip the platform-wide average. Build three comparisons instead.&lt;/p&gt;

&lt;p&gt;Compare against yourself first. Pull 12 months of data and split by device, traffic source and new versus returning visitors. Cartylabs suggests treating weekly swings under three percentage points in checkout completion as noise, and I agree with the spirit of that: a store with a few hundred checkouts a week sees swings that size from chance alone. Compare the same quarter year over year, because Q4 and Q1 behave differently.&lt;/p&gt;

&lt;p&gt;Then pick one outside benchmark that publishes its sample, period and filters, and match it on category and average order value. Use it as a range, not a target. If you sit inside the middle 50% for your category, you have no emergency. If you sit below the 25th percentile, you have a reason to dig in.&lt;/p&gt;

&lt;p&gt;Finally, check your own tracking before you trust any comparison. Confirm that &lt;code&gt;checkout_started&lt;/code&gt; fires on Shop Pay and on mobile wallets. Confirm that B2B and draft orders are excluded from the numerator. Make sure the session definition in your admin matches the one in the benchmark you borrowed. A mismatch here can shift your result by more than most CRO tests will.&lt;/p&gt;

&lt;p&gt;Once those three are in place, spend your effort on the abandonment reasons. Start with cost visibility: show shipping and tax estimates in the cart, before the shopper commits. Offer guest checkout. List the payment methods that Baymard flags as missing, and put the returns policy where people can see it. Each of these maps to a reason with a real share behind it. A benchmark can say you are behind. Only the reasons can tell you what to fix on Monday.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/shopify-conversion-rate-benchmarks" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>ux</category>
      <category>design</category>
    </item>
    <item>
      <title>AI shopping agents at checkout: allow, block or verify?</title>
      <dc:creator>Artem Kireev</dc:creator>
      <pubDate>Wed, 21 Oct 2026 19:24:18 +0000</pubDate>
      <link>https://dev.to/artemkireev/ai-shopping-agents-at-checkout-allow-block-or-verify-bne</link>
      <guid>https://dev.to/artemkireev/ai-shopping-agents-at-checkout-allow-block-or-verify-bne</guid>
      <description>&lt;p&gt;Stores are starting to shut their doors on AI shopping agents. Amazon reportedly removed Meta's Muse assistant in September, Delta keeps outside agents from booking flights, and the big US banks keep bots out of customer accounts. Most of these blocks are blunt, and many catch customers who are simply using an assistant.&lt;/p&gt;

&lt;p&gt;This article argues that "block or allow" is the wrong question for an e-commerce team. The useful one is which steps of your checkout an agent may touch, and how you would know it is the agent your customer sent. It is for store owners, product managers and designers who have to decide before an agent shows up in their analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  The blocks are arriving faster than the rules
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgd7yxc2vkuev3cboxxvg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgd7yxc2vkuev3cboxxvg.webp" alt="Article cover with an ASCII texture" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In mid-October, &lt;a href="https://www.androidheadlines.com/2026/10/banks-retail-websites-block-ai-agents-promises.html" rel="noopener noreferrer"&gt;Android Headlines&lt;/a&gt; summarized the latest wave: Amazon pulling Meta's Muse assistant off its shopping platform, Delta stopping external agents from booking flights, and JPMorgan Chase, Bank of America and Citigroup keeping automated bots out of accounts. The same piece notes there is no clear industry standard for telling an authorized user bot from a malicious scraper.&lt;/p&gt;

&lt;p&gt;That missing standard explains most of the mess. Anti-bot systems built to stop scrapers see a headless browser clicking through a cart and treat it the same way. The article points out that Cloudflare-style challenges often throw CAPTCHAs that stop an agent mid-checkout. The shopper never learns why the assistant failed. They just see it fail.&lt;/p&gt;

&lt;p&gt;Platforms already tried to draw a line once. In 2025, &lt;a href="https://www.modernretail.co/technology/shopify-has-quietly-set-boundaries-for-buy-for-me-ai-bots-on-merchant-sites/" rel="noopener noreferrer"&gt;Modern Retail&lt;/a&gt; reported that Shopify added language to the default robots.txt on merchant storefronts saying that "any end-to-end flow that completes payment without a final review step is not permitted." Shopify's Ilya Grigorik said the change added or removed no rules and mainly pointed integrators to Checkout Kit. Analyst Juozas Kaziukėnas read it as a note for developers, and merchants can override the file.&lt;/p&gt;

&lt;p&gt;Put those together and you get a policy vacuum. The platform wrote a sentence, the CDN is guessing, and the merchant, who owns the customer relationship, usually hasn't decided anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocking all agents has a real cost
&lt;/h2&gt;

&lt;p&gt;The reflex is to keep everything out. It feels safe, and for banks it often is. For a store it is a bet that agent-assisted shoppers are worth less than the risk.&lt;/p&gt;

&lt;p&gt;Consider what the customer sees. Baymard's &lt;a href="https://baymard.com/lists/cart-abandonment-rate" rel="noopener noreferrer"&gt;cart abandonment benchmark&lt;/a&gt; puts the average at 70.22% across 50 studies, and among reasons shoppers give, 17% say checkout was too long or complicated and 17% cite site errors or crashes. A shopper who hands the chore to an assistant is trying to skip exactly that friction. If your bot wall breaks the assistant halfway, the failure lands on your brand, not on the assistant.&lt;/p&gt;

&lt;p&gt;Agents also compare. If one store lets them read prices, stock and shipping cost, and the next store throws a challenge page, the first store is the one that gets considered. I think this will matter first in repeat-purchase categories where the shopper already knows what they want and only wants it ordered.&lt;/p&gt;

&lt;p&gt;None of this means "open the gates". Fraud, price scraping and inventory hoarding are real. It means the blanket block deserves the same scrutiny as any other decision that removes a path to purchase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three tiers instead of a yes/no switch
&lt;/h2&gt;

&lt;p&gt;A better frame splits the journey into three tiers and sets a policy for each.&lt;/p&gt;

&lt;p&gt;Read is the first tier: product pages, prices, availability, shipping and return terms. These are public already. Make them machine-readable with clean structured data and plain-text policies, and rate-limit rather than block. An agent that can read your return policy accurately is better for you than one that guesses.&lt;/p&gt;

&lt;p&gt;Act is the second tier: adding to cart, applying a discount, choosing a shipping option. Here you want to know who is asking. Allow it for identified agents, and keep it behind your normal bot defenses for anonymous ones.&lt;/p&gt;

&lt;p&gt;Pay is the third. This is where Shopify's wording about a "final review step" makes sense, and I would copy the principle. Let the agent assemble the order, but have the human confirm the total, delivery date and return terms before money moves. That also protects you from the angry-customer case where an agent bought the wrong size.&lt;/p&gt;

&lt;p&gt;Tiers give a design team something concrete to work from. Each one maps to screens, states and error messages, rather than to a firewall rule nobody in product ever sees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified identity is the missing piece
&lt;/h2&gt;

&lt;p&gt;Tiering only works if you can tell agents apart. The most credible attempt is Web Bot Auth, where an operator signs each request with a private key and the site verifies it against a public key the operator publishes. The &lt;a href="https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/" rel="noopener noreferrer"&gt;IETF draft&lt;/a&gt; describes it as an architecture for identifying automated traffic using HTTP Message Signatures.&lt;/p&gt;

&lt;p&gt;Be honest about its status. That draft is an individual submission, now expired and replaced by a newer one, and the IETF has not endorsed it. It also settles who is calling, not what they may do. Whether to allow, throttle or block a verified agent stays your decision, which is precisely why you need the tiers above.&lt;/p&gt;

&lt;p&gt;On the transaction side, &lt;a href="https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce" rel="noopener noreferrer"&gt;Stripe describes&lt;/a&gt; the Agentic Commerce Protocol, co-developed with OpenAI and released as open source in September 2025, as keeping the business as the merchant of record. Merchants decide what is sold, how it is displayed, how payment is processed, and can accept or decline any order on fraud signals. The relevant point for design is that the protocol assumes you keep control of the decision points. Sources disagree on how much live volume ChatGPT's own checkout has seen, so I would treat adoption claims with caution and the protocol's control model as the useful part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do this week
&lt;/h2&gt;

&lt;p&gt;You don't need a protocol to start. You need an owner and a list.&lt;/p&gt;

&lt;p&gt;First, find out what is happening. Pull a week of bot-challenge logs from your CDN and look for challenges served on cart and checkout URLs. If you see them, you are already blocking someone's assistant, whether you meant to or not.&lt;/p&gt;

&lt;p&gt;Second, write the three-tier policy on one page: what agents may read, what they may do with a verified identity, and what always needs a human confirmation. Get product, engineering and whoever owns fraud to sign it. Fifteen minutes in a room beats a year of defaults.&lt;/p&gt;

&lt;p&gt;Third, fix the read tier. Check that prices, stock, shipping cost and return terms appear in plain HTML and structured data, without a script that must run first. This also helps ordinary search and accessibility, so it pays off even if no agent ever arrives. Baymard's top abandonment reason is extra costs at 40%, so show total cost early for humans and machines alike.&lt;/p&gt;

&lt;p&gt;Fourth, design the review step. Decide what the confirmation screen shows when an agent built the cart, and what the shopper sees if the agent is stopped. Write that error copy now. A clear "your assistant couldn't finish, here is your cart" message turns a failure into a handoff.&lt;/p&gt;

&lt;p&gt;Then revisit the policy each quarter. The standards will move, and the first version of yours only needs to be deliberate, not final.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://kireev.us/blog/ai-shopping-agents-checkout-policy" rel="noopener noreferrer"&gt;kireev.us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ecommercecro</category>
      <category>design</category>
      <category>ux</category>
      <category>productdesign</category>
    </item>
  </channel>
</rss>
