<?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: felix ne</title>
    <description>The latest articles on DEV Community by felix ne (@felix_ne_47d1004255f7a66c).</description>
    <link>https://dev.to/felix_ne_47d1004255f7a66c</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%2F3885698%2F94b4150a-9bf3-4fea-ae69-ceba40041670.png</url>
      <title>DEV Community: felix ne</title>
      <link>https://dev.to/felix_ne_47d1004255f7a66c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/felix_ne_47d1004255f7a66c"/>
    <language>en</language>
    <item>
      <title>How I built a Zero-Upload AI Workspace in the browser using WebGPU</title>
      <dc:creator>felix ne</dc:creator>
      <pubDate>Sat, 18 Apr 2026 07:58:03 +0000</pubDate>
      <link>https://dev.to/felix_ne_47d1004255f7a66c/how-i-built-a-zero-upload-ai-workspace-in-the-browser-using-webgpu-2841</link>
      <guid>https://dev.to/felix_ne_47d1004255f7a66c/how-i-built-a-zero-upload-ai-workspace-in-the-browser-using-webgpu-2841</guid>
      <description>&lt;p&gt;👉 Live Workspace: &lt;a href="https://privakit.ai" rel="noopener noreferrer"&gt;https://privakit.ai&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; PrivaKit is a client-side "Sensitive Data AI Workspace". All inference (OCR, Transcription, Image Processing) happens &lt;/p&gt;

&lt;p&gt;strictly within your browser using WebGPU/WASM. Your images, documents, and audio recordings &lt;strong&gt;never&lt;/strong&gt; leave your device.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We built PrivaKit because professionals (HR, Legal, Finance) shouldn't have to upload sensitive employment contracts, IDs, or confidential board meeting recordings to third-party cloud APIs just to extract text or remove a background. &lt;/p&gt;

&lt;p&gt;This document outlines our technical stack and provides a guide on how to verify our zero-upload privacy claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Stack (Under the Hood)
&lt;/h2&gt;

&lt;p&gt;We utilize browser-based machine learning to bring server-grade models to the client side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inference Engine&lt;/strong&gt;: ONNX Runtime Web / Transformers.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supported Local Models&lt;/strong&gt;: Vision models (for Background Removal/Upscaling/OCR) and Audio models (e.g., Whisper for Transcription).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware Acceleration&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebGPU&lt;/strong&gt; (Primary): Uses your local GPU for parallel processing (0ms network latency).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WASM&lt;/strong&gt; (Fallback): Uses CPU with SIMD instructions if no GPU is detected.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Concurrency&lt;/strong&gt;: &lt;strong&gt;Web Workers API&lt;/strong&gt;. Heavy lifting (like transcribing a 30-min audio file) is offloaded to a background thread to keep the UI fully responsive.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Data Flow Diagram
&lt;/h2&gt;

&lt;p&gt;Here is the lifecycle of your sensitive data when using PrivaKit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[User Device]                                [Internet / Cloud]
      |                                              |
      | 1. Load Page Assets (HTML/JS/CSS) &amp;lt;--------- | 🌐 Vercel CDN
      |                                              |
      | 2. Download Model Weights (*.onnx) &amp;lt;-------- | 🤗 Hugging Face / CDN
      |    (Cached permanently after 1st load)       |    (One-time download)
      |                                              |
      | ============================================ | 🛑 FIREWALL
      |         NO DATA CROSSES THIS LINE            |
      | ============================================ |
      |                                              |
[User Input: Image / PDF / Audio File]               |
      |                                              |
      v                                              |
[Browser Memory (Blob)]                              |
      |                                              |
      v                                              |
[Web Worker] --&amp;gt; [ONNX Runtime] --&amp;gt; [Local GPU]      |
      |               ^                              |
      |               | (Compute)                    |
      v               v                              |
[Output: Mask / OCR Text / Audio Transcript]         |
      |                                              |
      v                                              |
[Canvas/DOM Rendering] -&amp;gt; [User Download]            |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. How to Verify (Don't trust, Verify)
&lt;/h2&gt;

&lt;p&gt;We encourage all technical users to audit our network activity. Here is how to prove your data stays local:&lt;br&gt;
Method A: The "Airplane Mode" Test (Easiest)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open PrivaKit and select any workflow (e.g., Transcription).&lt;/li&gt;
&lt;li&gt;Wait for the model to download (look for the "Ready" indicator).&lt;/li&gt;
&lt;li&gt;Disconnect your WiFi / Unplug Ethernet.&lt;/li&gt;
&lt;li&gt;Drop an audio recording or an ID photo into the tool.&lt;/li&gt;
&lt;li&gt;Result: The AI will process the file completely offline. Cloud-based wrappers fail this test instantly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Method B: Chrome DevTools Audit&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Chrome DevTools (F12) -&amp;gt; Network tab.&lt;/li&gt;
&lt;li&gt;Upload a file and process it.&lt;/li&gt;
&lt;li&gt;Observe: You will see zero POST requests containing your file blob or form data. No external API endpoints are called during inference.
## 4. Network Requests Explained
To ensure full transparency, here are the only network requests you will see:
| Resource Type | Domain | Purpose | Privacy Impact |
| :--- | :--- | :--- | :--- |
| &lt;strong&gt;HTML/JS/CSS&lt;/strong&gt; | &lt;code&gt;https://privakit.ai&lt;/code&gt; | UI rendering. | None |
| &lt;strong&gt;Models (&lt;code&gt;.onnx&lt;/code&gt;)&lt;/strong&gt; | &lt;code&gt;huggingface.co&lt;/code&gt; / CDN | Downloading the AI "Brain". We download the model &lt;em&gt;to&lt;/em&gt; you; we never upload your files &lt;em&gt;to&lt;/em&gt; the model. | None |
| &lt;strong&gt;Analytics&lt;/strong&gt; | Self-hosted Node | Anonymous aggregate usage stats. | &lt;strong&gt;Zero PII.&lt;/strong&gt; No Cookies. |&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Radical Analytics Transparency
&lt;/h2&gt;

&lt;p&gt;To respect your digital privacy, we do not use Google Analytics or any third-party tracking scripts.&lt;br&gt;
Instead, we use an open-source instance of Plausible Analytics, securely self-hosted on an isolated lightweight node (2-core, 4GB) in Singapore.&lt;br&gt;
• No Cookies: We do not set any tracking cookies on your device.&lt;br&gt;
• No PII: We do not log IP addresses or personal identifiers.&lt;br&gt;
• Ad-blocker friendly: If your browser blocks our self-hosted Plausible script, the AI tools will still work perfectly. We prioritize your workflow over our metrics.&lt;/p&gt;

&lt;p&gt;If you find any discrepancies in this report, please open an issue. Data sovereignty is our core principle.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
