<?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: Ashley B</title>
    <description>The latest articles on DEV Community by Ashley B (@ashb4).</description>
    <link>https://dev.to/ashb4</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%2F1073143%2F32656af7-ad60-4082-a6ec-d1ab1b1d42c2.png</url>
      <title>DEV Community: Ashley B</title>
      <link>https://dev.to/ashb4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashb4"/>
    <language>en</language>
    <item>
      <title>Ideas Are Cheap. Attention Is Expensive.</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 24 Aug 2026 15:00:05 +0000</pubDate>
      <link>https://dev.to/ashb4/ideas-are-cheap-attention-is-expensive-4l5e</link>
      <guid>https://dev.to/ashb4/ideas-are-cheap-attention-is-expensive-4l5e</guid>
      <description>&lt;h1&gt;
  
  
  Ideas Are Cheap. Attention Is Expensive.
&lt;/h1&gt;

&lt;p&gt;For a long time, I thought ideas were valuable.&lt;/p&gt;

&lt;p&gt;Now I think attention is.&lt;/p&gt;

&lt;p&gt;Ideas are everywhere.&lt;/p&gt;

&lt;p&gt;I have more ideas than I could build in ten lifetimes.&lt;/p&gt;

&lt;p&gt;Apps.&lt;/p&gt;

&lt;p&gt;Books.&lt;/p&gt;

&lt;p&gt;Automation tools.&lt;/p&gt;

&lt;p&gt;AI projects.&lt;/p&gt;

&lt;p&gt;Business ideas.&lt;/p&gt;

&lt;p&gt;Side projects.&lt;/p&gt;

&lt;p&gt;Random notes scattered across notebooks and text files.&lt;/p&gt;

&lt;p&gt;The older I get, the less impressed I am by ideas.&lt;/p&gt;

&lt;p&gt;Because ideas are cheap.&lt;/p&gt;

&lt;p&gt;Attention is expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Was Never Ideas
&lt;/h2&gt;

&lt;p&gt;Whenever a project stalled, I used to think I needed a better idea.&lt;/p&gt;

&lt;p&gt;Something more exciting.&lt;/p&gt;

&lt;p&gt;More original.&lt;/p&gt;

&lt;p&gt;More ambitious.&lt;/p&gt;

&lt;p&gt;Then a funny thing would happen.&lt;/p&gt;

&lt;p&gt;I'd get a new idea.&lt;/p&gt;

&lt;p&gt;I'd be excited for a few days.&lt;/p&gt;

&lt;p&gt;Then I'd discover the same problem.&lt;/p&gt;

&lt;p&gt;The new idea still needed attention.&lt;/p&gt;

&lt;p&gt;The new idea still needed effort.&lt;/p&gt;

&lt;p&gt;The new idea still needed execution.&lt;/p&gt;

&lt;p&gt;I wasn't solving the problem.&lt;/p&gt;

&lt;p&gt;I was changing the scenery.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Ideas Feel Like Progress
&lt;/h2&gt;

&lt;p&gt;This is the trap.&lt;/p&gt;

&lt;p&gt;A new idea feels productive.&lt;/p&gt;

&lt;p&gt;You can spend hours planning.&lt;/p&gt;

&lt;p&gt;Researching.&lt;/p&gt;

&lt;p&gt;Sketching.&lt;/p&gt;

&lt;p&gt;Naming things.&lt;/p&gt;

&lt;p&gt;Imagining features.&lt;/p&gt;

&lt;p&gt;Your brain gets rewarded before you've built anything.&lt;/p&gt;

&lt;p&gt;Meanwhile the current project is sitting in the corner wondering why you've abandoned it again.&lt;/p&gt;

&lt;p&gt;Ask me how I know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attention Is The Real Currency
&lt;/h2&gt;

&lt;p&gt;I've started looking at projects differently.&lt;/p&gt;

&lt;p&gt;When a new idea shows up, I don't ask:&lt;/p&gt;

&lt;p&gt;"Is this a good idea?"&lt;/p&gt;

&lt;p&gt;Most ideas are good enough.&lt;/p&gt;

&lt;p&gt;Instead I ask:&lt;/p&gt;

&lt;p&gt;"Does this deserve my attention right now?"&lt;/p&gt;

&lt;p&gt;That's a much harder question.&lt;/p&gt;

&lt;p&gt;Because attention is limited.&lt;/p&gt;

&lt;p&gt;Every hour spent on a new project is an hour not spent improving an existing one.&lt;/p&gt;

&lt;p&gt;Every new idea creates an opportunity cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Internet Taught Me This
&lt;/h2&gt;

&lt;p&gt;Building content systems taught me something I didn't expect.&lt;/p&gt;

&lt;p&gt;The bottleneck isn't content.&lt;/p&gt;

&lt;p&gt;The bottleneck isn't ideas.&lt;/p&gt;

&lt;p&gt;The bottleneck is attention.&lt;/p&gt;

&lt;p&gt;My attention.&lt;/p&gt;

&lt;p&gt;The audience's attention.&lt;/p&gt;

&lt;p&gt;Everyone's attention.&lt;/p&gt;

&lt;p&gt;There are more ideas than any of us could ever consume.&lt;/p&gt;

&lt;p&gt;The challenge is deciding what deserves focus.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed For Me
&lt;/h2&gt;

&lt;p&gt;I still collect ideas.&lt;/p&gt;

&lt;p&gt;I'm never going to stop.&lt;/p&gt;

&lt;p&gt;That's how my brain works.&lt;/p&gt;

&lt;p&gt;But I don't treat every idea like an emergency anymore.&lt;/p&gt;

&lt;p&gt;Most ideas can wait.&lt;/p&gt;

&lt;p&gt;Some ideas should wait.&lt;/p&gt;

&lt;p&gt;A few ideas deserve immediate attention.&lt;/p&gt;

&lt;p&gt;Learning the difference has probably saved me more time than any productivity system I've ever built.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Ideas feel valuable because they're exciting.&lt;/p&gt;

&lt;p&gt;Attention feels ordinary because we spend it every day.&lt;/p&gt;

&lt;p&gt;But if you gave me a choice between one great idea and six months of focused attention, I'd take the attention every time.&lt;/p&gt;

&lt;p&gt;Ideas are abundant.&lt;/p&gt;

&lt;p&gt;Execution is scarce.&lt;/p&gt;

&lt;p&gt;And attention is the bridge between the two.&lt;/p&gt;

&lt;h2&gt;
  
  
  P.S.
&lt;/h2&gt;

&lt;p&gt;If you have too many ideas and need help turning the useful ones into actual publishable angles, I built a prompt pack around that problem:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fleurdevie.gumroad.com/l/100prompt-storm" rel="noopener noreferrer"&gt;100 Prompt Storm on Gumroad&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>creativity</category>
      <category>buildinpublic</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Day I Realized I Wasn't Building Apps</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 17 Aug 2026 15:00:04 +0000</pubDate>
      <link>https://dev.to/ashb4/the-day-i-realized-i-wasnt-building-apps-14fm</link>
      <guid>https://dev.to/ashb4/the-day-i-realized-i-wasnt-building-apps-14fm</guid>
      <description>&lt;h1&gt;
  
  
  The Day I Realized I Wasn't Building Apps
&lt;/h1&gt;

&lt;p&gt;For years, I thought I was building apps.&lt;/p&gt;

&lt;p&gt;That's what I called them anyway.&lt;/p&gt;

&lt;p&gt;A scheduler.&lt;/p&gt;

&lt;p&gt;A job bot.&lt;/p&gt;

&lt;p&gt;A healthcare platform.&lt;/p&gt;

&lt;p&gt;An AI project.&lt;/p&gt;

&lt;p&gt;A content tool.&lt;/p&gt;

&lt;p&gt;A browser automation system.&lt;/p&gt;

&lt;p&gt;Looking at my GitHub, they seem completely unrelated.&lt;/p&gt;

&lt;p&gt;Honestly, that's something I've worried about before.&lt;/p&gt;

&lt;p&gt;I have over a hundred repositories.&lt;/p&gt;

&lt;p&gt;If someone spends thirty seconds scrolling through them, I can imagine them thinking:&lt;/p&gt;

&lt;p&gt;"Wow. This person is all over the place."&lt;/p&gt;

&lt;p&gt;The funny thing is that I eventually realized the opposite was true.&lt;/p&gt;

&lt;p&gt;My GitHub is here: &lt;a href="https://github.com/ashb4" rel="noopener noreferrer"&gt;https://github.com/ashb4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scheduler That Wasn't A Scheduler
&lt;/h2&gt;

&lt;p&gt;One of my projects started life as a simple scheduler.&lt;/p&gt;

&lt;p&gt;That was the goal.&lt;/p&gt;

&lt;p&gt;I hated posting content manually.&lt;/p&gt;

&lt;p&gt;Open platform.&lt;/p&gt;

&lt;p&gt;Paste content.&lt;/p&gt;

&lt;p&gt;Upload image.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;Again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;It felt repetitive.&lt;/p&gt;

&lt;p&gt;It felt annoying.&lt;/p&gt;

&lt;p&gt;Most of all, it felt like something a computer should be doing instead of me.&lt;/p&gt;

&lt;p&gt;So I built a scheduler.&lt;/p&gt;

&lt;p&gt;At least, that's what I thought I was building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then Things Got Weird
&lt;/h2&gt;

&lt;p&gt;The scheduler worked.&lt;/p&gt;

&lt;p&gt;But now I needed content.&lt;/p&gt;

&lt;p&gt;Then I needed analytics.&lt;/p&gt;

&lt;p&gt;Then I needed to know what content was working.&lt;/p&gt;

&lt;p&gt;Then I needed a way to track winners.&lt;/p&gt;

&lt;p&gt;Then I needed a way to reuse content.&lt;/p&gt;

&lt;p&gt;Then I needed platform-specific strategies.&lt;/p&gt;

&lt;p&gt;At some point I looked up and realized I wasn't building a scheduler anymore.&lt;/p&gt;

&lt;p&gt;I was building a system.&lt;/p&gt;

&lt;p&gt;A system for discovering, creating, publishing, measuring, and improving content.&lt;/p&gt;

&lt;p&gt;The scheduler was just one piece.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I Started Looking At Everything Else
&lt;/h2&gt;

&lt;p&gt;That's when I noticed the same thing happening in almost every project I'd ever built.&lt;/p&gt;

&lt;p&gt;My job application tools weren't really job application tools.&lt;/p&gt;

&lt;p&gt;They were systems designed to reduce repetitive effort.&lt;/p&gt;

&lt;p&gt;My automation projects weren't really automation projects.&lt;/p&gt;

&lt;p&gt;They were systems designed to reduce repetitive effort.&lt;/p&gt;

&lt;p&gt;Even my AI projects weren't really about AI.&lt;/p&gt;

&lt;p&gt;They were systems designed to reduce repetitive effort.&lt;/p&gt;

&lt;p&gt;Different technologies.&lt;/p&gt;

&lt;p&gt;Different domains.&lt;/p&gt;

&lt;p&gt;Same obsession.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern I Couldn't See
&lt;/h2&gt;

&lt;p&gt;For a long time I thought I had a focus problem.&lt;/p&gt;

&lt;p&gt;Too many ideas.&lt;/p&gt;

&lt;p&gt;Too many projects.&lt;/p&gt;

&lt;p&gt;Too many directions.&lt;/p&gt;

&lt;p&gt;Then I started looking at the actual problems I was solving.&lt;/p&gt;

&lt;p&gt;Almost all of them started with the same thought:&lt;/p&gt;

&lt;p&gt;"This is stupid. There has to be a better way."&lt;/p&gt;

&lt;p&gt;Job applications.&lt;/p&gt;

&lt;p&gt;Content posting.&lt;/p&gt;

&lt;p&gt;Data entry.&lt;/p&gt;

&lt;p&gt;Decision making.&lt;/p&gt;

&lt;p&gt;Workflow management.&lt;/p&gt;

&lt;p&gt;The technology changed.&lt;/p&gt;

&lt;p&gt;The frustration stayed the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Think I'm A Systems Builder
&lt;/h2&gt;

&lt;p&gt;This realization changed how I think about my work.&lt;/p&gt;

&lt;p&gt;When people ask what I build, I still usually undersell it.&lt;/p&gt;

&lt;p&gt;I'll say:&lt;/p&gt;

&lt;p&gt;"It's a scheduler."&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;"It's a content tool."&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;"It's an automation project."&lt;/p&gt;

&lt;p&gt;Technically those answers are correct.&lt;/p&gt;

&lt;p&gt;They're also incomplete.&lt;/p&gt;

&lt;p&gt;Because what I'm usually building is a system.&lt;/p&gt;

&lt;p&gt;A collection of tools, workflows, feedback loops, and automation working together to solve a problem.&lt;/p&gt;

&lt;p&gt;The app is just the visible part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson
&lt;/h2&gt;

&lt;p&gt;For a long time I thought my projects looked random.&lt;/p&gt;

&lt;p&gt;Now I think they look consistent.&lt;/p&gt;

&lt;p&gt;Not because they use the same technology.&lt;/p&gt;

&lt;p&gt;Because they're all trying to solve the same problem.&lt;/p&gt;

&lt;p&gt;Reducing repetitive human effort.&lt;/p&gt;

&lt;p&gt;Helping people make decisions.&lt;/p&gt;

&lt;p&gt;Creating systems that keep moving even when motivation disappears.&lt;/p&gt;

&lt;p&gt;Once I saw that pattern, a lot of things suddenly made sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;I still build apps.&lt;/p&gt;

&lt;p&gt;At least that's what I tell people.&lt;/p&gt;

&lt;p&gt;But somewhere along the way I realized the apps were never the interesting part.&lt;/p&gt;

&lt;p&gt;The interesting part was always the system behind them.&lt;/p&gt;

&lt;p&gt;And once I saw that, I started understanding my own projects a lot better.&lt;/p&gt;

&lt;p&gt;Maybe even myself.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>automation</category>
      <category>productivity</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Thought I Needed More Motivation. I Actually Needed Better Systems.</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 10 Aug 2026 15:00:05 +0000</pubDate>
      <link>https://dev.to/ashb4/i-thought-i-needed-more-motivation-i-actually-needed-better-systems-c7g</link>
      <guid>https://dev.to/ashb4/i-thought-i-needed-more-motivation-i-actually-needed-better-systems-c7g</guid>
      <description>&lt;h1&gt;
  
  
  I Thought I Needed More Motivation. I Actually Needed Better Systems.
&lt;/h1&gt;

&lt;p&gt;For a long time, I thought my problem was motivation.&lt;/p&gt;

&lt;p&gt;I thought I needed more discipline.&lt;/p&gt;

&lt;p&gt;More willpower.&lt;/p&gt;

&lt;p&gt;More consistency.&lt;/p&gt;

&lt;p&gt;More grit.&lt;/p&gt;

&lt;p&gt;The internet certainly seemed convinced that was the answer.&lt;/p&gt;

&lt;p&gt;Every productivity video felt like some variation of:&lt;/p&gt;

&lt;p&gt;"Wake up earlier."&lt;/p&gt;

&lt;p&gt;"Want it more."&lt;/p&gt;

&lt;p&gt;"Work harder."&lt;/p&gt;

&lt;p&gt;"Stay disciplined."&lt;/p&gt;

&lt;p&gt;So naturally, I blamed myself whenever I wasn't making progress.&lt;/p&gt;

&lt;p&gt;Then I noticed something.&lt;/p&gt;

&lt;p&gt;Some days I was incredibly productive.&lt;/p&gt;

&lt;p&gt;Other days I got almost nothing done.&lt;/p&gt;

&lt;p&gt;The difference wasn't motivation.&lt;/p&gt;

&lt;p&gt;The difference was friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation Is A Terrible Dependency
&lt;/h2&gt;

&lt;p&gt;Motivation is great when it shows up.&lt;/p&gt;

&lt;p&gt;The problem is that it doesn't always show up.&lt;/p&gt;

&lt;p&gt;Some days you're excited.&lt;/p&gt;

&lt;p&gt;Some days you're tired.&lt;/p&gt;

&lt;p&gt;Some days you're distracted.&lt;/p&gt;

&lt;p&gt;Some days you'd rather do literally anything else.&lt;/p&gt;

&lt;p&gt;If your entire system depends on motivation, eventually the system fails.&lt;/p&gt;

&lt;p&gt;Not because you're lazy.&lt;/p&gt;

&lt;p&gt;Because you're human...Yes, we are allowed to be human.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Job Application Problem
&lt;/h2&gt;

&lt;p&gt;Job hunting taught me this lesson better than anything else.&lt;/p&gt;

&lt;p&gt;I've applied to a ridiculous number of jobs over the years.&lt;/p&gt;

&lt;p&gt;And every application seemed to ask for the same information.&lt;/p&gt;

&lt;p&gt;Upload resume.&lt;/p&gt;

&lt;p&gt;Re-enter resume.&lt;/p&gt;

&lt;p&gt;Answer questions.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;At first I relied on motivation.&lt;/p&gt;

&lt;p&gt;Eventually I realized motivation wasn't the bottleneck.&lt;/p&gt;

&lt;p&gt;The process was.&lt;/p&gt;

&lt;p&gt;The more friction I removed, the easier it became to keep going.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Content Problem
&lt;/h2&gt;

&lt;p&gt;The same thing happened with content creation.&lt;/p&gt;

&lt;p&gt;I don't mind creating.&lt;/p&gt;

&lt;p&gt;I actually enjoy it.&lt;/p&gt;

&lt;p&gt;What I hate is repetitive posting.&lt;/p&gt;

&lt;p&gt;Copy.&lt;/p&gt;

&lt;p&gt;Paste.&lt;/p&gt;

&lt;p&gt;Upload.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;Every platform.&lt;/p&gt;

&lt;p&gt;Every day.&lt;/p&gt;

&lt;p&gt;That's not creativity.&lt;/p&gt;

&lt;p&gt;That's data entry.&lt;/p&gt;

&lt;p&gt;Once I started building systems to handle the repetitive parts, I spent more time creating and less time maintaining.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Myth Of Consistency
&lt;/h2&gt;

&lt;p&gt;People often talk about consistency as if it's a personality trait.&lt;/p&gt;

&lt;p&gt;I don't think it is.&lt;/p&gt;

&lt;p&gt;I think consistency is often the result of good systems.&lt;/p&gt;

&lt;p&gt;A bad system requires constant effort.&lt;/p&gt;

&lt;p&gt;A good system reduces effort.&lt;/p&gt;

&lt;p&gt;One depends on motivation.&lt;/p&gt;

&lt;p&gt;The other survives without it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Goal
&lt;/h2&gt;

&lt;p&gt;The goal isn't to become a productivity machine.&lt;/p&gt;

&lt;p&gt;The goal is to make the right thing easier.&lt;/p&gt;

&lt;p&gt;When something important depends entirely on my mood, I know the system is broken.&lt;/p&gt;

&lt;p&gt;When the process keeps moving even on low-energy days, I know the system is improving.&lt;/p&gt;

&lt;p&gt;That's the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed For Me
&lt;/h2&gt;

&lt;p&gt;Once I stopped chasing motivation and started building systems, things got easier.&lt;/p&gt;

&lt;p&gt;Not perfect.&lt;/p&gt;

&lt;p&gt;Just easier.&lt;/p&gt;

&lt;p&gt;Projects moved forward more consistently.&lt;/p&gt;

&lt;p&gt;Content got published more consistently.&lt;/p&gt;

&lt;p&gt;Job applications happened more consistently.&lt;/p&gt;

&lt;p&gt;The work didn't disappear.&lt;/p&gt;

&lt;p&gt;The friction did.&lt;/p&gt;

&lt;p&gt;And that turned out to matter far more than motivation ever did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;I still like motivation.&lt;/p&gt;

&lt;p&gt;It's fun when it shows up.&lt;/p&gt;

&lt;p&gt;But I don't trust it anymore.&lt;/p&gt;

&lt;p&gt;Motivation is a bonus.&lt;/p&gt;

&lt;p&gt;Systems are infrastructure.&lt;/p&gt;

&lt;p&gt;And if I have to choose between feeling motivated and having a system that works?&lt;/p&gt;

&lt;p&gt;I'll take the system every time.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>automation</category>
      <category>career</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Running Playwright + Headless Chrome on Old Hardware Is Less “Automation” and More “Systems Archaeology”</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 03 Aug 2026 15:00:06 +0000</pubDate>
      <link>https://dev.to/ashb4/running-playwright-headless-chrome-on-old-hardware-is-less-automation-and-more-systems-2ck1</link>
      <guid>https://dev.to/ashb4/running-playwright-headless-chrome-on-old-hardware-is-less-automation-and-more-systems-2ck1</guid>
      <description>&lt;h1&gt;
  
  
  Running Playwright + Headless Chrome on Old Hardware Is Less “Automation” and More “Systems Archaeology”
&lt;/h1&gt;

&lt;p&gt;There is a very specific type of developer optimism that makes you look at a dying 2015 HP laptop and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yeah, this should absolutely run production browser automation.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This machine had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;a mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated Radeon graphics&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;li&gt;trust issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had already memorized Alt + PrintScreen + REISUB because eventually this machine was going to require spiritual intervention.&lt;/p&gt;

&lt;p&gt;Naturally, I turned it into a self-hosted automation server running Playwright workers for PostPunk.&lt;/p&gt;

&lt;p&gt;Because apparently I enjoy creating problems recreationally.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basic Fantasy
&lt;/h2&gt;

&lt;p&gt;The fantasy sounds reasonable enough.&lt;/p&gt;

&lt;p&gt;Take an old laptop.&lt;br&gt;
Install Linux.&lt;br&gt;
Run some worker processes.&lt;br&gt;
Use Playwright for browser automation.&lt;br&gt;
Queue content posts automatically.&lt;br&gt;
Stop manually posting to platforms one miserable click at a time.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That last part mattered the most.&lt;/p&gt;

&lt;p&gt;I’m stubborn, cheap, and deeply allergic to manually posting content platform-by-platform forever.&lt;/p&gt;

&lt;p&gt;Which is basically the entire psychological profile required to build self-hosted automation systems.&lt;/p&gt;

&lt;p&gt;At some point this stopped being:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“a fun Linux experiment”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the engine for how I actually want to work.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That meant the machine suddenly mattered.&lt;/p&gt;

&lt;p&gt;And unfortunately, so did Chrome.&lt;/p&gt;
&lt;h2&gt;
  
  
  Everything Was Fine Until Chromium Entered The Story
&lt;/h2&gt;

&lt;p&gt;The Linux side was mostly solid.&lt;/p&gt;

&lt;p&gt;Workers behaved.&lt;br&gt;
Scheduling behaved.&lt;br&gt;
Queue processing behaved.&lt;br&gt;
Notifications behaved.&lt;/p&gt;

&lt;p&gt;Then Chromium showed up and started acting like the laptop was trying to process emotional trauma in real time.&lt;/p&gt;

&lt;p&gt;At first the failures looked random:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selectors timing out&lt;/li&gt;
&lt;li&gt;uploads silently failing&lt;/li&gt;
&lt;li&gt;clicks not landing&lt;/li&gt;
&lt;li&gt;pages freezing&lt;/li&gt;
&lt;li&gt;workers hanging forever&lt;/li&gt;
&lt;li&gt;random skipped inputs&lt;/li&gt;
&lt;li&gt;inconsistent rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The worst part?&lt;/p&gt;

&lt;p&gt;The automation usually worked while I was watching it.&lt;/p&gt;

&lt;p&gt;Pinterest posted correctly.&lt;br&gt;
Facebook posted correctly.&lt;br&gt;
Dev.to posted correctly.&lt;/p&gt;

&lt;p&gt;So naturally I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool. Stable.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was a lie.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Moment I Realized This Wasn’t Just A Script Problem
&lt;/h2&gt;

&lt;p&gt;One night around 3 AM, while manually logging back into one of the platforms, Chromium itself started pixelating.&lt;/p&gt;

&lt;p&gt;The screen partially froze.&lt;br&gt;
The UI glitched out.&lt;br&gt;
The machine made that horrible little Linux system ringing noise like everything inside the laptop had briefly entered a panic attack.&lt;/p&gt;

&lt;p&gt;I stopped moving the mouse.&lt;br&gt;
Waited a few seconds.&lt;br&gt;
The machine recovered.&lt;/p&gt;

&lt;p&gt;Firefox mostly behaved normally.&lt;/p&gt;

&lt;p&gt;Chrome behaved like the unstable roommate Linux was too polite to evict.&lt;/p&gt;

&lt;p&gt;That was the moment I realized:&lt;br&gt;
this was no longer just a Playwright problem.&lt;/p&gt;

&lt;p&gt;Something deeper was happening.&lt;/p&gt;
&lt;h2&gt;
  
  
  Old Hardware Changes Failure Modes
&lt;/h2&gt;

&lt;p&gt;A lot of browser automation advice accidentally assumes healthy hardware.&lt;/p&gt;

&lt;p&gt;People say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Playwright works great.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I believe them.&lt;/p&gt;

&lt;p&gt;But there is usually an invisible footnote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“on hardware that is not actively fighting for its life.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Old hardware changes the nature of failures.&lt;/p&gt;

&lt;p&gt;On modern systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bad waits&lt;/li&gt;
&lt;li&gt;selectors&lt;/li&gt;
&lt;li&gt;auth issues&lt;/li&gt;
&lt;li&gt;flaky timing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On old systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU weirdness&lt;/li&gt;
&lt;li&gt;rendering instability&lt;/li&gt;
&lt;li&gt;browser freezes&lt;/li&gt;
&lt;li&gt;memory pressure&lt;/li&gt;
&lt;li&gt;disk latency&lt;/li&gt;
&lt;li&gt;thermal throttling&lt;/li&gt;
&lt;li&gt;random Chrome existential crises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point the machine stopped feeling “slow” and started feeling medically concerning.&lt;/p&gt;

&lt;p&gt;The fans would suddenly kick on like the laptop had just seen a tax audit.&lt;/p&gt;

&lt;p&gt;Opening Chrome on this thing felt less like launching software and more like asking an elderly wizard for one final favor.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headless Chrome Is Not Lightweight. It Is Just Invisible
&lt;/h2&gt;

&lt;p&gt;People hear “headless browser” and imagine some tiny efficient automation process.&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Headless Chromium still wants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;rendering resources&lt;/li&gt;
&lt;li&gt;shared memory&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;graphics support&lt;/li&gt;
&lt;li&gt;enough system stability to not implode under load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when resources get tight, the browser does not always fail cleanly.&lt;/p&gt;

&lt;p&gt;Sometimes it just becomes weird.&lt;/p&gt;

&lt;p&gt;Which is worse.&lt;/p&gt;

&lt;p&gt;The browser would get 95% through a workflow and then suddenly remember it was running on archaeology.&lt;/p&gt;

&lt;p&gt;That’s the dangerous middle ground:&lt;br&gt;
not broken enough to diagnose instantly,&lt;br&gt;
not stable enough to trust.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headed And Headless Chromium Are Basically Different Species
&lt;/h2&gt;

&lt;p&gt;This ended up being the biggest lesson.&lt;/p&gt;

&lt;p&gt;The workflows behaved differently depending on whether I could physically see the browser.&lt;/p&gt;

&lt;p&gt;That sounds fake until you experience it yourself.&lt;/p&gt;

&lt;p&gt;In headed mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering slowed things down&lt;/li&gt;
&lt;li&gt;animations had time to finish&lt;/li&gt;
&lt;li&gt;uploads stabilized&lt;/li&gt;
&lt;li&gt;UI transitions completed&lt;/li&gt;
&lt;li&gt;the environment accidentally synchronized itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Headless mode removed all that padding.&lt;/p&gt;

&lt;p&gt;Suddenly the automation was running at full machine speed against a browser environment held together with aging hardware and optimism.&lt;/p&gt;

&lt;p&gt;That’s when the race conditions showed up.&lt;/p&gt;

&lt;p&gt;This:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[data-testid="publish-button"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;turns out to mean absolutely nothing if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is still hydrating&lt;/li&gt;
&lt;li&gt;uploads are incomplete&lt;/li&gt;
&lt;li&gt;event listeners are not attached yet&lt;/li&gt;
&lt;li&gt;the UI exists visually but not functionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watching successful automation manually proves almost nothing.&lt;/p&gt;

&lt;p&gt;Production workers do not care about your vibes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Browser Automation Slowly Becomes Folklore
&lt;/h2&gt;

&lt;p&gt;At some point my debugging strategy stopped being engineering and became ritualistic behavior.&lt;/p&gt;

&lt;p&gt;I started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reinstalling packages I barely understood&lt;/li&gt;
&lt;li&gt;randomly deleting Chrome-related components&lt;/li&gt;
&lt;li&gt;tweaking launch flags endlessly&lt;/li&gt;
&lt;li&gt;waiting before clicks&lt;/li&gt;
&lt;li&gt;comparing screenshots&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;li&gt;praying to God a little bit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At one point I removed enough Chrome/X11-related stuff that the machine started pixelating outside the browser too.&lt;/p&gt;

&lt;p&gt;That was probably the strongest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“hardware may actually be dying”&lt;br&gt;
moment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironically, reinstalling the things I broke actually improved stability afterward.&lt;/p&gt;

&lt;p&gt;Which is the most Linux outcome possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPU Weirdness Is Real
&lt;/h2&gt;

&lt;p&gt;Firefox mostly behaved fine on this machine.&lt;/p&gt;

&lt;p&gt;Chrome specifically was chaos.&lt;/p&gt;

&lt;p&gt;Even normal Chrome windows were basically a 50/50 gamble:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maybe fine&lt;/li&gt;
&lt;li&gt;maybe flickering&lt;/li&gt;
&lt;li&gt;maybe partially freezing&lt;/li&gt;
&lt;li&gt;maybe pixelating&lt;/li&gt;
&lt;li&gt;maybe emotionally collapsing halfway through rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still do not fully understand why.&lt;/p&gt;

&lt;p&gt;Maybe Chromium was hitting rendering paths the machine hated.&lt;br&gt;
Maybe Linux and Chrome were fighting deep in the graphics stack.&lt;br&gt;
Maybe the laptop itself was just old and tired.&lt;/p&gt;

&lt;p&gt;At some point debugging old Linux hardware stops being science and becomes folklore.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;Not one thing.&lt;br&gt;
Several things.&lt;/p&gt;

&lt;p&gt;Moving more flows to headless mode helped because visible Chrome rendering was apparently making the machine more unstable.&lt;/p&gt;

&lt;p&gt;Proper waits helped a lot.&lt;/p&gt;

&lt;p&gt;I learned very quickly that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;waits matter more than confidence&lt;/li&gt;
&lt;li&gt;“loaded” does not mean “ready”&lt;/li&gt;
&lt;li&gt;visible UI does not mean interactable UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some flags that genuinely helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-background-timer-throttling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-renderer-backgrounding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ended up mattering far more than I wanted it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Observability Strategy Became “Listen For The Fan”
&lt;/h2&gt;

&lt;p&gt;Before headless mode, I barely paid attention to my Telegram notifications because I could physically see the automation running.&lt;/p&gt;

&lt;p&gt;Once everything moved headless, the notifications became the only reliable proof the workers were alive.&lt;/p&gt;

&lt;p&gt;At one point my monitoring stack was basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;log files&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I heard the fan suddenly spin up, I knew the workers were probably doing something.&lt;/p&gt;

&lt;p&gt;Which is not exactly enterprise observability engineering.&lt;/p&gt;

&lt;p&gt;Most of this debugging happened around 3 AM while sitting directly in front of the machine like some kind of browser automation goblin trying to convince Chromium not to explode overnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability Is A Much Higher Standard Than “It Worked Once”
&lt;/h2&gt;

&lt;p&gt;This was the real lesson.&lt;/p&gt;

&lt;p&gt;A successful run does not prove reliability.&lt;/p&gt;

&lt;p&gt;It proves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one run succeeded under one set of conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s all.&lt;/p&gt;

&lt;p&gt;Reliable automation means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unattended&lt;/li&gt;
&lt;li&gt;repeatable&lt;/li&gt;
&lt;li&gt;observable&lt;/li&gt;
&lt;li&gt;stable under load&lt;/li&gt;
&lt;li&gt;stable overnight&lt;/li&gt;
&lt;li&gt;stable when nobody is staring directly at Chromium like a nervous zookeeper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a completely different standard.&lt;/p&gt;

&lt;p&gt;Eventually the workers became stable enough that I stopped compulsively checking them every few minutes.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That was probably the real milestone.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the scripts worked.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I no longer felt emotionally required to supervise Chrome personally.”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>linux</category>
      <category>playwright</category>
      <category>automation</category>
    </item>
    <item>
      <title>I Turned an Old HP Laptop Into a Linux Automation Server and Learned Why Browser Automation Is a Liar</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 07 Jul 2026 03:54:00 +0000</pubDate>
      <link>https://dev.to/ashb4/i-turned-an-old-hp-laptop-into-a-linux-automation-server-and-learned-why-browser-automation-is-a-3k8n</link>
      <guid>https://dev.to/ashb4/i-turned-an-old-hp-laptop-into-a-linux-automation-server-and-learned-why-browser-automation-is-a-3k8n</guid>
      <description>&lt;h1&gt;
  
  
  I Turned an Old HP Laptop Into a Linux Automation Server and Learned Why Browser Automation Is a Liar
&lt;/h1&gt;

&lt;p&gt;There is a very specific kind of optimism that makes you look at a dying 2015 HP laptop and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yeah. This should run production browser automation.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This thing had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;a mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated AMD graphics&lt;/li&gt;
&lt;li&gt;the general aura of a haunted library computer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had already memorized Alt + PrintScreen + REISUB because the machine had seen things.&lt;/p&gt;

&lt;p&gt;Naturally, I decided to turn it into a self-hosted automation server running Playwright workers for PostPunk.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;At first, it mostly worked.&lt;/p&gt;

&lt;p&gt;The Linux side was fine. Queue workers were fine. Background jobs were fine. Firefox behaved surprisingly well.&lt;/p&gt;

&lt;p&gt;Then Chromium entered the chat and everything became spiritually unstable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Wasn’t Immediate
&lt;/h2&gt;

&lt;p&gt;The annoying part is that the automation &lt;em&gt;sometimes&lt;/em&gt; worked.&lt;/p&gt;

&lt;p&gt;Pinterest would post.&lt;br&gt;
Facebook would post.&lt;br&gt;
Dev.to would post.&lt;/p&gt;

&lt;p&gt;Then suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selectors would fail&lt;/li&gt;
&lt;li&gt;pages would flicker&lt;/li&gt;
&lt;li&gt;interactions would stop working&lt;/li&gt;
&lt;li&gt;rendering would glitch out&lt;/li&gt;
&lt;li&gt;Chrome would randomly pixelate the display&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part?&lt;/p&gt;

&lt;p&gt;Rebooting the machine fixed it for about ten minutes.&lt;/p&gt;

&lt;p&gt;Which is one of the worst debugging outcomes possible because it tricks you into thinking you solved something.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headed vs Headless Was the Real Trap
&lt;/h2&gt;

&lt;p&gt;At first I tested everything with a visible browser because I like seeing automation happen.&lt;/p&gt;

&lt;p&gt;Honestly, most developers do.&lt;/p&gt;

&lt;p&gt;Watching the browser click through workflows makes the system feel real. You can visually confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;login state&lt;/li&gt;
&lt;li&gt;navigation&lt;/li&gt;
&lt;li&gt;selectors&lt;/li&gt;
&lt;li&gt;button clicks&lt;/li&gt;
&lt;li&gt;page rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But on this machine, visible Chromium was apparently part of the problem.&lt;/p&gt;

&lt;p&gt;Headed mode flickered constantly. Sometimes opening multiple windows would cause random visual corruption. Firefox looked normal. Chromium behaved like it had unresolved personal issues with Linux.&lt;/p&gt;

&lt;p&gt;Ironically, once I moved more flows to headless mode, reliability improved.&lt;/p&gt;

&lt;p&gt;Not because the automation logic changed.&lt;/p&gt;

&lt;p&gt;Because the machine stopped trying to visibly render Chrome on ancient hardware held together by optimism and thermal paste.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headless and Headed Browsers Are Not Really the Same
&lt;/h2&gt;

&lt;p&gt;People talk about headless Chrome like it is just:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Chrome without the window.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a comforting lie.&lt;/p&gt;

&lt;p&gt;Headless and headed runs differ in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering behavior&lt;/li&gt;
&lt;li&gt;GPU paths&lt;/li&gt;
&lt;li&gt;timing&lt;/li&gt;
&lt;li&gt;compositor behavior&lt;/li&gt;
&lt;li&gt;resource usage&lt;/li&gt;
&lt;li&gt;sandboxing&lt;/li&gt;
&lt;li&gt;viewport defaults&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On modern hardware, those differences are annoying.&lt;/p&gt;

&lt;p&gt;On old hardware, those differences become a horror genre.&lt;/p&gt;

&lt;p&gt;This laptop was running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a spinning HDD&lt;/li&gt;
&lt;li&gt;integrated Radeon R6 graphics&lt;/li&gt;
&lt;li&gt;limited RAM&lt;/li&gt;
&lt;li&gt;multiple worker processes&lt;/li&gt;
&lt;li&gt;Playwright automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is exactly the kind of setup where browser rendering starts acting cursed under load.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux Makes Browser Automation More Honest
&lt;/h2&gt;

&lt;p&gt;Linux is great because it exposes every hidden assumption your workflow was making.&lt;/p&gt;

&lt;p&gt;A browser launched manually from your terminal is not living the same life as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a headless browser&lt;/li&gt;
&lt;li&gt;a system service&lt;/li&gt;
&lt;li&gt;a scheduled worker&lt;/li&gt;
&lt;li&gt;an unattended automation process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I started debugging seriously, I ended up deep in the usual Playwright rabbit hole:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;tracing&lt;/li&gt;
&lt;li&gt;Chromium launch flags&lt;/li&gt;
&lt;li&gt;disabling GPU paths&lt;/li&gt;
&lt;li&gt;sandbox weirdness&lt;/li&gt;
&lt;li&gt;comparing headless vs headed runs&lt;/li&gt;
&lt;li&gt;logging everything to Telegram because the local logs were not helpful enough&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the flags that helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ended up mattering more than I wanted it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Machine Had Vibes
&lt;/h2&gt;

&lt;p&gt;Every self-hosted setup eventually develops a personality.&lt;/p&gt;

&lt;p&gt;This one had raccoon energy.&lt;/p&gt;

&lt;p&gt;It worked just well enough to encourage confidence right before doing something deeply suspicious.&lt;/p&gt;

&lt;p&gt;Firefox? Fine.&lt;/p&gt;

&lt;p&gt;Chromium?&lt;br&gt;
Flickering like a cursed artifact from a forgotten Best Buy clearance aisle.&lt;/p&gt;

&lt;p&gt;At some point I stopped treating the server like infrastructure and started treating it like a slightly unstable coworker that needed supervision and good logging.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Improved Reliability
&lt;/h2&gt;

&lt;p&gt;The biggest improvement was honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;moving more automation to headless mode&lt;/li&gt;
&lt;li&gt;improving logging&lt;/li&gt;
&lt;li&gt;adding Telegram notifications&lt;/li&gt;
&lt;li&gt;testing under actual production conditions instead of “works while I’m watching it”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one matters.&lt;/p&gt;

&lt;p&gt;Because “works on my machine” means almost nothing in browser automation when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the hardware changes&lt;/li&gt;
&lt;li&gt;the rendering path changes&lt;/li&gt;
&lt;li&gt;the browser mode changes&lt;/li&gt;
&lt;li&gt;the workload changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Browser automation is part application logic and part environmental superstition.&lt;/p&gt;

&lt;p&gt;Old hardware amplifies that reality fast.&lt;/p&gt;
&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;p&gt;A few things I would absolutely do again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep a visible debug mode available&lt;/li&gt;
&lt;li&gt;capture screenshots aggressively&lt;/li&gt;
&lt;li&gt;log browser launch args&lt;/li&gt;
&lt;li&gt;test under the exact conditions production uses&lt;/li&gt;
&lt;li&gt;assume old hardware will surface weird rendering bugs earlier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a few things I learned the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;headed success does not prove headless reliability&lt;/li&gt;
&lt;li&gt;Chromium on aging Linux hardware gets weird fast&lt;/li&gt;
&lt;li&gt;rebooting is not a debugging strategy&lt;/li&gt;
&lt;li&gt;self-hosted automation needs observability way more than optimism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still like the setup.&lt;/p&gt;

&lt;p&gt;Repurposing old hardware into useful infrastructure is genuinely fun.&lt;/p&gt;

&lt;p&gt;But browser automation was the thing that forced honesty into the system.&lt;/p&gt;

&lt;p&gt;The stack looked stable right up until Chromium had to behave unattended on a 10-year-old Linux laptop with a mechanical hard drive and trust issues.&lt;/p&gt;

&lt;p&gt;That’s when the project stopped being a fun experiment and started becoming engineering.&lt;/p&gt;
&lt;h1&gt;
  
  
  The Bug Only Existed When Nobody Was Watching
&lt;/h1&gt;

&lt;p&gt;There is a special kind of insult that only browser automation can deliver.&lt;/p&gt;

&lt;p&gt;You build a Playwright workflow.&lt;br&gt;
You test it manually.&lt;br&gt;
You watch the browser open, click, type, submit, navigate, succeed.&lt;/p&gt;

&lt;p&gt;Everything looks solid.&lt;/p&gt;

&lt;p&gt;Then you run the exact same flow in production, headless, unattended, on the actual worker machine, and it falls apart like it has never seen a DOM before.&lt;/p&gt;

&lt;p&gt;That was the bug.&lt;/p&gt;

&lt;p&gt;It only existed when nobody was watching.&lt;/p&gt;

&lt;p&gt;And yes, that is an incredibly annoying genre of engineering problem.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;This lived inside a self-hosted content automation stack running on an old HP laptop I repurposed into a Linux worker box for PostPunk.&lt;/p&gt;

&lt;p&gt;The stack was basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Playwright posting workers&lt;/li&gt;
&lt;li&gt;browser automation for publishing flows&lt;/li&gt;
&lt;li&gt;scheduled background jobs&lt;/li&gt;
&lt;li&gt;queue-driven content automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The machine itself was already operating mostly on vibes.&lt;/p&gt;

&lt;p&gt;It had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;a mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated Radeon graphics&lt;/li&gt;
&lt;li&gt;the general aura of a haunted library computer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The kind of laptop where opening Chrome was basically rolling percentile dice against the gods of thermal management.&lt;/p&gt;

&lt;p&gt;I had already memorized Alt + PrintScreen + REISUB because eventually this machine was going to need emotional support.&lt;/p&gt;

&lt;p&gt;Naturally, I decided this was suitable production infrastructure.&lt;/p&gt;

&lt;p&gt;Because apparently I enjoy problems with texture.&lt;/p&gt;
&lt;h2&gt;
  
  
  The First Real Sign Something Was Wrong
&lt;/h2&gt;

&lt;p&gt;At first I thought the automation itself was flaky.&lt;/p&gt;

&lt;p&gt;Maybe a selector issue.&lt;br&gt;
Maybe timing.&lt;br&gt;
Maybe Playwright weirdness.&lt;/p&gt;

&lt;p&gt;Then one night around 3 AM, while manually logging back into one of the platforms, Chromium itself started pixelating.&lt;/p&gt;

&lt;p&gt;The screen partially froze.&lt;br&gt;
The UI glitched out.&lt;br&gt;
Everything briefly distorted.&lt;br&gt;
Linux made that horrible little ringing system noise like the machine was actively negotiating with death.&lt;/p&gt;

&lt;p&gt;I stopped touching the mouse for a few seconds and eventually the system recovered.&lt;/p&gt;

&lt;p&gt;Firefox mostly behaved normally.&lt;/p&gt;

&lt;p&gt;Chrome behaved like the laptop was trying to reject it biologically.&lt;/p&gt;

&lt;p&gt;That was the moment I realized this was no longer just an automation problem.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Lie: “It Works Fine”
&lt;/h2&gt;

&lt;p&gt;While visually testing the automation, everything looked perfect.&lt;/p&gt;

&lt;p&gt;Headed Chromium launched.&lt;br&gt;
The page loaded.&lt;br&gt;
Selectors resolved.&lt;br&gt;
Buttons clicked.&lt;br&gt;
Posts published.&lt;/p&gt;

&lt;p&gt;Pinterest worked.&lt;br&gt;
Facebook worked.&lt;br&gt;
Dev.to worked.&lt;/p&gt;

&lt;p&gt;If you watched the browser run manually, you would absolutely think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool. This is production-ready.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the trap.&lt;/p&gt;

&lt;p&gt;Because the moment I switched the same workflows into unattended headless production mode, things became cursed.&lt;/p&gt;

&lt;p&gt;Suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selectors timed out&lt;/li&gt;
&lt;li&gt;pages rendered differently&lt;/li&gt;
&lt;li&gt;interactions fired but did not land&lt;/li&gt;
&lt;li&gt;uploads silently failed&lt;/li&gt;
&lt;li&gt;waits became inconsistent&lt;/li&gt;
&lt;li&gt;browser state got flaky&lt;/li&gt;
&lt;li&gt;random inputs were skipped entirely&lt;/li&gt;
&lt;li&gt;jobs hung forever for no obvious reason&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The automation would sometimes just stop mid-flow like Chromium had emotionally checked out.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headed and Headless Chromium Are Not the Same Thing
&lt;/h2&gt;

&lt;p&gt;People describe headless Chrome like it is just:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Chrome without the window.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a comforting lie for people who have not suffered enough yet.&lt;/p&gt;

&lt;p&gt;Headed and headless Chromium differ in ways that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering paths&lt;/li&gt;
&lt;li&gt;GPU behavior&lt;/li&gt;
&lt;li&gt;compositor timing&lt;/li&gt;
&lt;li&gt;focus handling&lt;/li&gt;
&lt;li&gt;viewport defaults&lt;/li&gt;
&lt;li&gt;performance under load&lt;/li&gt;
&lt;li&gt;environmental dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a modern machine, those differences are annoying.&lt;/p&gt;

&lt;p&gt;On old Linux hardware, they become plot-relevant.&lt;/p&gt;

&lt;p&gt;In headed mode, the visible browser was accidentally helping me.&lt;/p&gt;

&lt;p&gt;Rendering slowed things down just enough that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;animations finished&lt;/li&gt;
&lt;li&gt;panels stabilized&lt;/li&gt;
&lt;li&gt;listeners attached properly&lt;/li&gt;
&lt;li&gt;React stopped rearranging the DOM&lt;/li&gt;
&lt;li&gt;uploads completed before clicks fired&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then headless mode removed all that accidental timing padding.&lt;/p&gt;

&lt;p&gt;Suddenly the automation was operating at full machine speed against an unstable environment.&lt;/p&gt;

&lt;p&gt;That is where reality started.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Machine Had Chrome-Specific Hatred
&lt;/h2&gt;

&lt;p&gt;The weirdest part is that Firefox mostly behaved fine.&lt;/p&gt;

&lt;p&gt;Chrome specifically was the problem child.&lt;/p&gt;

&lt;p&gt;Even opening normal Chrome windows on this machine felt risky.&lt;/p&gt;

&lt;p&gt;There was basically a 50/50 chance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;things would work normally&lt;/li&gt;
&lt;li&gt;the UI would partially freeze&lt;/li&gt;
&lt;li&gt;rendering would glitch&lt;/li&gt;
&lt;li&gt;the system would briefly pixelate&lt;/li&gt;
&lt;li&gt;the browser would become unstable under load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still do not fully understand why.&lt;/p&gt;

&lt;p&gt;Maybe Chromium was hitting GPU paths the laptop hated.&lt;br&gt;
Maybe Linux and Chrome were fighting somewhere deep in the graphics stack.&lt;br&gt;
Maybe the machine itself was simply old and tired.&lt;/p&gt;

&lt;p&gt;I genuinely do not know.&lt;/p&gt;

&lt;p&gt;At some point debugging old Linux hardware stops being science and becomes folklore.&lt;/p&gt;
&lt;h2&gt;
  
  
  Timing Bugs Are Worse in Automation
&lt;/h2&gt;

&lt;p&gt;One of the hardest lessons with browser automation is this:&lt;/p&gt;

&lt;p&gt;Watching something work manually proves almost nothing.&lt;/p&gt;

&lt;p&gt;Manual observation accidentally hides instability.&lt;/p&gt;

&lt;p&gt;Humans naturally slow workflows down.&lt;br&gt;
Visible rendering introduces delays.&lt;br&gt;
The environment stabilizes itself while you are watching.&lt;/p&gt;

&lt;p&gt;Production workers do not care about your vibes.&lt;/p&gt;

&lt;p&gt;Headless Playwright runs at machine speed.&lt;/p&gt;

&lt;p&gt;So this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[data-testid="publish-button"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;suddenly becomes dangerous because the UI might:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exist visually but not functionally&lt;/li&gt;
&lt;li&gt;still be animating&lt;/li&gt;
&lt;li&gt;still be hydrating&lt;/li&gt;
&lt;li&gt;still be attaching listeners&lt;/li&gt;
&lt;li&gt;still be processing uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bug was not random.&lt;/p&gt;

&lt;p&gt;The bug was exposing assumptions I did not realize I had made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Browser Automation Is Its Own Genre of Suffering
&lt;/h2&gt;

&lt;p&gt;Linux browser automation always includes at least one phase of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Which dependency is ruining my life this time?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eventually I ended up deep in the usual Playwright rabbit hole:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;tracing&lt;/li&gt;
&lt;li&gt;Chromium launch flags&lt;/li&gt;
&lt;li&gt;sandbox weirdness&lt;/li&gt;
&lt;li&gt;GPU disabling&lt;/li&gt;
&lt;li&gt;headless comparisons&lt;/li&gt;
&lt;li&gt;HTML snapshots&lt;/li&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;aggressive logging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some flags that genuinely helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-background-timer-throttling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-renderer-backgrounding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ended up mattering way more than I wanted it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Observability Strategy Became “Listen For The Fan”
&lt;/h2&gt;

&lt;p&gt;Before headless mode, I barely cared about my Telegram notifications because I could physically watch the automation run on the screen.&lt;/p&gt;

&lt;p&gt;Once everything moved headless, the notifications suddenly became the only proof the system was still alive.&lt;/p&gt;

&lt;p&gt;At some points, my entire monitoring setup was basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;log files&lt;/li&gt;
&lt;li&gt;listening for the laptop fan spinning up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I heard the fan kick on, I knew the workers were probably doing something.&lt;/p&gt;

&lt;p&gt;Which is not exactly enterprise observability engineering.&lt;/p&gt;

&lt;p&gt;Most of this debugging happened around 3 AM while sitting directly in front of the machine like some kind of browser automation goblin waiting to see whether Chromium would survive the night.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Linux Thing I Did
&lt;/h2&gt;

&lt;p&gt;At one point I started deleting Chrome-related Linux components trying to “clean up” the environment.&lt;/p&gt;

&lt;p&gt;I removed things I absolutely should not have removed.&lt;/p&gt;

&lt;p&gt;X11 desktop pieces.&lt;br&gt;
Chrome shell integrations.&lt;br&gt;
Random Chromium-related packages I barely understood.&lt;/p&gt;

&lt;p&gt;Eventually I broke the setup badly enough that I had to reinstall parts of it.&lt;/p&gt;

&lt;p&gt;And somehow?&lt;/p&gt;

&lt;p&gt;That actually improved stability afterward.&lt;/p&gt;

&lt;p&gt;Which is the most Linux sentence I have written in a while.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;The final “fix” was not one fix.&lt;/p&gt;

&lt;p&gt;It was a pile of smaller operational improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;moving workers fully headless&lt;/li&gt;
&lt;li&gt;improving logging&lt;/li&gt;
&lt;li&gt;relying on Telegram notifications&lt;/li&gt;
&lt;li&gt;adding screenshots on failure&lt;/li&gt;
&lt;li&gt;testing under actual production conditions&lt;/li&gt;
&lt;li&gt;waiting on UI state instead of luck&lt;/li&gt;
&lt;li&gt;reducing rendering overhead&lt;/li&gt;
&lt;li&gt;reinstalling the Chrome components I accidentally destroyed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest shift was psychological.&lt;/p&gt;

&lt;p&gt;I stopped treating:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“it worked once”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;as evidence of reliability.&lt;/p&gt;

&lt;p&gt;Because reliability is not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“worked on my machine”&lt;/li&gt;
&lt;li&gt;“worked while visible”&lt;/li&gt;
&lt;li&gt;“worked during testing”&lt;/li&gt;
&lt;li&gt;“worked three times in a row”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reliability means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unattended&lt;/li&gt;
&lt;li&gt;repeatable&lt;/li&gt;
&lt;li&gt;observable&lt;/li&gt;
&lt;li&gt;stable under load&lt;/li&gt;
&lt;li&gt;stable overnight&lt;/li&gt;
&lt;li&gt;stable when nobody is babysitting Chromium personally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is an entirely different standard.&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I still like this setup.&lt;/p&gt;

&lt;p&gt;Repurposing old hardware into useful infrastructure is genuinely fun.&lt;/p&gt;

&lt;p&gt;There is something satisfying about turning a neglected old laptop into a working automation server instead of throwing it away.&lt;/p&gt;

&lt;p&gt;But browser automation forces honesty into your system very quickly.&lt;/p&gt;

&lt;p&gt;The stack looked stable right up until Chromium had to behave unattended on a 10-year-old Linux laptop with trust issues and a mechanical hard drive.&lt;/p&gt;

&lt;p&gt;Eventually the workers became stable enough that I stopped staring directly at them while jobs ran.&lt;/p&gt;

&lt;p&gt;Honestly, that was probably the real milestone.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The script finally worked.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I no longer felt emotionally required to supervise Chromium personally.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;
  
  
  Running Playwright + Headless Chrome on Old Hardware Is Less “Automation” and More “Systems Archaeology”
&lt;/h1&gt;

&lt;p&gt;There is a very specific type of developer optimism that makes you look at a dying 2015 HP laptop and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yeah, this should absolutely run production browser automation.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This machine had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;a mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated Radeon graphics&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;li&gt;trust issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had already memorized Alt + PrintScreen + REISUB because eventually this machine was going to require spiritual intervention.&lt;/p&gt;

&lt;p&gt;Naturally, I turned it into a self-hosted automation server running Playwright workers for PostPunk.&lt;/p&gt;

&lt;p&gt;Because apparently I enjoy creating problems recreationally.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Basic Fantasy
&lt;/h2&gt;

&lt;p&gt;The fantasy sounds reasonable enough.&lt;/p&gt;

&lt;p&gt;Take an old laptop.&lt;br&gt;
Install Linux.&lt;br&gt;
Run some worker processes.&lt;br&gt;
Use Playwright for browser automation.&lt;br&gt;
Queue content posts automatically.&lt;br&gt;
Stop manually posting to platforms one miserable click at a time.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That last part mattered the most.&lt;/p&gt;

&lt;p&gt;I’m stubborn, cheap, and deeply allergic to manually posting content platform-by-platform forever.&lt;/p&gt;

&lt;p&gt;Which is basically the entire psychological profile required to build self-hosted automation systems.&lt;/p&gt;

&lt;p&gt;At some point this stopped being:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“a fun Linux experiment”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the engine for how I actually want to work.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That meant the machine suddenly mattered.&lt;/p&gt;

&lt;p&gt;And unfortunately, so did Chrome.&lt;/p&gt;
&lt;h2&gt;
  
  
  Everything Was Fine Until Chromium Entered The Story
&lt;/h2&gt;

&lt;p&gt;The Linux side was mostly solid.&lt;/p&gt;

&lt;p&gt;Workers behaved.&lt;br&gt;
Scheduling behaved.&lt;br&gt;
Queue processing behaved.&lt;br&gt;
Notifications behaved.&lt;/p&gt;

&lt;p&gt;Then Chromium showed up and started acting like the laptop was trying to process emotional trauma in real time.&lt;/p&gt;

&lt;p&gt;At first the failures looked random:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selectors timing out&lt;/li&gt;
&lt;li&gt;uploads silently failing&lt;/li&gt;
&lt;li&gt;clicks not landing&lt;/li&gt;
&lt;li&gt;pages freezing&lt;/li&gt;
&lt;li&gt;workers hanging forever&lt;/li&gt;
&lt;li&gt;random skipped inputs&lt;/li&gt;
&lt;li&gt;inconsistent rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The worst part?&lt;/p&gt;

&lt;p&gt;The automation usually worked while I was watching it.&lt;/p&gt;

&lt;p&gt;Pinterest posted correctly.&lt;br&gt;
Facebook posted correctly.&lt;br&gt;
Dev.to posted correctly.&lt;/p&gt;

&lt;p&gt;So naturally I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool. Stable.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was a lie.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Moment I Realized This Wasn’t Just A Script Problem
&lt;/h2&gt;

&lt;p&gt;One night around 3 AM, while manually logging back into one of the platforms, Chromium itself started pixelating.&lt;/p&gt;

&lt;p&gt;The screen partially froze.&lt;br&gt;
The UI glitched out.&lt;br&gt;
The machine made that horrible little Linux system ringing noise like everything inside the laptop had briefly entered a panic attack.&lt;/p&gt;

&lt;p&gt;I stopped moving the mouse.&lt;br&gt;
Waited a few seconds.&lt;br&gt;
The machine recovered.&lt;/p&gt;

&lt;p&gt;Firefox mostly behaved normally.&lt;/p&gt;

&lt;p&gt;Chrome behaved like the unstable roommate Linux was too polite to evict.&lt;/p&gt;

&lt;p&gt;That was the moment I realized:&lt;br&gt;
this was no longer just a Playwright problem.&lt;/p&gt;

&lt;p&gt;Something deeper was happening.&lt;/p&gt;
&lt;h2&gt;
  
  
  Old Hardware Changes Failure Modes
&lt;/h2&gt;

&lt;p&gt;A lot of browser automation advice accidentally assumes healthy hardware.&lt;/p&gt;

&lt;p&gt;People say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Playwright works great.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I believe them.&lt;/p&gt;

&lt;p&gt;But there is usually an invisible footnote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“on hardware that is not actively fighting for its life.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Old hardware changes the nature of failures.&lt;/p&gt;

&lt;p&gt;On modern systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bad waits&lt;/li&gt;
&lt;li&gt;selectors&lt;/li&gt;
&lt;li&gt;auth issues&lt;/li&gt;
&lt;li&gt;flaky timing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On old systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU weirdness&lt;/li&gt;
&lt;li&gt;rendering instability&lt;/li&gt;
&lt;li&gt;browser freezes&lt;/li&gt;
&lt;li&gt;memory pressure&lt;/li&gt;
&lt;li&gt;disk latency&lt;/li&gt;
&lt;li&gt;thermal throttling&lt;/li&gt;
&lt;li&gt;random Chrome existential crises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point the machine stopped feeling “slow” and started feeling medically concerning.&lt;/p&gt;

&lt;p&gt;The fans would suddenly kick on like the laptop had just seen a tax audit.&lt;/p&gt;

&lt;p&gt;Opening Chrome on this thing felt less like launching software and more like asking an elderly wizard for one final favor.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headless Chrome Is Not Lightweight. It Is Just Invisible
&lt;/h2&gt;

&lt;p&gt;People hear “headless browser” and imagine some tiny efficient automation process.&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Headless Chromium still wants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;rendering resources&lt;/li&gt;
&lt;li&gt;shared memory&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;graphics support&lt;/li&gt;
&lt;li&gt;enough system stability to not implode under load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when resources get tight, the browser does not always fail cleanly.&lt;/p&gt;

&lt;p&gt;Sometimes it just becomes weird.&lt;/p&gt;

&lt;p&gt;Which is worse.&lt;/p&gt;

&lt;p&gt;The browser would get 95% through a workflow and then suddenly remember it was running on archaeology.&lt;/p&gt;

&lt;p&gt;That’s the dangerous middle ground:&lt;br&gt;
not broken enough to diagnose instantly,&lt;br&gt;
not stable enough to trust.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headed And Headless Chromium Are Basically Different Species
&lt;/h2&gt;

&lt;p&gt;This ended up being the biggest lesson.&lt;/p&gt;

&lt;p&gt;The workflows behaved differently depending on whether I could physically see the browser.&lt;/p&gt;

&lt;p&gt;That sounds fake until you experience it yourself.&lt;/p&gt;

&lt;p&gt;In headed mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering slowed things down&lt;/li&gt;
&lt;li&gt;animations had time to finish&lt;/li&gt;
&lt;li&gt;uploads stabilized&lt;/li&gt;
&lt;li&gt;UI transitions completed&lt;/li&gt;
&lt;li&gt;the environment accidentally synchronized itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Headless mode removed all that padding.&lt;/p&gt;

&lt;p&gt;Suddenly the automation was running at full machine speed against a browser environment held together with aging hardware and optimism.&lt;/p&gt;

&lt;p&gt;That’s when the race conditions showed up.&lt;/p&gt;

&lt;p&gt;This:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[data-testid="publish-button"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;turns out to mean absolutely nothing if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is still hydrating&lt;/li&gt;
&lt;li&gt;uploads are incomplete&lt;/li&gt;
&lt;li&gt;event listeners are not attached yet&lt;/li&gt;
&lt;li&gt;the UI exists visually but not functionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watching successful automation manually proves almost nothing.&lt;/p&gt;

&lt;p&gt;Production workers do not care about your vibes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Browser Automation Slowly Becomes Folklore
&lt;/h2&gt;

&lt;p&gt;At some point my debugging strategy stopped being engineering and became ritualistic behavior.&lt;/p&gt;

&lt;p&gt;I started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reinstalling packages I barely understood&lt;/li&gt;
&lt;li&gt;randomly deleting Chrome-related components&lt;/li&gt;
&lt;li&gt;tweaking launch flags endlessly&lt;/li&gt;
&lt;li&gt;waiting before clicks&lt;/li&gt;
&lt;li&gt;comparing screenshots&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;li&gt;praying to God a little bit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At one point I removed enough Chrome/X11-related stuff that the machine started pixelating outside the browser too.&lt;/p&gt;

&lt;p&gt;That was probably the strongest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“hardware may actually be dying”&lt;br&gt;
moment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironically, reinstalling the things I broke actually improved stability afterward.&lt;/p&gt;

&lt;p&gt;Which is the most Linux outcome possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPU Weirdness Is Real
&lt;/h2&gt;

&lt;p&gt;Firefox mostly behaved fine on this machine.&lt;/p&gt;

&lt;p&gt;Chrome specifically was chaos.&lt;/p&gt;

&lt;p&gt;Even normal Chrome windows were basically a 50/50 gamble:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maybe fine&lt;/li&gt;
&lt;li&gt;maybe flickering&lt;/li&gt;
&lt;li&gt;maybe partially freezing&lt;/li&gt;
&lt;li&gt;maybe pixelating&lt;/li&gt;
&lt;li&gt;maybe emotionally collapsing halfway through rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still do not fully understand why.&lt;/p&gt;

&lt;p&gt;Maybe Chromium was hitting rendering paths the machine hated.&lt;br&gt;
Maybe Linux and Chrome were fighting deep in the graphics stack.&lt;br&gt;
Maybe the laptop itself was just old and tired.&lt;/p&gt;

&lt;p&gt;At some point debugging old Linux hardware stops being science and becomes folklore.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;Not one thing.&lt;br&gt;
Several things.&lt;/p&gt;

&lt;p&gt;Moving more flows to headless mode helped because visible Chrome rendering was apparently making the machine more unstable.&lt;/p&gt;

&lt;p&gt;Proper waits helped a lot.&lt;/p&gt;

&lt;p&gt;I learned very quickly that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;waits matter more than confidence&lt;/li&gt;
&lt;li&gt;“loaded” does not mean “ready”&lt;/li&gt;
&lt;li&gt;visible UI does not mean interactable UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some flags that genuinely helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-background-timer-throttling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-renderer-backgrounding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ended up mattering far more than I wanted it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Observability Strategy Became “Listen For The Fan”
&lt;/h2&gt;

&lt;p&gt;Before headless mode, I barely paid attention to my Telegram notifications because I could physically see the automation running.&lt;/p&gt;

&lt;p&gt;Once everything moved headless, the notifications became the only reliable proof the workers were alive.&lt;/p&gt;

&lt;p&gt;At one point my monitoring stack was basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;log files&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I heard the fan suddenly spin up, I knew the workers were probably doing something.&lt;/p&gt;

&lt;p&gt;Which is not exactly enterprise observability engineering.&lt;/p&gt;

&lt;p&gt;Most of this debugging happened around 3 AM while sitting directly in front of the machine like some kind of browser automation goblin trying to convince Chromium not to explode overnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability Is A Much Higher Standard Than “It Worked Once”
&lt;/h2&gt;

&lt;p&gt;This was the real lesson.&lt;/p&gt;

&lt;p&gt;A successful run does not prove reliability.&lt;/p&gt;

&lt;p&gt;It proves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one run succeeded under one set of conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s all.&lt;/p&gt;

&lt;p&gt;Reliable automation means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unattended&lt;/li&gt;
&lt;li&gt;repeatable&lt;/li&gt;
&lt;li&gt;observable&lt;/li&gt;
&lt;li&gt;stable under load&lt;/li&gt;
&lt;li&gt;stable overnight&lt;/li&gt;
&lt;li&gt;stable when nobody is staring directly at Chromium like a nervous zookeeper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a completely different standard.&lt;/p&gt;

&lt;p&gt;Eventually the workers became stable enough that I stopped compulsively checking them every few minutes.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That was probably the real milestone.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the scripts worked.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I no longer felt emotionally required to supervise Chrome personally.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Chrome Was The Unstable Roommate In My Linux Automation Stack
&lt;/h1&gt;

&lt;p&gt;I honestly thought the script was broken at first.&lt;/p&gt;

&lt;p&gt;That’s the embarrassing part.&lt;/p&gt;

&lt;p&gt;I thought maybe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;my selectors were wrong&lt;/li&gt;
&lt;li&gt;Playwright was clicking too early&lt;/li&gt;
&lt;li&gt;Pinterest changed something again&lt;/li&gt;
&lt;li&gt;Facebook loaded weird&lt;/li&gt;
&lt;li&gt;Dev.to timing shifted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Normal automation stuff.&lt;/p&gt;

&lt;p&gt;Then Chrome itself started pixelating.&lt;/p&gt;

&lt;p&gt;And that’s when I got the very specific gut-drop feeling of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Oh no. This is a REAL problem.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Machine
&lt;/h2&gt;

&lt;p&gt;This entire setup lived on an old HP laptop I turned into a Linux worker box for PostPunk.&lt;/p&gt;

&lt;p&gt;Which sounds fun and experimental until the machine becomes responsible for your actual workflow.&lt;/p&gt;

&lt;p&gt;The specs were basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated Radeon graphics&lt;/li&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;li&gt;suffering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The kind of machine where opening Chromium felt less like launching software and more like asking an elderly wizard for one final favor.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;I loved the setup anyway.&lt;/p&gt;

&lt;p&gt;Because I like building things.&lt;/p&gt;

&lt;p&gt;That’s what I do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Even Built This
&lt;/h2&gt;

&lt;p&gt;I hate manually posting content one platform at a time.&lt;/p&gt;

&lt;p&gt;Absolutely hate it.&lt;/p&gt;

&lt;p&gt;If I write something, I want it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;queue&lt;/li&gt;
&lt;li&gt;schedule&lt;/li&gt;
&lt;li&gt;publish&lt;/li&gt;
&lt;li&gt;move on with life&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not want to spend every morning manually reposting things across half the internet like a social media intern trapped in a Groundhog Day loop.&lt;/p&gt;

&lt;p&gt;So I built PostPunk.&lt;/p&gt;

&lt;p&gt;Not because I wanted “startup founder energy.”&lt;/p&gt;

&lt;p&gt;Because I literally needed infrastructure.&lt;/p&gt;

&lt;p&gt;I can’t afford a marketing team.&lt;/p&gt;

&lt;p&gt;So if I want my work to consistently exist online, I have to build the system myself.&lt;/p&gt;

&lt;p&gt;That’s the reality.&lt;/p&gt;

&lt;p&gt;The writing.&lt;br&gt;
The scheduling.&lt;br&gt;
The posting.&lt;br&gt;
The visibility.&lt;/p&gt;

&lt;p&gt;All of it depended on this weird old Linux laptop not emotionally collapsing during browser automation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Everything Worked While I Was Watching It
&lt;/h2&gt;

&lt;p&gt;That was the trap.&lt;/p&gt;

&lt;p&gt;When I manually tested the workers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pinterest posted&lt;/li&gt;
&lt;li&gt;Facebook posted&lt;/li&gt;
&lt;li&gt;Dev.to posted&lt;/li&gt;
&lt;li&gt;selectors worked&lt;/li&gt;
&lt;li&gt;uploads worked&lt;/li&gt;
&lt;li&gt;clicks landed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything looked stable.&lt;/p&gt;

&lt;p&gt;Then I would let the workers run unattended and suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;uploads stalled&lt;/li&gt;
&lt;li&gt;inputs got skipped&lt;/li&gt;
&lt;li&gt;pages froze&lt;/li&gt;
&lt;li&gt;rendering glitched&lt;/li&gt;
&lt;li&gt;jobs hung forever&lt;/li&gt;
&lt;li&gt;Chrome started acting possessed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The worst bugs were the inconsistent ones.&lt;/p&gt;

&lt;p&gt;Those are the bugs that make you question your sanity because they fail &lt;em&gt;just rarely enough&lt;/em&gt; to feel random.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Fan Noise Became A Warning Sign
&lt;/h2&gt;

&lt;p&gt;Eventually I started recognizing failure patterns from the machine itself.&lt;/p&gt;

&lt;p&gt;Not logs.&lt;br&gt;
Not stack traces.&lt;/p&gt;

&lt;p&gt;The actual hardware.&lt;/p&gt;

&lt;p&gt;If Chrome started flickering during login, whatever workflow I was running was probably doomed.&lt;/p&gt;

&lt;p&gt;Sometimes the screen would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;partially freeze&lt;/li&gt;
&lt;li&gt;pixelate&lt;/li&gt;
&lt;li&gt;glitch out briefly&lt;/li&gt;
&lt;li&gt;make that horrible little Linux system ringing noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then recover if I stopped touching anything for a few seconds.&lt;/p&gt;

&lt;p&gt;At some point my operational monitoring strategy became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“if the fan suddenly screams at 2 AM, something is probably wrong.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is not exactly enterprise-grade observability engineering.&lt;/p&gt;
&lt;h2&gt;
  
  
  Chrome Specifically Hated This Machine
&lt;/h2&gt;

&lt;p&gt;Firefox mostly behaved fine.&lt;/p&gt;

&lt;p&gt;Chrome was chaos.&lt;/p&gt;

&lt;p&gt;Even opening normal Chrome windows was basically gambling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maybe fine&lt;/li&gt;
&lt;li&gt;maybe frozen&lt;/li&gt;
&lt;li&gt;maybe flickering&lt;/li&gt;
&lt;li&gt;maybe halfway into a rendering crisis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still do not fully understand why.&lt;/p&gt;

&lt;p&gt;Maybe GPU weirdness.&lt;br&gt;
Maybe Linux graphics stack nonsense.&lt;br&gt;
Maybe Chromium was hitting rendering paths the laptop hated.&lt;/p&gt;

&lt;p&gt;I genuinely don’t know.&lt;/p&gt;

&lt;p&gt;At some point Linux troubleshooting stops being engineering and becomes folklore.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headless And Headed Browsers Are Different In Ways That Matter
&lt;/h2&gt;

&lt;p&gt;This was the biggest lesson.&lt;/p&gt;

&lt;p&gt;The workflows behaved differently depending on whether I could physically SEE the browser.&lt;/p&gt;

&lt;p&gt;That sounds fake until you experience it.&lt;/p&gt;

&lt;p&gt;Headed mode accidentally slowed everything down enough to stabilize parts of the UI.&lt;/p&gt;

&lt;p&gt;Headless mode removed that safety padding.&lt;/p&gt;

&lt;p&gt;Suddenly Playwright was operating at full speed against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flaky rendering&lt;/li&gt;
&lt;li&gt;unstable browser state&lt;/li&gt;
&lt;li&gt;old hardware&lt;/li&gt;
&lt;li&gt;race conditions&lt;/li&gt;
&lt;li&gt;half-finished uploads&lt;/li&gt;
&lt;li&gt;incomplete UI hydration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This innocent-looking line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[data-testid="publish-button"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;turned out to mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I hope the UI actually exists yet.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which are two very different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Linux Thing I Did
&lt;/h2&gt;

&lt;p&gt;At one point I started randomly deleting Chrome-related Linux components trying to “clean up” the environment.&lt;/p&gt;

&lt;p&gt;I removed things I absolutely did not understand.&lt;/p&gt;

&lt;p&gt;X11 stuff.&lt;br&gt;
Chrome shell integrations.&lt;br&gt;
Random Chromium packages.&lt;/p&gt;

&lt;p&gt;Eventually the entire machine started pixelating outside the browser too.&lt;/p&gt;

&lt;p&gt;That was probably the strongest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“hardware may actually be dying”&lt;br&gt;
moment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironically, reinstalling the things I broke actually improved stability afterward.&lt;/p&gt;

&lt;p&gt;Which feels spiritually correct for Linux somehow.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;The fixes were less glamorous than I wanted.&lt;/p&gt;

&lt;p&gt;Mostly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;proper waits&lt;/li&gt;
&lt;li&gt;more logging&lt;/li&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;headless mode&lt;/li&gt;
&lt;li&gt;disabling GPU paths&lt;/li&gt;
&lt;li&gt;reinstalling dependencies&lt;/li&gt;
&lt;li&gt;accepting that “works once” means nothing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These flags helped a lot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;actually mattered.&lt;/p&gt;

&lt;p&gt;Unfortunately.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Was Never Really About Chrome
&lt;/h2&gt;

&lt;p&gt;The reason I kept fixing it instead of quitting was simple:&lt;/p&gt;

&lt;p&gt;I wanted it to work.&lt;/p&gt;

&lt;p&gt;Because this machine became the engine behind everything else.&lt;/p&gt;

&lt;p&gt;The Pinterest traffic.&lt;br&gt;
The writing.&lt;br&gt;
The visibility.&lt;br&gt;
The projects.&lt;/p&gt;

&lt;p&gt;At one point I dropped from around 5k Pinterest followers to around 4.5k during all the automation hiccups.&lt;/p&gt;

&lt;p&gt;That stuff matters when you are trying to build things online consistently by yourself.&lt;/p&gt;

&lt;p&gt;I’m a builder.&lt;br&gt;
An inventor.&lt;br&gt;
A writer.&lt;/p&gt;

&lt;p&gt;And if I want people to actually SEE the things I make, then I also have to become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;infrastructure engineer&lt;/li&gt;
&lt;li&gt;automation goblin&lt;/li&gt;
&lt;li&gt;sysadmin&lt;/li&gt;
&lt;li&gt;marketing department&lt;/li&gt;
&lt;li&gt;overnight Chrome therapist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s just the reality now.&lt;/p&gt;

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

&lt;p&gt;I think the funniest part is that the system eventually became stable enough that I stopped obsessively checking it every few minutes.&lt;/p&gt;

&lt;p&gt;Honestly, that was probably the real milestone.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the automation worked.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I no longer felt emotionally responsible for supervising Chromium personally.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that’s probably the closest thing browser automation ever gives you to peace.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>playwright</category>
      <category>automation</category>
    </item>
    <item>
      <title>I Started Automating Content and Discovered I Had No Idea What People Wanted</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 07 Jul 2026 03:41:04 +0000</pubDate>
      <link>https://dev.to/ashb4/i-started-automating-content-and-discovered-i-had-no-idea-what-people-wanted-1n24</link>
      <guid>https://dev.to/ashb4/i-started-automating-content-and-discovered-i-had-no-idea-what-people-wanted-1n24</guid>
      <description>&lt;h1&gt;
  
  
  I Started Automating Content and Discovered I Had No Idea What People Wanted
&lt;/h1&gt;

&lt;p&gt;I originally thought I was building a scheduler.&lt;/p&gt;

&lt;p&gt;I wasn't.&lt;/p&gt;

&lt;p&gt;I just didn't know it yet.&lt;/p&gt;

&lt;p&gt;Like a lot of developers, I have more ideas than time.&lt;/p&gt;

&lt;p&gt;Coloring books.&lt;/p&gt;

&lt;p&gt;Digital products.&lt;/p&gt;

&lt;p&gt;Experiments.&lt;/p&gt;

&lt;p&gt;Tools.&lt;/p&gt;

&lt;p&gt;Projects that seemed brilliant at 2 AM and questionable by lunchtime.&lt;/p&gt;

&lt;p&gt;The problem wasn't coming up with ideas.&lt;/p&gt;

&lt;p&gt;The problem was getting anyone to see them.&lt;/p&gt;

&lt;p&gt;So I started building what eventually became PostPunk.&lt;/p&gt;

&lt;p&gt;At first, the goal was simple:&lt;/p&gt;

&lt;p&gt;Create content.&lt;/p&gt;

&lt;p&gt;Schedule content.&lt;/p&gt;

&lt;p&gt;Post content.&lt;/p&gt;

&lt;p&gt;Hopefully sell something.&lt;/p&gt;

&lt;p&gt;Easy, right?&lt;/p&gt;

&lt;p&gt;Yeah. Not even close.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Thought Posting Was the Problem
&lt;/h2&gt;

&lt;p&gt;My assumption was that marketing failed because I wasn't posting enough.&lt;/p&gt;

&lt;p&gt;That seemed logical.&lt;/p&gt;

&lt;p&gt;If nobody sees your stuff, post more.&lt;/p&gt;

&lt;p&gt;If posting takes too much time, automate it.&lt;/p&gt;

&lt;p&gt;Problem solved.&lt;/p&gt;

&lt;p&gt;So I started building tools to help with scheduling, queues, publishing, and content management.&lt;/p&gt;

&lt;p&gt;The engineering part made sense.&lt;/p&gt;

&lt;p&gt;The marketing part did not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I Learned Every Platform Wants Something Different
&lt;/h2&gt;

&lt;p&gt;Pinterest isn't Facebook.&lt;/p&gt;

&lt;p&gt;Facebook isn't LinkedIn.&lt;/p&gt;

&lt;p&gt;LinkedIn isn't Dev.to.&lt;/p&gt;

&lt;p&gt;Every platform has its own weird personality.&lt;/p&gt;

&lt;p&gt;Pinterest wants visuals.&lt;/p&gt;

&lt;p&gt;LinkedIn wants insights.&lt;/p&gt;

&lt;p&gt;Dev.to wants stories.&lt;/p&gt;

&lt;p&gt;And the same piece of content can perform completely differently depending on where it lands.&lt;/p&gt;

&lt;p&gt;I thought I was building a posting engine.&lt;/p&gt;

&lt;p&gt;Instead, I accidentally started studying platform behavior.&lt;/p&gt;

&lt;p&gt;Then audience behavior.&lt;/p&gt;

&lt;p&gt;Then content behavior.&lt;/p&gt;

&lt;p&gt;Then discoverability.&lt;/p&gt;

&lt;p&gt;The scheduler became one small piece of a much larger problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Audience Kept Proving Me Wrong
&lt;/h2&gt;

&lt;p&gt;This was probably the most humbling lesson.&lt;/p&gt;

&lt;p&gt;I thought I knew what people would like.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;Repeatedly.&lt;/p&gt;

&lt;p&gt;I'd spend time on something I thought was clever.&lt;/p&gt;

&lt;p&gt;Nothing.&lt;/p&gt;

&lt;p&gt;Then I'd post something weird and watch it take off.&lt;/p&gt;

&lt;p&gt;Which brings us to the goblins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goblin Chaos
&lt;/h2&gt;

&lt;p&gt;One of my strangest content experiments involved chaotic goblin-themed humor.&lt;/p&gt;

&lt;p&gt;If I'm being honest, I wasn't sure anyone would care.&lt;/p&gt;

&lt;p&gt;It was weird.&lt;/p&gt;

&lt;p&gt;A little niche.&lt;/p&gt;

&lt;p&gt;Definitely not something I expected to outperform more practical ideas.&lt;/p&gt;

&lt;p&gt;Then people started clicking.&lt;/p&gt;

&lt;p&gt;Saving.&lt;/p&gt;

&lt;p&gt;Sharing.&lt;/p&gt;

&lt;p&gt;Engaging.&lt;/p&gt;

&lt;p&gt;My first reaction wasn't:&lt;/p&gt;

&lt;p&gt;"I have successfully validated a market opportunity."&lt;/p&gt;

&lt;p&gt;My first reaction was:&lt;/p&gt;

&lt;p&gt;"Well shit... that was unexpected."&lt;/p&gt;

&lt;p&gt;The goblin content wasn't just getting attention.&lt;/p&gt;

&lt;p&gt;People actually liked it.&lt;/p&gt;

&lt;p&gt;That surprised me because it felt so specific and strange.&lt;/p&gt;

&lt;p&gt;But it also taught me something important.&lt;/p&gt;

&lt;p&gt;The audience doesn't care what I think should work.&lt;/p&gt;

&lt;p&gt;The audience decides what works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scheduler Was Never The Product
&lt;/h2&gt;

&lt;p&gt;Looking back, the scheduler wasn't the interesting part.&lt;/p&gt;

&lt;p&gt;The interesting part was learning.&lt;/p&gt;

&lt;p&gt;Learning what people click.&lt;/p&gt;

&lt;p&gt;Learning what people ignore.&lt;/p&gt;

&lt;p&gt;Learning what gets shared.&lt;/p&gt;

&lt;p&gt;Learning how often my assumptions are wrong.&lt;/p&gt;

&lt;p&gt;I started this project because I wanted to automate content distribution.&lt;/p&gt;

&lt;p&gt;What I ended up building was a feedback loop.&lt;/p&gt;

&lt;p&gt;A system that constantly reminds me:&lt;/p&gt;

&lt;p&gt;You are not your audience.&lt;/p&gt;

&lt;p&gt;And that's probably a good thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unexpected Lesson
&lt;/h2&gt;

&lt;p&gt;The biggest surprise wasn't that automation helped.&lt;/p&gt;

&lt;p&gt;It did.&lt;/p&gt;

&lt;p&gt;The biggest surprise was discovering how bad I am at predicting winners.&lt;/p&gt;

&lt;p&gt;Some of my favorite ideas went nowhere.&lt;/p&gt;

&lt;p&gt;Some of the weirdest ideas found an audience.&lt;/p&gt;

&lt;p&gt;The goblins taught me that.&lt;/p&gt;

&lt;p&gt;The analytics taught me that.&lt;/p&gt;

&lt;p&gt;The clicks taught me that.&lt;/p&gt;

&lt;p&gt;And honestly, that's probably the most valuable thing the entire project has given me.&lt;/p&gt;

&lt;p&gt;Not automation.&lt;/p&gt;

&lt;p&gt;Not scheduling.&lt;/p&gt;

&lt;p&gt;Not publishing.&lt;/p&gt;

&lt;p&gt;Humility.&lt;/p&gt;

&lt;p&gt;Because every time I think I've figured out what people want, the internet finds a new way to prove me wrong.&lt;/p&gt;

&lt;p&gt;And sometimes, thankfully, it does it with goblins.&lt;/p&gt;

&lt;h2&gt;
  
  
  P.S. If You're Still Reading This...
&lt;/h2&gt;

&lt;p&gt;And you're wondering:&lt;/p&gt;

&lt;p&gt;"What the hell is goblin chaos?"&lt;/p&gt;

&lt;p&gt;Fair question.&lt;/p&gt;

&lt;p&gt;One of the biggest surprises from this whole experiment was discovering that some of my weirdest ideas resonated with people far more than the ones I thought would succeed.&lt;/p&gt;

&lt;p&gt;What started as a strange creative experiment somehow turned into coloring books, digital products, memes, and an audience that seems to enjoy chaotic woodland nonsense as much as I do.&lt;/p&gt;

&lt;p&gt;If you're curious about the goblins that helped teach me this lesson:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fleurdevie.gumroad.com/l/goblin-core-coloring-affirmations" rel="noopener noreferrer"&gt;Goblin Core Coloring Affirmations on Gumroad&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turns out the internet wanted more goblins.&lt;/p&gt;

&lt;p&gt;I was as surprised as anyone.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>automation</category>
      <category>productivity</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>The AI Prompts I Wish I Had Right After Graduation</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 22 Jun 2026 15:01:45 +0000</pubDate>
      <link>https://dev.to/ashb4/the-ai-prompts-i-wish-i-had-right-after-graduation-2b69</link>
      <guid>https://dev.to/ashb4/the-ai-prompts-i-wish-i-had-right-after-graduation-2b69</guid>
      <description>&lt;h1&gt;
  
  
  The AI Prompts I Wish I Had Right After Graduation
&lt;/h1&gt;

&lt;p&gt;Graduation advice is weird.&lt;/p&gt;

&lt;p&gt;Half the internet tells you to follow your passion.&lt;/p&gt;

&lt;p&gt;The other half tells you to optimize your LinkedIn headline like you're trying to summon a recruiter through an ancient ritual.&lt;/p&gt;

&lt;p&gt;Meanwhile, you're staring at a blank page thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cool. I have a degree. Now what?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Confession:&lt;/p&gt;

&lt;p&gt;I don't even remember every prompt in the AI-Powered Grad Launch Kit.&lt;/p&gt;

&lt;p&gt;I made it a while ago.&lt;/p&gt;

&lt;p&gt;What I &lt;em&gt;do&lt;/em&gt; remember are the problems.&lt;/p&gt;

&lt;p&gt;The blank-page panic.&lt;/p&gt;

&lt;p&gt;The feeling that everyone else somehow knew what they were doing.&lt;/p&gt;

&lt;p&gt;The endless cycle of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Should I apply for this?"&lt;/p&gt;

&lt;p&gt;"Am I even qualified?"&lt;/p&gt;

&lt;p&gt;"How do I explain my experience?"&lt;/p&gt;

&lt;p&gt;"What jobs should I even be searching for?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Years later, while job hunting again and trying to figure out my own next moves, I found myself rebuilding the same kinds of prompts over and over.&lt;/p&gt;

&lt;p&gt;Not because AI had all the answers.&lt;/p&gt;

&lt;p&gt;Because sometimes you just need help figuring out the next question to ask.&lt;/p&gt;

&lt;p&gt;These are the prompts I wish I'd had when I first graduated.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Turn My Experience Into Resume Bullets
&lt;/h2&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Help me write my resume."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Act as a hiring manager for entry-level [ROLE]. Turn my experience below into achievement-focused resume bullets using action verbs and measurable outcomes when possible.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Paste your internships.&lt;/p&gt;

&lt;p&gt;Paste your class projects.&lt;/p&gt;

&lt;p&gt;Paste your volunteer work.&lt;/p&gt;

&lt;p&gt;Paste the weird part-time job that somehow taught you conflict resolution and time management.&lt;/p&gt;

&lt;p&gt;You probably have more experience than you think.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Help Me Figure Out What Jobs I Actually Qualify For
&lt;/h2&gt;

&lt;p&gt;Nobody tells you this after graduation:&lt;/p&gt;

&lt;p&gt;Job titles are basically made up.&lt;/p&gt;

&lt;p&gt;Try this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Based on my degree, skills, and interests, suggest 15 job titles I may qualify for that I might not have considered. Explain what each role actually does.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes the biggest obstacle isn't a lack of opportunity.&lt;/p&gt;

&lt;p&gt;It's not knowing what to search for.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Practice Interviews Without Judgement
&lt;/h2&gt;

&lt;p&gt;Interviewing is awkward.&lt;/p&gt;

&lt;p&gt;Being interviewed by AI is also awkward.&lt;/p&gt;

&lt;p&gt;But at least AI won't remember that one answer you absolutely butchered.&lt;/p&gt;

&lt;p&gt;Try:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pretend you're interviewing me for an entry-level [ROLE]. Ask me one question at a time, critique my answer, and help me improve.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's free.&lt;/p&gt;

&lt;p&gt;It's available at 11 PM.&lt;/p&gt;

&lt;p&gt;And it won't judge you for needing to try the same answer three times.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Rewrite Networking Messages So They Sound Human
&lt;/h2&gt;

&lt;p&gt;Networking advice often sounds like it was written by someone who has never had a conversation before.&lt;/p&gt;

&lt;p&gt;Instead of staring at a blinking cursor, try:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Help me write a networking message that sounds genuine, curious, and professional without sounding like I'm begging for a job.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because nobody wants to send:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dear Sir or Madam,&lt;/p&gt;

&lt;p&gt;Please validate my existence.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. Build a Learning Plan Instead of Doomscrolling
&lt;/h2&gt;

&lt;p&gt;One of the easiest ways to avoid taking action is convincing yourself you need to learn absolutely everything first.&lt;/p&gt;

&lt;p&gt;Try:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I want to become a better [ROLE]. Build me a 30-day learning plan using mostly free resources. Assume I have one hour per day.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Small progress beats panic.&lt;/p&gt;

&lt;p&gt;Every single time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Actually Made
&lt;/h2&gt;

&lt;p&gt;At some point, I realized I wasn't just collecting prompts.&lt;/p&gt;

&lt;p&gt;I was trying to build the thing I wish someone had handed me at 18.&lt;/p&gt;

&lt;p&gt;Not another motivational poster.&lt;/p&gt;

&lt;p&gt;Not another "follow your dreams" speech.&lt;/p&gt;

&lt;p&gt;Something practical.&lt;/p&gt;

&lt;p&gt;Something that helped answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What jobs should I apply for?&lt;/li&gt;
&lt;li&gt;How do I figure out what I actually want?&lt;/li&gt;
&lt;li&gt;How do I organize all these ideas?&lt;/li&gt;
&lt;li&gt;How do I stop panicking long enough to take the next step?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I turned it into a weird little launch kit.&lt;/p&gt;

&lt;p&gt;It eventually became the &lt;strong&gt;AI-Powered Grad Launch Kit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Inside, there's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 AI prompts&lt;/li&gt;
&lt;li&gt;A CSV that works with Excel or Google Sheets&lt;/li&gt;
&lt;li&gt;A Notion command center to organize everything&lt;/li&gt;
&lt;li&gt;Prompt tracking and journaling tools&lt;/li&gt;
&lt;li&gt;A "Hey Grad" letter for the person trying to figure it all out&lt;/li&gt;
&lt;li&gt;Life lessons I wish I'd known sooner&lt;/li&gt;
&lt;li&gt;A simple guide explaining how to use it without feeling overwhelmed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The handbook I never got.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  If You Want the Rest
&lt;/h2&gt;

&lt;p&gt;Apparently, I kept rebuilding these kinds of prompts often enough that Past Me eventually decided to package them up.&lt;/p&gt;

&lt;p&gt;If these five prompts helped, the full &lt;strong&gt;AI-Powered Grad Launch Kit&lt;/strong&gt; includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 prompts for self-discovery, career planning, and personal growth&lt;/li&gt;
&lt;li&gt;Excel and Google Sheets compatibility&lt;/li&gt;
&lt;li&gt;A Notion command center&lt;/li&gt;
&lt;li&gt;Journaling tools&lt;/li&gt;
&lt;li&gt;A welcome letter for grads&lt;/li&gt;
&lt;li&gt;Life lessons I wish I'd heard earlier&lt;/li&gt;
&lt;li&gt;Resources designed to help you move forward without pretending you have your entire life figured out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can check it out here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fleurdevie.gumroad.com/l/ai-powered-grad" rel="noopener noreferrer"&gt;https://fleurdevie.gumroad.com/l/ai-powered-grad&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're graduating, recently graduated, changing careers, re-entering the workforce, or simply trying to get unstuck:&lt;/p&gt;

&lt;p&gt;You're not behind.&lt;/p&gt;

&lt;p&gt;Most of us are just making the next best decision we can with the information we have and hoping it works out.&lt;/p&gt;

&lt;p&gt;You don't need to have your whole life figured out.&lt;/p&gt;

&lt;p&gt;You just need to know what to do next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>graduation</category>
      <category>prompts</category>
    </item>
    <item>
      <title>What Recruiters Can't See On My GitHub</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 16 Jun 2026 18:34:02 +0000</pubDate>
      <link>https://dev.to/ashb4/what-recruiters-cant-see-on-my-github-1f41</link>
      <guid>https://dev.to/ashb4/what-recruiters-cant-see-on-my-github-1f41</guid>
      <description>&lt;h1&gt;
  
  
  What Recruiters Can't See On My GitHub
&lt;/h1&gt;

&lt;p&gt;If you spend about 30 seconds looking at my GitHub profile, you might think I'm all over the place.&lt;/p&gt;

&lt;p&gt;React.&lt;/p&gt;

&lt;p&gt;Python.&lt;/p&gt;

&lt;p&gt;Healthcare.&lt;/p&gt;

&lt;p&gt;AI.&lt;/p&gt;

&lt;p&gt;Scrapers.&lt;/p&gt;

&lt;p&gt;Automation.&lt;/p&gt;

&lt;p&gt;Marketing tools.&lt;/p&gt;

&lt;p&gt;Job bots.&lt;/p&gt;

&lt;p&gt;Honestly, that's something I've worried about.&lt;/p&gt;

&lt;p&gt;I have over 100 repositories. Recruiters can see most of them, but not all of them. Some are private because they're client work. Some are private because they're unfinished. Some are private because they contain ideas I've spent years developing and I'm not quite ready to throw the blueprints onto the internet.&lt;/p&gt;

&lt;p&gt;From the outside, it can look random.&lt;/p&gt;

&lt;p&gt;But recently I realized something.&lt;/p&gt;

&lt;p&gt;All of those projects are solving the same problem.&lt;/p&gt;

&lt;p&gt;I hate repetitive work.&lt;/p&gt;

&lt;p&gt;My GitHub is here: &lt;a href="https://github.com/ashb4" rel="noopener noreferrer"&gt;https://github.com/ashb4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Job Application That Broke Me
&lt;/h2&gt;

&lt;p&gt;I've applied to thousands of jobs over the years.&lt;/p&gt;

&lt;p&gt;Thousands.&lt;/p&gt;

&lt;p&gt;And one thing has always driven me absolutely insane.&lt;/p&gt;

&lt;p&gt;You upload your resume.&lt;/p&gt;

&lt;p&gt;Then the company immediately asks you to type your entire resume into fifteen different boxes.&lt;/p&gt;

&lt;p&gt;Your work history.&lt;/p&gt;

&lt;p&gt;Your education.&lt;/p&gt;

&lt;p&gt;Your skills.&lt;/p&gt;

&lt;p&gt;Everything.&lt;/p&gt;

&lt;p&gt;The computer already has the information.&lt;/p&gt;

&lt;p&gt;The resume is right there.&lt;/p&gt;

&lt;p&gt;Yet somehow I'm sitting on page seven of an application retyping information that already exists.&lt;/p&gt;

&lt;p&gt;It feels inefficient.&lt;/p&gt;

&lt;p&gt;It feels stupid.&lt;/p&gt;

&lt;p&gt;And most of all, it feels like a waste of time.&lt;/p&gt;

&lt;p&gt;Eventually I got annoyed enough to start building tools to help.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I Noticed a Pattern
&lt;/h2&gt;

&lt;p&gt;At first I thought I was building unrelated projects.&lt;/p&gt;

&lt;p&gt;A job application helper.&lt;/p&gt;

&lt;p&gt;A content scheduler.&lt;/p&gt;

&lt;p&gt;A healthcare platform.&lt;/p&gt;

&lt;p&gt;An AI framework.&lt;/p&gt;

&lt;p&gt;A browser automation system.&lt;/p&gt;

&lt;p&gt;But when I stepped back, I noticed the same motivation behind almost all of them.&lt;/p&gt;

&lt;p&gt;Every project started with some version of:&lt;/p&gt;

&lt;p&gt;"There has to be a better way to do this."&lt;/p&gt;

&lt;p&gt;Take PostPunk.&lt;/p&gt;

&lt;p&gt;Most people see a social media scheduler.&lt;/p&gt;

&lt;p&gt;I see hours of repetitive posting that I never want to do again.&lt;/p&gt;

&lt;p&gt;I like creating content.&lt;/p&gt;

&lt;p&gt;I do not like manually posting the same content everywhere.&lt;/p&gt;

&lt;p&gt;So I built a system where I can create when I'm feeling creative, queue everything up, and let the system handle the repetitive parts later.&lt;/p&gt;

&lt;p&gt;Create once.&lt;/p&gt;

&lt;p&gt;Reuse many times.&lt;/p&gt;

&lt;p&gt;That's a pattern you'll see all over my GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Projects Aren't Random
&lt;/h2&gt;

&lt;p&gt;One recruiter might see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostPunk&lt;/li&gt;
&lt;li&gt;Orchestrator&lt;/li&gt;
&lt;li&gt;BoxerLogic&lt;/li&gt;
&lt;li&gt;Healthcare applications&lt;/li&gt;
&lt;li&gt;Scrapers&lt;/li&gt;
&lt;li&gt;Automation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and think:&lt;/p&gt;

&lt;p&gt;"These don't seem related."&lt;/p&gt;

&lt;p&gt;I'd argue they're incredibly related.&lt;/p&gt;

&lt;p&gt;They're all attempts to reduce repetitive human effort.&lt;/p&gt;

&lt;p&gt;Different domains.&lt;/p&gt;

&lt;p&gt;Same obsession.&lt;/p&gt;

&lt;p&gt;Some developers love graphics.&lt;/p&gt;

&lt;p&gt;Some love databases.&lt;/p&gt;

&lt;p&gt;Some love distributed systems.&lt;/p&gt;

&lt;p&gt;I seem to be drawn toward removing friction.&lt;/p&gt;

&lt;p&gt;If something feels repetitive enough, eventually I start asking myself whether a computer should be doing it instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Question
&lt;/h2&gt;

&lt;p&gt;People sometimes assume that because I use AI, the projects are somehow doing all the work for me.&lt;/p&gt;

&lt;p&gt;The reality is less exciting.&lt;/p&gt;

&lt;p&gt;AI helps.&lt;/p&gt;

&lt;p&gt;But AI is not magic.&lt;/p&gt;

&lt;p&gt;I've found that the hardest part isn't generating code.&lt;/p&gt;

&lt;p&gt;It's understanding workflows.&lt;/p&gt;

&lt;p&gt;Understanding edge cases.&lt;/p&gt;

&lt;p&gt;Understanding what people are actually trying to accomplish.&lt;/p&gt;

&lt;p&gt;The code is often the easy part.&lt;/p&gt;

&lt;p&gt;The thinking is the hard part.&lt;/p&gt;

&lt;p&gt;That's true whether you're building a healthcare platform, a job application tool, or an automation system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Hope Recruiters Actually See
&lt;/h2&gt;

&lt;p&gt;I don't expect recruiters to inspect all 100+ repositories.&lt;/p&gt;

&lt;p&gt;Nobody has time for that.&lt;/p&gt;

&lt;p&gt;But if they do look at my GitHub, I hope they don't see a collection of random technologies.&lt;/p&gt;

&lt;p&gt;I hope they see a systems thinker.&lt;/p&gt;

&lt;p&gt;Someone who gets annoyed by repetitive work.&lt;/p&gt;

&lt;p&gt;Someone who enjoys finding patterns.&lt;/p&gt;

&lt;p&gt;Someone who likes building tools that save people time.&lt;/p&gt;

&lt;p&gt;Because when I look at my repositories, that's what I see.&lt;/p&gt;

&lt;p&gt;Not 100 separate projects.&lt;/p&gt;

&lt;p&gt;Just one idea repeated over and over:&lt;/p&gt;

&lt;p&gt;If a task is repetitive enough, there's probably a better way to do it.&lt;/p&gt;

&lt;p&gt;And sooner or later, I'm probably going to try building it.&lt;/p&gt;

</description>
      <category>github</category>
      <category>career</category>
      <category>webdev</category>
      <category>automation</category>
    </item>
    <item>
      <title>What Recruiters Can't See On My GitHub</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 15 Jun 2026 15:00:02 +0000</pubDate>
      <link>https://dev.to/ashb4/what-recruiters-cant-see-on-my-github-5cj5</link>
      <guid>https://dev.to/ashb4/what-recruiters-cant-see-on-my-github-5cj5</guid>
      <description>&lt;h1&gt;
  
  
  What Recruiters Can't See On My GitHub
&lt;/h1&gt;

&lt;p&gt;If you spend about 30 seconds looking at my GitHub profile, you might think I'm all over the place.&lt;/p&gt;

&lt;p&gt;React.&lt;/p&gt;

&lt;p&gt;Python.&lt;/p&gt;

&lt;p&gt;Healthcare.&lt;/p&gt;

&lt;p&gt;AI.&lt;/p&gt;

&lt;p&gt;Scrapers.&lt;/p&gt;

&lt;p&gt;Automation.&lt;/p&gt;

&lt;p&gt;Marketing tools.&lt;/p&gt;

&lt;p&gt;Job bots.&lt;/p&gt;

&lt;p&gt;Honestly, that's something I've worried about.&lt;/p&gt;

&lt;p&gt;I have over 100 repositories. Recruiters can see most of them, but not all of them. Some are private because they're client work. Some are private because they're unfinished. Some are private because they contain ideas I've spent years developing and I'm not quite ready to throw the blueprints onto the internet.&lt;/p&gt;

&lt;p&gt;From the outside, it can look random.&lt;/p&gt;

&lt;p&gt;But recently I realized something.&lt;/p&gt;

&lt;p&gt;All of those projects are solving the same problem.&lt;/p&gt;

&lt;p&gt;I hate repetitive work.&lt;/p&gt;

&lt;p&gt;My GitHub is here: &lt;a href="https://github.com/ashb4" rel="noopener noreferrer"&gt;https://github.com/ashb4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Job Application That Broke Me
&lt;/h2&gt;

&lt;p&gt;I've applied to thousands of jobs over the years.&lt;/p&gt;

&lt;p&gt;Thousands.&lt;/p&gt;

&lt;p&gt;And one thing has always driven me absolutely insane.&lt;/p&gt;

&lt;p&gt;You upload your resume.&lt;/p&gt;

&lt;p&gt;Then the company immediately asks you to type your entire resume into fifteen different boxes.&lt;/p&gt;

&lt;p&gt;Your work history.&lt;/p&gt;

&lt;p&gt;Your education.&lt;/p&gt;

&lt;p&gt;Your skills.&lt;/p&gt;

&lt;p&gt;Everything.&lt;/p&gt;

&lt;p&gt;The computer already has the information.&lt;/p&gt;

&lt;p&gt;The resume is right there.&lt;/p&gt;

&lt;p&gt;Yet somehow I'm sitting on page seven of an application retyping information that already exists.&lt;/p&gt;

&lt;p&gt;It feels inefficient.&lt;/p&gt;

&lt;p&gt;It feels stupid.&lt;/p&gt;

&lt;p&gt;And most of all, it feels like a waste of time.&lt;/p&gt;

&lt;p&gt;Eventually I got annoyed enough to start building tools to help.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I Noticed a Pattern
&lt;/h2&gt;

&lt;p&gt;At first I thought I was building unrelated projects.&lt;/p&gt;

&lt;p&gt;A job application helper.&lt;/p&gt;

&lt;p&gt;A content scheduler.&lt;/p&gt;

&lt;p&gt;A healthcare platform.&lt;/p&gt;

&lt;p&gt;An AI framework.&lt;/p&gt;

&lt;p&gt;A browser automation system.&lt;/p&gt;

&lt;p&gt;But when I stepped back, I noticed the same motivation behind almost all of them.&lt;/p&gt;

&lt;p&gt;Every project started with some version of:&lt;/p&gt;

&lt;p&gt;"There has to be a better way to do this."&lt;/p&gt;

&lt;p&gt;Take PostPunk.&lt;/p&gt;

&lt;p&gt;Most people see a social media scheduler.&lt;/p&gt;

&lt;p&gt;I see hours of repetitive posting that I never want to do again.&lt;/p&gt;

&lt;p&gt;I like creating content.&lt;/p&gt;

&lt;p&gt;I do not like manually posting the same content everywhere.&lt;/p&gt;

&lt;p&gt;So I built a system where I can create when I'm feeling creative, queue everything up, and let the system handle the repetitive parts later.&lt;/p&gt;

&lt;p&gt;Create once.&lt;/p&gt;

&lt;p&gt;Reuse many times.&lt;/p&gt;

&lt;p&gt;That's a pattern you'll see all over my GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Projects Aren't Random
&lt;/h2&gt;

&lt;p&gt;One recruiter might see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostPunk&lt;/li&gt;
&lt;li&gt;Orchestrator&lt;/li&gt;
&lt;li&gt;BoxerLogic&lt;/li&gt;
&lt;li&gt;Healthcare applications&lt;/li&gt;
&lt;li&gt;Scrapers&lt;/li&gt;
&lt;li&gt;Automation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and think:&lt;/p&gt;

&lt;p&gt;"These don't seem related."&lt;/p&gt;

&lt;p&gt;I'd argue they're incredibly related.&lt;/p&gt;

&lt;p&gt;They're all attempts to reduce repetitive human effort.&lt;/p&gt;

&lt;p&gt;Different domains.&lt;/p&gt;

&lt;p&gt;Same obsession.&lt;/p&gt;

&lt;p&gt;Some developers love graphics.&lt;/p&gt;

&lt;p&gt;Some love databases.&lt;/p&gt;

&lt;p&gt;Some love distributed systems.&lt;/p&gt;

&lt;p&gt;I seem to be drawn toward removing friction.&lt;/p&gt;

&lt;p&gt;If something feels repetitive enough, eventually I start asking myself whether a computer should be doing it instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Question
&lt;/h2&gt;

&lt;p&gt;People sometimes assume that because I use AI, the projects are somehow doing all the work for me.&lt;/p&gt;

&lt;p&gt;The reality is less exciting.&lt;/p&gt;

&lt;p&gt;AI helps.&lt;/p&gt;

&lt;p&gt;But AI is not magic.&lt;/p&gt;

&lt;p&gt;I've found that the hardest part isn't generating code.&lt;/p&gt;

&lt;p&gt;It's understanding workflows.&lt;/p&gt;

&lt;p&gt;Understanding edge cases.&lt;/p&gt;

&lt;p&gt;Understanding what people are actually trying to accomplish.&lt;/p&gt;

&lt;p&gt;The code is often the easy part.&lt;/p&gt;

&lt;p&gt;The thinking is the hard part.&lt;/p&gt;

&lt;p&gt;That's true whether you're building a healthcare platform, a job application tool, or an automation system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Hope Recruiters Actually See
&lt;/h2&gt;

&lt;p&gt;I don't expect recruiters to inspect all 100+ repositories.&lt;/p&gt;

&lt;p&gt;Nobody has time for that.&lt;/p&gt;

&lt;p&gt;But if they do look at my GitHub, I hope they don't see a collection of random technologies.&lt;/p&gt;

&lt;p&gt;I hope they see a systems thinker.&lt;/p&gt;

&lt;p&gt;Someone who gets annoyed by repetitive work.&lt;/p&gt;

&lt;p&gt;Someone who enjoys finding patterns.&lt;/p&gt;

&lt;p&gt;Someone who likes building tools that save people time.&lt;/p&gt;

&lt;p&gt;Because when I look at my repositories, that's what I see.&lt;/p&gt;

&lt;p&gt;Not 100 separate projects.&lt;/p&gt;

&lt;p&gt;Just one idea repeated over and over:&lt;/p&gt;

&lt;p&gt;If a task is repetitive enough, there's probably a better way to do it.&lt;/p&gt;

&lt;p&gt;And sooner or later, I'm probably going to try building it.&lt;/p&gt;

</description>
      <category>github</category>
      <category>career</category>
      <category>webdev</category>
      <category>automation</category>
    </item>
    <item>
      <title>Running Playwright + Headless Chrome on Old Hardware Is Less “Automation” and More “Systems Archaeology”</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 08 Jun 2026 15:00:04 +0000</pubDate>
      <link>https://dev.to/ashb4/running-playwright-headless-chrome-on-old-hardware-is-less-automation-and-more-systems-20n8</link>
      <guid>https://dev.to/ashb4/running-playwright-headless-chrome-on-old-hardware-is-less-automation-and-more-systems-20n8</guid>
      <description>&lt;h1&gt;
  
  
  Running Playwright + Headless Chrome on Old Hardware Is Less “Automation” and More “Systems Archaeology”
&lt;/h1&gt;

&lt;p&gt;There is a very specific type of developer optimism that makes you look at a dying 2015 HP laptop and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yeah, this should absolutely run production browser automation.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This machine had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 GB RAM&lt;/li&gt;
&lt;li&gt;a mechanical hard drive&lt;/li&gt;
&lt;li&gt;integrated Radeon graphics&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;li&gt;trust issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had already memorized Alt + PrintScreen + REISUB because eventually this machine was going to require spiritual intervention.&lt;/p&gt;

&lt;p&gt;Naturally, I turned it into a self-hosted automation server running Playwright workers for PostPunk.&lt;/p&gt;

&lt;p&gt;Because apparently I enjoy creating problems recreationally.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basic Fantasy
&lt;/h2&gt;

&lt;p&gt;The fantasy sounds reasonable enough.&lt;/p&gt;

&lt;p&gt;Take an old laptop.&lt;br&gt;
Install Linux.&lt;br&gt;
Run some worker processes.&lt;br&gt;
Use Playwright for browser automation.&lt;br&gt;
Queue content posts automatically.&lt;br&gt;
Stop manually posting to platforms one miserable click at a time.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That last part mattered the most.&lt;/p&gt;

&lt;p&gt;I’m stubborn, cheap, and deeply allergic to manually posting content platform-by-platform forever.&lt;/p&gt;

&lt;p&gt;Which is basically the entire psychological profile required to build self-hosted automation systems.&lt;/p&gt;

&lt;p&gt;At some point this stopped being:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“a fun Linux experiment”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the engine for how I actually want to work.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That meant the machine suddenly mattered.&lt;/p&gt;

&lt;p&gt;And unfortunately, so did Chrome.&lt;/p&gt;
&lt;h2&gt;
  
  
  Everything Was Fine Until Chromium Entered The Story
&lt;/h2&gt;

&lt;p&gt;The Linux side was mostly solid.&lt;/p&gt;

&lt;p&gt;Workers behaved.&lt;br&gt;
Scheduling behaved.&lt;br&gt;
Queue processing behaved.&lt;br&gt;
Notifications behaved.&lt;/p&gt;

&lt;p&gt;Then Chromium showed up and started acting like the laptop was trying to process emotional trauma in real time.&lt;/p&gt;

&lt;p&gt;At first the failures looked random:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selectors timing out&lt;/li&gt;
&lt;li&gt;uploads silently failing&lt;/li&gt;
&lt;li&gt;clicks not landing&lt;/li&gt;
&lt;li&gt;pages freezing&lt;/li&gt;
&lt;li&gt;workers hanging forever&lt;/li&gt;
&lt;li&gt;random skipped inputs&lt;/li&gt;
&lt;li&gt;inconsistent rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The worst part?&lt;/p&gt;

&lt;p&gt;The automation usually worked while I was watching it.&lt;/p&gt;

&lt;p&gt;Pinterest posted correctly.&lt;br&gt;
Facebook posted correctly.&lt;br&gt;
Dev.to posted correctly.&lt;/p&gt;

&lt;p&gt;So naturally I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool. Stable.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was a lie.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Moment I Realized This Wasn’t Just A Script Problem
&lt;/h2&gt;

&lt;p&gt;One night around 3 AM, while manually logging back into one of the platforms, Chromium itself started pixelating.&lt;/p&gt;

&lt;p&gt;The screen partially froze.&lt;br&gt;
The UI glitched out.&lt;br&gt;
The machine made that horrible little Linux system ringing noise like everything inside the laptop had briefly entered a panic attack.&lt;/p&gt;

&lt;p&gt;I stopped moving the mouse.&lt;br&gt;
Waited a few seconds.&lt;br&gt;
The machine recovered.&lt;/p&gt;

&lt;p&gt;Firefox mostly behaved normally.&lt;/p&gt;

&lt;p&gt;Chrome behaved like the unstable roommate Linux was too polite to evict.&lt;/p&gt;

&lt;p&gt;That was the moment I realized:&lt;br&gt;
this was no longer just a Playwright problem.&lt;/p&gt;

&lt;p&gt;Something deeper was happening.&lt;/p&gt;
&lt;h2&gt;
  
  
  Old Hardware Changes Failure Modes
&lt;/h2&gt;

&lt;p&gt;A lot of browser automation advice accidentally assumes healthy hardware.&lt;/p&gt;

&lt;p&gt;People say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Playwright works great.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I believe them.&lt;/p&gt;

&lt;p&gt;But there is usually an invisible footnote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“on hardware that is not actively fighting for its life.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Old hardware changes the nature of failures.&lt;/p&gt;

&lt;p&gt;On modern systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bad waits&lt;/li&gt;
&lt;li&gt;selectors&lt;/li&gt;
&lt;li&gt;auth issues&lt;/li&gt;
&lt;li&gt;flaky timing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On old systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU weirdness&lt;/li&gt;
&lt;li&gt;rendering instability&lt;/li&gt;
&lt;li&gt;browser freezes&lt;/li&gt;
&lt;li&gt;memory pressure&lt;/li&gt;
&lt;li&gt;disk latency&lt;/li&gt;
&lt;li&gt;thermal throttling&lt;/li&gt;
&lt;li&gt;random Chrome existential crises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point the machine stopped feeling “slow” and started feeling medically concerning.&lt;/p&gt;

&lt;p&gt;The fans would suddenly kick on like the laptop had just seen a tax audit.&lt;/p&gt;

&lt;p&gt;Opening Chrome on this thing felt less like launching software and more like asking an elderly wizard for one final favor.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headless Chrome Is Not Lightweight. It Is Just Invisible
&lt;/h2&gt;

&lt;p&gt;People hear “headless browser” and imagine some tiny efficient automation process.&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Headless Chromium still wants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;rendering resources&lt;/li&gt;
&lt;li&gt;shared memory&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;graphics support&lt;/li&gt;
&lt;li&gt;enough system stability to not implode under load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when resources get tight, the browser does not always fail cleanly.&lt;/p&gt;

&lt;p&gt;Sometimes it just becomes weird.&lt;/p&gt;

&lt;p&gt;Which is worse.&lt;/p&gt;

&lt;p&gt;The browser would get 95% through a workflow and then suddenly remember it was running on archaeology.&lt;/p&gt;

&lt;p&gt;That’s the dangerous middle ground:&lt;br&gt;
not broken enough to diagnose instantly,&lt;br&gt;
not stable enough to trust.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headed And Headless Chromium Are Basically Different Species
&lt;/h2&gt;

&lt;p&gt;This ended up being the biggest lesson.&lt;/p&gt;

&lt;p&gt;The workflows behaved differently depending on whether I could physically see the browser.&lt;/p&gt;

&lt;p&gt;That sounds fake until you experience it yourself.&lt;/p&gt;

&lt;p&gt;In headed mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering slowed things down&lt;/li&gt;
&lt;li&gt;animations had time to finish&lt;/li&gt;
&lt;li&gt;uploads stabilized&lt;/li&gt;
&lt;li&gt;UI transitions completed&lt;/li&gt;
&lt;li&gt;the environment accidentally synchronized itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Headless mode removed all that padding.&lt;/p&gt;

&lt;p&gt;Suddenly the automation was running at full machine speed against a browser environment held together with aging hardware and optimism.&lt;/p&gt;

&lt;p&gt;That’s when the race conditions showed up.&lt;/p&gt;

&lt;p&gt;This:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[data-testid="publish-button"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;turns out to mean absolutely nothing if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is still hydrating&lt;/li&gt;
&lt;li&gt;uploads are incomplete&lt;/li&gt;
&lt;li&gt;event listeners are not attached yet&lt;/li&gt;
&lt;li&gt;the UI exists visually but not functionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watching successful automation manually proves almost nothing.&lt;/p&gt;

&lt;p&gt;Production workers do not care about your vibes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Browser Automation Slowly Becomes Folklore
&lt;/h2&gt;

&lt;p&gt;At some point my debugging strategy stopped being engineering and became ritualistic behavior.&lt;/p&gt;

&lt;p&gt;I started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reinstalling packages I barely understood&lt;/li&gt;
&lt;li&gt;randomly deleting Chrome-related components&lt;/li&gt;
&lt;li&gt;tweaking launch flags endlessly&lt;/li&gt;
&lt;li&gt;waiting before clicks&lt;/li&gt;
&lt;li&gt;comparing screenshots&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;li&gt;praying to God a little bit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At one point I removed enough Chrome/X11-related stuff that the machine started pixelating outside the browser too.&lt;/p&gt;

&lt;p&gt;That was probably the strongest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“hardware may actually be dying”&lt;br&gt;
moment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironically, reinstalling the things I broke actually improved stability afterward.&lt;/p&gt;

&lt;p&gt;Which is the most Linux outcome possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPU Weirdness Is Real
&lt;/h2&gt;

&lt;p&gt;Firefox mostly behaved fine on this machine.&lt;/p&gt;

&lt;p&gt;Chrome specifically was chaos.&lt;/p&gt;

&lt;p&gt;Even normal Chrome windows were basically a 50/50 gamble:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maybe fine&lt;/li&gt;
&lt;li&gt;maybe flickering&lt;/li&gt;
&lt;li&gt;maybe partially freezing&lt;/li&gt;
&lt;li&gt;maybe pixelating&lt;/li&gt;
&lt;li&gt;maybe emotionally collapsing halfway through rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still do not fully understand why.&lt;/p&gt;

&lt;p&gt;Maybe Chromium was hitting rendering paths the machine hated.&lt;br&gt;
Maybe Linux and Chrome were fighting deep in the graphics stack.&lt;br&gt;
Maybe the laptop itself was just old and tired.&lt;/p&gt;

&lt;p&gt;At some point debugging old Linux hardware stops being science and becomes folklore.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;Not one thing.&lt;br&gt;
Several things.&lt;/p&gt;

&lt;p&gt;Moving more flows to headless mode helped because visible Chrome rendering was apparently making the machine more unstable.&lt;/p&gt;

&lt;p&gt;Proper waits helped a lot.&lt;/p&gt;

&lt;p&gt;I learned very quickly that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;waits matter more than confidence&lt;/li&gt;
&lt;li&gt;“loaded” does not mean “ready”&lt;/li&gt;
&lt;li&gt;visible UI does not mean interactable UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some flags that genuinely helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-gpu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-setuid-sandbox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-background-timer-throttling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--disable-renderer-backgrounding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright install-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ended up mattering far more than I wanted it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Observability Strategy Became “Listen For The Fan”
&lt;/h2&gt;

&lt;p&gt;Before headless mode, I barely paid attention to my Telegram notifications because I could physically see the automation running.&lt;/p&gt;

&lt;p&gt;Once everything moved headless, the notifications became the only reliable proof the workers were alive.&lt;/p&gt;

&lt;p&gt;At one point my monitoring stack was basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram alerts&lt;/li&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;log files&lt;/li&gt;
&lt;li&gt;listening for fan noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I heard the fan suddenly spin up, I knew the workers were probably doing something.&lt;/p&gt;

&lt;p&gt;Which is not exactly enterprise observability engineering.&lt;/p&gt;

&lt;p&gt;Most of this debugging happened around 3 AM while sitting directly in front of the machine like some kind of browser automation goblin trying to convince Chromium not to explode overnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability Is A Much Higher Standard Than “It Worked Once”
&lt;/h2&gt;

&lt;p&gt;This was the real lesson.&lt;/p&gt;

&lt;p&gt;A successful run does not prove reliability.&lt;/p&gt;

&lt;p&gt;It proves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one run succeeded under one set of conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s all.&lt;/p&gt;

&lt;p&gt;Reliable automation means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unattended&lt;/li&gt;
&lt;li&gt;repeatable&lt;/li&gt;
&lt;li&gt;observable&lt;/li&gt;
&lt;li&gt;stable under load&lt;/li&gt;
&lt;li&gt;stable overnight&lt;/li&gt;
&lt;li&gt;stable when nobody is staring directly at Chromium like a nervous zookeeper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a completely different standard.&lt;/p&gt;

&lt;p&gt;Eventually the workers became stable enough that I stopped compulsively checking them every few minutes.&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;That was probably the real milestone.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“the scripts worked.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I no longer felt emotionally required to supervise Chrome personally.”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>linux</category>
      <category>playwright</category>
      <category>automation</category>
    </item>
    <item>
      <title>The Creator Block Debugger: Still Fixing It But It Works</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:40:55 +0000</pubDate>
      <link>https://dev.to/ashb4/the-creator-block-debugger-still-fixing-it-but-it-works-39p</link>
      <guid>https://dev.to/ashb4/the-creator-block-debugger-still-fixing-it-but-it-works-39p</guid>
      <description>&lt;p&gt;Creator block is usually not a talent problem. It is a starting problem.&lt;/p&gt;

&lt;p&gt;I built a system that works when motivation is zero. Here is how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have a queue of 30 ready-to-post pieces&lt;/li&gt;
&lt;li&gt;Use prompts instead of waiting for ideas&lt;/li&gt;
&lt;li&gt;Batch create when feeling creative&lt;/li&gt;
&lt;li&gt;Schedule and forget&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is to never face a blank page.&lt;/p&gt;

</description>
      <category>creators</category>
      <category>productivity</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>How I Turn One Idea Into 10 Posts Without AI Slop</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:40:12 +0000</pubDate>
      <link>https://dev.to/ashb4/how-i-turn-one-idea-into-10-posts-without-ai-slop-ek</link>
      <guid>https://dev.to/ashb4/how-i-turn-one-idea-into-10-posts-without-ai-slop-ek</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I used to treat ideas like single-use objects.&lt;/p&gt;

&lt;p&gt;One idea -&amp;gt; one post -&amp;gt; done.&lt;/p&gt;

&lt;p&gt;Then I'd sit there the next day like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"cool... now what?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Repeat that enough times and you end up doing one of two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;overthinking everything&lt;/li&gt;
&lt;li&gt;or not posting at all&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither one scales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where My Ideas Actually Come From
&lt;/h2&gt;

&lt;p&gt;Nothing fancy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;random thoughts&lt;/li&gt;
&lt;li&gt;things I've built&lt;/li&gt;
&lt;li&gt;frustrations&lt;/li&gt;
&lt;li&gt;"this sucks, there should be a better way"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the goldmine.&lt;/p&gt;

&lt;p&gt;If I feel friction, odds are someone else does too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;I stopped treating ideas like finished products.&lt;/p&gt;

&lt;p&gt;Now I treat them like &lt;strong&gt;raw input&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"is this a good post?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"how many angles can I squeeze out of this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Actual System (Not Pretty, But It Works)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Rant first
&lt;/h3&gt;

&lt;p&gt;I don't start structured.&lt;/p&gt;

&lt;p&gt;I just dump everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what's annoying me&lt;/li&gt;
&lt;li&gt;what I think is broken&lt;/li&gt;
&lt;li&gt;what I wish existed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No filter. No polish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Extract angles
&lt;/h3&gt;

&lt;p&gt;From one rant, I usually get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a blunt take&lt;/li&gt;
&lt;li&gt;a practical tip&lt;/li&gt;
&lt;li&gt;a story&lt;/li&gt;
&lt;li&gt;a system&lt;/li&gt;
&lt;li&gt;a question&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same idea. Different surfaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Map to platforms
&lt;/h3&gt;

&lt;p&gt;Each angle becomes a different format:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;short punch -&amp;gt; social post&lt;/li&gt;
&lt;li&gt;structured idea -&amp;gt; Dev.to&lt;/li&gt;
&lt;li&gt;repeatable idea -&amp;gt; Pinterest&lt;/li&gt;
&lt;li&gt;casual version -&amp;gt; Facebook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same core idea, different packaging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Store everything (this is the real unlock)
&lt;/h3&gt;

&lt;p&gt;The biggest change wasn't AI.&lt;/p&gt;

&lt;p&gt;It was having a place to dump everything.&lt;/p&gt;

&lt;p&gt;I built a simple system (DB + queue) where I can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drop ideas&lt;/li&gt;
&lt;li&gt;expand them later&lt;/li&gt;
&lt;li&gt;schedule without thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That removed the "what do I post today?" problem entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI Actually Helps (and Where It Doesn't)
&lt;/h2&gt;

&lt;p&gt;I use AI a lot.&lt;/p&gt;

&lt;p&gt;Probably too much.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it helps:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;generating variations&lt;/li&gt;
&lt;li&gt;breaking writer's block&lt;/li&gt;
&lt;li&gt;speeding up structure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it fails hard:
&lt;/h3&gt;

&lt;p&gt;When you try to force &lt;em&gt;voice&lt;/em&gt; out of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "AI Slop" Actually Is
&lt;/h2&gt;

&lt;p&gt;AI slop isn't just bad writing.&lt;/p&gt;

&lt;p&gt;It's this loop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;you ask -&amp;gt; it gives something generic -&amp;gt; you tweak -&amp;gt; it gets worse -&amp;gt; repeat&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You end up with content that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sounds like everyone else&lt;/li&gt;
&lt;li&gt;says nothing new&lt;/li&gt;
&lt;li&gt;feels safe and useless&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially if you want something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;edgy&lt;/li&gt;
&lt;li&gt;opinionated&lt;/li&gt;
&lt;li&gt;slightly unhinged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI struggles there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;I stopped asking AI to create from scratch.&lt;/p&gt;

&lt;p&gt;Now I:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;start messy (my input)&lt;/li&gt;
&lt;li&gt;use AI to expand, not invent&lt;/li&gt;
&lt;li&gt;keep the tone mine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI is a tool, not the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Outcome
&lt;/h2&gt;

&lt;p&gt;This changed two things:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Consistency
&lt;/h3&gt;

&lt;p&gt;I don't rely on "feeling like posting" anymore.&lt;/p&gt;

&lt;p&gt;I already have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ideas&lt;/li&gt;
&lt;li&gt;drafts&lt;/li&gt;
&lt;li&gt;scheduled content&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Output without burnout
&lt;/h3&gt;

&lt;p&gt;Instead of forcing new ideas daily:&lt;/p&gt;

&lt;p&gt;I reuse the same idea multiple times.&lt;/p&gt;

&lt;p&gt;Which means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;less pressure&lt;/li&gt;
&lt;li&gt;more content&lt;/li&gt;
&lt;li&gt;better ideas over time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Simple Version
&lt;/h2&gt;

&lt;p&gt;If you do nothing else:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stop writing one post per idea&lt;/li&gt;
&lt;li&gt;start extracting multiple angles&lt;/li&gt;
&lt;li&gt;store everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That alone will outpace most people.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;You don't need more ideas.&lt;/p&gt;

&lt;p&gt;You need to stop wasting the ones you already have.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fleurdevie.gumroad.com/l/100prompt-storm" rel="noopener noreferrer"&gt;https://fleurdevie.gumroad.com/l/100prompt-storm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>contentcreation</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
