<?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>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>
    <item>
      <title>What Building a Social Scheduler Taught Me About Reliability</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 31 Mar 2026 21:15:43 +0000</pubDate>
      <link>https://dev.to/ashb4/what-building-a-social-scheduler-taught-me-about-reliability-4m8o</link>
      <guid>https://dev.to/ashb4/what-building-a-social-scheduler-taught-me-about-reliability-4m8o</guid>
      <description>&lt;p&gt;Most automation tools feel impressive right up until you have to trust them.&lt;/p&gt;

&lt;p&gt;It is easy to demo a scheduler.&lt;/p&gt;

&lt;p&gt;It is much harder to build one that survives real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expired tokens&lt;/li&gt;
&lt;li&gt;flaky platform APIs&lt;/li&gt;
&lt;li&gt;posts that need review&lt;/li&gt;
&lt;li&gt;queues that drift out of sync&lt;/li&gt;
&lt;li&gt;failures that happen while you are asleep&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gap changed how I think about automation.&lt;/p&gt;

&lt;p&gt;I have been building a project called PostPunk, and I thought the hard part would be generating content and wiring platform APIs together. That turned out to be the easy part.&lt;/p&gt;

&lt;p&gt;The real work was operational trust.&lt;/p&gt;

&lt;p&gt;A useful scheduler needs a few things that demos usually skip:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Approval states matter
&lt;/h2&gt;

&lt;p&gt;Not every post should go straight from draft to published.&lt;/p&gt;

&lt;p&gt;Some posts are written by you and are ready immediately. Some are AI-assisted and need a second look. If your system does not distinguish that clearly, you end up either babysitting everything or accidentally posting junk.&lt;/p&gt;

&lt;p&gt;So I ended up treating post states as part of the core workflow, not just metadata:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;draft&lt;/li&gt;
&lt;li&gt;approved&lt;/li&gt;
&lt;li&gt;posted&lt;/li&gt;
&lt;li&gt;failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds simple, but it changes everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Failure is not an edge case
&lt;/h2&gt;

&lt;p&gt;In scheduling systems, failure is normal.&lt;/p&gt;

&lt;p&gt;A platform token expires.&lt;br&gt;
An API rate-limits you.&lt;br&gt;
A platform changes a field name.&lt;br&gt;
An account is misconfigured.&lt;br&gt;
A browser fallback stops matching the UI.&lt;/p&gt;

&lt;p&gt;If the whole system falls apart the moment one target fails, you do not have automation. You have a fragile demo.&lt;/p&gt;

&lt;p&gt;So the system needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;visible failure states&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;li&gt;manual assist when automation is not trustworthy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Automatic is not the same as unattended
&lt;/h2&gt;

&lt;p&gt;A lot of posting tools sell the dream of full autopilot. In practice, a better model is often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automate what is stable&lt;/li&gt;
&lt;li&gt;assist where platforms are hostile&lt;/li&gt;
&lt;li&gt;keep the queue and schedule as the source of truth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That still saves a huge amount of time, and more importantly, it is honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Scheduling is really an operations problem
&lt;/h2&gt;

&lt;p&gt;The UI part is not enough.&lt;/p&gt;

&lt;p&gt;You also need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a worker that checks for due posts&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;retry logic&lt;/li&gt;
&lt;li&gt;success and failure alerts&lt;/li&gt;
&lt;li&gt;a clear what is due today view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without those, the schedule is just decorative.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The hardest part of automation is not getting software to do something once.&lt;/p&gt;

&lt;p&gt;It is getting it to behave predictably enough that you stop worrying about it.&lt;/p&gt;

&lt;p&gt;That is the part I care about now.&lt;/p&gt;

&lt;p&gt;If you are building internal tools, creator tools, or any kind of scheduler, reliability is the actual feature. Everything else is packaging.&lt;/p&gt;

&lt;p&gt;PostPunk is still a project I am actively working on, but building it has made me much less interested in shiny automation promises and much more interested in boring operational trust.&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>sideprojects</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>What Building a Social Scheduler Taught Me About Reliability</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Mon, 30 Mar 2026 15:01:32 +0000</pubDate>
      <link>https://dev.to/ashb4/what-building-a-social-scheduler-taught-me-about-reliability-4ff3</link>
      <guid>https://dev.to/ashb4/what-building-a-social-scheduler-taught-me-about-reliability-4ff3</guid>
      <description>&lt;p&gt;Most automation tools feel impressive right up until you have to trust them.&lt;/p&gt;

&lt;p&gt;It is easy to demo a scheduler.&lt;/p&gt;

&lt;p&gt;It is much harder to build one that survives real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expired tokens&lt;/li&gt;
&lt;li&gt;flaky platform APIs&lt;/li&gt;
&lt;li&gt;posts that need review&lt;/li&gt;
&lt;li&gt;queues that drift out of sync&lt;/li&gt;
&lt;li&gt;failures that happen while you are asleep&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gap changed how I think about automation.&lt;/p&gt;

&lt;p&gt;I have been building a project called PostPunk, and I thought the hard part would be generating content and wiring platform APIs together. That turned out to be the easy part.&lt;/p&gt;

&lt;p&gt;The real work was operational trust.&lt;/p&gt;

&lt;p&gt;A useful scheduler needs a few things that demos usually skip:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Approval states matter
&lt;/h2&gt;

&lt;p&gt;Not every post should go straight from draft to published.&lt;/p&gt;

&lt;p&gt;Some posts are written by you and are ready immediately. Some are AI-assisted and need a second look. If your system does not distinguish that clearly, you end up either babysitting everything or accidentally posting junk.&lt;/p&gt;

&lt;p&gt;So I ended up treating post states as part of the core workflow, not just metadata:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;draft&lt;/li&gt;
&lt;li&gt;approved&lt;/li&gt;
&lt;li&gt;posted&lt;/li&gt;
&lt;li&gt;failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds simple, but it changes everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Failure is not an edge case
&lt;/h2&gt;

&lt;p&gt;In scheduling systems, failure is normal.&lt;/p&gt;

&lt;p&gt;A platform token expires.&lt;br&gt;
An API rate-limits you.&lt;br&gt;
A platform changes a field name.&lt;br&gt;
An account is misconfigured.&lt;br&gt;
A browser fallback stops matching the UI.&lt;/p&gt;

&lt;p&gt;If the whole system falls apart the moment one target fails, you do not have automation. You have a fragile demo.&lt;/p&gt;

&lt;p&gt;So the system needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;visible failure states&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;li&gt;manual assist when automation is not trustworthy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Automatic is not the same as unattended
&lt;/h2&gt;

&lt;p&gt;A lot of posting tools sell the dream of full autopilot. In practice, a better model is often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automate what is stable&lt;/li&gt;
&lt;li&gt;assist where platforms are hostile&lt;/li&gt;
&lt;li&gt;keep the queue and schedule as the source of truth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That still saves a huge amount of time, and more importantly, it is honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Scheduling is really an operations problem
&lt;/h2&gt;

&lt;p&gt;The UI part is not enough.&lt;/p&gt;

&lt;p&gt;You also need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a worker that checks for due posts&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;retry logic&lt;/li&gt;
&lt;li&gt;success and failure alerts&lt;/li&gt;
&lt;li&gt;a clear what is due today view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without those, the schedule is just decorative.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The hardest part of automation is not getting software to do something once.&lt;/p&gt;

&lt;p&gt;It is getting it to behave predictably enough that you stop worrying about it.&lt;/p&gt;

&lt;p&gt;That is the part I care about now.&lt;/p&gt;

&lt;p&gt;If you are building internal tools, creator tools, or any kind of scheduler, reliability is the actual feature. Everything else is packaging.&lt;/p&gt;

&lt;p&gt;PostPunk is still a project I am actively working on, but building it has made me much less interested in shiny automation promises and much more interested in boring operational trust.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>sideprojects</category>
      <category>socialmedia</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why I Stopped Overpolishing Side Projects</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 17 Mar 2026 05:12:20 +0000</pubDate>
      <link>https://dev.to/ashb4/why-i-stopped-overpolishing-side-projects-4k30</link>
      <guid>https://dev.to/ashb4/why-i-stopped-overpolishing-side-projects-4k30</guid>
      <description>&lt;p&gt;Most small projects die from overthinking, not lack of skill.&lt;/p&gt;

&lt;p&gt;I’ve been shipping small creative products lately, including a kawaii coloring series.&lt;/p&gt;

&lt;p&gt;What changed wasn’t tools.&lt;br&gt;
It was lowering the bar to publish.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;br&gt;
"Is this perfect?"&lt;/p&gt;

&lt;p&gt;I ask:&lt;br&gt;
"Is this usable and clear?"&lt;/p&gt;

&lt;p&gt;That shift alone made me ship more in a month than I used to in six.&lt;/p&gt;

&lt;p&gt;Curious how others approach this—do you optimize first or ship first?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Quick Build Note</title>
      <dc:creator>Ashley B</dc:creator>
      <pubDate>Tue, 17 Mar 2026 05:08:29 +0000</pubDate>
      <link>https://dev.to/ashb4/quick-build-note-353n</link>
      <guid>https://dev.to/ashb4/quick-build-note-353n</guid>
      <description>&lt;p&gt;Small creative products are underrated.&lt;/p&gt;

&lt;p&gt;They don’t need complex systems.&lt;/p&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear idea&lt;/li&gt;
&lt;li&gt;consistent style&lt;/li&gt;
&lt;li&gt;actually shipping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kawaii coloring series is basically that in practice.&lt;/p&gt;

&lt;p&gt;Trying to keep things simple and repeatable.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
