<?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: pirate_haizei</title>
    <description>The latest articles on DEV Community by pirate_haizei (@pirate_haizei).</description>
    <link>https://dev.to/pirate_haizei</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%2F4012966%2F052e3e4f-1c29-43b2-a8a1-7e5d14ccd4c3.png</url>
      <title>DEV Community: pirate_haizei</title>
      <link>https://dev.to/pirate_haizei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pirate_haizei"/>
    <language>en</language>
    <item>
      <title>I Built a Free PDF Tool That Runs 100% in Your Browser (No Uploads, No Servers)</title>
      <dc:creator>pirate_haizei</dc:creator>
      <pubDate>Sat, 04 Jul 2026 05:01:48 +0000</pubDate>
      <link>https://dev.to/pirate_haizei/i-built-a-free-pdf-tool-that-runs-100-in-your-browser-no-uploads-no-servers-2lle</link>
      <guid>https://dev.to/pirate_haizei/i-built-a-free-pdf-tool-that-runs-100-in-your-browser-no-uploads-no-servers-2lle</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Every time you upload a PDF to an online tool, you're trusting someone else with your data. Contracts, tax forms, personal docs — they all go to some server you don't control.&lt;/p&gt;

&lt;p&gt;I wanted a better way. So I built &lt;a href="https://pdf.aixiaot.com" rel="noopener noreferrer"&gt;PDFCraft&lt;/a&gt; — a &lt;strong&gt;100% browser-based&lt;/strong&gt; PDF toolkit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing is uploaded. No sign-ups. No limits.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Merge, split, compress, rotate, and crop PDFs&lt;/li&gt;
&lt;li&gt;Convert JPG ↔ PDF&lt;/li&gt;
&lt;li&gt;Add watermarks, page numbers, and passwords&lt;/li&gt;
&lt;li&gt;Extract images and text (OCR powered by Tesseract.js)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it runs locally in your browser. Close the tab, and your data is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;p&gt;Here's what I used to make it work:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;React 19 + TypeScript&lt;/td&gt;
&lt;td&gt;UI and type safety&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vite 8&lt;/td&gt;
&lt;td&gt;Build tool with HMR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tailwind CSS v4&lt;/td&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pdf-lib&lt;/td&gt;
&lt;td&gt;Create, edit, and extract PDF content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pdfjs-dist&lt;/td&gt;
&lt;td&gt;Render and parse PDFs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tesseract.js&lt;/td&gt;
&lt;td&gt;OCR — text extraction from scanned PDFs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All PDF processing happens on the client side. No backend servers, no API keys, no data collection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Challenges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Processing large PDFs in the browser can be slow. The solution? WebAssembly under the hood. pdf-lib and Tesseract.js leverage WASM for heavy lifting, making everything fast enough for real-world use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. File Size&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keeping the bundle small while supporting 10+ tools required careful code splitting. Each tool loads its dependencies only when you use it — so the initial load stays fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. User Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Local processing shouldn't feel slow. I added progress indicators and processed files in chunks where possible. Users get instant feedback without wondering if the page froze.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Open-Sourced It
&lt;/h2&gt;

&lt;p&gt;The code is available on &lt;a href="https://github.com/haizeigh/pdf-tools" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. I believe privacy tools should be transparent — you can inspect exactly what runs in your browser.&lt;/p&gt;

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

&lt;p&gt;No sign-up, no payment, no server uploads. Just PDF tools that respect your privacy.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://pdf.aixiaot.com" rel="noopener noreferrer"&gt;https://pdf.aixiaot.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow me &lt;a href="https://dev.to/pirate_haizei"&gt;@pirate_haizei&lt;/a&gt; for more open-source projects, React tips, and browser-first tools.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;GitHub: &lt;a href="https://github.com/haizeigh/pdf-tools" rel="noopener noreferrer"&gt;https://github.com/haizeigh/pdf-tools&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>react</category>
      <category>privacy</category>
    </item>
    <item>
      <title>How I Built a Free AI Image Tool That Runs 100% in the Browser (No Server Needed)</title>
      <dc:creator>pirate_haizei</dc:creator>
      <pubDate>Fri, 03 Jul 2026 03:51:14 +0000</pubDate>
      <link>https://dev.to/pirate_haizei/how-i-built-a-free-ai-image-tool-that-runs-100-in-the-browser-no-server-needed-4e4l</link>
      <guid>https://dev.to/pirate_haizei/how-i-built-a-free-ai-image-tool-that-runs-100-in-the-browser-no-server-needed-4e4l</guid>
      <description>&lt;p&gt;I recently built a free online image processing tool that runs entirely in the browser. &lt;br&gt;
    No uploads, no servers, no sign-ups. Here's how it works under the hood. &lt;a href="https://img.aixiaot.com" rel="noopener noreferrer"&gt;https://img.aixiaot.com&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihtu6ygd7761sqq54lb7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihtu6ygd7761sqq54lb7.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Problem
Most online image tools require uploading your photos to someone else's server. 
This raises privacy concerns and limits file sizes. I wanted to build something 
that processes everything locally.

Tech Stack
- Next.js for the frontend
- TensorFlow.js + Real-ESRGAN for AI upscaling
- @imgly/background-removal for AI background removal
- Tesseract.js for OCR
- Canvas API for compression, resizing, format conversion

Features
• AI Background Removal - one click, works for portraits, products, animals
• Image Compression - reduce file size up to 96%
• Format Conversion - JPG, PNG, WebP
• ID Photo Maker - passport and visa photos with customizable backgrounds
• AI Image Upscaler - 2x to 8x with Real-ESRGAN
• OCR - extract text from images, 20+ languages
• Image Resizer - enlarge or shrink

Architecture
All processing happens client-side using WebAssembly and the Canvas API. 
When you upload an image, it never leaves your device. The AI models 
(background removal, upscaling) run locally in your browser using 
TensorFlow.js and ONNX Runtime Web.

Open Source
The entire project is open source under AGPL v3. 
You can find it on GitHub: https://github.com/haizeigh/ai-image-tools

Try It
https://img.aixiaot.com

I'd love to hear your feedback! What features would you add?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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