<?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: Autumn Morgan</title>
    <description>The latest articles on DEV Community by Autumn Morgan (@autumn_tonita1).</description>
    <link>https://dev.to/autumn_tonita1</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2677338%2Fef30bf28-eab1-474e-82d7-46b10e460fac.jpg</url>
      <title>DEV Community: Autumn Morgan</title>
      <link>https://dev.to/autumn_tonita1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/autumn_tonita1"/>
    <language>en</language>
    <item>
      <title>End-to-End SEO Testing with Playwright and Lighthouse</title>
      <dc:creator>Autumn Morgan</dc:creator>
      <pubDate>Thu, 06 Mar 2025 15:39:13 +0000</pubDate>
      <link>https://dev.to/autumn_tonita1/end-to-end-seo-testing-with-playwright-and-lighthouse-3n5c</link>
      <guid>https://dev.to/autumn_tonita1/end-to-end-seo-testing-with-playwright-and-lighthouse-3n5c</guid>
      <description>&lt;p&gt;Automated testing is second nature for developers—it ensures our applications remain reliable, secure, and consistent as they evolve. But what about SEO? Search engine optimization is crucial to a website’s visibility, directly impacting traffic, conversions, and overall success. While SEO audits have traditionally been a manual process, automation is changing the game.&lt;/p&gt;

&lt;p&gt;With the right tools, we can use end-to-end (E2E) testing to audit key SEO factors, ensuring our web applications follow best practices without constant manual checks. In this article, we’ll explore how to use Playwright, Puppeteer, and Vitest to integrate SEO auditing into your test suite, making search engine optimization a seamless part of your development workflow.&lt;/p&gt;

&lt;h2&gt;What is SEO?&lt;/h2&gt;

&lt;p&gt;&lt;sup&gt; &lt;/sup&gt;&lt;strong&gt;&lt;a href="https://developers.google.com/search/docs/fundamentals/seo-starter-guide" rel="noopener noreferrer"&gt;SEO&lt;/a&gt;&lt;/strong&gt;, short for search engine optimization, is the practice of improving your website’s visibility in search engines. It helps search engines understand your content and ensures users can find your site, decide whether to visit and have a smooth experience once they do.&lt;/p&gt;

&lt;h2&gt;Headless Browsers&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Headless browsers&lt;/strong&gt;—browsers without a graphical user interface—are widely used in automation. Many, like Chrome’s headless mode, include built-in tools to assess SEO, accessibility, and performance. One of the most well-known tools for this is Lighthouse, which provides automated reports on SEO issues and web performance metrics.&lt;/p&gt;

&lt;h2&gt;Choosing a Test Framework for SEO Audits&lt;/h2&gt;

&lt;p&gt;In the software development world, we have a lot of test framework tools. In this article, we will discuss 2 of them: Vitest and Microsoft Playwright&lt;/p&gt;

&lt;h3&gt;Vitest&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://vitest.dev/guide/why.html" rel="noopener noreferrer"&gt;Vitest&lt;/a&gt;&lt;/strong&gt; is a next-generation JavaScript testing framework powered by Vite. It’s an excellent alternative to Jest, offering native TypeScript support, a fast setup, and solid performance. However, while it has an experimental headless browser, it’s not ideal for advanced scenarios like running SEO audits in CI/CD pipelines. Instead, we can pair Vitest with &lt;a href="https://github.com/puppeteer/puppeteer" rel="noopener noreferrer"&gt;Pupetter&lt;/a&gt;, a more mature tool for headless browser automation.&lt;/p&gt;

&lt;h3&gt;Playwright&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://playwright.dev/docs/intro" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt;&lt;/strong&gt; is a robust framework built specifically for end-to-end testing. Unlike Vitest, It was designed to handle real browser interactions, making it ideal for SEO audits. It supports Chromium, WebKit, and Firefox, runs on Windows, macOS, and Linux, and can execute tests in both headless and headless modes. Playwright even includes native mobile emulation to test how pages render on mobile devices.&lt;/p&gt;

&lt;h2&gt;Lighthouse: The SEO Testing Powerhouse&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.chrome.com/docs/lighthouse/overview" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt;&lt;/strong&gt; is an open-source, automated tool for improving the quality of web pages. It can be run on any public or authentication-requiring web page. It offers audits for performance, accessibility, progressive web apps, SEO, and more.&lt;/p&gt;

&lt;h2&gt;Practical Example: Running an SEO Audit with Playwright&lt;/h2&gt;

&lt;p&gt;To put theory into practice, we’ll learn how to configure Playwright to perform automated SEO audits on a website. By the end, you'll see how easy it is to integrate SEO testing into your development workflow—catching issues before they impact your search rankings.&lt;/p&gt;

&lt;p&gt;Requirements:&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxn6gs1v229ydhogn0ew.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxn6gs1v229ydhogn0ew.png" alt="requirements" width="523" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The Playwright config file&lt;/h3&gt;

&lt;p&gt;Playwright provides extensive options for customizing test execution. The configuration file allows us to set up test parallelization, specify the test directory, define a base URL for the page, use the &lt;code&gt;page.goto(...)&lt;/code&gt; method, and configure multiple projects.&lt;/p&gt;

&lt;p&gt;Playwright provides extensive &lt;a href="https://playwright.dev/docs/test-configuration" rel="noopener noreferrer"&gt;configuration&lt;/a&gt;, allowing developers to customize test execution. The configuration file lets us:&lt;/p&gt;

&lt;p&gt;✅ Set up test parallelization.&lt;br&gt;&lt;br&gt;
✅ Specify the test directory.&lt;br&gt;&lt;br&gt;
✅ Define a base URL for `page.goto(...).&lt;br&gt;&lt;br&gt;
✅ Configure multiple projects.  &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;projects&lt;/code&gt; section, we can define &lt;strong&gt;which browsers to use&lt;/strong&gt;, such as Chromium, Firefox, and Safari, and device-specific settings. This ensures that tests run with the correct configurations, whether we're testing desktop or mobile experiences.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example: Playwright Config File Setup&lt;/strong&gt;&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu0hpryip8bcdniv3xh4.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu0hpryip8bcdniv3xh4.png" alt="Playwright Config File Setup*" width="454" height="721"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Writing SEO-Focused Tests with Playwright&lt;/h3&gt;

&lt;h4&gt;Getting Started with Playwright&lt;/h4&gt;

&lt;p&gt;Creating tests in Playwright is straightforward—it’s similar to Jest. Simply create a &lt;code&gt;.ts&lt;/code&gt; file in the &lt;code&gt;tests&lt;/code&gt; folder, import &lt;code&gt;test,&lt;/code&gt; and &lt;code&gt;expect&lt;/code&gt; from &lt;code&gt;@playwright/test&lt;/code&gt;. Playwright provides a &lt;strong&gt;page object&lt;/strong&gt; that allows interaction with a webpage just like a real user.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example: Using the Page Object in Playwright&lt;/strong&gt;&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsbzsihfscs7qukmysiu.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsbzsihfscs7qukmysiu.png" alt="the Page Object in Playwright" width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of Playwright’s most powerful features is &lt;strong&gt;locators&lt;/strong&gt;, which help us find elements, interact with them (click, type, etc.), and make assertions.&lt;/p&gt;

&lt;p&gt;Common locator methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;page.getByRole()&lt;/code&gt;: Find elements by accessibility attributes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page.getByText()&lt;/code&gt;: Locate elements by text content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page.getByLabel()&lt;/code&gt;: Identify form inputs based on associated labels&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page.getByPlaceholder()&lt;/code&gt;: Locate inputs using placeholder text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page.getByAltText()&lt;/code&gt;: Find images by alternative text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page.getByTestId()&lt;/code&gt;: Locate elements using a custom test attribute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Need finer control over which &lt;strong&gt;browser or rendering engine&lt;/strong&gt; to use for specific tests? Playwright makes it easy. Simply import the required configurations from &lt;code&gt;@playwright/test&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://playwright.dev/docs/api/class-playwright" rel="noopener noreferrer"&gt;More details here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example: Running Tests on Specific Browsers&lt;/strong&gt;&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wz8rkb2qutol6mwtuuk.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wz8rkb2qutol6mwtuuk.png" alt="Running Tests on Specific Browsers" width="800" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Writing SEO Tests in Playwright&lt;/h3&gt;

&lt;h4&gt;Configuring a Base URL&lt;/h4&gt;

&lt;p&gt;To streamline navigation, we can define a &lt;strong&gt;Base URL&lt;/strong&gt; in &lt;code&gt;playwright.config.ts&lt;/code&gt;. This allows us to use relative paths instead of specifying complete URLs in every test.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example: Setting a Base URL in &lt;code&gt;playwright.config.ts&lt;/code&gt;&lt;/strong&gt;&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83ksmzgq5wefbkfxvyga.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83ksmzgq5wefbkfxvyga.png" alt="setting-base-url-in-playright" width="800" height="943"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;SEO-Specific Tests&lt;/h3&gt;

&lt;p&gt;Let’s look at some essential SEO checks that can be automated with Playwright.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Page should have a favicon.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fak9w7xupu9z5dxsa0owy.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fak9w7xupu9z5dxsa0owy.png" alt="checking-for-favicon" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Robots.txt should be valid.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8urcnby3jloq8kzlj2j.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8urcnby3jloq8kzlj2j.png" alt="robotz txt" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Sitemap should be valid.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffv5ppqlvtnc0lz0xm5i3.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffv5ppqlvtnc0lz0xm5i3.png" alt="validate sitemap" width="800" height="1181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Some web servers might return a compressed &lt;code&gt;gz&lt;/code&gt; file with `XML' (as the Planet Argon Website does), so we test both possibilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Page should have a valid meta description.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8eu0tegjb8hzhofe71fc.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8eu0tegjb8hzhofe71fc.png" alt="valid meta description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣ Page should have a valid title.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76seslrn3axhlzpxgox9.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76seslrn3axhlzpxgox9.png" alt="valid title" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6️⃣ Page should have a valid viewport meta tag.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j60tvu5fg12dc3f5ssz.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j60tvu5fg12dc3f5ssz.png" alt="valid meta tag" width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7️⃣ HTML tag should include a &lt;code&gt;lang&lt;/code&gt; attribute.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbrkrv1wdym6m08ko66g.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbrkrv1wdym6m08ko66g.png" alt="code lang attribute" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Running Lighthouse Tests with Playwright&lt;/h2&gt;

&lt;p&gt;To integrate Lighthouse audits with Playwright, install &lt;a href="https://github.com/abhinaba-ghosh/playwright-lighthouse" rel="noopener noreferrer"&gt;playright-lighthouse&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;Threshold tests&lt;/h3&gt;

&lt;p&gt;Lighthouse allows us to define &lt;strong&gt;thresholds&lt;/strong&gt; for key performance categories:&lt;/p&gt;

&lt;p&gt;✅ Performance&lt;br&gt;&lt;br&gt;
✅ Accessibility&lt;br&gt;&lt;br&gt;
✅ SEO&lt;br&gt;&lt;br&gt;
✅ PWA&lt;br&gt;&lt;br&gt;
✅ Best Practices  &lt;/p&gt;

&lt;p&gt;If we pass nothing in the config, all categories will be tested and all scores will be 100 (default value).&lt;/p&gt;

&lt;p&gt;Before writing Lighthouse tests, we must adjust some configurations in the playwright.config.ts file and create a new Lighthouse-specific project.&lt;/p&gt;

&lt;p&gt;This is necessary to ensure that Lighthouse tests run with a single worker (by setting the worker count to 1), which helps avoid potential concurrency issues. Additionally, we need to configure Playwright’s Chromium browser to launch with port 9222 open, allowing Lighthouse to communicate with it during audits.&lt;/p&gt;

&lt;h3&gt;Lighthouse Test: Accessibility &amp;amp; Performance&lt;/h3&gt;

&lt;p&gt;Accessibility score should be above 90 and Performance above 70.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Very good! All your tests passed!!&lt;/strong&gt;&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprrx1esqufxelpjb35b2.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprrx1esqufxelpjb35b2.png" alt="tests passed" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;By incorporating end-to-end SEO testing with Playwright and Lighthouse, you can proactively catch SEO issues before they affect your rankings. Automating these tests in your CI/CD pipeline ensures that SEO remains a continuous, seamless part of development while helping to improve your site’s search engine rankings and overall performance.&lt;/p&gt;

&lt;h2&gt;References&lt;/h2&gt;

&lt;p&gt;1 - &lt;a href="https://developers.google.com/search/docs/fundamentals/seo-starter-guide" rel="noopener noreferrer"&gt;SEO Starter Guide&lt;/a&gt;&lt;br&gt;&lt;br&gt;
2 - &lt;a href="https://developer.chrome.com/docs/lighthouse/overview" rel="noopener noreferrer"&gt;Lighthouse Overview&lt;/a&gt;&lt;br&gt;&lt;br&gt;
3 - &lt;a href="https://vitest.dev/guide/why.html" rel="noopener noreferrer"&gt;Vitest Guide&lt;/a&gt;&lt;br&gt;&lt;br&gt;
4 - &lt;a href="https://playwright.dev/docs/intro" rel="noopener noreferrer"&gt;Playwright Intro&lt;/a&gt;&lt;br&gt;&lt;br&gt;
5 - &lt;a href="https://github.com/abhinaba-ghosh/playwright-lighthouse" rel="noopener noreferrer"&gt;Abhinaba Ghosh/Playwright/Lighthouse&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This article was written by &lt;a href="https://www.linkedin.com/in/ejklock/" rel="noopener noreferrer"&gt;Evaldo Klock&lt;/a&gt; and originally published on &lt;a href="https://blog.planetargon.com/blog" rel="noopener noreferrer"&gt;Planet Argon's blog&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>seo</category>
      <category>testing</category>
      <category>playwright</category>
      <category>lighthouse</category>
    </item>
    <item>
      <title>How to Manage an End-of-Day Client Emergency</title>
      <dc:creator>Autumn Morgan</dc:creator>
      <pubDate>Tue, 25 Feb 2025 21:22:15 +0000</pubDate>
      <link>https://dev.to/autumn_tonita1/how-to-manage-an-end-of-day-client-emergency-2bhi</link>
      <guid>https://dev.to/autumn_tonita1/how-to-manage-an-end-of-day-client-emergency-2bhi</guid>
      <description>&lt;p&gt;We've all been there: You're packing up for the day, ready to disconnect, when suddenly—&lt;em&gt;ping!&lt;/em&gt; An urgent Slack message from a client. Your heart races, your to-do list is out the window, the client is in crisis mode, and the pressure is on.&lt;/p&gt;

&lt;p&gt;It's easy to feel overwhelmed in these moments, but the key is staying composed and handling the situation systematically.&lt;/p&gt;

&lt;p&gt;Let's break down how on of our developers, &lt;a href="https://www.planetargon.com/about/liz-pantalone" rel="noopener noreferrer"&gt;Liz Pantalone&lt;/a&gt;, navigated an end-of-day client emergency and what we can learn from her approach.&lt;/p&gt;

&lt;h2&gt;Respond Quickly and Acknowledge the Issue&lt;/h2&gt;

&lt;p&gt;When an emergency hits, the first instinct might be to jump straight into troubleshooting. But before you do anything else, pause and respond. Acknowledge the client's message promptly. Even if you don’t have an immediate solution, letting them know you’re aware of the issue reassures them that help is on the way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I’ll take a look.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clients in crisis need to feel heard. A quick acknowledgment reassures them that their issue is a priority.&lt;/li&gt;
&lt;li&gt;Even if you can't solve the problem immediately, a fast response shows you're on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Gather the Details&lt;/h2&gt;

&lt;p&gt;Before diving into the issue, you need a clear understanding of what’s going wrong. Assumptions can lead you down the wrong path. Ask specific, clarifying questions to gather all relevant details. Focus on understanding the scope and specifics of the problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Could you let me know which file you were attempting to overwrite? If you could share the link to it…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/writing-good-tickets" rel="noopener noreferrer"&gt;Asking the right questions saves time in the long run.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It shows the client you're methodical and invested in solving their problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Validate and Narrow Down the Problem&lt;/h2&gt;

&lt;p&gt;Once you have the details, the next step is to verify the issue. Is it isolated, or part of a larger problem? Try to reproduce the issue in a controlled environment. Test similar scenarios to identify whether the problem is specific or systemic.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I was able to successfully replace a test PDF file with a PEG file. So let’s see what may be different about the C&amp;amp;C file.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This helps isolate the root cause by eliminating variables.&lt;/li&gt;
&lt;li&gt;It builds client confidence as they see you're approaching the issue systematically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Investigate Thoroughly&lt;/h2&gt;

&lt;p&gt;Now it’s time to dig deeper. Surface-level checks might miss hidden issues. Review system logs, database records, and other diagnostic tools to uncover anomalies or errors. Look beyond the obvious.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Ok, I will look at the logs to see if I see anything in the last few minutes.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs often reveal hidden issues that aren't immediately visible.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.planetargon.com/blog/entries/ruby-on-rails-code-audits-8-steps-to-review-your-app" rel="noopener noreferrer"&gt;Proactive investigation&lt;/a&gt; helps uncover if the problem lies with user input, system configuration, or external factors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Encourage Collaboration&lt;/h2&gt;

&lt;p&gt;Troubleshooting doesn’t have to be a solo mission. Engaging the client can lead to faster results, so &lt;a href="https://blog.planetargon.com/blog/entries/developing-client-communication-skills-as-an-engineer" rel="noopener noreferrer"&gt;keep them in the loop&lt;/a&gt;. Ask them to perform specific actions while you monitor the system, turning troubleshooting into a collaborative effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It could be. Want to try again while I check the logs?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collaborative troubleshooting speeds up resolution.&lt;/li&gt;
&lt;li&gt;It keeps the client informed and makes them feel like part of the solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Document Lessons Learned&lt;/h2&gt;

&lt;p&gt;Once the issue is resolved, don’t just move on. Take a moment to reflect. Document what went wrong, how it was resolved, and any gaps in the system that contributed to the problem. Suggest improvements if needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Could we have a ticket for Extranet File Upload Module to add more user-facing error handling?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post-mortem analysis helps improve systems and prevent future issues.&lt;/li&gt;
&lt;li&gt;Documenting lessons learned ensures continuous improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Maintain Professionalism and Empathy&lt;/h2&gt;

&lt;p&gt;Crises are stressful—for both you and the client. Your demeanor matters. Stay calm, professional, and empathetic. Reassure the client that you’re in control, even if you’re still troubleshooting behind the scenes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Well, I’m happy it’s working!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.planetargon.com/blog/entries/earn-trust-early" rel="noopener noreferrer"&gt;Empathy builds trust&lt;/a&gt;. Clients often feel stressed in these situations.&lt;/li&gt;
&lt;li&gt;A calm, understanding approach can make a big difference in the client’s experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Follow Up and Close the Loop&lt;/h2&gt;

&lt;p&gt;Resolution isn’t the end of the story. Clear follow-up ensures nothing falls through the cracks. Once the issue is resolved, confirm with the client that everything is working as expected. Let them know how to reach you if any further issues arise.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I’m going to head out for now. But I’ll have Slack on my phone if anything else pops up.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear communication ensures the client feels supported even after the issue is resolved.&lt;/li&gt;
&lt;li&gt;It provides closure and reassurance that you're still available if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Proactively Suggest Improvements&lt;/h2&gt;

&lt;p&gt;Don’t just fix the problem—help prevent it from happening again. Identify opportunities for system improvements and suggest them to the client or your team. Proactive recommendations demonstrate your commitment to quality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The system needs to have some more error handling added in there to help the user out if this happens again.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proposing improvements shows you're thinking ahead and committed to excellence.&lt;/li&gt;
&lt;li&gt;Clients appreciate developers who proactively suggest ways to enhance their systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Key Takeaways for Handling Client Emergencies&lt;/h2&gt;

&lt;p&gt;When faced with a last-minute emergency, keep this checklist in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acknowledge the issue immediately&lt;/strong&gt; to reassure the client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask clarifying questions&lt;/strong&gt; to fully understand the problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproduce the issue&lt;/strong&gt; and narrow down potential causes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investigate logs&lt;/strong&gt; or system details for deeper insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the client informed&lt;/strong&gt; and collaborate as needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document lessons learned&lt;/strong&gt; to prevent similar issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remain calm and empathetic&lt;/strong&gt; to build trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensure clear follow-up&lt;/strong&gt; to close the loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Propose proactive improvements&lt;/strong&gt; to enhance the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these steps, you can turn an end-of-day emergency into an opportunity to showcase your problem-solving skills and professionalism. Liz's approach is a great example of how to handle urgent client issues with care, competence, and a collaborative mindset.&lt;/p&gt;

&lt;p&gt;The next time you find yourself in a similar situation, take a page from her playbook!&lt;/p&gt;

</description>
      <category>clientmanagement</category>
      <category>productivity</category>
      <category>learning</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>The Truth About LinkedIn Newsletters in 2025</title>
      <dc:creator>Autumn Morgan</dc:creator>
      <pubDate>Tue, 11 Feb 2025 16:02:04 +0000</pubDate>
      <link>https://dev.to/autumn_tonita1/the-truth-about-linkedin-newsletters-in-2025-5h80</link>
      <guid>https://dev.to/autumn_tonita1/the-truth-about-linkedin-newsletters-in-2025-5h80</guid>
      <description>&lt;p&gt;Last year, we wrote about what to expect when starting a LinkedIn newsletter in 2024, just as Planet Argon launched a newsletter for Maintainable Podcast. A lot has changed since then. Some things worked better than expected, some fell flat, and LinkedIn has rolled out a few updates along the way.&lt;/p&gt;

&lt;p&gt;So, if you’re thinking about launching a LinkedIn newsletter in 2025 — or wondering if it’s still worth it — here’s what you need to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are LinkedIn Newsletters Still Worth It in 2025?
&lt;/h2&gt;

&lt;p&gt;Short answer: It depends on what you want out of it.&lt;/p&gt;

&lt;p&gt;If your goal is to build brand visibility, spark conversations, and grow your presence on LinkedIn, then yes — it’s still a solid tool. LinkedIn continues to push newsletters into people’s feeds, and if your audience is active on the platform, you can build up a subscriber list faster than you would with a regular email newsletter.&lt;/p&gt;

&lt;p&gt;But if you’re hoping to own your audience, collect emails, and have full control over how you reach people, LinkedIn still isn’t the best option. Your subscribers belong to LinkedIn, not you. And if LinkedIn ever changes its algorithm (which it probably will), your reach could take a hit overnight.&lt;/p&gt;

&lt;p&gt;If you’re okay with playing by LinkedIn’s rules, a newsletter can be a great way to get in front of more people. But if you want more control, pairing it with your own email list is a smarter long-term play.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s New for LinkedIn Newsletters in 2025?
&lt;/h2&gt;

&lt;p&gt;LinkedIn has made some tweaks, but the core experience is still the same. Here are a few key updates:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better discovery tools&lt;/strong&gt; — LinkedIn now shows newsletters in search results more often, making it easier for new people to find yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More customization options&lt;/strong&gt; — You can now tweak the layout and branding a little more to match your style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-follow is stronger&lt;/strong&gt; — When someone subscribes to your newsletter, they automatically follow your LinkedIn page (which helps with visibility).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Still no email access&lt;/strong&gt; — If you were hoping LinkedIn would finally let you export your subscribers’ emails… nope.&lt;/p&gt;

&lt;p&gt;What We Learned from Running a LinkedIn Newsletter for a Year&lt;br&gt;
At Planet Argon, we launched a LinkedIn newsletter last year to see if it could help grow the audience for our podcast, Maintainable.fm. Here’s what we found:&lt;/p&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;p&gt;✔️ We gained new listeners — Some subscribers did check out the podcast, which was a win.&lt;br&gt;
✔️ It was easy to grow — LinkedIn automatically invites your connections to subscribe, so we got a decent number of followers fast.&lt;br&gt;
✔️ Posts got more engagement — Newsletter posts tended to get more likes and comments than regular LinkedIn posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Didn’t Work
&lt;/h2&gt;

&lt;p&gt;❌ No email control — We couldn’t follow up with subscribers outside of LinkedIn.&lt;br&gt;
❌ Limited analytics — The insights weren’t detailed enough to tell us how many readers actually became listeners.&lt;br&gt;
❌ Time investment — Writing, designing, and posting took effort, and the return wasn’t huge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies for Maximizing Engagement
&lt;/h2&gt;

&lt;p&gt;If you’re going to start (or keep running) a LinkedIn newsletter in 2025, engagement is key. Otherwise, it’s just another post lost in the feed. Here are a few ways to keep people reading, commenting, and coming back for more:&lt;/p&gt;

&lt;h2&gt;
  
  
  Write for skimmers, not just readers
&lt;/h2&gt;

&lt;p&gt;Most people won’t read every word of your newsletter — so make it scannable. Use:&lt;br&gt;
✔ Bullet points (like this!)&lt;br&gt;
✔ Short paragraphs&lt;br&gt;
✔ Bold text for key takeaways&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep it real (and avoid sounding robotic)
&lt;/h2&gt;

&lt;p&gt;People scroll past generic, corporate-sounding content. The more human and conversational you sound, the better. Share stories, insights, or even lessons from failures. Readers connect with real experiences, not just polished “expert advice.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Leverage LinkedIn’s auto-follow feature
&lt;/h2&gt;

&lt;p&gt;When someone subscribes to your newsletter, they now automatically follow your page — so make sure your LinkedIn page is active and engaging. More followers = more reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-promote everywhere
&lt;/h2&gt;

&lt;p&gt;Don’t let LinkedIn’s algorithm decide your reach. Share your newsletter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On your website (e.g., “Read our latest issue on LinkedIn”)&lt;/li&gt;
&lt;li&gt;In your email signature&lt;/li&gt;
&lt;li&gt;In other social media posts&lt;/li&gt;
&lt;li&gt;In relevant LinkedIn groups (if it makes sense for the audience)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  End with a strong CTA
&lt;/h2&gt;

&lt;p&gt;Every newsletter should guide your audience to do something next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comment with their thoughts&lt;/li&gt;
&lt;li&gt;Visit your website or listen to your podcast&lt;/li&gt;
&lt;li&gt;Share with their network&lt;/li&gt;
&lt;li&gt;Click a link to learn more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make it easy and clear — otherwise, people will just scroll on by.&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohkymibll7heodhgrdjd.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohkymibll7heodhgrdjd.png" alt="newsletter example" width="600" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Start a LinkedIn Newsletter in 2025?
&lt;/h2&gt;

&lt;p&gt;If you’re considering it, ask yourself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Is my audience already active on LinkedIn?&lt;/strong&gt; If yes, a newsletter could be a great way to reach them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do I want control over my email list?&lt;/strong&gt; If yes, then LinkedIn alone isn’t enough — you’ll need another email platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do I have the time to create consistent, high-quality content?&lt;/strong&gt; If no, a LinkedIn newsletter might just become another thing on your to-do list that doesn’t get the results you want.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to Make a LinkedIn Newsletter Work for You
&lt;/h2&gt;

&lt;p&gt;If you do decide to go for it, here’s what will help:&lt;/p&gt;

&lt;p&gt;✅ Keep it short and valuable — Nobody wants a 1,500-word newsletter in their LinkedIn feed. Get to the point.&lt;br&gt;
✅ Use strong visuals — Posts with images or graphics tend to perform better.&lt;br&gt;
✅ Have a clear CTA — Tell readers what you want them to do next (visit your website, listen to your podcast, download something, etc.).&lt;br&gt;
✅ Promote it elsewhere — Don’t just rely on LinkedIn’s algorithm. Share your newsletter on other social channels and your website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts: Is It Worth It?
&lt;/h2&gt;

&lt;p&gt;For us, the LinkedIn newsletter is not a game-changer. It helped grow our visibility on LinkedIn, but it didn’t replace the need for our own email list or other marketing efforts.&lt;/p&gt;

&lt;p&gt;LinkedIn newsletters can still be a great tool in 2025, but they’re not a magic bullet. The key is using them strategically — as part of a larger marketing plan, not the whole thing.&lt;/p&gt;

&lt;p&gt;Are you running a LinkedIn newsletter? What’s working (or not working) for you? Let’s compare notes in the comments.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>newsletter</category>
    </item>
    <item>
      <title>Re-tooling the Retro Way: Ditching Hubspot for Leaner, Simpler Marketing</title>
      <dc:creator>Autumn Morgan</dc:creator>
      <pubDate>Wed, 29 Jan 2025 19:29:17 +0000</pubDate>
      <link>https://dev.to/autumn_tonita1/re-tooling-the-retro-way-ditching-hubspot-for-leaner-simpler-marketing-2ac1</link>
      <guid>https://dev.to/autumn_tonita1/re-tooling-the-retro-way-ditching-hubspot-for-leaner-simpler-marketing-2ac1</guid>
      <description>&lt;p&gt;In a world where efficiency reigns supreme, developers and marketers are ditching bloated, one-size-fits-all platforms in favor of streamlined, customizable tools. Our marketing team recently took the plunge and said goodbye to HubSpot, opting for a leaner, more modular tech stack. Here's how—and why—we did it.&lt;/p&gt;

&lt;h2&gt;The Shift to Simpler Tech Stacks&lt;/h2&gt;

&lt;p&gt;We aren't the only ones! Marketers prefer a more personal and authentic approach to their strategies, and some bigger platforms tend to feel more robotic in their structure. Inspired by the rise of microservices in software development, this simpler approach values focused, specialized apps over monolithic platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the Shift?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More Control:&lt;/strong&gt; We tailor tools to fit our processes instead of conforming to rigid systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizability:&lt;/strong&gt; Lightweight tools are easier to tweak and optimize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower Costs:&lt;/strong&gt; Stop paying for bloated platforms we don’t fully utilize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Freedom:&lt;/strong&gt; Modular tools integrate seamlessly with our ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Examples of This Shift&lt;/h3&gt;

&lt;p&gt;Companies are breaking away from heavyweight tools and opting for leaner, modular tools that do &lt;em&gt;just enough&lt;/em&gt; without the extra bloat. Here are some options we looked into and discussed with other marketing coordinators. Not all of these tools are created equally, so it’s important to know what your goals are and what solutions you’re looking for. A few of these tools allow you to embed code, customize options, and integrate with other tools, so this part takes a little time and research.&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c2l8f12um8iqwx1le8o.jpg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c2l8f12um8iqwx1le8o.jpg" alt="slide 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;CRM Alternatives&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.pipedrive.com/" rel="noopener noreferrer"&gt;Pipedrive:&lt;/a&gt;&lt;/strong&gt; Ideal for smaller teams needing a visual, pipeline-focused CRM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.zoho.com/crm/" rel="noopener noreferrer"&gt;Zoho CRM:&lt;/a&gt;&lt;/strong&gt; A customizable, affordable CRM with modular add-ons for scaling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.copper.com/" rel="noopener noreferrer"&gt;Copper:&lt;/a&gt;&lt;/strong&gt; Built specifically for teams already using Google Workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Email Marketing Alternatives&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kit.com/" rel="noopener noreferrer"&gt;Kit (formerly ConvertKit):&lt;/a&gt;&lt;/strong&gt; Minimalistic yet powerful, perfect for newsletters and audience segmentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://buttondown.com/" rel="noopener noreferrer"&gt;Buttondown:&lt;/a&gt;&lt;/strong&gt; A lightweight option for managing email campaigns and subscriber lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mailchimp.com/" rel="noopener noreferrer"&gt;Mailchimp:&lt;/a&gt;&lt;/strong&gt; Classic tool for ease and automation&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Forms and Surveys&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform:&lt;/a&gt;&lt;/strong&gt; Clean, interactive, and user-friendly for creating engaging forms and surveys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.jotform.com/" rel="noopener noreferrer"&gt;Jotform:&lt;/a&gt;&lt;/strong&gt; Customizable forms for various use cases, from lead capture to payment collection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://workspace.google.com/products/forms/" rel="noopener noreferrer"&gt;Google Forms:&lt;/a&gt;&lt;/strong&gt; Free and accessible, with easy data collection and export.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Automation Alternatives&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://zapier.com/" rel="noopener noreferrer"&gt;Zapier:&lt;/a&gt;&lt;/strong&gt; The Swiss Army knife of automation, connecting virtually any app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.make.com/en" rel="noopener noreferrer"&gt;Make (formerly Integromat):&lt;/a&gt;&lt;/strong&gt; Affordable and great for more complex workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://n8n.io/" rel="noopener noreferrer"&gt;n8n:&lt;/a&gt;&lt;/strong&gt; An open-source workflow automation tool for teams that want flexibility and control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Marketing Analytics Alternatives&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://analytics.google.com/" rel="noopener noreferrer"&gt;Google Analytics 4:&lt;/a&gt;&lt;/strong&gt; Comprehensive and free for tracking web traffic and user behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.hotjar.com/" rel="noopener noreferrer"&gt;Hotjar:&lt;/a&gt;&lt;/strong&gt; Focused on user experience with heatmaps, session recordings, and feedback forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mixpanel.com/" rel="noopener noreferrer"&gt;Mixpanel:&lt;/a&gt;&lt;/strong&gt; Advanced analytics for tracking product usage and customer journeys.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Why We Ditched HubSpot&lt;/h2&gt;

&lt;p&gt;When it comes to marketing tools, bigger doesn’t always mean better. For years, HubSpot has been our all-in-one platform, offering everything from email campaigns to analytics to forms. But over time, we realized we were paying a premium for features we barely used, while the tools we did need felt bloated and inflexible. It wasn’t just a question of cost—it was about freedom, customization, and staying agile in an ever-changing marketing landscape. This motivated us to find tools that empower us to work smarter, not harder while aligning better with our team’s unique workflows and values.&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yvspzk78u3kvhna4op8.jpg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yvspzk78u3kvhna4op8.jpg" alt="slide 3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;What Are the Right Tools for the Job?&lt;/h2&gt;

&lt;p&gt;The key to a streamlined, effective marketing stack isn’t having more tools—it’s having the &lt;em&gt;right&lt;/em&gt; tools. After stepping away from an all-in-one platform, we reimagined our approach with a modular toolkit designed to do exactly what we need—no more, no less. By focusing on purpose-built apps for specific tasks, like Zapier for automation or Kit for email marketing, we’ve created a flexible, efficient system that’s easy to manage, integrates seamlessly, and leaves room for creativity and growth. Here are the primary tools we’ve chosen to work with. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zapier:&lt;/strong&gt; Capturing leads with ease using forms embedded on service and contact pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kit:&lt;/strong&gt; A simple, reliable email tool for newsletters and forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Tools &amp;amp; Google Forms:&lt;/strong&gt; For workflows that don’t fit into cookie-cutter solutions.&lt;/li&gt;
&lt;/ol&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyqsqzn55icqbweaaaok.jpg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyqsqzn55icqbweaaaok.jpg" alt="slide 6" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;What About Workflows That Don’t Fit?&lt;/h2&gt;

&lt;p&gt;Not every workflow can be neatly packaged into a shiny new tool—and that’s okay. Some of our workflows required custom solutions or simpler, more traditional approaches. For example, we’ve embraced tools like Google Forms for quick surveys or feedback collection and rely on downloadable PDFs for resources like toolkits and guides.&lt;/p&gt;

&lt;h2&gt;Building a Leaner, Smarter Future&lt;/h2&gt;

&lt;p&gt;By embracing a lean, modular approach, we’ve unlocked the freedom to innovate, collaborate, and focus on what truly matters: building meaningful connections, driving creativity, and aligning our tools with our values. Whether you’re a marketer looking for flexibility or a developer striving for efficiency, this shift empowers teams to think bigger with smaller, smarter tools. It’s not just a tech stack—it’s a strategy for a brighter, more agile future.&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f9ayliprgi2dgk8o3nr.jpg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f9ayliprgi2dgk8o3nr.jpg" alt="slide 11" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Troubleshooting Docker Desktop: Tips and Alternatives for Developers</title>
      <dc:creator>Autumn Morgan</dc:creator>
      <pubDate>Tue, 21 Jan 2025 18:47:56 +0000</pubDate>
      <link>https://dev.to/autumn_tonita1/troubleshooting-docker-desktop-tips-and-alternatives-for-developers-an6</link>
      <guid>https://dev.to/autumn_tonita1/troubleshooting-docker-desktop-tips-and-alternatives-for-developers-an6</guid>
      <description>&lt;p&gt;Docker Desktop is a go-to tool for many developers, but it’s not without its challenges. From managing specific versions to finding alternatives with a lighter footprint, our team recently shared tips and solutions that might help you streamline your container workflows. Here’s what they had to say, along with some actionable advice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downloading Specific Versions of Docker Desktop
&lt;/h2&gt;

&lt;p&gt;If you need a specific version of Docker Desktop—especially for compatibility reasons—&lt;a href="https://www.planetargon.com/about/william-mena" rel="noopener noreferrer"&gt;William Mena&lt;/a&gt; shared a practical approach, referencing &lt;a href="https://forums.docker.com/t/where-can-i-download-an-older-version-of-docker-desktop-for-mac/139977/8" rel="noopener noreferrer"&gt;this Docker Community Forums thread&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Locate the Build Path:&lt;/strong&gt; Find (&lt;code&gt;ctrl/cmd + f&lt;/code&gt;) the version you want in the &lt;a href="https://github.com/docker/docs/blob/51b3996c903f474aa68b32cfc74370e1cd2c982a/content/desktop/release-notes.md?plain=1#L31" rel="noopener noreferrer"&gt;Docker Desktop Release Notes&lt;/a&gt;. For instance, version 4.26.1 corresponds to build path &lt;code&gt;131620&lt;/code&gt;.&lt;/p&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhusobr56c8j67r8anpa5.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhusobr56c8j67r8anpa5.png" alt="build path image" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Modify the Download Link:&lt;/strong&gt; Update the appropriate link below, replacing &lt;code&gt;BUILD_PATH_NUMBER&lt;/code&gt; with your specific build path number:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apple Silicon:&lt;/strong&gt; &lt;code&gt;https://desktop.docker.com/mac/main/arm64/BUILD_PATH_NUMBER/Docker.dmg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple Intel:&lt;/strong&gt; &lt;code&gt;https://desktop.docker.com/mac/main/amd64/BUILD_PATH_NUMBER/Docker.dmg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows ARM64:&lt;/strong&gt; &lt;code&gt;https://desktop.docker.com/win/main/arm64/BUILD_PATH_NUMBER/Docker.dmg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows AMD64:&lt;/strong&gt; &lt;code&gt;https://desktop.docker.com/win/main/amd64/BUILD_PATH_NUMBER/Docker.dmg&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The Docker forums also mention you can replace &lt;code&gt;Docker.dmg&lt;/code&gt; with &lt;code&gt;Docker Desktop Installer.exe&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This method allows you to re-install specific versions to resolve compatibility issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring Alternatives to Docker Desktop
&lt;/h2&gt;

&lt;p&gt;Docker Desktop’s limitations—like performance issues and subscription requirements—can be frustrating. Here are some alternatives discussed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://podman.io/" rel="noopener noreferrer"&gt;Podman&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; A lightweight container runtime that eliminates the need for a desktop app. It’s free, open-source, and compatible with many Docker workflows.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://orbstack.dev/" rel="noopener noreferrer"&gt;OrbStack&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; Although it’s a paid tool, OrbStack promises faster, lighter, and simpler container and Linux management compared to Docker Desktop.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/abiosoft/colima" rel="noopener noreferrer"&gt;Colima&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; This tool offers container runtimes on macOS and Linux with minimal setup. It’s free and negates the need for a desktop app altogether. Robby noted that this might be the simplest solution for some setups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Troubleshooting Common Docker Issues
&lt;/h2&gt;

&lt;p&gt;William also shared a recurring issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Once every few months, I’m unable to edit the front-end React code due to a JSON parsing error. Clearing the cache or using Docker Desktop’s purging tool doesn’t fix the issue. I have to uninstall Docker and reinstall a specific version to resolve the problem."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve faced similar issues, here are some tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Disk Usage:&lt;/strong&gt; Check if container storage is nearing capacity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear Unused Containers:&lt;/strong&gt; Use &lt;code&gt;docker system prune&lt;/code&gt; to remove unused containers, networks, and images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup and Reinstall:&lt;/strong&gt; When all else fails, a clean re-install of a reliable Docker version might save time in the long run. William clears Docker-related files using an application called &lt;a href="https://freemacsoft.net/appcleaner/" rel="noopener noreferrer"&gt;AppCleaner&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Container Configuration Help:&lt;/strong&gt; Use &lt;a href="https://docs.docker.com/get-started/" rel="noopener noreferrer"&gt;this Docker troubleshooting guide&lt;/a&gt; for managing container issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay Open to Alternatives:&lt;/strong&gt; Explore tools like Podman and Colima to save headaches and provide better performance in the long run.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
