<?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: Leonard Bedner</title>
    <description>The latest articles on DEV Community by Leonard Bedner (@leonard_bedner_84de5af9e3).</description>
    <link>https://dev.to/leonard_bedner_84de5af9e3</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%2F3955542%2Fe4f648cb-4d3c-40d5-8e1d-fc13bf6ba3cd.jpg</url>
      <title>DEV Community: Leonard Bedner</title>
      <link>https://dev.to/leonard_bedner_84de5af9e3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leonard_bedner_84de5af9e3"/>
    <language>en</language>
    <item>
      <title>Why I Built Aegis Pulse - Part 2</title>
      <dc:creator>Leonard Bedner</dc:creator>
      <pubDate>Tue, 14 Jul 2026 14:44:37 +0000</pubDate>
      <link>https://dev.to/leonard_bedner_84de5af9e3/why-i-built-aegis-pulse-part-2-2edj</link>
      <guid>https://dev.to/leonard_bedner_84de5af9e3/why-i-built-aegis-pulse-part-2-2edj</guid>
      <description>&lt;p&gt;&lt;strong&gt;Automations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What did "automate this" really mean? It meant I was starting to get really annoyed with this day in and day out ritual experiment. It was yet "another" thing I had to do, and it was taking up a lot of my cognitive capability, which was already taking a pounding from everything else.&lt;/p&gt;

&lt;p&gt;The ritual I described in Part 1 was doing three things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Preserving data past GitHub's 14-day cliff: The most obvious one. GitHub gives you two weeks and shrugs. If you didn't grab yesterday's numbers, they're gone. I was the human cron job. We've all been there, and the gods willing, we'll finally be able to leave those terrible days behind us.&lt;/li&gt;
&lt;li&gt;Filtering noise: PyPI download numbers are famously useless out of the box. At least, that's what everyone told me when I first started to look, because I sure as shit couldn't make any sense out of them. I feel like I have a doctorate on it now. Bots, mirrors (i.e. Bandersnatch), and CI pipelines. It's just a part of my recurring dreams, along with "everything has to be async and properly validated".&lt;/li&gt;
&lt;li&gt;Taking raw data, some context, and passing it to ChatGPT, Claude, and Gemini was an amazing, and eye-opening experience, and was pretty instrumental in me making a lot of sense of the above filtered data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It also helped me start to visualize patterns, understand download behaviors, and more.&lt;/p&gt;

&lt;p&gt;And it worked. Until it didn't. One day the chat just forgets. Contradicts something it told you last week. Confuses your March numbers with January. You realize the thing you've been trusting has quietly lost the plot, and you don't even know when it happened. So you start a new chat, port the context over, and the cycle repeats.&lt;/p&gt;

&lt;p&gt;That's when I realized I didn't need a smarter chat. I needed a system that couldn't forget. One that runs against the real data every time, tells me "so what" without me asking, and doesn't drift because a context window got full.&lt;/p&gt;

&lt;p&gt;The three AI chats taught me what questions to ask. Pulse is the thing that answers them without being asked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The insights I was getting from the various LLMs were exactly what I wanted. That was never the problem. The problem was that when I started building Pulse, I had to figure out how to present all of that to a user who doesn't have three AI chats preloaded with six months of context and a personal vendetta against bot downloads.&lt;/p&gt;

&lt;p&gt;So I built reports that generate automatically, weekly, monthly, quarterly, from the same data the dashboard shows. No manual writing. Every number, every trend arrow, every narrative caption is computed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8d6wgi1jjdt5ugn5pjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8d6wgi1jjdt5ugn5pjr.png" alt="Reports Dashboard" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It already knows that I care about Unique Cloners, so that is the thing it leads with, and then naturally brings up other hightlights and drivers.&lt;/p&gt;

&lt;p&gt;And the part I'm most proud of: the week-by-week and month-by-month strips at the top.&lt;/p&gt;

&lt;p&gt;Each block is a period. Teal means up. Red means down. Mixed means some metrics rose while others fell. You can see your entire project history in one glance, and I'll be honest with you: the first time I looked at that strip with a few red blocks in a row, my immediate reaction was "I need to get three teals in a row." I didn't design it to be motivating. I designed it to be informative. Turns out those are the same thing when you care about what you're building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defenders of Legacy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One thing (amongst many) I've learned during this AI transition is that everyone has their own pace at which they accept things (or not at all). So even though it's cool to use generative AI to generate high level summaries, there's still something to be said for getting to look at a good old chart and great UI/UX.&lt;/p&gt;

&lt;p&gt;Pulse has both. The reports are there when you want the story. The dashboard is there when you just want to look at your numbers and draw your own conclusions. Neither one replaces the other, and I'm not going to tell you which one you should care about. That's your call.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2cpf4f8f44r94y98gf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2cpf4f8f44r94y98gf0.png" alt="GitHub Clones Chart" width="799" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They say it's best to build something you actually use. Well, I use the hell out of this. My multi-hour ritual is as short as 5 minutes, or as long as... I mean, who're we kidding, I can still pour over the data for hours. It's just not annoying now.&lt;/p&gt;

&lt;p&gt;Till tomorrow...&lt;/p&gt;




&lt;p&gt;Pulse is live if you want to poke around. Search any PyPI package and see what the data looks like: pulse.aegis-stack.io/search&lt;/p&gt;

&lt;p&gt;Built on &lt;a href="https://github.com/lbedner/aegis-stack" rel="noopener noreferrer"&gt;https://github.com/lbedner/aegis-stack&lt;/a&gt;, an open-source FastAPI scaffolding platform I maintain. One command, production-ready, everything pre-wired. The same infrastructure running Pulse is what you get out of the box.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Why I Built Aegis Pulse - Part 1</title>
      <dc:creator>Leonard Bedner</dc:creator>
      <pubDate>Sun, 28 Jun 2026 03:37:13 +0000</pubDate>
      <link>https://dev.to/leonard_bedner_84de5af9e3/why-i-built-aegis-pulse-part-1-599d</link>
      <guid>https://dev.to/leonard_bedner_84de5af9e3/why-i-built-aegis-pulse-part-1-599d</guid>
      <description>&lt;p&gt;Why did I build Aegis Pulse? As always, it started with a simple thought that keeps getting me time and time again: "I should automate this."&lt;/p&gt;

&lt;p&gt;So, I announced &lt;a href="https://aegis-stack.io" rel="noopener noreferrer"&gt;Aegis Stack&lt;/a&gt; publicly on Reddit on December 3rd. From that very moment, I became great friends with the Unique Clones / Total Clones &amp;amp; Unique Visitors / Total Views charts in GitHub's analytics page. Due to the nature of aegis-stack, every stack that is spun up will clone the actual repo itself (outside of caching situations, which may vary from user to user). I didn't realize it at the time, but those clone numbers, especially the Unique Clones, would become the most important metric for me to track usage.&lt;/p&gt;

&lt;p&gt;There's this funny thing that happens when you release an OSS tool. You expect people to say something, maybe tell others, ask questions... just... something... Instead, the person looks at the tool, sees if it makes their life easier, and puts it in their bag of other tools. I know this, because this is me! I never thought about it until I'm on the other side. I had to mentally go through all the tools I had used over the years, and realized I never cared about anything other than the tool itself. And if it didn't work, I would try to make it work, and if not, just move on. Time is money, and all of that.&lt;/p&gt;

&lt;p&gt;All of that is to say, clones are something I have been tracking since day one.&lt;/p&gt;

&lt;p&gt;Now... GitHub has a 14-day rolling window period in which they have daily values, and the 14-day rolling totals. And when I say 14 days, I mean it. That's all you get, and it's on you to keep track of everything outside of that. Fair enough.&lt;/p&gt;

&lt;p&gt;Thus began the daily ritual of going and grabbing the latest numbers from the previous day, and pasting the data into 3 separate AI chats: ChatGPT, Claude Opus, and Google Gemini. I figured that since I was already storing all of this data, I might as well see what type of insights I could get from these chats (which were preloaded with enough context to know what's going on). It was a great tool for me, and helped shape how I would determine release cadence, the things to release in order, etc.&lt;/p&gt;

&lt;p&gt;The biggest issue was what everyone reaches at some point... Once the context reached a certain size, none of the chats could keep everything straight, and I lost even more time porting chats to new chats to keep the whole show running.&lt;/p&gt;

&lt;p&gt;I finally gave in and said "I should automate this."&lt;/p&gt;

&lt;p&gt;Till tomorrow...&lt;/p&gt;




&lt;p&gt;This was originally published on the &lt;a href="https://pulse.aegis-stack.io/blog/why-i-built-aegis-pulse-part-1" rel="noopener noreferrer"&gt;Aegis Pulse&lt;/a&gt; blog. Pulse is free, no signup, and you can look up any package to see its real human-vs-bot download split at &lt;a href="https://pulse.aegis-stack.io/search" rel="noopener noreferrer"&gt;https://pulse.aegis-stack.io/search&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
