<?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: Shubham</title>
    <description>The latest articles on DEV Community by Shubham (@shubhamoriginx).</description>
    <link>https://dev.to/shubhamoriginx</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%2F3827010%2Fc59cb2ef-a7ee-4654-b062-b87b2efc10dd.jpeg</url>
      <title>DEV Community: Shubham</title>
      <link>https://dev.to/shubhamoriginx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shubhamoriginx"/>
    <language>en</language>
    <item>
      <title>I got tired of writing Postman scripts to pass tokens, so I built a visual API chainer</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Fri, 11 Sep 2026 08:11:38 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/i-got-tired-of-writing-postman-scripts-to-pass-tokens-so-i-built-a-visual-api-chainer-3418</link>
      <guid>https://dev.to/shubhamoriginx/i-got-tired-of-writing-postman-scripts-to-pass-tokens-so-i-built-a-visual-api-chainer-3418</guid>
      <description>&lt;p&gt;Hey devs! 👋&lt;/p&gt;

&lt;p&gt;Let's be honest. We’ve all been there: You want to test a simple API sequence. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hit the &lt;code&gt;/login&lt;/code&gt; endpoint.&lt;/li&gt;
&lt;li&gt;Extract the JWT token from the response.&lt;/li&gt;
&lt;li&gt;Pass that token into the &lt;code&gt;Authorization&lt;/code&gt; header of the &lt;code&gt;/get-profile&lt;/code&gt; endpoint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In traditional API clients, doing this requires switching to a "Tests" or "Scripts" tab, writing something like &lt;code&gt;pm.environment.set("token", response.json().token)&lt;/code&gt;, managing environment variables, and hoping you didn't make a typo. &lt;/p&gt;

&lt;p&gt;There are visual tools out there (like Postman Flows), but they often feel like heavy cloud-automation monsters built for enterprise orchestration, not simple local debugging. Plus, they lock you into recurring team subscriptions.&lt;/p&gt;

&lt;p&gt;I just wanted a lightweight, local, and visual way to see my data flow from API to API. So, I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Aaptics_Flow 🚀
&lt;/h2&gt;

&lt;p&gt;I've spent the last few weeks building a purely visual API canvas that runs entirely in your browser. You can check it out here: &lt;strong&gt;&lt;a href="https://flow.aaptics.in" rel="noopener noreferrer"&gt;flow.aaptics.in&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Instead of writing scripts, you drop API nodes onto a canvas and draw wires to connect the output of one API directly into the Headers, Query Params, or Body of the next.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Why build another API tool?
&lt;/h3&gt;

&lt;p&gt;I wanted to focus on three main things that frustrated me with existing tools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 100% Local &amp;amp; Private Execution&lt;/strong&gt; 🔒&lt;br&gt;
Most visual API tools run your requests through their cloud servers. If you are dealing with sensitive production databases or internal auth tokens, that's a security nightmare. My tool executes requests directly from your client/browser. Zero server-side logging. Your data stays yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Visual Debugging, No Scripts&lt;/strong&gt; 🔗&lt;br&gt;
If an API fails, you can visually see exactly where the chain broke. You can inspect the exact payload that was passed through the wire from Node A to Node B. No &lt;code&gt;console.log()&lt;/code&gt; needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Goodbye CORS Issues&lt;/strong&gt; ⚡&lt;br&gt;
To make browser-based execution work smoothly without CORS blocking every request, I built a lightweight proxy using &lt;strong&gt;Cloudflare Workers&lt;/strong&gt;. It acts as a seamless bridge so you can test any public or private API without tearing your hair out over preflight errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Tech Stack
&lt;/h3&gt;

&lt;p&gt;For those curious about how it's built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React (Handling the drag-and-drop node canvas rendering smoothly).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend/Proxy:&lt;/strong&gt; Cloudflare Workers (Extremely fast edge proxy to handle CORS and license validation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments/Auth:&lt;/strong&gt; Dodo Payments (Merchant of Record to handle global checkouts seamlessly).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  I need your feedback! 🙏
&lt;/h3&gt;

&lt;p&gt;I just deployed the free version and I would love for the Dev.to community to tear it apart. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the drag-and-drop UX intuitive?&lt;/li&gt;
&lt;li&gt;What node types or features are missing for your daily workflow?&lt;/li&gt;
&lt;li&gt;Did you hit any bugs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it out for free:&lt;/strong&gt; &lt;a href="https://flow.aaptics.in" rel="noopener noreferrer"&gt;https://flow.aaptics.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think in the comments! Happy chaining. ✌️&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Aeglis Intelligence: Building an Open-Source API-First Security Analysis Backend</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Fri, 11 Sep 2026 05:46:26 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/aeglis-intelligence-building-an-open-source-api-first-security-analysis-backend-3c0f</link>
      <guid>https://dev.to/shubhamoriginx/aeglis-intelligence-building-an-open-source-api-first-security-analysis-backend-3c0f</guid>
      <description>&lt;h2&gt;
  
  
  Aeglis Intelligence: Building an Open-Source API-First Security Analysis Backend
&lt;/h2&gt;

&lt;p&gt;Modern threats rarely arrive in a single format. A phishing attempt may look like a shortened URL, a fake payment request, a malicious document, an infected archive, or an Android application that behaves differently from what it promises.&lt;/p&gt;

&lt;p&gt;This is the problem I wanted to work on with &lt;strong&gt;Aeglis Intelligence&lt;/strong&gt;: an open-source cybersecurity and risk-analysis backend that brings multiple detection workflows behind one Python and FastAPI-based service.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/Shubhamorigin/Aeglis-Intelligence" rel="noopener noreferrer"&gt;github.com/Shubhamorigin/Aeglis-Intelligence&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Aeglis Intelligence?
&lt;/h2&gt;

&lt;p&gt;Aeglis Intelligence is built for applications, developers, and security-focused teams that need to inspect suspicious content and receive useful risk intelligence through APIs.&lt;/p&gt;

&lt;p&gt;It can be used to analyze:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suspicious URLs and phishing pages&lt;/li&gt;
&lt;li&gt;Scam messages and risky text content&lt;/li&gt;
&lt;li&gt;Office documents and PDFs&lt;/li&gt;
&lt;li&gt;ZIP archives and scripts&lt;/li&gt;
&lt;li&gt;JavaScript, SVG files and images&lt;/li&gt;
&lt;li&gt;Malware patterns&lt;/li&gt;
&lt;li&gt;Android APKs&lt;/li&gt;
&lt;li&gt;Domain reputation and external threat signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not only to return a binary safe-or-unsafe answer. Aeglis is designed to combine multiple signals and produce a practical verdict, risk score, and supporting explanation that can be used by a dashboard, consumer application, moderation system, or automated security workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Multiple Signals Matter
&lt;/h2&gt;

&lt;p&gt;A single security check is often not enough. A domain may be new but not malicious. A file may contain an unusual pattern without being harmful. A URL may look normal while redirecting users through a phishing flow.&lt;/p&gt;

&lt;p&gt;Aeglis approaches analysis as a layered process. Depending on the input, it can combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local security rules and heuristics&lt;/li&gt;
&lt;li&gt;Text and input classification&lt;/li&gt;
&lt;li&gt;Domain intelligence and RDAP checks&lt;/li&gt;
&lt;li&gt;Static file inspection&lt;/li&gt;
&lt;li&gt;Browser-based URL analysis&lt;/li&gt;
&lt;li&gt;Reputation lookups through external services&lt;/li&gt;
&lt;li&gt;AI-assisted risk classification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This layered approach makes it possible to use fast local checks where they are enough and bring in deeper analysis when the input deserves more investigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;Aeglis is organized into separate modules so that API handling, detection engines, storage, authentication, and result delivery do not become one large block of application logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Layer
&lt;/h3&gt;

&lt;p&gt;The central application lives in &lt;code&gt;main.py&lt;/code&gt; and is built with FastAPI. It coordinates public routes, authenticated consumer routes, developer APIs, billing workflows, support tickets, and webhook configuration.&lt;/p&gt;

&lt;p&gt;The service includes rate limiting through SlowAPI, CORS middleware, JWT-based authentication for protected consumer actions, and API-key validation for developer endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection Layer
&lt;/h3&gt;

&lt;p&gt;The detection responsibilities are split across specialized modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;core_engine.py&lt;/code&gt; handles domain intelligence, whitelist checks, Redis access, and high-level risk assessment.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scanner_engine.py&lt;/code&gt; performs deep analysis of documents, archives, scripts, JavaScript, SVG, PDFs, APKs, and images.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scan_url.py&lt;/code&gt; handles browser-based URL detonation and phishing checks.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;input_classifier.py&lt;/code&gt; classifies suspicious text and payment-related scam patterns.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;security_engine.py&lt;/code&gt; generates API keys and stores hashes rather than relying on plain-text key storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation makes it easier to improve one analysis path without rewriting the rest of the backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data and Storage Layer
&lt;/h3&gt;

&lt;p&gt;Supabase provides the main persistence and authentication layer. The project uses it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User authentication and profiles&lt;/li&gt;
&lt;li&gt;API keys and usage plans&lt;/li&gt;
&lt;li&gt;Scan history and API logs&lt;/li&gt;
&lt;li&gt;Support tickets&lt;/li&gt;
&lt;li&gt;Billing records&lt;/li&gt;
&lt;li&gt;Developer webhook configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Redis can be used as a cache for domain results and scan information. For one-off file processing, the application uses a local &lt;code&gt;temp_uploads/&lt;/code&gt; directory at runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration Layer
&lt;/h3&gt;

&lt;p&gt;Aeglis can connect to external services for additional signals and analysis, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VirusTotal for hash reputation&lt;/li&gt;
&lt;li&gt;AlienVault for threat intelligence lookups&lt;/li&gt;
&lt;li&gt;WebRisk for malicious URL checks&lt;/li&gt;
&lt;li&gt;Groq for AI-assisted classification and verdict generation&lt;/li&gt;
&lt;li&gt;Playwright for browser automation and URL analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;External services are treated as supporting signals. The application also has local logic so that the system can continue using fallback paths when optional services such as Redis are unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consumer and Developer Workflows
&lt;/h2&gt;

&lt;p&gt;Aeglis supports two main types of users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consumer Applications
&lt;/h3&gt;

&lt;p&gt;A consumer safety application can send text, URLs, downloaded content, or uploaded files for analysis. The response can then be shown as a warning, a risk score, or a more detailed explanation before a user opens a link or file.&lt;/p&gt;

&lt;p&gt;The backend includes routes for signup, login, Google authentication flows, text scanning, deep file scanning, scan history, profile data, and history management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer and B2B Integrations
&lt;/h3&gt;

&lt;p&gt;Developers can use protected endpoints to add security analysis to their own products. The developer workflow is based on API keys, quotas, structured scan requests, and optional webhooks for asynchronous result delivery.&lt;/p&gt;

&lt;p&gt;The current developer-oriented routes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST /v3/api/scan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v3/api/deep-scan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v3/dashboard/generate-key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v3/dashboard/webhook&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /v3/dashboard/api-logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /v3/dashboard/api-data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /v3/dashboard/reports&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A developer API key is sent through the &lt;code&gt;Authorization&lt;/code&gt; header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer sk_live_xxx
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A text scan can be sent as JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /v3/api/scan
Content-Type: application/json
Authorization: Bearer sk_live_xxx
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input_text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Check this suspicious link: https://example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"end_user_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"customer-123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure allows an integrating product to associate scans with its own end users without exposing the internal authentication model of Aeglis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Webhooks for Automation
&lt;/h2&gt;

&lt;p&gt;Polling for every scan result is not always the best integration pattern. Aeglis includes webhook configuration and dispatch support so that developer systems can receive results after a scan is completed.&lt;/p&gt;

&lt;p&gt;A typical workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A developer creates an API key.&lt;/li&gt;
&lt;li&gt;The application sends text or a file for analysis.&lt;/li&gt;
&lt;li&gt;Aeglis processes the input through the relevant detection engines.&lt;/li&gt;
&lt;li&gt;The result is stored and returned through the API or delivered to a configured webhook.&lt;/li&gt;
&lt;li&gt;The integrating application uses the verdict and risk context in its own workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This can be useful for moderation queues, security dashboards, customer support tooling, download protection, or automated incident workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Setup
&lt;/h2&gt;

&lt;p&gt;The repository includes a complete Supabase schema in &lt;a href="https://github.com/Shubhamorigin/Aeglis-Intelligence/blob/main/database.sql" rel="noopener noreferrer"&gt;&lt;code&gt;database.sql&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The schema supports the tables and database objects required by the backend, including profiles, API keys, API logs, scans, support tickets, and billing records. To set up a development environment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a Supabase project.&lt;/li&gt;
&lt;li&gt;Open the Supabase SQL Editor.&lt;/li&gt;
&lt;li&gt;Copy the contents of &lt;code&gt;database.sql&lt;/code&gt; into the editor.&lt;/li&gt;
&lt;li&gt;Run the script.&lt;/li&gt;
&lt;li&gt;Add the project URL and keys to the local environment file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application also references a storage bucket named &lt;code&gt;cold-storage&lt;/code&gt; for exported reports and archival files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Project Locally
&lt;/h2&gt;

&lt;p&gt;Clone the repository and move into the project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Shubhamorigin/Aeglis-Intelligence.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Aeglis-Intelligence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a virtual environment if you want to isolate the project dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activate it on Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;venv&lt;/span&gt;&lt;span class="n"&gt;\Scripts\Activate.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On macOS or Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For browser-based URL analysis, install the Playwright browsers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; playwright &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the application with either command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000 &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Environment Variables
&lt;/h2&gt;

&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file in the project root. The required integrations use variables similar to these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALIENVAULT_API_KEY=your_alienvault_api_key
GROQ_API_KEY=your_groq_api_key
SB_ANON_KEY=your_supabase_anon_key
SB_API_URL=your_supabase_api_url
SB_SECRET_KEY=your_supabase_secret_key
VIRUSTOTAL_API_KEY=your_virustotal_api_key
WEB_RISK_API_KEY=your_web_risk_api_key
REDIS_URL=your_redis_url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some integrations are optional during local development. Redis can fall back to local or Supabase-backed paths when it is not available, but a properly configured Redis instance is recommended for better performance.&lt;/p&gt;

&lt;p&gt;Never commit real API keys, service-role keys, or database credentials to the repository. Keep &lt;code&gt;.env&lt;/code&gt; outside source control and use a secret manager for production deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Considerations
&lt;/h2&gt;

&lt;p&gt;A security-analysis service must protect both the service itself and the data it processes. Aeglis includes several controls that help establish that boundary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limits for public and authenticated routes&lt;/li&gt;
&lt;li&gt;JWT validation for protected consumer actions&lt;/li&gt;
&lt;li&gt;API-key validation for developer endpoints&lt;/li&gt;
&lt;li&gt;Hashing for stored API keys&lt;/li&gt;
&lt;li&gt;CORS and origin validation&lt;/li&gt;
&lt;li&gt;File upload size limits, including a 50 MB application limit&lt;/li&gt;
&lt;li&gt;Temporary file handling for uploaded content&lt;/li&gt;
&lt;li&gt;Webhook configuration and secret support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production deployments should still restrict CORS origins, enforce HTTPS, protect Redis and Supabase networking, validate every uploaded file, and keep all third-party credentials in a secure secret manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes the Project Useful
&lt;/h2&gt;

&lt;p&gt;Aeglis is intentionally more than a collection of scanners. It provides the surrounding platform pieces needed to turn detection logic into a product capability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single API surface for multiple input types&lt;/li&gt;
&lt;li&gt;Consumer authentication and scan history&lt;/li&gt;
&lt;li&gt;Developer API keys and quotas&lt;/li&gt;
&lt;li&gt;Webhook delivery for integrations&lt;/li&gt;
&lt;li&gt;Persistence for logs, profiles, support, and billing workflows&lt;/li&gt;
&lt;li&gt;A ready-to-run Supabase schema&lt;/li&gt;
&lt;li&gt;Local fallbacks for some optional infrastructure&lt;/li&gt;
&lt;li&gt;Modular engines that can evolve independently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it suitable as a foundation for consumer safety tools, security dashboards, content moderation systems, developer products, and internal security automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source and Contributions
&lt;/h2&gt;

&lt;p&gt;Aeglis Intelligence is released under the MIT License and is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Shubhamorigin/Aeglis-Intelligence" rel="noopener noreferrer"&gt;github.com/Shubhamorigin/Aeglis-Intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most useful contributions will likely be improvements to detection quality, better test coverage, safer integration defaults, new file-format support, clearer result explanations, and documentation for deployment scenarios.&lt;/p&gt;

&lt;p&gt;When contributing, keep secrets out of commits, test changes against representative inputs, and document any new environment variables or external service requirements.&lt;/p&gt;

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

&lt;p&gt;Threat detection becomes more useful when it is available where decisions are made: inside an application, a download flow, a moderation queue, or a developer workflow.&lt;/p&gt;

&lt;p&gt;Aeglis Intelligence is an attempt to make that integration practical by combining local analysis, external intelligence, AI-assisted reasoning, persistence, authentication, and delivery mechanisms in one open-source backend.&lt;/p&gt;

&lt;p&gt;Explore the repository, run the database schema, try the API locally, and adapt the detection layer to the needs of your own application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Shubhamorigin/Aeglis-Intelligence" rel="noopener noreferrer"&gt;github.com/Shubhamorigin/Aeglis-Intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built by:&lt;/strong&gt; Shubham&lt;/p&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>cybersecurity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I got tired of updating my portfolio, so I built a Headless Identity Hub &amp; API for Developers 🚀</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Thu, 06 Aug 2026 05:26:26 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/i-got-tired-of-updating-my-portfolio-so-i-built-a-headless-identity-hub-api-for-developers-1j2c</link>
      <guid>https://dev.to/shubhamoriginx/i-got-tired-of-updating-my-portfolio-so-i-built-a-headless-identity-hub-api-for-developers-1j2c</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;Like most developers, I love building projects but absolutely &lt;em&gt;hate&lt;/em&gt; updating my personal portfolio website. Copy-pasting the same bio, experience, and project links across my website, GitHub README, and social media was getting exhausting.&lt;/p&gt;

&lt;p&gt;So, I decided to build a centralized ecosystem for it. &lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://aaptics.in" rel="noopener noreferrer"&gt;Aaptics ID&lt;/a&gt;&lt;/strong&gt; — A digital identity, portfolio hub, and headless CMS built specifically for developers.&lt;/p&gt;

&lt;p&gt;Here is a breakdown of what I built and why:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Digital "PVC" Identity Card
&lt;/h3&gt;

&lt;p&gt;I wanted the profile to feel premium, almost like an Apple Wallet pass or a physical PVC card. Users can claim their short &lt;code&gt;@username&lt;/code&gt;, list their core tech stack, add experience, and generate a downloadable digital card.&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%2F8h5lozduwffmqlh6gp8j.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%2F8h5lozduwffmqlh6gp8j.png" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Developer Arsenal (The Engine) ⚙️
&lt;/h3&gt;

&lt;p&gt;This is my favorite part and the main reason I built Aaptics. Having a profile is cool, but developers need infrastructure. I added a "Dev Arsenal" section which provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Headless Config (REST API):&lt;/strong&gt; You can use Aaptics as a CMS for your personal Next.js/React portfolio. Just update your details on Aaptics, and fetch them anywhere using your private Bearer token. Build once, update everywhere.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Live Readme Widget:&lt;/strong&gt; It generates a live SVG render of your Aaptics Elite Card that you can directly embed into your GitHub &lt;code&gt;readme.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Shortlink Engine:&lt;/strong&gt; No more messy Vercel/Netlify URLs for hackathons. Generate clean &lt;code&gt;aaptics.in/go/my-app&lt;/code&gt; links right from your dashboard.&lt;/li&gt;
&lt;/ul&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%2Fl9dw22wnflubsj96p0as.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%2Fl9dw22wnflubsj96p0as.png" alt=" " width="800" height="799"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Central Hub &amp;amp; Cohort Billboard 🌐
&lt;/h3&gt;

&lt;p&gt;To make it a community, I built a Central Grid. It features a "Dev of the Day" spotlight and a Live Leaderboard based on profile views and activity.&lt;/p&gt;

&lt;p&gt;But the most fun feature is the &lt;strong&gt;Cohort Billboard&lt;/strong&gt;. It’s a 120-character, 24-hour disappearing broadcast board. Perfect for sharing quick elevator pitches, looking for hackathon teammates, or launching a side project without the spam of traditional feeds.&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%2F1czvh6n1zh5ob8eewham.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%2F1czvh6n1zh5ob8eewham.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Frontend:&lt;/strong&gt; React / Next.js&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS (Obsessed with dark mode aesthetics)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Backend/Database:&lt;/strong&gt; Python (FastAPI) &amp;amp; PostgreSQL / Supabase&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hosting:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let me know what you think!
&lt;/h3&gt;

&lt;p&gt;I just pushed this live and I would love for the dev.to community to tear it apart. Roast my UI, critique the UX, or test out the API.&lt;/p&gt;

&lt;p&gt;You can claim your short handles before they are gone here: &lt;strong&gt;&lt;a href="https://aaptics.in" rel="noopener noreferrer"&gt;aaptics.in&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What features would you want in a developer identity platform? Let me know in the comments! 👇&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>react</category>
      <category>ui</category>
    </item>
    <item>
      <title>Stop Googling "Indian PAN Card Regex" — I Built an Open Vault for Us 🇮🇳</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Tue, 28 Jul 2026 19:17:25 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/stop-googling-indian-pan-card-regex-i-built-an-open-vault-for-us-3076</link>
      <guid>https://dev.to/shubhamoriginx/stop-googling-indian-pan-card-regex-i-built-an-open-vault-for-us-3076</guid>
      <description>&lt;p&gt;How many times has this happened to you? &lt;/p&gt;

&lt;p&gt;You’ve built a flawless React component, set up a beautiful CI/CD pipeline, and structured your database perfectly. But then, you hit a simple user onboarding form and spend the next 20 minutes Googling: &lt;em&gt;"Valid regex for Indian GSTIN format"&lt;/em&gt; or &lt;em&gt;"Aadhaar card regex javascript"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Sometimes StackOverflow gives you a pattern from 2013, and sometimes ChatGPT hallucinates a format that rejects valid inputs. &lt;/p&gt;

&lt;p&gt;I got tired of searching for the same validation codes for every new project. So, this weekend, I built &lt;strong&gt;&lt;a href="https://www.aaptics.in/" rel="noopener noreferrer"&gt;The Indian Regex &amp;amp; Validation Vault&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It is a completely free, minimalist, zero-bloat directory of 100+ Indian-specific regular expressions and validation rules. No sign-ups, no paywalls—just search, copy, and paste.&lt;/p&gt;

&lt;h3&gt;
  
  
  Here are 5 essential patterns from the vault you can use right now:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Indian PAN Card Validation
&lt;/h4&gt;

&lt;p&gt;The Permanent Account Number (PAN) is a 10-character alphanumeric identifier. The first 5 characters are uppercase alphabets, the next 4 are numbers, and the last is an alphabet.&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;panRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]{5}[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{4}[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]{1}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;panRegex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ABCDE1234F&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Aadhaar Card Validation (With or Without Spaces)
&lt;/h4&gt;

&lt;p&gt;The Aadhaar number is a 12-digit unique identity number. It never starts with a 0 or 1.&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="c1"&gt;// Accepts: 123456789012 or 1234 5678 9012&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aadhaarRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;2-9&lt;/span&gt;&lt;span class="se"&gt;]{1}[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{3}\s?[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{4}\s?[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{4}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. GSTIN (Goods and Services Tax Identification Number)
&lt;/h4&gt;

&lt;p&gt;This is a 15-digit alphanumeric code. The first two digits are the state code, followed by the PAN, one digit for entity number, the letter 'Z' by default, and a checksum character.&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;gstinRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{2}[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]{5}[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{4}[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]{1}[&lt;/span&gt;&lt;span class="sr"&gt;1-9A-Z&lt;/span&gt;&lt;span class="se"&gt;]{1}&lt;/span&gt;&lt;span class="sr"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9A-Z&lt;/span&gt;&lt;span class="se"&gt;]{1}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Indian UPI ID
&lt;/h4&gt;

&lt;p&gt;Validates standard UPI virtual payment addresses (e.g., &lt;code&gt;username@oksbi&lt;/code&gt; or &lt;code&gt;number@ybl&lt;/code&gt;).&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;upiRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;a-zA-Z0-9.&lt;/span&gt;&lt;span class="se"&gt;\-&lt;/span&gt;&lt;span class="sr"&gt;_&lt;/span&gt;&lt;span class="se"&gt;]{2,256}&lt;/span&gt;&lt;span class="sr"&gt;@&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;a-zA-Z&lt;/span&gt;&lt;span class="se"&gt;]{2,64}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Indian Vehicle Registration (Number Plate)
&lt;/h4&gt;

&lt;p&gt;Validates formats like &lt;code&gt;MH 12 AB 1234&lt;/code&gt; or &lt;code&gt;DL1A1234&lt;/code&gt;.&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;vehicleRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]{2}[&lt;/span&gt;&lt;span class="sr"&gt; -&lt;/span&gt;&lt;span class="se"&gt;]?[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{1,2}(?:[&lt;/span&gt;&lt;span class="sr"&gt; -&lt;/span&gt;&lt;span class="se"&gt;]?[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;])?(?:[&lt;/span&gt;&lt;span class="sr"&gt; -&lt;/span&gt;&lt;span class="se"&gt;]?[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt;&lt;span class="se"&gt;)?[&lt;/span&gt;&lt;span class="sr"&gt; -&lt;/span&gt;&lt;span class="se"&gt;]?[&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]{4}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🚀 Get the rest of the 100+ Patterns
&lt;/h3&gt;

&lt;p&gt;If you need validations for Voter ID, Indian Passports, IFSC Codes, Landline numbers with STD codes, or even state-specific Pincodes, I have compiled them all in one place.&lt;/p&gt;

&lt;p&gt;I've also added detailed explanations for &lt;em&gt;how&lt;/em&gt; each regex works under the hood so you aren't just blindly copying code.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Bookmark the vault here:&lt;/strong&gt; &lt;strong&gt;&lt;a href="https://www.aaptics.in/" rel="noopener noreferrer"&gt;Aaptics.in - The Indian Regex Vault&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Bonus: There is also a second directory on the site explaining unknown developer system files and extensions like &lt;code&gt;.npmrc&lt;/code&gt; or &lt;code&gt;.safetensors&lt;/code&gt;!)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments if I missed any specific Indian document format, and I'll add it to the vault today! Happy coding! 👨‍💻🇮🇳&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>regex</category>
      <category>india</category>
    </item>
    <item>
      <title>GitHub Actions is Silently Burning Your Budget — Here's How to Calculate It</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:17:50 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/github-actions-is-silently-burning-your-budget-heres-how-to-calculate-it-3f5m</link>
      <guid>https://dev.to/shubhamoriginx/github-actions-is-silently-burning-your-budget-heres-how-to-calculate-it-3f5m</guid>
      <description>&lt;p&gt;&lt;em&gt;You enabled GitHub Actions, set up a few workflows, and moved on. Smart move. But did you ever check what it's actually costing you?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most developers don't. Until the bill arrives.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;GitHub Actions is brilliant. CI/CD straight from your repo, zero setup overhead, tight GitHub integration. It's one of those tools that just &lt;em&gt;works&lt;/em&gt; — so you stop thinking about it.&lt;/p&gt;

&lt;p&gt;And that's exactly when it gets expensive.&lt;/p&gt;

&lt;p&gt;Here's how it happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You start with one workflow. Then two. Then a matrix build.&lt;/li&gt;
&lt;li&gt;You add a scheduled job that runs every hour.&lt;/li&gt;
&lt;li&gt;Your team grows. PRs multiply. Every push triggers a run.&lt;/li&gt;
&lt;li&gt;You're on a paid plan, so you have a minutes budget — but no one's tracking it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three months later, you're staring at an overage charge and wondering where it came from.&lt;/p&gt;




&lt;h2&gt;
  
  
  How GitHub Actions Billing Actually Works
&lt;/h2&gt;

&lt;p&gt;Let's get technical for a second, because the pricing model has some sharp edges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public repos: unlimited minutes&lt;/li&gt;
&lt;li&gt;Private repos: 2,000 minutes/month (Free plan)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Paid plans (private repos):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Team: 3,000 minutes/month&lt;/li&gt;
&lt;li&gt;Enterprise: 50,000 minutes/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sounds generous. Until you factor in &lt;strong&gt;OS multipliers.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runner OS&lt;/th&gt;
&lt;th&gt;Multiplier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;2x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;10x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's not a typo. &lt;strong&gt;macOS runners cost 10x more&lt;/strong&gt; than Linux — minute for minute.&lt;/p&gt;

&lt;p&gt;So if your workflow runs for 6 minutes on macOS, GitHub counts it as &lt;strong&gt;60 minutes&lt;/strong&gt; from your quota. One workflow. One push. 60 minutes gone.&lt;/p&gt;

&lt;p&gt;Run that 10 times a day across a team of 5 developers, and you've burned through 3,000 minutes in a single day.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Math That Nobody Does
&lt;/h2&gt;

&lt;p&gt;Let's say your setup looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 pushes/day across your team&lt;/li&gt;
&lt;li&gt;A workflow that runs 8 minutes on macOS for tests&lt;/li&gt;
&lt;li&gt;22 working days/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's: &lt;code&gt;15 pushes × 8 min × 10 (macOS multiplier) × 22 days = **26,400 minutes/month**&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Your Team plan gives you 3,000. You're 23,400 minutes over.&lt;/p&gt;

&lt;p&gt;At $0.08/minute for macOS runners, that overage alone is &lt;strong&gt;$1,872/month.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From one workflow. That nobody audited.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Is Hard to Track Manually
&lt;/h2&gt;

&lt;p&gt;GitHub does show you usage in Settings → Billing. But it doesn't show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-workflow breakdown of costs&lt;/li&gt;
&lt;li&gt;Projections based on your current usage patterns&lt;/li&gt;
&lt;li&gt;What happens if you switch a runner from macOS to Linux&lt;/li&gt;
&lt;li&gt;How much you'd save by optimizing run frequency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'd have to pull data, do the math yourself, and repeat every time something changes. Most developers don't. Most startups don't.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tool I Built to Fix This
&lt;/h2&gt;

&lt;p&gt;I got tired of doing this math in spreadsheets, so I built a free calculator: &lt;strong&gt;&lt;a href="https://githubactionscost.online" rel="noopener noreferrer"&gt;githubactionscost.online&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You plug in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your GitHub plan&lt;/li&gt;
&lt;li&gt;Number of workflows&lt;/li&gt;
&lt;li&gt;Average run duration&lt;/li&gt;
&lt;li&gt;Runner OS (Linux / Windows / macOS)&lt;/li&gt;
&lt;li&gt;Runs per day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it instantly tells you your &lt;strong&gt;estimated monthly cost, quota consumption, and overage charges&lt;/strong&gt; — before they hit your invoice.&lt;/p&gt;

&lt;p&gt;No signup. No BS. Just the number.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Wins to Cut Your GitHub Actions Bill
&lt;/h2&gt;

&lt;p&gt;Before you even touch the calculator, here are three things you can do right now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Switch macOS runners to Linux wherever possible&lt;/strong&gt;&lt;br&gt;
Unless you're testing Apple-specific builds, Linux handles most CI tasks perfectly. Going from macOS to Linux cuts that runner cost by 10x immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add path filters to your workflows&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;src/**'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tests/**'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This stops workflows from triggering on README edits, docs updates, or config file changes. Zero cost, instant savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cache your dependencies aggressively&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v3&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~/.npm&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caching cuts run times significantly. Shorter runs = lower cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;GitHub Actions isn't expensive by default. It becomes expensive when nobody's watching.&lt;/p&gt;

&lt;p&gt;The same way you'd set up alerts for AWS costs or monitor your database query times, your CI/CD pipeline deserves the same attention. It's infrastructure. It scales with your team. And it bills accordingly.&lt;/p&gt;

&lt;p&gt;Take 2 minutes, plug your numbers into &lt;strong&gt;&lt;a href="https://githubactionscost.online" rel="noopener noreferrer"&gt;githubactionscost.online&lt;/a&gt;&lt;/strong&gt;, and find out exactly where you stand.&lt;/p&gt;

&lt;p&gt;You might be fine. Or you might find an easy $200/month sitting there waiting to be saved.&lt;/p&gt;

&lt;p&gt;Either way — now you know.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by a developer who got tired of surprise CI bills. If this helped, share it with your team.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>github</category>
      <category>devops</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I got tired of guessing my cloud bills, so I built 12 free developer cost calculators (No login, No BS).</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Thu, 02 Apr 2026 14:40:54 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/i-got-tired-of-guessing-my-cloud-bills-so-i-built-12-free-developer-cost-calculators-no-login-no-4mp1</link>
      <guid>https://dev.to/shubhamoriginx/i-got-tired-of-guessing-my-cloud-bills-so-i-built-12-free-developer-cost-calculators-no-login-no-4mp1</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I kept running into the same problem: trying to figure out exactly how much a CI/CD pipeline or a cloud service was going to cost &lt;em&gt;before&lt;/em&gt; getting the actual bill at the end of the month. Comparing GitHub Actions vs GitLab CI, or trying to understand AWS Lambda vs EC2 costs, usually meant digging through endless pricing docs and doing the math manually.&lt;/p&gt;

&lt;p&gt;So, I built a solution: a suite of 12 free, privacy-first developer cost calculators.&lt;/p&gt;

&lt;p&gt;Here are a few of the tools included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions Cost Calculator:&lt;/strong&gt; Paste your YAML workflow and instantly see the exact per-run and monthly costs across Ubuntu, Windows, and macOS runners. (Did you know macOS runners cost 10x more than Ubuntu?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD Cost Comparison:&lt;/strong&gt; Compare GitHub Actions, GitLab CI, and CircleCI side-by-side to find the cheapest platform for your specific workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Tools:&lt;/strong&gt; Lambda vs EC2 calculators, comparing x86 vs ARM Graviton2 architecture (switching to ARM can save you 20% on Lambda).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI API Rate Limit Calculator:&lt;/strong&gt; Figure out your max concurrent users and daily request budgets for OpenAI, Claude, Gemini, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack Cost Estimator:&lt;/strong&gt; Estimate your total monthly infra cost combining tools like Vercel, Supabase, Clerk, Resend, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why I made it free:&lt;/strong&gt;&lt;br&gt;
Every developer deserves accurate pricing data without hitting a paywall, an email wall, or needing a credit card.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Signup/Login:&lt;/strong&gt; Just open and use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully Private:&lt;/strong&gt; All calculations run entirely in your browser. Your data never leaves your device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Up-to-date:&lt;/strong&gt; Pricing data is updated for 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've put together a GitHub repo that lists all 12 tools, explains what they do, and has the direct links to use them. &lt;/p&gt;

&lt;p&gt;You can check out the full list and access the calculators here: &lt;br&gt;
👉 &lt;a href="https://github.com/Shubhamorigin/cloud-cost-calculators" rel="noopener noreferrer"&gt;https://github.com/Shubhamorigin/cloud-cost-calculators&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;U can directly use it - &lt;a href="https://githubactionscost.online" rel="noopener noreferrer"&gt;https://githubactionscost.online&lt;/a&gt;&lt;br&gt;
Let me know if you find it useful or if there are any other specific calculators you'd like to see added! Feedback is always welcome.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>cloud</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>GitHub Actions Changed Pricing in 2026 — Here's Exactly What You're Paying Now</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Sat, 28 Mar 2026 04:57:43 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/github-actions-changed-pricing-in-2026-heres-exactly-what-youre-paying-now-51db</link>
      <guid>https://dev.to/shubhamoriginx/github-actions-changed-pricing-in-2026-heres-exactly-what-youre-paying-now-51db</guid>
      <description>&lt;p&gt;In January 2026, GitHub updated their Actions runner pricing. Most teams didn't notice. Here's exactly what changed and how to calculate your new bill.&lt;/p&gt;




&lt;h2&gt;
  
  
  2026 Pricing Table
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ubuntu:&lt;/strong&gt;  $0.006/min  &lt;em&gt;(was $0.008 — 25% cheaper)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; $0.010/min  &lt;em&gt;(was $0.016 — 37.5% cheaper)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt;   $0.048/min  &lt;em&gt;(was $0.080 — 40% cheaper)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Good news&lt;/strong&gt; — prices dropped.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Bad news&lt;/strong&gt; — macOS still costs &lt;strong&gt;8× more than Ubuntu&lt;/strong&gt;. Most teams don't realize this until month-end.&lt;/p&gt;




&lt;h2&gt;
  
  
  The macOS Trap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10-minute macOS job:&lt;/strong&gt;   $0.048 × 10 = &lt;strong&gt;$0.48 per run&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10-minute Ubuntu job:&lt;/strong&gt;  $0.006 × 10 = &lt;strong&gt;$0.06 per run&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;20 pushes/day:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS → $9.60/day → $288/month
&lt;/li&gt;
&lt;li&gt;Ubuntu → $1.20/day → $36/month
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same test output. &lt;strong&gt;$252/month difference.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5 Ways to Reduce Your Bill
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Switch lint/typecheck jobs to &lt;strong&gt;Ubuntu&lt;/strong&gt; — identical output, 8× cheaper
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;path filters&lt;/strong&gt; — skip CI on docs-only commits
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache&lt;/strong&gt; node_modules, pip packages aggressively
&lt;/li&gt;
&lt;li&gt;Run tests in &lt;strong&gt;matrix parallel&lt;/strong&gt; — same cost, faster
&lt;/li&gt;
&lt;li&gt;Only use &lt;strong&gt;macOS&lt;/strong&gt; when you genuinely need Apple frameworks
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Free Calculator
&lt;/h2&gt;

&lt;p&gt;Paste your YAML → see exact monthly cost:&lt;br&gt;&lt;br&gt;
&lt;a href="https://githubactionscost.online/github-actions-cost-calculator" rel="noopener noreferrer"&gt;githubactionscost.online/github-actions-cost-calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No signup. Runs in browser. &lt;strong&gt;2026 pricing.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>cicd</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Built 11 Cloud Cost Calculators to Solve "Bill Shock" (And Why I'm Moving On)</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Tue, 24 Mar 2026 15:27:52 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/how-i-built-11-cloud-cost-calculators-to-solve-bill-shock-and-why-im-moving-on-ng6</link>
      <guid>https://dev.to/shubhamoriginx/how-i-built-11-cloud-cost-calculators-to-solve-bill-shock-and-why-im-moving-on-ng6</guid>
      <description>&lt;p&gt;Every developer has been there: You launch a side project on Vercel or AWS, and suddenly, you're hit with a bill you didn't expect. &lt;/p&gt;

&lt;p&gt;I decided to solve this by building &lt;strong&gt;githubactionscost.online&lt;/strong&gt; — a suite of 11+ high-precision calculators for Vercel, Netlify, Supabase, and more. Today, I want to share the technical journey and why I'm looking for a new owner to take this forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Tech Stack: "Keep it Simple &amp;amp; Static"
&lt;/h3&gt;

&lt;p&gt;I wanted these tools to be lightning-fast and cost $0 to maintain. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Pure HTML5, Tailwind CSS, and Vanilla JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture:&lt;/strong&gt; No database. No heavy backend. Everything is calculated client-side for privacy and speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad-Blocker Proof:&lt;/strong&gt; Instead of intrusive ads, I hardcoded "Native Recommendation Slots." They are part of the UI, meaning zero revenue loss to ad-blockers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📈 The Results: 100% Organic Growth
&lt;/h3&gt;

&lt;p&gt;Without spending a single penny on marketing, the platform started ranking for high-intent keywords. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Top Traffic Source:&lt;/strong&gt; United States (High-intent devs and founders).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secondary Sources:&lt;/strong&gt; France, Germany, Canada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO:&lt;/strong&gt; The calculators rank for keywords where users are actively looking to switch providers—making it a lead-gen goldmine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 The Pivot: Moving to Aaptics
&lt;/h3&gt;

&lt;p&gt;So, why sell a growing asset? &lt;/p&gt;

&lt;p&gt;I’m currently building &lt;strong&gt;Aaptics&lt;/strong&gt;, an AI platform designed to learn and clone your unique writing style. Aaptics is scaling fast and requires my 100% technical focus and capital for GPU infrastructure. &lt;/p&gt;

&lt;p&gt;As a founder, I’ve realized that to build something great (Aaptics), I have to let go of other successful projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤝 Looking for a New Owner
&lt;/h3&gt;

&lt;p&gt;I am looking for a strategic exit this week to inject capital into Aaptics' growth. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What you get:&lt;/strong&gt; Full GitHub repository, premium domain, and a ready-to-monetize Tier-1 traffic engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target Price:&lt;/strong&gt; Looking for a quick buyout in the &lt;strong&gt;$4,000 - $5,000&lt;/strong&gt; range.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a DevOps agency, a hosting provider, or an indie hacker looking for a high-authority asset, let’s talk! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DM me here or reach out via Twitter.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>cloud</category>
      <category>showdev</category>
    </item>
    <item>
      <title>GitHub Actions Changed Pricing in 2026 — Here's Exactly What You're Paying Now (Free Calculator Inside)</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Mon, 23 Mar 2026 05:49:43 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/github-actions-changed-pricing-in-2026-heres-exactly-what-youre-paying-now-free-calculator-3329</link>
      <guid>https://dev.to/shubhamoriginx/github-actions-changed-pricing-in-2026-heres-exactly-what-youre-paying-now-free-calculator-3329</guid>
      <description>&lt;h2&gt;
  
  
  The Bill That Started This
&lt;/h2&gt;

&lt;p&gt;In January 2026, GitHub quietly updated their Actions pricing. &lt;br&gt;
Ubuntu went from $0.008/min to $0.006/min — a 25% reduction. &lt;br&gt;
macOS went from $0.080/min to $0.048/min — a 40% drop.&lt;/p&gt;

&lt;p&gt;Good news, right? Cheaper CI/CD.&lt;/p&gt;

&lt;p&gt;Except most teams had no idea this happened. &lt;br&gt;
And many teams are &lt;em&gt;still&lt;/em&gt; paying for macOS runners &lt;br&gt;
when Ubuntu would do the same job for 8x less.&lt;/p&gt;


&lt;h2&gt;
  
  
  The 2026 GitHub Actions Pricing (Official Numbers)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runner&lt;/th&gt;
&lt;th&gt;Old Price&lt;/th&gt;
&lt;th&gt;New Price (Jan 2026)&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ubuntu (Linux)&lt;/td&gt;
&lt;td&gt;$0.008/min&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.006/min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;$0.016/min&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.010/min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-37.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;$0.080/min&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.048/min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-40%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;These are the overage rates after free tier. &lt;br&gt;
Free tier: 2,000 min (Free), 3,000 min (Pro), &lt;br&gt;
50,000 min (Team).&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The macOS Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;macOS runners cost &lt;strong&gt;8x more&lt;/strong&gt; than Ubuntu runners &lt;br&gt;
on the new pricing. Before the update, it was 10x.&lt;/p&gt;

&lt;p&gt;Still 8x.&lt;/p&gt;

&lt;p&gt;Here's what that means in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# This job on macOS: $0.048/min × 10 min = $0.48 per run&lt;/span&gt;
&lt;span class="c1"&gt;# This job on Ubuntu: $0.006/min × 10 min = $0.06 per run&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;macos-latest&lt;/span&gt;  &lt;span class="c1"&gt;# ← costs 8x more than ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you push 20 times per day, that's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS: &lt;strong&gt;$9.60/day → $288/month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ubuntu: &lt;strong&gt;$1.20/day → $36/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the same test results.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Windows Trap
&lt;/h2&gt;

&lt;p&gt;Windows runners are 1.67x more expensive than Ubuntu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu: $0.006/min&lt;/li&gt;
&lt;li&gt;Windows: $0.010/min&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many teams run cross-platform tests on Windows "just in case" &lt;br&gt;
without checking if their Linux tests already cover it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Self-Hosted Runner Change (March 2026 Controversy)
&lt;/h2&gt;

&lt;p&gt;GitHub announced charges for self-hosted runners &lt;br&gt;
(ephemeral, network access) — $0.002/min starting March 2026. &lt;/p&gt;

&lt;p&gt;This is still significantly cheaper than hosted runners &lt;br&gt;
but it caught many teams off guard who assumed &lt;br&gt;
self-hosted = always free.&lt;/p&gt;


&lt;h2&gt;
  
  
  Free Minutes — Do You Know Your Limit?
&lt;/h2&gt;

&lt;p&gt;Before any overage kicks in, you get:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Free Minutes/Month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;2,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;3,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;With OS multipliers applied:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2,000 Linux minutes on Free plan&lt;/li&gt;
&lt;li&gt;But only &lt;strong&gt;200 macOS minutes&lt;/strong&gt; (10x multiplier)&lt;/li&gt;
&lt;li&gt;Or &lt;strong&gt;666 Windows minutes&lt;/strong&gt; (3x multiplier)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  How to Calculate Your Actual Cost
&lt;/h2&gt;

&lt;p&gt;I built a free calculator that does this instantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 &lt;a href="https://www.githubactionscost.online/github-actions-cost-calculator" rel="noopener noreferrer"&gt;GitHub Actions Cost Calculator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste your workflow YAML → instant cost breakdown across &lt;br&gt;
all 3 runner types → AI suggestions to reduce costs.&lt;/p&gt;

&lt;p&gt;No signup. No account. Runs in browser. Nothing stored.&lt;/p&gt;


&lt;h2&gt;
  
  
  5 Ways to Reduce Your GitHub Actions Bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Switch lint/type-check jobs to Ubuntu&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Before — expensive&lt;/span&gt;
&lt;span class="na"&gt;lint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;macos-latest&lt;/span&gt;

&lt;span class="c1"&gt;# After — 8x cheaper, identical output&lt;/span&gt;
&lt;span class="na"&gt;lint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Use path filters — skip CI on docs changes&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;src/**'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;!docs/**'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;!*.md'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Cache dependencies aggressively&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v4&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~/.npm&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Run jobs in parallel instead of serial&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;test-suite&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unit&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;integration&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;e2e&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;# All 3 run simultaneously — same total time, &lt;/span&gt;
&lt;span class="c1"&gt;# same total cost, but faster wall-clock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Only run macOS when you truly need it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;os&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;macos-latest&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.os }}&lt;/span&gt;
  &lt;span class="c1"&gt;# Ask: does your macOS test find bugs Ubuntu misses?&lt;/span&gt;
  &lt;span class="c1"&gt;# If not, remove macos-latest from the matrix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Bigger Picture — 11 More Billing Surprises
&lt;/h2&gt;

&lt;p&gt;GitHub Actions is just one piece.&lt;/p&gt;

&lt;p&gt;After I built that calculator, I realized the same problem &lt;br&gt;
existed across the whole developer tooling ecosystem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt; now throttles unauthenticated pulls to &lt;br&gt;
10/hour (down from 100/6hr) — shared CI runner IPs &lt;br&gt;
mean your builds fail because of other users&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firebase&lt;/strong&gt; bills per Firestore document read — &lt;br&gt;
one bad list query can cost $179/month&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Netlify's new credit system&lt;/strong&gt; makes bandwidth overage &lt;br&gt;
cost $0.55/GB vs Vercel's $0.15/GB — 3.7x difference&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built free calculators for all of these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://www.githubactionscost.online" rel="noopener noreferrer"&gt;DevCost Tools — All 12 Calculators&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CI/CD, AWS Lambda, CodeBuild, Vercel vs Netlify, &lt;br&gt;
Supabase vs Firebase, Docker Hub, CircleCI, GitLab CI, &lt;br&gt;
AI API rate limits, full tech stack estimator.&lt;/p&gt;

&lt;p&gt;All free. All 2026 pricing. All browser-side calculations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Reference — 2026 Pricing Cheat Sheet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Actions
  Ubuntu:  $0.006/min  (1x multiplier)
  Windows: $0.010/min  (1.67x multiplier)  
  macOS:   $0.048/min  (8x multiplier)

GitLab CI
  All OS:  $0.010/min flat  (no multiplier!)
  macOS:   6x compute minutes consumed

CircleCI
  Linux:   $0.006/min (10 credits/min)
  macOS:   $0.060/min (100 credits/min)
  1 credit = $0.0006

AWS Lambda
  x86:     $0.0000166667/GB-s
  ARM:     $0.0000133334/GB-s  (20% cheaper)
  Free:    1M requests + 400K GB-s/month

Docker Hub
  Unauth:  10 pulls/hour per IP
  Free:    100 pulls/hour per user
  Paid:    Unlimited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Which of these billing surprises caught you off guard? &lt;br&gt;
Let me know in the comments 👇&lt;/p&gt;

&lt;p&gt;And if this saved you from a surprise bill — &lt;br&gt;
share it with one teammate who runs macOS builds.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devops</category>
      <category>cicd</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop Flying Blind: How to Calculate and Optimize GitHub Actions Costs in Real-Time</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Sun, 22 Mar 2026 05:30:09 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/stop-flying-blind-how-to-calculate-and-optimize-github-actions-costs-in-real-time-289</link>
      <guid>https://dev.to/shubhamoriginx/stop-flying-blind-how-to-calculate-and-optimize-github-actions-costs-in-real-time-289</guid>
      <description>&lt;h3&gt;
  
  
  The Problem: The "Bill Shock" of 2026
&lt;/h3&gt;

&lt;p&gt;In January 2026, GitHub updated its pricing model for runners and introduced new fees for certain self-hosted configurations. For many teams, CI/CD went from a "background cost" to a major line item on the monthly invoice.&lt;/p&gt;

&lt;p&gt;The problem isn't just the cost; it's the &lt;strong&gt;unpredictability&lt;/strong&gt;. How much does that new &lt;code&gt;integration-test.yml&lt;/code&gt; actually cost per month? Usually, you only find out after the bill arrives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introducing GitHubActionsCost.online
&lt;/h3&gt;

&lt;p&gt;I built &lt;a href="https://githubactionscost.online" rel="noopener noreferrer"&gt;githubactionscost.online&lt;/a&gt; to give developers a free, instant way to estimate and optimize their workflow spend before they even hit "git push."&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 How it Works: Technical Deep Dive
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Zero-Trust YAML Parsing
&lt;/h4&gt;

&lt;p&gt;Privacy is a major concern when handling infrastructure code. Instead of sending your YAML files to a backend server, the tool uses &lt;strong&gt;Client-Side Parsing&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The parsing logic is written in vanilla JavaScript that runs directly in your browser.&lt;/li&gt;
&lt;li&gt;Your workflow secrets, job names, and logic never leave your machine.&lt;/li&gt;
&lt;li&gt;It calculates costs based on the duration ($T$) and the specific runner rate ($R$) using the formula: $$Cost = T \times R$$&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Side-by-Side Runner Comparison
&lt;/h4&gt;

&lt;p&gt;The tool fetches the latest 2026 rates for Ubuntu, Windows, and macOS runners. It provides a clear comparison so you can see exactly how much you save by switching OS or using smaller instances.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. AI-Powered Workflow Optimization
&lt;/h4&gt;

&lt;p&gt;This is where the real savings happen. By integrating with the &lt;strong&gt;OpenRouter API&lt;/strong&gt;, the tool analyzes your YAML structure to find "leaks."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Missing Timeouts&lt;/strong&gt;: Jobs that hang can drain your credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching Opportunities&lt;/strong&gt;: Identifying steps where &lt;code&gt;actions/cache&lt;/code&gt; can shave off minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matrix Optimization&lt;/strong&gt;: Consolidating jobs to reduce overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact&lt;/strong&gt;: Users have seen cost reductions of &lt;strong&gt;40% to 60%&lt;/strong&gt; just by following these AI suggestions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🛠 The Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Vanilla HTML/CSS/JS (for maximum speed and no-bloat).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;: Vercel (Global Edge Network).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Engine&lt;/strong&gt;: OpenRouter (providing access to the latest LLM models for workflow analysis).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why I Built This
&lt;/h3&gt;

&lt;p&gt;CI/CD should be a leverage, not a liability. By providing a transparent way to calculate costs—per run, per day, or per year—developers can make informed decisions about their automation infrastructure.&lt;/p&gt;

&lt;p&gt;If you're tired of guessing your GitHub bill, give it a try. It’s open, free, and privacy-first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check it out:&lt;/strong&gt; &lt;a href="https://githubactionscost.online" rel="noopener noreferrer"&gt;githubactionscost.online&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>githubactions</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built a Free GitHub Actions Cost Calculator Over a Weekend. Here's What 7 Days of Data Taught Me.</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Sat, 21 Mar 2026 05:14:57 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/i-built-a-free-github-actions-cost-calculator-over-a-weekend-heres-what-7-days-of-data-taught-me-3od6</link>
      <guid>https://dev.to/shubhamoriginx/i-built-a-free-github-actions-cost-calculator-over-a-weekend-heres-what-7-days-of-data-taught-me-3od6</guid>
      <description>&lt;p&gt;Last month I got an email from GitHub.&lt;/p&gt;

&lt;p&gt;Pricing changes. Effective January 2026. Self-hosted runners now have a per-minute fee attached.&lt;/p&gt;

&lt;p&gt;I did the math for our team's workflows. The numbers were not catastrophic, but they were not small either. And the frustrating part was that I had to do that math manually — in a spreadsheet, looking up runner rates, estimating step times, multiplying everything out.&lt;/p&gt;

&lt;p&gt;There had to be a better way.&lt;/p&gt;

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




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

&lt;p&gt;&lt;strong&gt;githubactionscost.online&lt;/strong&gt; — a free GitHub Actions cost calculator.&lt;/p&gt;

&lt;p&gt;Paste your workflow YAML. Get the exact cost per run, daily, monthly, and yearly. See what the same workflow would cost on Ubuntu, Windows, and macOS runners side by side. Then get AI-powered suggestions with copy-paste YAML code to cut your bill.&lt;/p&gt;

&lt;p&gt;No account. No signup. No credit card. Your YAML never leaves your browser for the calculation part.&lt;/p&gt;

&lt;p&gt;I built it in a weekend. Shipped it. And here is what happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers After 7 Days
&lt;/h2&gt;

&lt;p&gt;I did not promote it anywhere. No Reddit post. No Hacker News. No tweet. Just deployed it and watched Google Analytics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;109 active users in 7 days.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That might sound small. But zero promotion, seven days, and a very niche developer tool? I will take it.&lt;/p&gt;

&lt;p&gt;What surprised me more than the traffic was where it came from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;United States — 46 users (42%)&lt;/strong&gt;&lt;br&gt;
Makes sense. GitHub's largest user base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;France — 10 users (9%)&lt;/strong&gt;&lt;br&gt;
Did not expect this at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;India — 6 users (5.5%)&lt;/strong&gt;&lt;br&gt;
Smallest number but by far the most engaged. Average session time of 6 minutes and 5 seconds. Engagement rate of 58%. These users actually used the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Germany, Netherlands, UK, Poland, China, Colombia&lt;/strong&gt; — all showed up organically.&lt;/p&gt;

&lt;p&gt;Organic traffic from 10 countries in 7 days with zero promotion tells me the search intent is real right now.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why GitHub Actions Costs Are Confusing
&lt;/h2&gt;

&lt;p&gt;Most developers set up a workflow, get it working, and forget about it. The billing is abstracted away until the monthly invoice arrives.&lt;/p&gt;

&lt;p&gt;Here is what catches people off guard.&lt;/p&gt;

&lt;p&gt;GitHub charges different rates depending on which runner you use. And the difference is not small.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runner&lt;/th&gt;
&lt;th&gt;Cost Per Minute&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ubuntu (Linux)&lt;/td&gt;
&lt;td&gt;$0.008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;$0.016&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;$0.080&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That macOS number deserves a moment of attention.&lt;/p&gt;

&lt;p&gt;macOS runners cost 10 times more than Ubuntu runners. Per minute.&lt;/p&gt;

&lt;p&gt;If you have a 10-minute workflow running on &lt;code&gt;macos-latest&lt;/code&gt; instead of &lt;code&gt;ubuntu-latest&lt;/code&gt;, and it triggers 20 times per day, the annual cost difference is over $5,000.&lt;/p&gt;

&lt;p&gt;Most developers using macOS runners do not need macOS runners. They copied a workflow template, it had &lt;code&gt;macos-latest&lt;/code&gt; in it, it worked, and they moved on. Nobody audited the runner choice.&lt;/p&gt;

&lt;p&gt;That is exactly the kind of thing this tool surfaces.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Real Example
&lt;/h2&gt;

&lt;p&gt;Here is a standard Node.js workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI Pipeline&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;18'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker build -t myapp .&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker push myapp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running this 10 times per day costs approximately &lt;strong&gt;$205 per month&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The AI suggested three changes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Add npm caching&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v4&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~/.npm&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saves about 2 minutes per run by not re-downloading packages every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add concurrency groups&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;concurrency&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.workflow }}-${{ github.ref }}&lt;/span&gt;
  &lt;span class="na"&gt;cancel-in-progress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cancels outdated runs when new commits push quickly. If you push 3 times in 5 minutes, only the last one runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Use npm ci instead of npm install&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Faster and more deterministic in CI environments.&lt;/p&gt;

&lt;p&gt;Result: estimated monthly cost drops from $205 to around $85. That is 58% savings from three YAML changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Cost Calculation Actually Works
&lt;/h2&gt;

&lt;p&gt;The tool parses your YAML using js-yaml in the browser. Then it estimates time for each step based on a database of known action timings.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;actions/checkout&lt;/code&gt; — approximately 15 seconds.&lt;br&gt;
&lt;code&gt;actions/setup-node&lt;/code&gt; — approximately 20 seconds.&lt;br&gt;
&lt;code&gt;npm install&lt;/code&gt; — approximately 120 seconds.&lt;br&gt;
&lt;code&gt;docker build&lt;/code&gt; — approximately 180 seconds.&lt;br&gt;
&lt;code&gt;npm test&lt;/code&gt; — approximately 180 seconds.&lt;/p&gt;

&lt;p&gt;It adds these up, rounds up to the nearest minute, multiplies by the runner's per-minute rate, and shows you per-run, daily, monthly, and yearly costs for every job.&lt;/p&gt;

&lt;p&gt;Then it shows you the same job's cost across all four runner types side by side — Ubuntu, Windows, macOS, and self-hosted — so you can see immediately if you are on an expensive runner unnecessarily.&lt;/p&gt;

&lt;p&gt;The AI suggestions come from a serverless function that sends your workflow structure to an LLM and asks for specific optimizations. The model returns JSON with titles, descriptions, savings estimates, priority levels, and copy-paste YAML code examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The non-code work takes longer than the code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building the actual tool took a weekend. The domain purchase, DNS setup, Vercel deployment, SSL, privacy policy, terms, Google Analytics, Search Console verification, sitemap submission — that took another 3 days. For small solo projects, the launch infrastructure is real work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-friction tools get organic traffic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I did not promote this anywhere and 109 people showed up in 7 days purely from search. Developer tools that solve a specific, searchable problem get found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timing matters more than most people think.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub's pricing change in January 2026 created a search spike. The keywords "github actions price" and "github actions cost" are trending right now. Building a tool that matches a trending search intent is different from building a tool and then hoping people search for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most engaged users are not always the largest segment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;India was 5.5% of my traffic but 58% engagement rate and 6 minutes average session time. The US was 42% of traffic but 4% engagement and 1 second average session. Knowing which segment actually uses your product versus which one bounces is important for understanding who you are really building for.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Next
&lt;/h2&gt;

&lt;p&gt;The tool is live and working. Promotion starts now — starting with this article.&lt;/p&gt;

&lt;p&gt;After that: Hacker News, Reddit communities, and finding the right GitHub repositories where cost-conscious developers are already having this conversation.&lt;/p&gt;

&lt;p&gt;If you use GitHub Actions and have not audited your runner choices recently — paste a workflow into the calculator. It takes about 30 seconds and might save you more than you expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;githubactionscost.online&lt;/strong&gt; — free, no signup, no data stored.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with vanilla HTML/CSS/JS, Vercel serverless functions, and OpenRouter for the AI suggestions. The entire frontend is a single HTML file.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>github</category>
      <category>devops</category>
      <category>cicd</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The 3-line YAML mistake that quietly drains your GitHub Actions minutes (and how I built a local parser to catch it)</title>
      <dc:creator>Shubham</dc:creator>
      <pubDate>Fri, 20 Mar 2026 04:43:24 +0000</pubDate>
      <link>https://dev.to/shubhamoriginx/the-3-line-yaml-mistake-that-quietly-drains-your-github-actions-minutes-and-how-i-built-a-local-4g44</link>
      <guid>https://dev.to/shubhamoriginx/the-3-line-yaml-mistake-that-quietly-drains-your-github-actions-minutes-and-how-i-built-a-local-4g44</guid>
      <description>&lt;p&gt;We’ve all been there. You want to ensure your open-source library or SaaS works across all operating systems, so you proudly write this beautiful, innocent-looking matrix strategy in your &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.os }}&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;os&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;windows-latest&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;macos-latest&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks harmless, right? &lt;/p&gt;

&lt;p&gt;What GitHub’s documentation buries in the fine print is the &lt;strong&gt;Runner Multiplier Tax&lt;/strong&gt;. &lt;br&gt;
While Ubuntu runs at the base rate ($0.008/min), Windows costs &lt;strong&gt;2x&lt;/strong&gt; more, and macOS costs a staggering &lt;strong&gt;10x&lt;/strong&gt; more ($0.080/min). &lt;/p&gt;

&lt;p&gt;If your test suite takes 15 minutes to run, that single &lt;code&gt;macos-latest&lt;/code&gt; line just cost you $1.20 &lt;em&gt;per run&lt;/em&gt;. If you have a team pushing 10 commits a day, you are burning hundreds of dollars on macOS runners for code that probably only needed Linux testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem: Bill Shock is a lagging indicator
&lt;/h3&gt;

&lt;p&gt;By the time you see the GitHub billing dashboard at the end of the month, the damage is already done. I wanted a way to see the exact cost &lt;em&gt;before&lt;/em&gt; I committed the YAML.&lt;/p&gt;

&lt;p&gt;But here is the catch: &lt;strong&gt;No sane developer is going to paste their company’s proprietary CI/CD infrastructure code into a random third-party website.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: A 100% Client-Side Cost Calculator
&lt;/h3&gt;

&lt;p&gt;I decided to build a standalone web tool to solve this: &lt;strong&gt;&lt;a href="https://www.githubactionscost.online/" rel="noopener noreferrer"&gt;GitHub Actions Cost Calculator&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Instead of building a backend that ingests and stores your YAML (which is a massive security red flag), I built the entire parsing engine to run &lt;strong&gt;locally in your browser&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here is how the architecture works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Server Dependency:&lt;/strong&gt; You paste your YAML, and a client-side JS parser breaks down the jobs, steps, and &lt;code&gt;runs-on&lt;/code&gt; variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 10x Exposer:&lt;/strong&gt; It immediately splits the cost projection side-by-side (Ubuntu vs. Windows vs. macOS), exposing exactly how much that matrix strategy is costing you per day/month/year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Optimization:&lt;/strong&gt; It runs a quick heuristic check to suggest caching (&lt;code&gt;actions/cache&lt;/code&gt;) and runner downgrades to slash the bill by up to 60%.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because everything happens in your browser DOM, &lt;strong&gt;your YAML is never stored, logged, or sent to a database.&lt;/strong&gt; ### Test your heaviest workflow&lt;/p&gt;

&lt;p&gt;If you are managing CI/CD for your team, I challenge you to drop your heaviest, most complex workflow file into the calculator. You might be surprised by how much that one macOS job is silently eating your budget. &lt;/p&gt;

&lt;p&gt;Try it out here (no signup required): &lt;a href="https://www.githubactionscost.online/" rel="noopener noreferrer"&gt;www.githubactionscost.online&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a solo dev building this out, so if you find any edge cases with complex matrix arrays or reusable workflows that the parser misses, let me know in the comments! How do you guys currently monitor your Actions billing?&lt;/p&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>ops</category>
      <category>githubactions</category>
    </item>
  </channel>
</rss>
