<?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: Chandan Singh</title>
    <description>The latest articles on DEV Community by Chandan Singh (@chanblockdev).</description>
    <link>https://dev.to/chanblockdev</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%2F4213173%2F5cef7010-2c9a-4348-8e01-eeeebf8bdf56.png</url>
      <title>DEV Community: Chandan Singh</title>
      <link>https://dev.to/chanblockdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chanblockdev"/>
    <language>en</language>
    <item>
      <title>I Shipped HEIC Support. Then My iPhone Found 3 More Bugs.</title>
      <dc:creator>Chandan Singh</dc:creator>
      <pubDate>Sun, 01 Nov 2026 18:43:09 +0000</pubDate>
      <link>https://dev.to/chanblockdev/i-shipped-heic-support-then-my-iphone-found-3-more-bugs-457h</link>
      <guid>https://dev.to/chanblockdev/i-shipped-heic-support-then-my-iphone-found-3-more-bugs-457h</guid>
      <description>&lt;p&gt;I build editpdf.tools, free PDF and image tools that run in the browser. Users asked for iPhone HEIC support, so I added it. Then I tested everything on my own iPhone, and the phone had opinions.&lt;/p&gt;

&lt;p&gt;Bug 1: "WebP" files the size of PNGs&lt;/p&gt;

&lt;p&gt;I converted a photo to WebP on the iPhone. The file was as big as a PNG. Because it was a PNG. Safari does not support WebP in canvas.toBlob(), and instead of throwing, it hands back image/png. My code trusted the requested type and named it .webp.&lt;/p&gt;

&lt;p&gt;Lesson: always check blob.type after toBlob(). I now fall back to a small browser WebP encoder that loads only when the native result is wrong.&lt;/p&gt;

&lt;p&gt;Bug 2: rotated pages in the PDF&lt;/p&gt;

&lt;p&gt;A form photo came out sideways in Image to PDF. The thumbnail looked fine. The PDF did not. Phone cameras save sideways pixels plus an EXIF orientation tag; browsers apply the tag, PDFs do not. I was embedding raw JPEG bytes.&lt;/p&gt;

&lt;p&gt;Lesson: if you embed images into PDFs, read the EXIF orientation yourself and rotate on the page. It took about 30 lines and no second encode.&lt;/p&gt;

&lt;p&gt;Bug 3: "JPG or PNG" while HEIC worked&lt;/p&gt;

&lt;p&gt;On iPhone, HEIC already "worked" in Image to PDF before I touched it, because iOS converts HEIC to JPEG when a site only accepts JPG and PNG. On Windows the same file simply could not be selected. Two devices, two different truths. I added real HEIC and WebP support so the page text and the behaviour match everywhere.&lt;/p&gt;

&lt;p&gt;What I would tell myself last week&lt;/p&gt;

&lt;p&gt;Test on the phone your users have. Desktop dev tools are not enough.&lt;br&gt;
Silent fallbacks are worse than errors. Check what you actually got.&lt;br&gt;
Your support inbox is the best roadmap you have.&lt;/p&gt;

&lt;p&gt;Everything still runs on the user's device, so photos are not uploaded.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://editpdf.tools/image-to-pdf" rel="noopener noreferrer"&gt;https://editpdf.tools/image-to-pdf&lt;/a&gt; and &lt;a href="https://editpdf.tools/image-format-convert" rel="noopener noreferrer"&gt;https://editpdf.tools/image-format-convert&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Found another edge case? Tell me in the comments, through &lt;a href="https://editpdf.tools/contact" rel="noopener noreferrer"&gt;https://editpdf.tools/contact&lt;/a&gt;, or at &lt;a href="mailto:support@editpdf.tools"&gt;support@editpdf.tools&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ios</category>
      <category>debugging</category>
    </item>
    <item>
      <title>I built PDF tools that never upload your files. Here is what I learned</title>
      <dc:creator>Chandan Singh</dc:creator>
      <pubDate>Wed, 28 Oct 2026 13:44:40 +0000</pubDate>
      <link>https://dev.to/chanblockdev/i-built-pdf-tools-that-never-upload-your-files-here-is-what-i-learned-4ko3</link>
      <guid>https://dev.to/chanblockdev/i-built-pdf-tools-that-never-upload-your-files-here-is-what-i-learned-4ko3</guid>
      <description>&lt;p&gt;A few weeks ago we launched &lt;a href="https://editpdf.tools" rel="noopener noreferrer"&gt;editpdf.tools&lt;/a&gt;, a set of free PDF and image tools that do their work inside the browser instead of on a server. I want to share what the product looks like now and three lessons that changed how we build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;15 tools in total. The 14 free ones run on the user's device, with &lt;strong&gt;no signup and no watermark&lt;/strong&gt;: merge, split, compress, sign and fill PDFs, add page numbers or a watermark, image to PDF, image compress and resize to an exact KB size, format conversion, ID card front and back on one page, and a video frame extractor.&lt;/p&gt;

&lt;p&gt;The one exception is &lt;strong&gt;Edit PDF&lt;/strong&gt;, a paid tool that changes existing text inside a PDF. That kind of editing needs a server, so that file is uploaded for processing and not stored. We label it clearly instead of pretending everything is local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1: The real problem is often the steps around the tool
&lt;/h2&gt;

&lt;p&gt;When I looked at how people around me sign a PDF, signing was not the hard part. The usual route was: sign on paper, take a photo, open one website to remove the photo background, then upload the PDF to another website to place the signature. &lt;strong&gt;Three sites, two uploads&lt;/strong&gt;, and a signature that still looked pasted on.&lt;/p&gt;

&lt;p&gt;So our &lt;a href="https://editpdf.tools/pdf-sign" rel="noopener noreferrer"&gt;PDF Sign tool&lt;/a&gt; lets you draw the signature in the browser on a transparent background and place it on the page. No photo, no background remover, no upload. The fix was not a better signing algorithm. &lt;strong&gt;It was removing the detour.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2: Build for the moment people are stuck
&lt;/h2&gt;

&lt;p&gt;Almost everyone has been here: you are at a bank or an office counter, they ask for a copy of both sides of your ID, and you don't have one. People end up looking for a photocopy shop and handing their ID to a stranger.&lt;/p&gt;

&lt;p&gt;That became our That became our &lt;a href="https://editpdf.tools/id-front-back-to-pdf%20tool" rel="noopener noreferrer"&gt;ID Front and Back to PDF&lt;/a&gt;. On a phone you tap Take photo for each side, crop, choose the layout, and get a print-ready PDF in about a minute. It is not a complex tool. It just matches a real moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 3: Privacy needs proof, not a promise
&lt;/h2&gt;

&lt;p&gt;"Your files are safe with us" is on almost every PDF site. It means nothing on its own. So instead of only writing it, we recorded a short video that opens the browser's &lt;strong&gt;Network tab&lt;/strong&gt; while using the tools and shows that no file is sent. It is on our &lt;a href="https://editpdf.tools/security#proof" rel="noopener noreferrer"&gt;security page&lt;/a&gt;, and anyone can repeat the test on any site.&lt;/p&gt;

&lt;p&gt;Being honest about the one tool that does upload made the rest of the claim more believable, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would love feedback on
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Which PDF or image task do you still do with an upload-based tool because nothing else works?&lt;/li&gt;
&lt;li&gt;If you test the Network tab yourself, does anything look unexpected?&lt;/li&gt;
&lt;li&gt;What would make you trust a new tool with a sensitive document?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading. I will reply to every comment.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Chandan,&lt;br&gt;
 editpdf.tools&lt;/em&gt;&lt;/p&gt;

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