<?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: Nishal K</title>
    <description>The latest articles on DEV Community by Nishal K (@nishal21).</description>
    <link>https://dev.to/nishal21</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%2F3760349%2F52bcda7b-73d7-4ecb-bda7-efd7c745aeb9.jpeg</url>
      <title>DEV Community: Nishal K</title>
      <link>https://dev.to/nishal21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nishal21"/>
    <language>en</language>
    <item>
      <title>I built a zero-config, 100% serverless portfolio generator so you never have to update yours again.</title>
      <dc:creator>Nishal K</dc:creator>
      <pubDate>Mon, 13 Apr 2026 06:09:53 +0000</pubDate>
      <link>https://dev.to/nishal21/i-built-a-zero-config-100-serverless-portfolio-generator-so-you-never-have-to-update-yours-again-14a1</link>
      <guid>https://dev.to/nishal21/i-built-a-zero-config-100-serverless-portfolio-generator-so-you-never-have-to-update-yours-again-14a1</guid>
      <description>&lt;p&gt;We all know the cycle. You spend weeks building an incredible side project, you push it to GitHub, and then... you realize you have to manually update your personal portfolio site. So, the project sits there, invisible to recruiters, and your portfolio slowly goes out of date.&lt;/p&gt;

&lt;p&gt;I got tired of this, so I built Publicolio.&lt;/p&gt;

&lt;p&gt;Publicolio is an open-source, zero-config generator that turns your GitHub profile into a premium, editorial-grade portfolio website instantly. No servers. No databases. No manual updates.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nishal21" rel="noopener noreferrer"&gt;
        nishal21
      &lt;/a&gt; / &lt;a href="https://github.com/nishal21/Publicolio" rel="noopener noreferrer"&gt;
        Publicolio
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Publicolio is a zero-config GitHub portfolio generator. It lets you fetch a GitHub profile, select repositories, style the page with theme controls, and generate a shareable link.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Publicolio&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Publicolio is a zero-config GitHub portfolio generator
It lets you fetch a GitHub profile, select repositories, style the page with theme controls, and generate a shareable link.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/nishal21/Publicolio/demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fnishal21%2FPublicolio%2FHEAD%2Fdemo.gif" alt="Animated Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What It Does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fetches profile and repo data from GitHub.&lt;/li&gt;
&lt;li&gt;Supports optional personal token input in builder mode for private/owner repos.&lt;/li&gt;
&lt;li&gt;Provides 6 visual themes.&lt;/li&gt;
&lt;li&gt;Provides editor controls for layout and styling.&lt;/li&gt;
&lt;li&gt;Generates shareable portfolio URLs with selected repositories and style options encoded in query params.&lt;/li&gt;
&lt;li&gt;Optionally shortens links through a Cloudflare Worker.&lt;/li&gt;
&lt;li&gt;Supports short link domain choice between workers.dev and custom domain.&lt;/li&gt;
&lt;li&gt;Caches builder state so returning users can continue editing after refresh.&lt;/li&gt;
&lt;li&gt;Supports &lt;code&gt;Update Link&lt;/code&gt; flow to keep the same short URL when the backend supports slug updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How It Works&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Publicolio has two runtime modes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Builder mode&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;If no &lt;code&gt;user&lt;/code&gt; and &lt;code&gt;theme&lt;/code&gt; query params are present, the app renders the interactive builder UI.&lt;/li&gt;
&lt;li&gt;User enters GitHub username, picks repos…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nishal21/Publicolio" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;✨ The Visuals: Structural Themes&lt;br&gt;
I didn't just want to build a tool that swapped out CSS colors. I wanted themes that fundamentally changed the layout (the DOM structure) based on the developer's vibe.&lt;/p&gt;

&lt;p&gt;Right now, it ships with several high-end themes:&lt;/p&gt;

&lt;p&gt;Neo-Brutalism: High contrast, harsh borders, and bold typography.&lt;/p&gt;

&lt;p&gt;Liquid Glass: Frosted glassmorphism with overlapping translucent cards.&lt;/p&gt;

&lt;p&gt;Aurora: Glowing animated gradients and atmospheric design.&lt;/p&gt;

&lt;p&gt;Terminal: A high-fidelity "hacker" aesthetic with macOS-style window chrome.&lt;/p&gt;

&lt;p&gt;You just type in your GitHub username, pick your repositories, and generate a link.&lt;/p&gt;

&lt;p&gt;⚙️ The Architecture: Keeping it 100% Free&lt;br&gt;
The most interesting challenge of this project was figuring out how to build a dynamic tool without paying for a traditional backend or database. Here is how I architected the serverless pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Frontend (Vite + React + Tailwind v4)&lt;br&gt;
The app is a strict Single Page Application (SPA) hosted for free on GitHub Pages. It fetches your pinned and recent repositories directly from the GitHub REST API right inside the browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bypassing CORS &amp;amp; Rate Limits&lt;br&gt;
If you hit GitHub's API directly from a browser, you run into strict rate limits. If you try to fetch from other platforms (like GitLab), you get hit with CORS blocks.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Solution: I built a custom, zero-cost proxy using a Cloudflare Worker. The React app routes requests through the edge worker, which safely injects CORS headers and handles optional Personal Access Tokens (PATs) so users can fetch their private repositories safely.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Database-less Shortener
When a user selects their theme and custom repositories, that data has to be saved somewhere so the generated portfolio link works when shared. Instead of a Postgres database, I encoded the user's state directly into the URL query parameters (e.g., /?user=nishal21&amp;amp;theme=brutal&amp;amp;repos=ProjectA,ProjectB).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Problem: Those URLs are ugly and too long for a resume.&lt;/p&gt;

&lt;p&gt;The Solution: I spun up a second Cloudflare Worker attached to Cloudflare KV (Key-Value storage). When you deploy your portfolio, the frontend sends the long URL to the Worker, which saves it to KV and returns a sleek, random 6-character short link.&lt;/p&gt;

&lt;p&gt;🚀 Try it out&lt;br&gt;
I built this to solve my own problem, but I made it completely open-source so anyone can use it or learn from the Cloudflare architecture.&lt;/p&gt;

&lt;p&gt;If you want to generate a portfolio for yourself in about 10 seconds, check it out!&lt;/p&gt;

&lt;p&gt;🔗 Live Generator: [&lt;a href="https://app.publicolio.qzz.io/" rel="noopener noreferrer"&gt;https://app.publicolio.qzz.io/&lt;/a&gt;]&lt;br&gt;
🐙 Source Code: [&lt;a href="https://github.com/nishal21/Publicolio" rel="noopener noreferrer"&gt;https://github.com/nishal21/Publicolio&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;I would love to hear your feedback on the code, the UI themes, or how you handle your own personal portfolios. Drop your generated links in the comments!&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.amazonaws.com%2Fuploads%2Farticles%2Flgfzlvw2j8lsfbsgc8qm.gif" 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%2Flgfzlvw2j8lsfbsgc8qm.gif" alt=" " width="760" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>serverless</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>How I Built a Memory-Safe Steganography Engine in Rust to Protect Data from AI Scrapers</title>
      <dc:creator>Nishal K</dc:creator>
      <pubDate>Sat, 28 Mar 2026 03:29:14 +0000</pubDate>
      <link>https://dev.to/nishal21/how-i-built-a-memory-safe-steganography-engine-in-rust-to-protect-data-from-ai-scrapers-4cch</link>
      <guid>https://dev.to/nishal21/how-i-built-a-memory-safe-steganography-engine-in-rust-to-protect-data-from-ai-scrapers-4cch</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Memory-Safe Steganography Engine in Rust to Protect Data from AI Scrapers
&lt;/h1&gt;

&lt;p&gt;As AI models scale, data provenance is becoming a massive engineering challenge. Automated web scrapers are vacuuming up datasets without any regard for creator licenses or intellectual property.&lt;/p&gt;

&lt;p&gt;I wanted to build a mathematical solution to this problem, so I architected &lt;strong&gt;Sigil&lt;/strong&gt;: a zero-knowledge cryptographic vault that embeds verifiable, HMAC-SHA256 signed ownership IDs directly into the pixels of an image.&lt;/p&gt;

&lt;p&gt;While the desktop vault (built with Tauri, Svelte, and an offline SQLite daemon) is strictly closed-source to protect the cryptographic keys, I realized that "Security by Obscurity" isn't enough. If AI companies don't know how to read the hidden IDs, they will just scrape the images anyway.&lt;/p&gt;

&lt;p&gt;So, I open-sourced the extraction layer. Here is a deep dive into how I used Rust to build a memory-safe Least Significant Bit (LSB) steganography reader.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Concept: LSB Steganography
&lt;/h3&gt;

&lt;p&gt;Every pixel in a standard image is made of Red, Green, and Blue channels. Each channel is represented by a byte (8 bits), with values ranging from 0 to 255.&lt;/p&gt;

&lt;p&gt;If you change the &lt;strong&gt;Least Significant Bit&lt;/strong&gt; (the absolute last 1 or 0 in that byte), the color change is invisible to the human eye. But mathematically, you can use those hidden bits to store a secret payload—like a 32-byte cryptographic ID.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rust Implementation
&lt;/h3&gt;

&lt;p&gt;To make this blazing fast and completely safe from memory leaks, I used Rust's &lt;code&gt;image&lt;/code&gt; crate to parse the pixels. Here is the exact open-source reference implementation for extracting the payload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;image&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GenericImageView&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cd"&gt;/// Extracts a hidden Sigil Cryptographic ID from an image's LSB layer.&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;verify_steganography&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expected_id_len&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;image&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.map_err&lt;/span&gt;&lt;span class="p"&gt;(|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nf"&gt;.to_rgba8&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;bits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Vec&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;with_capacity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected_id_len&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// 1. Extract the Least Significant Bits&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pixel&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="nf"&gt;.pixels&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Iterate over R, G, B&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="nf"&gt;.len&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;expected_id_len&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// The bitwise AND operator isolates the final bit&lt;/span&gt;
                &lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="nf"&gt;.push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pixel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Reconstruct the bytes&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;extracted_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Vec&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="nf"&gt;.chunks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="nf"&gt;.len&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;byte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0u8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="nf"&gt;.iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.enumerate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Shift the bit back into its correct position&lt;/span&gt;
                &lt;span class="n"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bit&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;extracted_bytes&lt;/span&gt;&lt;span class="nf"&gt;.push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 3. Return the Hex String&lt;/span&gt;
    &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extracted_bytes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breaking Down the Bitwise Math
&lt;/h3&gt;

&lt;p&gt;The magic happens in two specific lines of code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pixel[channel] &amp;amp; 1&lt;/code&gt;: This is a bitwise &lt;code&gt;AND&lt;/code&gt; operation. By comparing the pixel's byte against &lt;code&gt;00000001&lt;/code&gt;, we wipe out the first 7 bits and isolate only the final bit. If the pixel is even, it returns &lt;code&gt;0&lt;/code&gt;. If it is odd, it returns &lt;code&gt;1&lt;/code&gt;. We push this bit into our Vector.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;byte |= bit &amp;lt;&amp;lt; (7 - i)&lt;/code&gt;: Once we have 8 hidden bits, we need to stitch them back into a single byte. We use the left-shift operator (&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;) to push the bit into the correct slot (from position 7 down to 0), and the bitwise &lt;code&gt;OR&lt;/code&gt; operator (&lt;code&gt;|=&lt;/code&gt;) to combine them into the final &lt;code&gt;u8&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Open Standard
&lt;/h3&gt;

&lt;p&gt;By publishing this extraction logic, AI procurement teams can now integrate this exact function into their scraping pipelines. If their crawler detects a payload, they know the asset is cryptographically locked and requires an API clearance.&lt;/p&gt;

&lt;p&gt;You can check out the full open-source extraction standard on GitHub, or visit the lightning-fast Astro-powered documentation site here: &lt;br&gt;
&lt;strong&gt;&lt;a href="https://nishal21.github.io/Sigil-extractor/" rel="noopener noreferrer"&gt;https://nishal21.github.io/Sigil-extractor/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts on the Rust implementation or LSB steganography in general!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/nishal21/Sigil-extractor" rel="noopener noreferrer"&gt;https://github.com/nishal21/Sigil-extractor&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>webdev</category>
      <category>ai</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>I built an open-source, Neo-Brutalist network diagnostic tool (React + Python CLI)</title>
      <dc:creator>Nishal K</dc:creator>
      <pubDate>Fri, 27 Mar 2026 13:57:31 +0000</pubDate>
      <link>https://dev.to/nishal21/i-built-an-open-source-neo-brutalist-network-diagnostic-tool-react-python-cli-2gbg</link>
      <guid>https://dev.to/nishal21/i-built-an-open-source-neo-brutalist-network-diagnostic-tool-react-python-cli-2gbg</guid>
      <description>&lt;p&gt;Have you ever been frustrated by standard internet speed tests? They are often cluttered with ads, provide zero real context on what your raw speed actually &lt;em&gt;means&lt;/em&gt; for your daily use, and force you to leave your terminal.&lt;/p&gt;

&lt;p&gt;I wanted to fix that. So, I built &lt;strong&gt;SpedFind&lt;/strong&gt;: a pro-grade, open-source network diagnostic tool. I designed it to cater to both visual users and terminal power users by building two distinct interfaces. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nishal21" rel="noopener noreferrer"&gt;
        nishal21
      &lt;/a&gt; / &lt;a href="https://github.com/nishal21/SpedFind" rel="noopener noreferrer"&gt;
        SpedFind
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A highly accurate, free, and open-source internet speed test tool featuring a stunning Neo-Brutalist Cyber-HUD and a beautiful Terminal Dashboard.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚀 SPEDFIND.&lt;/h1&gt;
&lt;/div&gt;
  &lt;p&gt;&lt;b&gt;Pro-Grade Network Diagnostics &amp;amp; Telemetry&lt;/b&gt;&lt;/p&gt;
  &lt;p&gt;A highly accurate, free, and open-source internet speed test tool featuring a stunning Neo-Brutalist Cyber-HUD and a beautiful Terminal Dashboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://reactjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fec9c5b65cd8d8fb7d0470b7b313ee847cee54f5e4f5ae36d389b52df830d65d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31382d626c75653f6c6f676f3d7265616374" alt="React"&gt;&lt;/a&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dfe92bc90989d736ab3d8b74b29725192b3692d34493801ed021368f3c8fe933/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e644353532d76342d3338423241433f6c6f676f3d7461696c77696e642d637373" alt="Tailwind v4"&gt;&lt;/a&gt;
&lt;a href="https://python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8afb5face023a2d3d624f1cfd60f60910678f0009b7db614e164249835b6b961/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302b2d4646443433423f6c6f676f3d707974686f6e266c6f676f436f6c6f723d626c7565" alt="Python"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🌐 Web Dashboard (React + Tailwind v4)&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Neo-Brutalist Cyber-HUD:&lt;/strong&gt; An immersive, high-performance UI designed for network professionals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Telemetry:&lt;/strong&gt; Real-time SVG charting of downstream and upstream data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Diagnostics:&lt;/strong&gt; Measures Ping, Jitter, Packet Loss, and exact Data Consumption in MB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity Vectoring:&lt;/strong&gt; Pinpoint-accurate ISP, ASN, and geographic location mapping (powered by IPinfo/MaxMind databases).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Grading System:&lt;/strong&gt; Automatically evaluates your connection and assigns a grade (S, A, B, C, F) alongside use-case suitability (e.g., 8K Streaming, E-Sports).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export to Clipboard:&lt;/strong&gt; Instantly format and copy your network telemetry for ISP support tickets.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;💻 Command-Line Interface (Python + Rich)&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal Dashboard:&lt;/strong&gt; A beautifully animated &lt;code&gt;rich&lt;/code&gt; console interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Morphing:&lt;/strong&gt; In-place UI updates without spamming your terminal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ookla Core Integration:&lt;/strong&gt; Uses the global speedtest network…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nishal21/SpedFind" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Here is a breakdown of how I built it and the tech stack behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌐 The Frontend: A Neo-Brutalist Web HUD
&lt;/h2&gt;

&lt;p&gt;Standard dashboards can be boring. I wanted this to feel like a high-performance Cyber-HUD.&lt;/p&gt;

&lt;p&gt;*&lt;br&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%2Fm9og2qfjntm8mcw4wpzc.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%2Fm9og2qfjntm8mcw4wpzc.png" alt=" "&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fmw7lbu57dwv5f3zv5j3p.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%2Fmw7lbu57dwv5f3zv5j3p.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
*&lt;/p&gt;

&lt;p&gt;I built the web interface using &lt;strong&gt;React, Vite, and Tailwind CSS v4&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Telemetry:&lt;/strong&gt; It features real-time SVG charting of your downstream and upstream data. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Grading System:&lt;/strong&gt; Instead of just throwing a ping number at you, the app evaluates your connection and assigns a grade (S, A, B, C, F). It actually tells you if your current network can handle 8K streaming or competitive E-Sports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity Vectoring:&lt;/strong&gt; It hooks into IPinfo/MaxMind to pinpoint your ISP, ASN, and geographic location.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💻 The Backend &amp;amp; CLI: Python Power
&lt;/h2&gt;

&lt;p&gt;For developers who want to stay in their workflow, I built a standalone command-line interface.&lt;/p&gt;

&lt;p&gt;*&lt;br&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%2F7k3j8010rirof2ap6ufp.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%2F7k3j8010rirof2ap6ufp.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Morphing:&lt;/strong&gt; Using Python and the &lt;code&gt;rich&lt;/code&gt; library, the terminal dashboard animates and updates in-place. It gives you all the telemetry data without spamming your console history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI Testing Engine:&lt;/strong&gt; To handle the payload testing and ensure complete control over the telemetry data feeding the React frontend, I built a custom stream engine using FastAPI. It uses the global Ookla network under the hood for enterprise-grade accuracy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Try It Out
&lt;/h2&gt;

&lt;p&gt;The project is 100% free and open-source under the MIT license. There are no paid API keys required to run or self-host this. &lt;/p&gt;

&lt;p&gt;You can check out the live demo of the Web HUD here: &lt;a href="https://nishal21.github.io/SpedFind/" rel="noopener noreferrer"&gt;SpedFind Live Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like building custom dev tools or just want a better way to check your network, I’d love for you to try it out. Let me know in the comments: do you prefer the Web HUD or the Terminal CLI?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>python</category>
      <category>react</category>
    </item>
    <item>
      <title>I built a Carbon Footprint tracker for my code (using Tauri?!) 🍃</title>
      <dc:creator>Nishal K</dc:creator>
      <pubDate>Sun, 08 Feb 2026 16:59:10 +0000</pubDate>
      <link>https://dev.to/nishal21/i-built-a-carbon-footprint-tracker-for-my-code-using-electron-2llo</link>
      <guid>https://dev.to/nishal21/i-built-a-carbon-footprint-tracker-for-my-code-using-electron-2llo</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: Invisible Emissions ☁️
&lt;/h2&gt;

&lt;p&gt;As developers, we are obsessed with optimization. We profile our code for Time Complexity ($O(n)$), memory leaks, and bundle size.&lt;/p&gt;

&lt;p&gt;But there is one metric we usually ignore: &lt;strong&gt;Carbon Intensity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time we run a heavy build, spin up a Docker container, or train a model, we draw power. Depending on where you live (and your grid's current mix of coal vs. renewables), that power has a carbon cost.&lt;/p&gt;

&lt;p&gt;I wanted to see that cost in real-time. So, I built &lt;strong&gt;CarbonLint&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet CarbonLint 🌍
&lt;/h2&gt;

&lt;p&gt;[Insert Screenshot of your Dashboard here]&lt;/p&gt;

&lt;p&gt;CarbonLint is an open-source desktop app that monitors your development environment's energy usage and estimates the CO2 emissions of your workflow.&lt;/p&gt;

&lt;p&gt;It helps you answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How much CO2 did that last CI/CD run generate?"&lt;/li&gt;
&lt;li&gt;"Is my local grid green right now, or should I wait to run this heavy task?"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Under the Hood 🛠️
&lt;/h2&gt;

&lt;p&gt;I built this using &lt;strong&gt;Tauri&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt;, and &lt;strong&gt;Vite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Wait, an &lt;em&gt;Tauri&lt;/em&gt; app to save energy? Tauri is known for being lightweight.&lt;/p&gt;

&lt;p&gt;Here is how I tried to balance it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Backend:&lt;/strong&gt; I use &lt;code&gt;systeminformation&lt;/code&gt; and &lt;code&gt;node-powershell&lt;/code&gt; to pull raw system metrics (CPU, Memory, Network).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Calculation:&lt;/strong&gt; The app applies regional grid intensity factors to convert raw kWh into gCO2.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Frontend:&lt;/strong&gt; React + Chart.js for the visualization.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;The hardest part was getting accurate regional data. [Briefly explain how you handled the regional data/grid intensity].&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it out (It's Open Source)
&lt;/h2&gt;

&lt;p&gt;I am looking for contributors to help improve the calculation models and add support for more regions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/nishal21/CarbonLint" rel="noopener noreferrer"&gt;https://github.com/nishal21/CarbonLint&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech:&lt;/strong&gt; Tauri, React, TailwindCSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested in &lt;strong&gt;Green Software Engineering&lt;/strong&gt;, I’d love your feedback!&lt;/p&gt;

&lt;p&gt;Let me know in the comments: &lt;strong&gt;Do you track your code's energy usage?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>react</category>
      <category>javascript</category>
      <category>cleancode</category>
    </item>
  </channel>
</rss>
