<?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: LERUfic</title>
    <description>The latest articles on DEV Community by LERUfic (@lerufic).</description>
    <link>https://dev.to/lerufic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F241103%2F79e0cf80-35c7-45a4-a4c8-cfc8ebf5ec1a.png</url>
      <title>DEV Community: LERUfic</title>
      <link>https://dev.to/lerufic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lerufic"/>
    <language>en</language>
    <item>
      <title>Stop Blind-CURLing in Production: How I Built an Audit Layer for API Operations</title>
      <dc:creator>LERUfic</dc:creator>
      <pubDate>Sat, 11 Apr 2026 05:52:03 +0000</pubDate>
      <link>https://dev.to/lerufic/stop-blind-curling-in-production-how-i-built-an-audit-layer-for-api-operations-2aln</link>
      <guid>https://dev.to/lerufic/stop-blind-curling-in-production-how-i-built-an-audit-layer-for-api-operations-2aln</guid>
      <description>&lt;p&gt;If you’ve ever worked in Fintech, you know the feeling. It’s 2:00 PM on a Tuesday, and a production sync has failed. A developer needs to manually trigger a Stripe webhook or hit an internal reconciliation endpoint.&lt;/p&gt;

&lt;p&gt;In most places, this involves someone opening a terminal, pasting a curl command with a production secret, and hitting enter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As a DevOps, this keeps me up at night.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who executed that? What exactly was in the JSON body? Did anyone double-check the URL search params? In a world of SOC2 compliance and strict financial audits, “trust me, I ran the right command” isn’t an answer.&lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;Heimdall&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: The “Wild West” of Production CURLs
&lt;/h2&gt;

&lt;p&gt;Developers need to do HTTP requests at production. It’s a fact of life. But terminal history is easily lost, and there is zero “Human-in-the-Loop” validation.&lt;/p&gt;

&lt;p&gt;In Fintech, every state-changing request needs four eyes. One to request, and one to approve.&lt;/p&gt;

&lt;p&gt;I needed a tool that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Separated Duties&lt;/strong&gt;: Developers can draft requests, but only designated Approvers can click “Execute.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logged Everything&lt;/strong&gt;: A permanent, uneditable audit trail of every header, param, and response payload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Used Enterprise Identity&lt;/strong&gt;: No “admin/admin” logins. It had to speak LDAP/Active Directory or SSO out of the box.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Introducing Heimdall: The Gatekeeper
&lt;/h2&gt;

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

&lt;p&gt;Heimdall isn't just an API client; it's a &lt;strong&gt;Governance Layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Built with &lt;strong&gt;Next.js 16&lt;/strong&gt; and &lt;strong&gt;Prisma&lt;/strong&gt;, it acts as a centralized dashboard where your team can manage production API operations without ever touching a terminal.&lt;/p&gt;

&lt;p&gt;🛠 &lt;strong&gt;The Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Request&lt;/strong&gt;: A developer (Requester) builds the request—Method, URL, Headers, and Body. They can even save it as a "Template" for common tasks like "User Password Reset" or "Force Cache Purge."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Review&lt;/strong&gt;: An Approver resets the dashboard. They see the pending request, verify the parameters, and check for any security red flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Execution&lt;/strong&gt;: Once approved, the platform executes the request from within the secure network environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Audit&lt;/strong&gt;: The system logs the latency, the status code, and the full raw response for future debugging or compliance reviews.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Tech Behind the Tool
&lt;/h2&gt;

&lt;p&gt;I wanted this to be easy to deploy but powerful enough for me.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unified Identity&lt;/strong&gt;: I integrated a dual-mode Auth engine. Whether your company uses legacy Active Directory/LDAP or modern OIDC (Google/Okta), Heimdall just works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Portability&lt;/strong&gt;: It starts with zero-config SQLite, but supports MySQL and PostgreSQL for production scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit-First Logging&lt;/strong&gt;: Logs are flattened into structured JSON strings, making them natively compatible with Datadog, ELK, or CloudWatch.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;I built this tool because I needed to audit every curl my developers were doing. It has turned “stressful production hacks” into a “transparent, reviewed workflow.”&lt;/p&gt;

&lt;p&gt;If you’re struggling with compliance or just want a safer way for your team to handle production API operations, I hope Heimdall can help you too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check it out on GitHub&lt;/strong&gt;: &lt;a href="https://github.com/LERUfic/Heimdall" rel="noopener noreferrer"&gt;https://github.com/LERUfic/Heimdall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;: &lt;a href="https://hub.docker.com/r/lerufic/heimdall" rel="noopener noreferrer"&gt;https://hub.docker.com/r/lerufic/heimdall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can checkout the demo here&lt;/strong&gt;: &lt;a href="https://heimdall-demo.lerufic.com" rel="noopener noreferrer"&gt;https://heimdall-demo.lerufic.com&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requester:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;requester1&lt;/span&gt;
&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Admin:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;admin1&lt;/span&gt;
&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I’d love to hear your feedback!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>opensource</category>
      <category>api</category>
    </item>
  </channel>
</rss>
