<?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: Matias Panguilto</title>
    <description>The latest articles on DEV Community by Matias Panguilto (@mdp88).</description>
    <link>https://dev.to/mdp88</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069304%2F7dbe4d8b-18c6-4b99-867c-e851789bd67d.png</url>
      <title>DEV Community: Matias Panguilto</title>
      <link>https://dev.to/mdp88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mdp88"/>
    <language>en</language>
    <item>
      <title>How I Built Browser-Based Tools Without Sending User Data to a Server</title>
      <dc:creator>Matias Panguilto</dc:creator>
      <pubDate>Sat, 08 Aug 2026 22:50:07 +0000</pubDate>
      <link>https://dev.to/mdp88/how-i-built-browser-based-tools-without-sending-user-data-to-a-server-1852</link>
      <guid>https://dev.to/mdp88/how-i-built-browser-based-tools-without-sending-user-data-to-a-server-1852</guid>
      <description>&lt;p&gt;When building small online utilities, one question comes up surprisingly often:&lt;/p&gt;

&lt;p&gt;Does the user's data really need to leave their browser?&lt;/p&gt;

&lt;p&gt;For many types of tools, the answer is no.&lt;/p&gt;

&lt;p&gt;That's one of the principles behind &lt;a href="https://gigausefultools.com" rel="noopener noreferrer"&gt;Giga Useful Tools&lt;/a&gt;: whenever possible, tools should perform their processing directly in the browser instead of uploading user data to a backend server.&lt;/p&gt;

&lt;p&gt;Why process data in the browser?&lt;/p&gt;

&lt;p&gt;A traditional web application might work like this:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
  ↓&lt;br&gt;
Upload data&lt;br&gt;
  ↓&lt;br&gt;
Server&lt;br&gt;
  ↓&lt;br&gt;
Process data&lt;br&gt;
  ↓&lt;br&gt;
Send result back&lt;br&gt;
  ↓&lt;br&gt;
User&lt;/p&gt;

&lt;p&gt;For many simple utilities, this architecture is unnecessary.&lt;/p&gt;

&lt;p&gt;If a user wants to &lt;/p&gt;

&lt;p&gt;&lt;a href="https://gigausefultools.com/es/tools/image-tools" rel="noopener noreferrer"&gt;convert an image&lt;/a&gt;, &lt;a href="https://gigausefultools.com/es/tools/qr" rel="noopener noreferrer"&gt;generate a QR code&lt;/a&gt;, encode some text, or perform a calculation, there may be no reason to send that information anywhere.&lt;/p&gt;

&lt;p&gt;A browser-based approach looks more like this:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
  ↓&lt;br&gt;
Browser&lt;br&gt;
  ↓&lt;br&gt;
Process locally&lt;br&gt;
  ↓&lt;br&gt;
Result&lt;/p&gt;

&lt;p&gt;The server only needs to deliver the application itself.&lt;/p&gt;

&lt;p&gt;A simple example&lt;/p&gt;

&lt;p&gt;Imagine an image conversion tool.&lt;/p&gt;

&lt;p&gt;A server-based implementation might require the user to upload an image:&lt;/p&gt;

&lt;p&gt;photo.jpg&lt;br&gt;
    ↓&lt;br&gt;
Your server&lt;br&gt;
    ↓&lt;br&gt;
Image processing&lt;br&gt;
    ↓&lt;br&gt;
photo.webp&lt;br&gt;
    ↓&lt;br&gt;
Download&lt;/p&gt;

&lt;p&gt;That means the server needs to receive and temporarily process the user's file.&lt;/p&gt;

&lt;p&gt;With browser-based processing, the same workflow can happen locally:&lt;/p&gt;

&lt;p&gt;photo.jpg&lt;br&gt;
    ↓&lt;br&gt;
Browser&lt;br&gt;
    ↓&lt;br&gt;
Convert&lt;br&gt;
    ↓&lt;br&gt;
photo.webp&lt;/p&gt;

&lt;p&gt;The original image never needs to be uploaded.&lt;/p&gt;

&lt;p&gt;Modern browsers provide APIs that make this possible, including File, Blob, Canvas, and various Web APIs for manipulating data locally.&lt;/p&gt;

&lt;p&gt;It's also faster&lt;/p&gt;

&lt;p&gt;There is another advantage besides privacy: latency.&lt;/p&gt;

&lt;p&gt;With server-side processing, the user has to:&lt;/p&gt;

&lt;p&gt;Upload the data.&lt;br&gt;
Wait for the server to process it.&lt;br&gt;
Download the result.&lt;/p&gt;

&lt;p&gt;For a small file, this can introduce unnecessary network overhead.&lt;/p&gt;

&lt;p&gt;With local processing, the workflow can be almost instantaneous:&lt;/p&gt;

&lt;p&gt;Input → Processing → Output&lt;/p&gt;

&lt;p&gt;Of course, browser performance depends on the device and the complexity of the operation. Processing a huge file locally isn't always the best solution.&lt;/p&gt;

&lt;p&gt;Privacy by architecture&lt;/p&gt;

&lt;p&gt;One thing I've found interesting while building these tools is that privacy doesn't always have to come from a complicated privacy system.&lt;/p&gt;

&lt;p&gt;Sometimes the simplest privacy solution is:&lt;/p&gt;

&lt;p&gt;Don't collect the data in the first place.&lt;/p&gt;

&lt;p&gt;If a tool doesn't need a user's file or text on a server, there's no reason to send it there.&lt;/p&gt;

&lt;p&gt;This can also simplify the application:&lt;/p&gt;

&lt;p&gt;No file-upload API&lt;br&gt;
No temporary storage&lt;br&gt;
No server-side processing queue&lt;br&gt;
No cleanup jobs&lt;br&gt;
Less infrastructure&lt;br&gt;
Fewer things that can go wrong&lt;/p&gt;

&lt;p&gt;The browser essentially becomes the processing environment.&lt;/p&gt;

&lt;p&gt;When browser-based processing isn't the right choice&lt;/p&gt;

&lt;p&gt;This approach isn't appropriate for everything.&lt;/p&gt;

&lt;p&gt;Server-side processing can make more sense when:&lt;/p&gt;

&lt;p&gt;The computation is extremely CPU-intensive.&lt;br&gt;
The operation requires large amounts of memory.&lt;br&gt;
A server-side API or database is required.&lt;br&gt;
Multiple users need to collaborate on the same data.&lt;br&gt;
The result depends on private server-side information.&lt;br&gt;
The user's device isn't powerful enough for the operation.&lt;/p&gt;

&lt;p&gt;The goal isn't to move everything into the browser.&lt;/p&gt;

&lt;p&gt;It's to ask a simple question:&lt;/p&gt;

&lt;p&gt;Does this operation actually require a server?&lt;/p&gt;

&lt;p&gt;If the answer is no, processing locally can be a great alternative.&lt;/p&gt;

&lt;p&gt;Building Giga Useful Tools&lt;/p&gt;

&lt;p&gt;This is the approach I'm taking while building &lt;a href="https://gigausefultools.com" rel="noopener noreferrer"&gt;Giga Useful Tools&lt;/a&gt;, a collection of free online utilities.&lt;/p&gt;

&lt;p&gt;The project includes tools for things like file conversion, text manipulation, generators, calculators, and developer utilities.&lt;/p&gt;

&lt;p&gt;For each new tool, I'm trying to keep the architecture as simple as possible and process information locally whenever the functionality allows it.&lt;/p&gt;

&lt;p&gt;There is something satisfying about building a tool where the user can open a webpage, drop in some data, get the result, and move on — without creating an account or uploading their files to an unknown server.&lt;/p&gt;

&lt;p&gt;The bigger lesson&lt;/p&gt;

&lt;p&gt;Modern browsers are much more capable than many people realize.&lt;/p&gt;

&lt;p&gt;For a lot of small utilities, you don't need:&lt;/p&gt;

&lt;p&gt;A backend&lt;br&gt;
A database&lt;br&gt;
File storage&lt;br&gt;
An API&lt;br&gt;
A complicated infrastructure&lt;/p&gt;

&lt;p&gt;Sometimes you just need JavaScript and the browser.&lt;/p&gt;

&lt;p&gt;And when processing can happen locally, you can potentially get better privacy, lower latency, lower infrastructure costs, and a simpler application at the same time.&lt;/p&gt;

&lt;p&gt;That's a pretty good trade-off for a small web tool.&lt;/p&gt;

&lt;p&gt;I'm continuing to build Giga Useful Tools and experiment with browser-first approaches to everyday utilities.&lt;/p&gt;

&lt;p&gt;If you're building similar tools, I'd be interested to hear which browser APIs or techniques you've found particularly useful.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>frontend</category>
      <category>privacy</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
