<?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: Maaz Sohail</title>
    <description>The latest articles on DEV Community by Maaz Sohail (@techrex).</description>
    <link>https://dev.to/techrex</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%2F3569798%2Fa9120f3a-39e4-4165-9ae6-443e74629c87.png</url>
      <title>DEV Community: Maaz Sohail</title>
      <link>https://dev.to/techrex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techrex"/>
    <language>en</language>
    <item>
      <title>PDF Signing Became a Daily Habit (2026 Reality Check + How I Fixed It Fast)</title>
      <dc:creator>Maaz Sohail</dc:creator>
      <pubDate>Wed, 18 Feb 2026 14:41:14 +0000</pubDate>
      <link>https://dev.to/techrex/pdf-signing-became-a-daily-habit-2026-reality-check-how-i-fixed-it-fast-1772</link>
      <guid>https://dev.to/techrex/pdf-signing-became-a-daily-habit-2026-reality-check-how-i-fixed-it-fast-1772</guid>
      <description>&lt;p&gt;In 2026, signing documents isn’t a “special event” anymore.&lt;/p&gt;

&lt;p&gt;It’s a weekly — sometimes daily — thing.&lt;/p&gt;

&lt;p&gt;Contracts. Freelance agreements. Offer letters. NDAs. Client approvals. Rental forms. School documents. Government paperwork. Bank forms. Vendor onboarding.&lt;/p&gt;

&lt;p&gt;And the weird part?&lt;/p&gt;

&lt;p&gt;Most of these documents are still PDFs.&lt;/p&gt;

&lt;p&gt;So if you work with PDFs (even a little), you’ve probably hit this moment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You get a PDF. Someone says, “Sign it and send it back today.”&lt;br&gt;&lt;br&gt;
You open it… and suddenly you’re stuck.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because signing PDFs sounds easy… until it isn’t.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem: PDF signing is simple… until you care about privacy and speed
&lt;/h2&gt;

&lt;p&gt;Here’s what used to happen to me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I’d receive a PDF to sign.
&lt;/li&gt;
&lt;li&gt;I’d try to “print and sign” (waste of time).
&lt;/li&gt;
&lt;li&gt;Or I’d use a random tool… and feel unsure about uploading sensitive documents.
&lt;/li&gt;
&lt;li&gt;Or I’d end up installing something heavy on my laptop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The “sign a PDF” workflow became frustrating because it’s always urgent.&lt;/p&gt;

&lt;p&gt;And in 2026, urgent wins.&lt;/p&gt;

&lt;p&gt;So I built a simple workflow I can trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why “Sign PDF” became a necessity for everyone in 2026
&lt;/h2&gt;

&lt;p&gt;Let’s be real — signing PDFs isn’t optional anymore. It’s now part of normal work.&lt;/p&gt;

&lt;p&gt;Here’s why it exploded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remote work is default&lt;/strong&gt;: people aren’t sitting near printers. They’re signing from laptops and phones.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed expectations are higher&lt;/strong&gt;: nobody says “send it next week.” They say “please sign today.”
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documents move faster than people&lt;/strong&gt;: paperwork moves at the speed of Slack messages.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everyone is onboarding something&lt;/strong&gt;: clients, tools, vendors, hiring — signatures everywhere.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy matters more&lt;/strong&gt;: more people are cautious about uploading sensitive documents to random websites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the real need isn’t just “sign a PDF.”&lt;/p&gt;

&lt;p&gt;The real need is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sign it fast. Keep it private. Don’t install anything. Don’t ruin the document.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The moment I realized my signing process was broken
&lt;/h2&gt;

&lt;p&gt;A client sent me a contract. Standard PDF.&lt;/p&gt;

&lt;p&gt;They wanted it signed and returned the same day.&lt;/p&gt;

&lt;p&gt;I was busy. I didn’t want to print. I didn’t want to scan. I didn’t want to email a half-broken screenshot-signature back.&lt;/p&gt;

&lt;p&gt;And I definitely didn’t want to upload a sensitive document somewhere sketchy.&lt;/p&gt;

&lt;p&gt;So I tested what “good” looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload PDF
&lt;/li&gt;
&lt;li&gt;Add signature
&lt;/li&gt;
&lt;li&gt;Download signed PDF
&lt;/li&gt;
&lt;li&gt;Done
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No weird steps. No confusing UI. No forced accounts.&lt;/p&gt;

&lt;p&gt;That was the goal.&lt;/p&gt;




&lt;h2&gt;
  
  
  The fix: a simple “Sign PDF” tool that actually feels normal
&lt;/h2&gt;

&lt;p&gt;That’s why I started using this:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://pdffreeeditor.com/sign-pdf/" rel="noopener noreferrer"&gt;Sign PDF online (free)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s built for the exact moment you’re in:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I have a PDF. I need to sign it. I need it done right now.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  My 60-second signing workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upload the PDF&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Just drop it in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add your signature&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Draw it, type it, or place it the way you need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Position it properly&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Put it exactly where the signature belongs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download the signed PDF&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Send it back immediately.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;No printing. No scanning. No “what file format is this?” chaos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why “private signing” became a big deal for me
&lt;/h2&gt;

&lt;p&gt;Here’s the thing most people ignore:&lt;/p&gt;

&lt;p&gt;A lot of documents you sign are not “public.”&lt;/p&gt;

&lt;p&gt;They contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ID numbers
&lt;/li&gt;
&lt;li&gt;addresses
&lt;/li&gt;
&lt;li&gt;bank details
&lt;/li&gt;
&lt;li&gt;salary info
&lt;/li&gt;
&lt;li&gt;legal terms
&lt;/li&gt;
&lt;li&gt;company names
&lt;/li&gt;
&lt;li&gt;personal signatures
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you’re signing anything sensitive, privacy becomes part of the workflow.&lt;/p&gt;

&lt;p&gt;That’s why I also use this page when I’m signing something personal/confidential:&lt;/p&gt;

&lt;p&gt;🔒 &lt;strong&gt;&lt;a href="https://pdffreeeditor.com/sign-pdf-document-private/" rel="noopener noreferrer"&gt;Sign PDF document privately&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not everyone cares about this… until they absolutely should.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common PDF signing mistakes (and how to avoid them)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Signing with screenshots&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Looks unprofessional and often gets rejected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Printing + scanning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Slow, reduces quality, and creates huge file sizes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uploading to random tools&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You don’t always know what happens to your file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Putting the signature in the wrong place&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Some documents require signature + date + initials in specific spots.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My simple rule: if you’re signing for a client, a job, or legal paperwork — do it clean.&lt;/p&gt;




&lt;h2&gt;
  
  
  2026 reality check: Signing is normal now
&lt;/h2&gt;

&lt;p&gt;Signing PDFs used to feel like a “special task.”&lt;/p&gt;

&lt;p&gt;Now it’s normal.&lt;/p&gt;

&lt;p&gt;The best tools in 2026 are the ones that feel invisible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast
&lt;/li&gt;
&lt;li&gt;simple
&lt;/li&gt;
&lt;li&gt;no friction
&lt;/li&gt;
&lt;li&gt;no account wall
&lt;/li&gt;
&lt;li&gt;works on any device
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need to sign a PDF quickly, here’s the tool I use:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;&lt;a href="https://pdffreeeditor.com/sign-pdf/" rel="noopener noreferrer"&gt;Sign PDF online&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick question (for real people, not bots)
&lt;/h2&gt;

&lt;p&gt;What do you sign most often?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;contracts
&lt;/li&gt;
&lt;li&gt;freelance agreements
&lt;/li&gt;
&lt;li&gt;job offer letters
&lt;/li&gt;
&lt;li&gt;school docs
&lt;/li&gt;
&lt;li&gt;government forms
&lt;/li&gt;
&lt;li&gt;client approvals
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your most common one — I’m collecting real workflows to improve the signing experience.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>resources</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why I Built a Privacy-First Image Converter (PNG, JPG, WebP, HEIC, AVIF) That Processes Files in the Browser</title>
      <dc:creator>Maaz Sohail</dc:creator>
      <pubDate>Tue, 17 Feb 2026 13:23:57 +0000</pubDate>
      <link>https://dev.to/techrex/why-i-built-a-privacy-first-image-converter-png-jpg-webp-heic-avif-that-processes-files-in-476p</link>
      <guid>https://dev.to/techrex/why-i-built-a-privacy-first-image-converter-png-jpg-webp-heic-avif-that-processes-files-in-476p</guid>
      <description>&lt;p&gt;The Problem With Most “Free” Image Converters&lt;/p&gt;

&lt;p&gt;If you have ever searched for:&lt;/p&gt;

&lt;p&gt;convert WebP to PNG&lt;/p&gt;

&lt;p&gt;resize image to 300x300&lt;/p&gt;

&lt;p&gt;compress image for website&lt;/p&gt;

&lt;p&gt;convert HEIC to JPG&lt;/p&gt;

&lt;p&gt;You already know the experience.&lt;/p&gt;

&lt;p&gt;You upload your image.&lt;br&gt;
The tool sends it to a remote server.&lt;br&gt;
You wait.&lt;br&gt;
Then you download it back.&lt;/p&gt;

&lt;p&gt;Most free image tools rely on cloud processing. That means your images are uploaded to a third-party server before conversion happens. For personal images this might not matter. For work files, client assets, or sensitive screenshots, it can.&lt;/p&gt;

&lt;p&gt;On top of that:&lt;/p&gt;

&lt;p&gt;Bulk conversion is often restricted&lt;/p&gt;

&lt;p&gt;Zip downloads are locked behind paywalls&lt;/p&gt;

&lt;p&gt;Watermarks get added&lt;/p&gt;

&lt;p&gt;Ads overwhelm the interface&lt;/p&gt;

&lt;p&gt;I wanted something simpler.&lt;/p&gt;

&lt;p&gt;Why Local Browser Processing Matters&lt;/p&gt;

&lt;p&gt;Modern browsers are powerful enough to handle image processing directly.&lt;/p&gt;

&lt;p&gt;When images are processed locally in the browser:&lt;/p&gt;

&lt;p&gt;Files do not need to be uploaded for processing&lt;/p&gt;

&lt;p&gt;Conversion is often faster&lt;/p&gt;

&lt;p&gt;There is less reliance on external servers&lt;/p&gt;

&lt;p&gt;The workflow feels lighter and more direct&lt;/p&gt;

&lt;p&gt;This approach is especially useful for:&lt;/p&gt;

&lt;p&gt;Developers handling many assets&lt;/p&gt;

&lt;p&gt;Designers exporting multiple formats&lt;/p&gt;

&lt;p&gt;Ecommerce sellers resizing product images&lt;/p&gt;

&lt;p&gt;Content creators preparing social media uploads&lt;/p&gt;

&lt;p&gt;Features That Actually Matter in an Image Converter&lt;/p&gt;

&lt;p&gt;After studying how people search and use these tools, I focused on a few high-intent features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Format Conversion&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Support for common and modern formats:&lt;/p&gt;

&lt;p&gt;PNG to JPG&lt;/p&gt;

&lt;p&gt;JPG to WebP&lt;/p&gt;

&lt;p&gt;WebP to PNG&lt;/p&gt;

&lt;p&gt;HEIC to JPG&lt;/p&gt;

&lt;p&gt;AVIF conversion&lt;/p&gt;

&lt;p&gt;GIF, BMP, TIFF support&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bulk Image Conversion&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many free tools limit batch uploads. Supporting multiple images at once makes a huge difference for real workflows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Zip Downloads&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you upload 20 images, you should not have to download them one by one.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resize by Pixels or Percentage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use cases like:&lt;/p&gt;

&lt;p&gt;resize image to 300x300&lt;/p&gt;

&lt;p&gt;resize image to fit within 1080px&lt;/p&gt;

&lt;p&gt;resize image by 50 percent&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Image Compression&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reducing file size for:&lt;/p&gt;

&lt;p&gt;website performance&lt;/p&gt;

&lt;p&gt;faster page loads&lt;/p&gt;

&lt;p&gt;SEO optimization&lt;/p&gt;

&lt;p&gt;Why I Built &lt;a href="https://creatoryn.com/" rel="noopener noreferrer"&gt;creatoryn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creatoryn started as a simple browser-based image tool focused on:&lt;/p&gt;

&lt;p&gt;format conversion&lt;/p&gt;

&lt;p&gt;resizing&lt;/p&gt;

&lt;p&gt;compression&lt;/p&gt;

&lt;p&gt;cropping&lt;/p&gt;

&lt;p&gt;bulk processing&lt;/p&gt;

&lt;p&gt;no signup&lt;/p&gt;

&lt;p&gt;The core idea was simple:&lt;/p&gt;

&lt;p&gt;Process images locally in the browser and remove friction.&lt;/p&gt;

&lt;p&gt;No accounts.&lt;br&gt;
No unnecessary dashboards.&lt;br&gt;
No forced upgrades for basic features.&lt;/p&gt;

&lt;p&gt;It is designed for high-intent users who search for specific actions like “convert WebP to PNG online” or “compress image under 100kb.”&lt;/p&gt;

&lt;p&gt;Who Should Use a Browser-Based Image Tool?&lt;/p&gt;

&lt;p&gt;You will likely benefit from this approach if you:&lt;/p&gt;

&lt;p&gt;Regularly convert between PNG, JPG, WebP, AVIF, or HEIC&lt;/p&gt;

&lt;p&gt;Need to resize images for Instagram, YouTube thumbnails, or LinkedIn&lt;/p&gt;

&lt;p&gt;Optimize images for websites&lt;/p&gt;

&lt;p&gt;Work with bulk image files&lt;/p&gt;

&lt;p&gt;Prefer not to upload files to external servers for processing&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;The internet does not need more complex SaaS dashboards.&lt;/p&gt;

&lt;p&gt;It needs reliable utilities that solve narrow problems extremely well.&lt;/p&gt;

&lt;p&gt;If you are building tools, consider this:&lt;/p&gt;

&lt;p&gt;Sometimes the most valuable products are the ones that remove friction quietly.&lt;/p&gt;

&lt;p&gt;And if you are searching for a free image converter, look beyond “free” and ask:&lt;/p&gt;

&lt;p&gt;Is it fast?&lt;br&gt;
Does it support bulk?&lt;br&gt;
Does it process locally?&lt;br&gt;
Does it keep the workflow simple?&lt;/p&gt;

&lt;p&gt;Those questions matter more than flashy branding.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>I was tired of “free” PDF editors that upload files and add watermarks — so I built a client-side one</title>
      <dc:creator>Maaz Sohail</dc:creator>
      <pubDate>Thu, 16 Oct 2025 21:30:55 +0000</pubDate>
      <link>https://dev.to/techrex/i-was-tired-of-free-pdf-editors-that-upload-files-and-add-watermarks-so-i-built-a-client-side-7jm</link>
      <guid>https://dev.to/techrex/i-was-tired-of-free-pdf-editors-that-upload-files-and-add-watermarks-so-i-built-a-client-side-7jm</guid>
      <description>&lt;p&gt;Most “free” PDF editors aren’t really free. You upload a file, fix a typo, hit download… and get a watermark or a paywall. Worse, your document lives on someone else’s server now.&lt;/p&gt;

&lt;p&gt;I’m a builder and I needed a tool I could trust. So I made one: a &lt;strong&gt;100% client-side PDF editor&lt;/strong&gt;. No signup. No watermark. &lt;strong&gt;Your file never leaves your device&lt;/strong&gt;. This post is the story — what we tried, what broke, and what finally worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem we kept hitting:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bait-and-switch UX: “Free” until the last click.&lt;/li&gt;
&lt;li&gt;Privacy risk: Uploading IDs/contracts to unknown servers isn’t acceptable for many people or companies.&lt;/li&gt;
&lt;li&gt;Latency and cost: Upload → process → download is slow, and server costs scale as you grow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The obvious answer: don’t upload at all. Do the work in the browser.&lt;br&gt;
**&lt;br&gt;
What “client-side PDF editing” really means**&lt;/p&gt;

&lt;p&gt;PDFs are a weird mix of vector graphics, text glyphs, images, annotations, and page transforms. In practice we needed to solve five things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parse and render pages fast enough that mobile users don’t bounce.&lt;/li&gt;
&lt;li&gt;Edit text without wrecking layout.&lt;/li&gt;
&lt;li&gt;Place images/logos/stamps precisely.&lt;/li&gt;
&lt;li&gt;Capture signatures smoothly (mouse/touch) and embed them reliably.&lt;/li&gt;
&lt;li&gt;Export a clean PDF instantly, all offline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We leaned on modern web APIs: &lt;strong&gt;WebAssembly, Canvas, OffscreenCanvas, Web Workers, and careful memory management. No servers required&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text editing: “glyph runs” and white-out surgery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PDF text isn’t like a contenteditable div. It’s positioned glyph runs. Our approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect text runs on the page.&lt;/li&gt;
&lt;li&gt;When the new text doesn’t match metrics exactly, place a subtle white-out rectangle behind the edited area to “erase” the old glyphs, then draw the new text on top (preserving alignment/flow).&lt;/li&gt;
&lt;li&gt;Support common font choices; fall back gracefully when fonts aren’t embeddable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was the most fragile part. Early versions had hilarious bugs: a single emoji could push a line 2px and every subsequent line went crooked. Fix: normalize metrics and snap to baselines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://pdffreeeditor.com/add-image-pdf/" rel="noopener noreferrer"&gt;Images &amp;amp; logos&lt;/a&gt;: pixels meet PDF space&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Placing a PNG/JPG/WebP on a PDF page sounds simple until you remember that PDF has its own coordinate space with transforms. We convert CSS pixels → PDF user units, apply rotation/scale, and clamp to page bounds. For logos with transparency, PNG with alpha is ideal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://pdffreeeditor.com/sign-pdf/" rel="noopener noreferrer"&gt;Signatures&lt;/a&gt;: feel matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We capture pointer events, smooth the path (Catmull–Rom → cubic Beziers), and embed the result as a vector or high-res bitmap. The two things that made it feel “real”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slight pressure simulation based on velocity (thicker when moving faster).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Immediate feedback at 60fps using a worker + offscreen canvas on supported browsers.&lt;br&gt;
&lt;strong&gt;Performance: how we kept it snappy on a Moto G&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lazy page rendering: only draw the viewport + a small prefetch window.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Worker pool: parsing/rendering off the main thread to keep TBT ~0–30ms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chunked processing: stream large PDFs and free buffers aggressively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No layout thrash: one write per frame; batch DOM updates; avoid sync measures.&lt;br&gt;
Result: on mobile we see ~1.2s FCP and ~1.5s LCP for the landing UI, and edits feel instant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Privacy &amp;amp; trust: rules we set for ourselves&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default: no network calls. The editor runs locally.&lt;/li&gt;
&lt;li&gt;If you choose an optional cloud action later, it’s explicit and TLS-only.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No watermark, no usage caps, no “gotcha” step. We’d rather earn goodwill than convert via traps.&lt;br&gt;
**&lt;br&gt;
What we got wrong (so you don’t have to)**&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Font chaos: even when you think you embedded a font, subsetting can bite you. We added thorough fallbacks and test PDFs with non-Latin scripts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mobile Safari limits: large canvases + memory spikes = crashes. Fix: tile rendering and lower peak memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pointer jitter: naive smoothing feels sluggish. Velocity-aware smoothing felt right.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Export size: we shipped a build that ballooned file size after multiple edits. The culprit: duplicate image XObjects. We now dedupe assets on export.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open problems we’re still chewing on&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full OCR for scanned PDFs (we’re evaluating on-device models).&lt;/li&gt;
&lt;li&gt;True find &amp;amp; replace across pages.&lt;/li&gt;
&lt;li&gt;Batch stamping (same logo on N pages in one step).&lt;/li&gt;
&lt;li&gt;PDF/A export for archival workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you’re building something similar, these patterns helped&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers everywhere. Even small parsing tasks benefit.&lt;/li&gt;
&lt;li&gt;One source of truth for coordinates. Don’t mix CSS pixels, device pixels, and PDF units across modules.&lt;/li&gt;
&lt;li&gt;Design for failure. Fonts missing? Fall back. Image corrupt? Render a placeholder and let the user continue.&lt;/li&gt;
&lt;li&gt;Keep promises user-visible. “No watermark” is a commitment — put it in the UI, not just the blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to try it (&lt;strong&gt;no pressure&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;If a truly free, client-side editor is useful, you can try it here: pdffreeeditor.com.&lt;br&gt;
No signup, no watermark; edit, sign, merge/split, and add images right in the browser.&lt;/p&gt;

&lt;p&gt;I’d love feedback on edge cases (weird fonts, giant scans, RTL text). If you’ve solved similar problems in canvas/WebAssembly, please share your tricks — I’ll happily credit and implement.&lt;/p&gt;

&lt;p&gt;— Maaz&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
  </channel>
</rss>
