<?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>Forem: Niroshan Dh</title>
    <description>The latest articles on Forem by Niroshan Dh (@niroshan_dh).</description>
    <link>https://forem.com/niroshan_dh</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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg</url>
      <title>Forem: Niroshan Dh</title>
      <link>https://forem.com/niroshan_dh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/niroshan_dh"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Fri, 13 Mar 2026 00:51:40 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/-3lhg</link>
      <guid>https://forem.com/niroshan_dh/-3lhg</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/niroshan_dh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/niroshan_dh/building-a-secure-asynchronous-ai-agent-orchestrator-in-java-1i7o" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Building a Secure, Asynchronous AI Agent Orchestrator in Java&lt;/h2&gt;
      &lt;h3&gt;Niroshan Dh ・ Mar 13&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#architecture&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#agentaichallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>architecture</category>
      <category>agentaichallenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Secure, Asynchronous AI Agent Orchestrator in Java</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Fri, 13 Mar 2026 00:51:23 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/building-a-secure-asynchronous-ai-agent-orchestrator-in-java-1i7o</link>
      <guid>https://forem.com/niroshan_dh/building-a-secure-asynchronous-ai-agent-orchestrator-in-java-1i7o</guid>
      <description>&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%2Fuswe1ndk716bv27k8wab.jpg" 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%2Fuswe1ndk716bv27k8wab.jpg" alt="Agents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When developing applications that rely on multiple AI agents, performance and security become massive challenges. AI tasks are heavy and take time. If we process them on the main application thread, the whole system freezes.&lt;/p&gt;

&lt;p&gt;To solve this, I built AegisPipeline a lightweight, event driven Java engine. It uses a Scatter Gather architectural pattern to run AI tasks in the background safely and efficiently.&lt;/p&gt;

&lt;p&gt;Let’s break down the main layers, the Security Gateway, the Orchestrator, the Dispatcher, and the Job Tracker, and see how they interact to process files.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Security &amp;amp; Ingestion (The Gateway)
&lt;/h3&gt;

&lt;p&gt;This is the entry point for user uploads. We cannot simply trust user-provided file extensions (like .pdf or .png) because hackers can easily spoof them to upload malicious scripts.&lt;/p&gt;

&lt;p&gt;How it works: This layer uses Apache Tika to read the file’s “magic bytes” (the raw binary signature) to determine its true MIME type.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example: If a user uploads a file named document.pdf but it's actually an executable script, the Gateway detects the mismatch, fails fast, and rejects the payload before it ever reaches our AI agents. It also generates a random UUID for the filename to prevent Path Traversal attacks.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Core Orchestrator (The Brain)
&lt;/h3&gt;

&lt;p&gt;Once a file is secured and stored, the Orchestrator takes over. It contains the JobManager and the WorkflowStrategy. It acts as the "traffic controller" for AI tasks.&lt;/p&gt;

&lt;p&gt;How it works: Instead of hardcoding which AI agent processes which file, the Orchestrator looks at the validated file type and dynamically selects a strategy.&lt;br&gt;
&lt;em&gt;Example: If the file is a binary (application/x-binary), the Orchestrator selects the SecurityScanStrategy, which knows it needs both a VIRUS_SCANNER agent and a STATIC_ANALYZER agent.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Task Dispatcher (The Muscle)
&lt;/h3&gt;

&lt;p&gt;The dispatcher is where the magic of asynchronous processing happens. It pushes the heavy lifting off the main application thread so the system remains fast and responsive for other users.&lt;/p&gt;

&lt;p&gt;How it works: It uses Java’s ExecutorService (a fixed thread pool) and CompletableFuture to scatter the tasks to different AI agents simultaneously.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// We use CompletableFuture to push the heavy AI processing to a background thread.&lt;/span&gt;
&lt;span class="c1"&gt;// This frees up the main application thread to accept more user uploads.&lt;/span&gt;
&lt;span class="nc"&gt;CompletableFuture&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;supplyAsync&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;// The specific AI agent executes its heavy analysis here&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;executeAnalysis&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secureFilePath&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Agent failed: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Fail-safe return&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="n"&gt;aiThreadPool&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Job Tracker (The Memory)
&lt;/h3&gt;

&lt;p&gt;Because multiple AI agents are processing data at the exact same time on different threads, we need a highly secure way to store their results without data corruption.&lt;/p&gt;

&lt;p&gt;How it works: The JobTracker acts as an in-memory database using a ConcurrentHashMap. It uses an AtomicInteger to count how many tasks have finished.&lt;br&gt;
&lt;em&gt;Example: When the VIRUS_SCANNER finishes, it saves its score here. Because we use atomic operations, if two agents finish at the exact same millisecond, the system still counts them perfectly.&lt;/em&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%2F116xwyo1syl5dj9oltsf.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%2F116xwyo1syl5dj9oltsf.png" alt="system architecture diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s look at an example: How all these layers work together&lt;br&gt;
Here is the exact flow when a user uploads a file for AI analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Client Upload -&amp;gt; The user uploads a file to the system.&lt;/li&gt;
&lt;li&gt;Security Gateway -&amp;gt; The SecureIngestionService validates the magic bytes, assigns a safe UUID, and saves the file via the StorageProvider.&lt;/li&gt;
&lt;li&gt;Core Orchestrator -&amp;gt; The JobManager finds the matching WorkflowStrategy for the file type to see which AI agents are needed.&lt;/li&gt;
&lt;li&gt;Job Tracker -&amp;gt; Initializes a new job session, locking in the exact number of AI agents we expect to hear back from.&lt;/li&gt;
&lt;li&gt;Task Dispatcher (Scatter) -&amp;gt; Throws the tasks into the background ExecutorService thread pool.&lt;/li&gt;
&lt;li&gt;AI Agents -&amp;gt; The required agents analyze the file in parallel.&lt;/li&gt;
&lt;li&gt;Job Tracker (Gather) -&amp;gt; Each agent reports its score back to the thread-safe map.&lt;/li&gt;
&lt;li&gt;Core Orchestrator (Fusion) -&amp;gt; Once the final agent finishes, the WorkflowStrategy calculates a final weighted probability score and cleans up the memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find it on -&amp;gt; &lt;a href="https://github.com/Niroshan2812/aegis-pipeline-core" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>agentaichallenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Free, Private Audio Transcriber with Next.js</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 12 Jan 2026 04:34:56 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/building-a-free-private-audio-transcriber-with-nextjs-2df6</link>
      <guid>https://forem.com/niroshan_dh/building-a-free-private-audio-transcriber-with-nextjs-2df6</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6" class="crayons-story__hidden-navigation-link"&gt;3 Ways to Run AI in the Browser with Next.js (No API Keys Required)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&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="/niroshan_dh" 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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/niroshan_dh" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Niroshan Dh
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Niroshan Dh
                
              
              &lt;div id="story-author-preview-content-3165412" 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="/niroshan_dh" 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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Niroshan Dh&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/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 12&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/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6" id="article-link-3165412"&gt;
          3 Ways to Run AI in the Browser with Next.js (No API Keys Required)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&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;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/machinelearning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;machinelearning&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/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add 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>
      <category>javascript</category>
      <category>webdev</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>No Server. No API Keys. Just AI running in your browser.</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 12 Jan 2026 04:33:42 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/no-server-no-api-keys-just-ai-running-in-your-browser-4feb</link>
      <guid>https://forem.com/niroshan_dh/no-server-no-api-keys-just-ai-running-in-your-browser-4feb</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/niroshan_dh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;3 Ways to Run AI in the Browser with Next.js (No API Keys Required)&lt;/h2&gt;
      &lt;h3&gt;Niroshan Dh ・ Jan 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#machinelearning&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>3 Ways to Run AI in the Browser with Next.js (No API Keys Required)</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 12 Jan 2026 04:30:43 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6</link>
      <guid>https://forem.com/niroshan_dh/3-ways-to-run-ai-in-the-browser-with-nextjs-no-api-keys-required-3gi6</guid>
      <description>&lt;h2&gt;
  
  
  The "API Fatigue" is Real
&lt;/h2&gt;

&lt;p&gt;We are all building AI wrappers. But the standard pattern Frontend sends data to Backend → Backend hits OpenAI → Backend pays $0.03 → Frontend displays result is getting expensive. And frankly, it's boring.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if your users could run Whisper, YOLO, or even Llama directly in their Chrome tab?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I recently built CodeCoffeeTools.com entirely around this "Client-Side AI" concept. Here is the technical breakdown of how you can do it too using Transformers.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  How is this even possible?
&lt;/h2&gt;

&lt;p&gt;You might think running a neural network in JavaScript would be agonizingly slow. It used to be. But three technologies have converged to make this viable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ONNX Runtime: A cross-platform accelerator for machine learning models.&lt;/li&gt;
&lt;li&gt;WebAssembly (WASM): Allows C++ code (the ONNX runtime) to run at near-native speed in the browser.&lt;/li&gt;
&lt;li&gt;Transformers.js: A library by Hugging Face that bridges the gap, letting you use models just like you would in Python, but in JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The "Free" Audio Transcriber (Whisper)&lt;/strong&gt;&lt;br&gt;
Instead of paying OpenAI $0.006/minute, we use the Whisper-Tiny model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { pipeline } from '@xenova/transformers';
// 1. Create the pipeline (Downloads the 40MB model once)
const transcriber = await pipeline('automatic-speech-recognition', 'Xenova/whisper-tiny.en');
// 2. Transcribe
const result = await transcriber('https://example.com/my-audio.mp3');
// 3. Output
console.log(result.text); 
// Output: "Hello world, this is a test." 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note -: Always run this in a Web Worker so you don't freeze the UI while the transcription crunches numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Object Detection (YOLO)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can run object detection (identifying "person", "car", "dog") at 60 FPS in the browser using the detr-resnet-50 model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { pipeline } from '@xenova/transformers';

// 1. Load the detection pipeline
const detector = await pipeline('object-detection', 'Xenova/detr-resnet-50');
// 2. Detect objects in an image
const output = await detector('my-image.jpg');
// 3. Result
console.log(output);
/* [
  { label: 'person', score: 0.99, box: { xmin: 50, ymin: 20... } },
  { label: 'bicycle', score: 0.95, box: { xmin: 120, ymin: 80... } }
] 
*/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Running a Chatbot Locally (Text Generation)&lt;/strong&gt;&lt;br&gt;
Yes, you can run LLMs in the browser. You won't run GPT-4, but you can run highly optimized models like Phi-2 or TinyLlama.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { pipeline } from '@xenova/transformers';
const generator = await pipeline('text-generation', 'Xenova/TinyLlama-1.1B-Chat-v1.0');
const output = await generator('Write a tagline for a coffee shop:', {
  max_new_tokens: 20,
  temperature: 0.7
});
console.log(output[0].generated_text); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note -: This requires WebGPU support for decent speed, which Transformers.js v3 (currently in alpha/beta) supports brilliantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;Yes it's matter - "But won't this crash my user's browser?"&lt;/p&gt;

&lt;p&gt;It can, if you aren't careful. Here is how I handled performance on CodeCoffeeTools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Quantization is Key: I never use the full "float32" models. I use "quantized" (q8 or q4) versions. They are 4x smaller and run 2x faster with almost zero loss in accuracy.&lt;/li&gt;
&lt;li&gt;2. Lazy Loading: Do NOT load the AI model when the homepage loads. Only load it when the user clicks "Start Tool."&lt;/li&gt;
&lt;li&gt;3. Cache It: Transformers.js caches files in the browser. The first visit takes 10 seconds to download; the second visit takes 100ms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are moving towards a web where the server just serves the app, and the client does the thinking.&lt;br&gt;
If you want to see these examples running live (and critique my code), check out CodeCoffeeTools.com. I've open-sourced the "Privacy-First" philosophy, even if the repo itself is private for now.&lt;br&gt;
What should I build next? A local Background Remover or a PDF Summarizer? Let me know below!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Heee check this out..</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Thu, 01 Jan 2026 16:35:26 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/heee-check-this-out-4fkb</link>
      <guid>https://forem.com/niroshan_dh/heee-check-this-out-4fkb</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/niroshan_dh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/niroshan_dh/new-update-for-codecoffeetools-i-include-p2p-transfer-tool-more-3anp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;New update for CodeCoffeeTools! I include P2P Transfer Tool + more..&lt;/h2&gt;
      &lt;h3&gt;Niroshan Dh ・ Jan 1&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#security&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>New update for CodeCoffeeTools! I include P2P Transfer Tool + more..</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Thu, 01 Jan 2026 12:08:30 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/new-update-for-codecoffeetools-i-include-p2p-transfer-tool-more-3anp</link>
      <guid>https://forem.com/niroshan_dh/new-update-for-codecoffeetools-i-include-p2p-transfer-tool-more-3anp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Happy New Year, everyone! 🎉&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hope 2026 is off to a great start for all of you. To kick off the year, I’ve been working on a massive update for my side project, &lt;a href="https://codecoffeetools.com" rel="noopener noreferrer"&gt;CodeCoffeeTools&lt;/a&gt;.&lt;br&gt;
A few weeks ago, I shared &lt;a href="https://codecoffeetools.com" rel="noopener noreferrer"&gt;CodeCoffeeTools&lt;/a&gt; here a collection of developer tools + ...  that run 100% locally in your browser. The response was amazing, but I kept hearing one request &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do I move these secure files between my devices without using the cloud?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, I got to work. ☕&lt;/p&gt;

&lt;p&gt;I just pushed a major update to &lt;strong&gt;CodeCoffeeTools&lt;/strong&gt;, introducing &lt;strong&gt;Peer-to-Peer (P2P) File Transfer&lt;/strong&gt;, a native &lt;strong&gt;App Install (PWA)&lt;/strong&gt; feature, and a bunch of new utilities.&lt;/p&gt;

&lt;p&gt;Here is what’s new! 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  1. P2P File Transfer (No Server Storage)
&lt;/h2&gt;

&lt;p&gt;We've all been there: You have a sensitive file on your laptop that you need on your phone. You usually email it to yourself or upload it to a random cloud drive. &lt;strong&gt;That breaks the privacy chain.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I added a new &lt;strong&gt;P2P File Transfer&lt;/strong&gt; tool that connects your devices directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; It establishes a direct connection between your browser tabs (using WebRTC logic).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; The file streams strictly from Device A to Device B. It is never stored on my server, not even for a second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; Since it's local (if you are on the same WiFi), it's blazing fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. You Can Now "Install" The App
&lt;/h2&gt;

&lt;p&gt;CodeCoffeeTools is now a fully capable &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install it:&lt;/strong&gt; Click the "Install" button (or the &lt;code&gt;+&lt;/code&gt; icon in your address bar) to add it to your Dock (Mac) or Home Screen (iOS/Android).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Capable:&lt;/strong&gt; Many tools now work even if you lose your internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native Feel:&lt;/strong&gt; No more hunting through browser tabs to find your JSON validator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Freshly Brewed Tools
&lt;/h2&gt;

&lt;p&gt;I didn't stop at infrastructure. Based on your feedback, I’ve added several new tools to the roster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SVG to PNG Converter:&lt;/strong&gt; Scale and convert vectors without pixelation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR Code Generator:&lt;/strong&gt; Create quick links for testing on mobile devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Citation Generator:&lt;/strong&gt; (For the students out there!) Format references instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cooking &amp;amp; Unit Converters:&lt;/strong&gt; Because sometimes developers bake too. 🍰&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why "Privacy-First" Still Matters
&lt;/h2&gt;

&lt;p&gt;Every tool on the site still adheres to the core philosophy: &lt;strong&gt;Your data never leaves your device.&lt;/strong&gt; whether you are compressing a massive image or formatting a sensitive SQL query, the processing happens in &lt;em&gt;your&lt;/em&gt; browser's JavaScript engine, not on a backend server.&lt;/p&gt;

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

&lt;p&gt;I’m building this as I complete my software engineering degree, and I’d love your feedback on the new P2P feature.&lt;/p&gt;

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

&lt;p&gt;Let me know in the comments: &lt;strong&gt;What is the one "tiny" tool you use every day that you wish was offline-first?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>I built this because I was tired of uploading my personal data to random converter sites. I'd love to hear if there are any other tools you think I should add. Thanks for checking it out!</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 15 Dec 2025 11:11:40 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/i-built-this-because-i-was-tired-of-uploading-my-personal-data-to-random-converter-sites-id-love-11hg</link>
      <guid>https://forem.com/niroshan_dh/i-built-this-because-i-was-tired-of-uploading-my-personal-data-to-random-converter-sites-id-love-11hg</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404" class="crayons-story__hidden-navigation-link"&gt;Stop Uploading Your Data! Why I Built a Privacy-First Dev Toolkit (CodeCoffeeTools)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&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="/niroshan_dh" 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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/niroshan_dh" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Niroshan Dh
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Niroshan Dh
                
              
              &lt;div id="story-author-preview-content-3106341" 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="/niroshan_dh" 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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Niroshan Dh&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/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 15 '25&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/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404" id="article-link-3106341"&gt;
          Stop Uploading Your Data! Why I Built a Privacy-First Dev Toolkit (CodeCoffeeTools)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&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;a class="crayons-tag  crayons-tag--monochrome " href="/t/privacy"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;privacy&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&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/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404" 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/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/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&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;
            2 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>
      <category>webdev</category>
      <category>showdev</category>
      <category>privacy</category>
      <category>security</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 15 Dec 2025 11:07:29 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/-28gf</link>
      <guid>https://forem.com/niroshan_dh/-28gf</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/niroshan_dh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F2170688%2Ffdf3737c-39e8-4b20-8dcd-58f4e469ba06.jpg" alt="niroshan_dh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Stop Uploading Your Data! Why I Built a Privacy-First Dev Toolkit (CodeCoffeeTools)&lt;/h2&gt;
      &lt;h3&gt;Niroshan Dh ・ Dec 15&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#privacy&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#security&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>privacy</category>
      <category>security</category>
    </item>
    <item>
      <title>Stop Uploading Your Data! Why I Built a Privacy-First Dev Toolkit (CodeCoffeeTools)</title>
      <dc:creator>Niroshan Dh</dc:creator>
      <pubDate>Mon, 15 Dec 2025 11:04:31 +0000</pubDate>
      <link>https://forem.com/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404</link>
      <guid>https://forem.com/niroshan_dh/stop-uploading-your-data-why-i-built-a-privacy-first-dev-toolkit-codecoffeetools-404</guid>
      <description>&lt;h2&gt;
  
  
  The privacy problem with online tools
&lt;/h2&gt;

&lt;p&gt;We've all been there. You need to convert a PDF, format some JSON, or hash a password quickly. You search for a free tool, upload your file to the first result, and then… wait.&lt;br&gt;
But as a software engineer, a thought nags at the back of your mind,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did my files actually go?&lt;/li&gt;
&lt;li&gt;is this server storing my data?&lt;/li&gt;
&lt;li&gt;Did I just upload sensitive metadata to a random site?
Most online tools process your data on their backend. yes. this means your files leave your device, travel across the internet, and land on a server you don't control.. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The solution --&amp;gt; &lt;a href="https://codecoffeetools.com/" rel="noopener noreferrer"&gt;Codecoffeetools.com&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I build &lt;a href="https://codecoffeetools.com/" rel="noopener noreferrer"&gt;Codecoffeetools &lt;/a&gt;to solve this specific problem. it is a collection of professional grade developer and office tools that run 100% locally in your browser. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Privacy-First" Matters?
&lt;/h2&gt;

&lt;p&gt;By leveraging modern JavaScript APIs, we can perform heavy tasks—like image compression, PDF manipulation, and encryption—right on the client side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Data Leaks&lt;/strong&gt; - Your files literally never leave your device.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Latency&lt;/strong&gt; - No upload/download time. Results are instant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Cost&lt;/strong&gt; - Free forever, no subscriptions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Inside?
&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%2Fkstfo15zbuwr1acfwdya.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%2Fkstfo15zbuwr1acfwdya.png" alt="Codecoffetools category list " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve packed it with tools I use daily as a developer and student&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔒 Security:&lt;br&gt;
&lt;strong&gt;Exif Data Remover&lt;/strong&gt; - Clean metadata from photos before sharing.&lt;br&gt;
&lt;strong&gt;Client-Side Password Generator&lt;/strong&gt; - Create strong credentials without them touching a network request.&lt;br&gt;
&lt;strong&gt;and more&lt;/strong&gt;....&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👨‍💻 Developer Tools:&lt;br&gt;
&lt;strong&gt;JSON Formatter &amp;amp; Validator&lt;/strong&gt; - Beautify messy API responses.&lt;br&gt;
&lt;strong&gt;SQL Formatter&lt;/strong&gt; - Clean up complex queries.&lt;br&gt;
&lt;strong&gt;Diff Checker&lt;/strong&gt; - Compare code snippets locally.&lt;br&gt;
&lt;strong&gt;and more&lt;/strong&gt;....&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📄 PDF &amp;amp; Image:&lt;br&gt;
&lt;strong&gt;Merge, Split, and Watermark&lt;/strong&gt; PDFs instantly.&lt;br&gt;
** Compress images** without quality loss.&lt;br&gt;
&lt;strong&gt;and more&lt;/strong&gt;....&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📷 Image Tools:&lt;br&gt;
&lt;strong&gt;Image Compressor&lt;/strong&gt; - Compress images locally to reduce file size while maintaining quality.&lt;br&gt;
&lt;strong&gt;HEIC to JPG Converter&lt;/strong&gt; - Convert iPhone photos (HEIC) to JPG locally.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I’d love for you to break it (or just use it!). Check it out here: 👉 &lt;a href="https://codecoffeetools.com/" rel="noopener noreferrer"&gt;codecoffeetools.com&lt;/a&gt;&lt;br&gt;
Feedback is welcome! Let me know in the comments if there’s a specific tool you’d like to see added next.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>privacy</category>
      <category>security</category>
    </item>
  </channel>
</rss>
