<?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: Saran Hiruthik</title>
    <description>The latest articles on DEV Community by Saran Hiruthik (@saranhiruthik).</description>
    <link>https://dev.to/saranhiruthik</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%2F3956699%2Ff8036d74-1fa6-4d46-989d-5c6c6e737918.png</url>
      <title>DEV Community: Saran Hiruthik</title>
      <link>https://dev.to/saranhiruthik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saranhiruthik"/>
    <language>en</language>
    <item>
      <title>I Built a CLI Tool That Fixes the "Bro Send the .env File" Problem - envman</title>
      <dc:creator>Saran Hiruthik</dc:creator>
      <pubDate>Fri, 29 May 2026 06:17:11 +0000</pubDate>
      <link>https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-envman-1oki</link>
      <guid>https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-envman-1oki</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io" class="crayons-story__hidden-navigation-link"&gt;I Built a CLI Tool That Fixes the "Bro Send the .env File" Problem&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub “Finish-Up-A-Thon” Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/saranhiruthik" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3956699%2Ff8036d74-1fa6-4d46-989d-5c6c6e737918.png" alt="saranhiruthik profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/saranhiruthik" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Saran Hiruthik
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Saran Hiruthik
                
              
              &lt;div id="story-author-preview-content-3775600" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/saranhiruthik" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3956699%2Ff8036d74-1fa6-4d46-989d-5c6c6e737918.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Saran Hiruthik&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io" id="article-link-3775600"&gt;
          I Built a CLI Tool That Fixes the "Bro Send the .env File" Problem
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built a CLI Tool That Fixes the "Bro Send the .env File" Problem</title>
      <dc:creator>Saran Hiruthik</dc:creator>
      <pubDate>Fri, 29 May 2026 06:16:07 +0000</pubDate>
      <link>https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io</link>
      <guid>https://dev.to/saranhiruthik/i-built-a-cli-tool-that-fixes-the-bro-send-the-env-file-problem-20io</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Every dev team has this conversation. Someone joins a project, opens their terminal, and the first message they send is "bro can you send the .env file" — and someone else pastes it raw on WhatsApp or Slack like it's nothing. API keys, database passwords, Stripe secrets, all of it flying around in plaintext on chat apps.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;envman&lt;/strong&gt; &lt;br&gt;
a CLI tool that syncs &lt;code&gt;.env&lt;/code&gt; files across dev teams securely. Two commands is all it takes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;envman push   &lt;span class="c"&gt;# encrypts your .env and uploads it&lt;/span&gt;
envman get    &lt;span class="c"&gt;# pulls, shows a diff, asks before overwriting&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire &lt;code&gt;.env&lt;/code&gt; is encrypted with AES-256-GCM on your machine before it ever leaves it. The server stores only ciphertext. Even if the database gets compromised, secrets are unreadable without the user's token. Built entirely in Go — a CLI binary and a REST API backend with JWT auth, role-based access control (owner, coordinator, member), and a full audit trail of every push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/SaranHiruthikM/envman" rel="noopener noreferrer"&gt;https://github.com/SaranHiruthikM/envman&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;envman register
&lt;span class="go"&gt;Name: Saran
Email: saran@example.com
Password:
Registered and logged in successfully

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;myproject
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;envman init
&lt;span class="go"&gt;Project name: my-app
Project 'my-app' created and linked
.envman.json created — commit this to git

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;envman push
&lt;span class="go"&gt;Secrets pushed successfully

&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;teammate on another machine
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;envman get
&lt;span class="go"&gt;Changes:
  + STRIPE_KEY=*** (new)
  ~ DATABASE_URL=*** (changed)

Apply changes? [y/n]: y
.env updated
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;This project lived in my head for weeks. I knew the problem was real — I had sent &lt;code&gt;.env&lt;/code&gt; files over WhatsApp myself more times than I want to admit. But every time I sat down to build it I got stuck on questions I hadn't answered: where do secrets actually live, how do roles work, what happens when two people have conflicting values, how does encryption work without a shared key.&lt;/p&gt;

&lt;p&gt;The project had a rough &lt;code&gt;main.go&lt;/code&gt; and nothing else.&lt;/p&gt;

&lt;p&gt;What changed: I forced myself to design everything before touching code. The database schema, the API endpoints, the role system, the encryption approach — all of it locked down first. Once the design was solid, the code almost wrote itself. In three weeks I went from a blank file to a working CLI with a full backend, migrations, middleware, client-side encryption, and a diff engine.&lt;/p&gt;

&lt;p&gt;The hardest part wasn't the code. It was resisting the urge to skip the design phase and just start typing. Every hour I spent thinking before coding saved me three hours of rewriting later.&lt;/p&gt;

&lt;p&gt;The moment it clicked was when I ran:&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;rm&lt;/span&gt; .env
envman get
&lt;span class="nb"&gt;cat&lt;/span&gt; .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And my secrets came back perfectly decrypted. That felt real.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I used Copilot mostly as a thinking partner rather than a code generator. The parts where it genuinely helped were the repetitive but error-prone ones — writing SQL scan statements where column order matters, getting the AES-GCM nonce handling right, and wiring up cobra command flags.&lt;/p&gt;

&lt;p&gt;What surprised me was how useful it was for catching things I would have missed on a first pass — like forgetting a &lt;code&gt;return&lt;/code&gt; after an error response, or using &lt;code&gt;||&lt;/code&gt; instead of &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; in a role check that would have let anyone through. Small things that would have cost me 30 minutes of debugging each.&lt;/p&gt;

&lt;p&gt;Where I deliberately didn't use it was in the design decisions — the schema, the role model, the encryption architecture. Those needed to be mine. Copilot is good at "how do I write this" but the "what should I build and why" has to come from you. That line matters more than people admit.&lt;/p&gt;

&lt;p&gt;envman is live, open source, and something I'll actually use on my own projects. That's the bar I set for myself — build something real enough that you reach for it yourself.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
