<?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: MichelDavi</title>
    <description>The latest articles on DEV Community by MichelDavi (@micheldavi).</description>
    <link>https://dev.to/micheldavi</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%2F4116696%2Fb79ad16e-e559-44e4-a8b7-5dc86befb894.png</url>
      <title>DEV Community: MichelDavi</title>
      <link>https://dev.to/micheldavi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/micheldavi"/>
    <language>en</language>
    <item>
      <title>I built 85 online tools that run 100% in your browser — no backend, no uploads</title>
      <dc:creator>MichelDavi</dc:creator>
      <pubDate>Wed, 09 Sep 2026 03:31:23 +0000</pubDate>
      <link>https://dev.to/micheldavi/i-built-85-online-tools-that-run-100-in-your-browser-no-backend-no-uploads-5gpf</link>
      <guid>https://dev.to/micheldavi/i-built-85-online-tools-that-run-100-in-your-browser-no-backend-no-uploads-5gpf</guid>
      <description>&lt;p&gt;Hey folks, I came here to share a project/product I built: a free international portal of online tools called &lt;strong&gt;Kastavo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea for Kastavo came from wanting to help some people — and myself too — by having a safe place to do some important tasks, like compressing an image, for example. I always had this fear of downloading a file and filling my PC with viruses — even more so since I use it for programming and stuff.&lt;/p&gt;

&lt;p&gt;The decision that defines the project: zero backend, everything runs in the browser. There isn't a single server route. That gives me two things: first, real privacy — the user's file never leaves their device; and second, zero cost to process, even if traffic grows.&lt;/p&gt;

&lt;p&gt;I wanted to cover several categories in it: from simple calculators to financial ones, dev tools, validators, converters to PDF, and other tools.&lt;/p&gt;

&lt;p&gt;I'll share a few things I did that I found interesting, and some headaches I went through.&lt;/p&gt;

&lt;p&gt;To deal with password-protected PDFs, I use QPDF compiled to WASM. Two behaviors happened that weren't documented anywhere: the main function &lt;em&gt;throws&lt;/em&gt; the error code instead of returning it, and the only way to capture the text log was to swap the global console.log before initializing the module. I only found this out by testing the compiled module by hand — reading the types wouldn't tell you.&lt;/p&gt;

&lt;p&gt;Another thing: components that generate random values, like passwords and UUIDs, were generating one value on the server and a different one on the client on the first render. Since the two didn't match, React discarded the tree and re-rendered. It only showed up when testing in a real browser — neither TS nor the unit tests catch this kind of thing. That's what showed me you can't rely on automated tests alone; there was a lot of manual testing to hunt down bugs like this.&lt;/p&gt;

&lt;p&gt;A problem I ran into along the way was XSS — Cross-Site Scripting. At first I thought it wouldn't affect me since I have no server and no database, but I realized it's kind of the opposite: since everything runs in the browser and I handle what the user types, XSS (JS injection) is the class of bug that actually makes sense for me to worry about — not, say, SQL injection. Since I have no login and no other users' data, the impact is limited, but even so it was good to understand it and be careful with how I render input.&lt;/p&gt;

&lt;p&gt;It's not a perfect product, but as my first personal project actually launched — with a bought domain, hosting, and everything — I thought it was really cool and learned a lot. It's a portal that took me about 2 months to build, plus days of setup to launch and a few more deploys in a rush fixing whatever came up.&lt;/p&gt;

&lt;p&gt;Today it has 85 tools in 3 languages, and I plan to keep adding useful tools and fixing bugs and issues I find.&lt;/p&gt;

&lt;p&gt;It's live at &lt;strong&gt;kastavo.com&lt;/strong&gt; — any feedback is very welcome: suggestions, criticism, and bugs too.&lt;/p&gt;

&lt;p&gt;Feel free to use &lt;strong&gt;Kastavo&lt;/strong&gt;!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
