<?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: Danny Cranmer</title>
    <description>The latest articles on DEV Community by Danny Cranmer (@danny_cranmer_9e9e9d7178d).</description>
    <link>https://dev.to/danny_cranmer_9e9e9d7178d</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%2F3833702%2F5c1d4e30-0ef7-4743-a1dc-b012f0bb5efb.jpeg</url>
      <title>DEV Community: Danny Cranmer</title>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danny_cranmer_9e9e9d7178d"/>
    <language>en</language>
    <item>
      <title>I Replaced Adobe Acrobat With a Free Browser Tool — Here's What Happened</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Mon, 30 Mar 2026 20:44:56 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/i-replaced-adobe-acrobat-with-a-free-browser-tool-heres-what-happened-56ph</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/i-replaced-adobe-acrobat-with-a-free-browser-tool-heres-what-happened-56ph</guid>
      <description>&lt;p&gt;I've been paying $19.99/month for Adobe Acrobat Pro for three years. That's $720 for something I use maybe twice a week to merge PDFs and add page numbers.&lt;/p&gt;

&lt;p&gt;Last month I found Parchment and cancelled my subscription. Here's my honest comparison after 30 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually used Acrobat for
&lt;/h2&gt;

&lt;p&gt;Looking at my usage, 90% of my PDF work came down to five operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merging&lt;/strong&gt; contracts and invoices into single files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compressing&lt;/strong&gt; large PDFs before emailing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adding page numbers&lt;/strong&gt; to reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password-protecting&lt;/strong&gt; confidential documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Converting&lt;/strong&gt; images to PDF&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. No OCR. No advanced form editing. No digital signatures. Just basic PDF manipulation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The switch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;Parchment&lt;/a&gt; does all five of those things — plus 11 more tools — for free. The key difference: everything runs in your browser. Your files never get uploaded anywhere.&lt;/p&gt;

&lt;p&gt;For someone handling confidential contracts and financial documents, that's actually a better security model than Adobe's cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I gained
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$240/year&lt;/strong&gt; back in my pocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No desktop app&lt;/strong&gt; eating RAM in the background&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account&lt;/strong&gt; to manage (or get breached)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works anywhere&lt;/strong&gt; — any browser, any device, no installs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy by design&lt;/strong&gt; — files never leave my machine&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I lost
&lt;/h2&gt;

&lt;p&gt;Honestly? Not much for my use case. If you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OCR (scanning paper documents)&lt;/li&gt;
&lt;li&gt;Advanced form creation&lt;/li&gt;
&lt;li&gt;E-signatures with legal compliance&lt;/li&gt;
&lt;li&gt;Batch processing thousands of files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then yes, you probably need Acrobat or a similar desktop tool.&lt;/p&gt;

&lt;p&gt;But if you're like me — merging, splitting, compressing, watermarking a few PDFs a week — you're overpaying.&lt;/p&gt;

&lt;p&gt;If you &lt;em&gt;do&lt;/em&gt; need OCR or enterprise features, &lt;a href="https://readdle.8kpa2n.net/en1y91" rel="noopener noreferrer"&gt;PDF Expert&lt;/a&gt; is the best lightweight alternative I've found — $79/year vs Adobe's $240, with a proper native app and no subscription surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comparison
&lt;/h2&gt;

&lt;p&gt;I put together a detailed comparison of the &lt;a href="https://parchpdf.com/best-pdf-editor.html" rel="noopener noreferrer"&gt;best free PDF editors in 2026&lt;/a&gt;. Spoiler: you have more free options than you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;Parchment&lt;/a&gt; — 16 PDF tools, free, no signup, no uploads. Open source on &lt;a href="https://github.com/dannycranmer/parchment" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you find it useful, &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;you can support the project&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How I Built an Autonomous AI Agent That Discovers and Publishes Stories Daily</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Wed, 25 Mar 2026 09:08:26 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/how-i-built-an-autonomous-ai-agent-that-discovers-and-publishes-stories-daily-ien</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/how-i-built-an-autonomous-ai-agent-that-discovers-and-publishes-stories-daily-ien</guid>
      <description>&lt;p&gt;Have you ever wanted a personalized news feed that actually finds interesting things — not just what's trending?&lt;/p&gt;

&lt;p&gt;I built an AI agent that does exactly that. It runs on a cron job, discovers obscure and fascinating stories, writes original articles about them, and publishes them to a static site. Zero daily effort from me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt; &lt;a href="https://shuffle-news.netlify.app/" rel="noopener noreferrer"&gt;Shuffle — Interesting, random stories every day&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cron (every few hours)
  → AI Agent (Claude API)
    → Web search for interesting topics
    → Research and cross-reference
    → Write original narrative article
    → Commit to repo
  → Netlify auto-deploys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The whole pipeline takes about 2-3 minutes per article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Claude API for discovery + writing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React + Vite (static site)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Netlify free tier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation:&lt;/strong&gt; Cron on EC2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; GoatCounter (open source, privacy-friendly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total running cost: $0 (well, some small percentage of my monthly Claude subscription).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Discovery Problem
&lt;/h2&gt;

&lt;p&gt;Here's what I learned: writing is the easy part. Any LLM can write a coherent article. The hard part is &lt;strong&gt;finding topics worth writing about&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My first attempts just regurgitated Wikipedia-level facts. The breakthrough was adding search + multi-source research:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Broad search&lt;/strong&gt; for unusual, counterintuitive, or lesser-known topics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depth check&lt;/strong&gt; — is there enough substance for a real article?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-reference&lt;/strong&gt; — verify facts across multiple sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Narrative test&lt;/strong&gt; — would a curious person actually want to read this?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hit rate went from ~30% "worth reading" to ~70%.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Surprised Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous agents actually work&lt;/strong&gt; for well-defined pipelines. This runs unattended.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality variance is real.&lt;/strong&gt; Some articles are genuinely fascinating. Others are filler. Curation still matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static sites are perfect&lt;/strong&gt; for this use case. Commit + deploy = done.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://shuffle-news.netlify.app/" rel="noopener noreferrer"&gt;Shuffle&lt;/a&gt; — hit the shuffle button for a random story. New content daily.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm also building &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;free developer tools&lt;/a&gt; (27 tools, all client-side) and &lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;free PDF tools&lt;/a&gt; as part of a broader experiment in AI-assisted product development.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you found this useful, &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;buy me a coffee&lt;/a&gt; ☕ — it keeps the cron jobs running.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Add Page Numbers, Watermarks, and Passwords to PDFs — No Software Needed</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Mon, 23 Mar 2026 00:11:51 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/how-to-add-page-numbers-watermarks-and-passwords-to-pdfs-no-software-needed-18gf</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/how-to-add-page-numbers-watermarks-and-passwords-to-pdfs-no-software-needed-18gf</guid>
      <description>&lt;p&gt;Quick scenario: your boss emails you a 47-page PDF and says "add page numbers, slap our logo as a watermark, and password-protect it before sending to the client."&lt;/p&gt;

&lt;p&gt;You could install Adobe Acrobat ($20/month). You could try one of those "free" online tools that upload your confidential files to who-knows-where. Or you could open three browser tabs and be done in 90 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Add page numbers
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://parchpdf.com/page-numbers.html" rel="noopener noreferrer"&gt;Page Numbers tool&lt;/a&gt;. Drop your PDF. Pick a position (bottom center, top right, whatever). Click generate. Done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add a watermark
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://parchpdf.com/watermark.html" rel="noopener noreferrer"&gt;Watermark tool&lt;/a&gt;. Upload the numbered PDF. Type your company name or upload a logo. Adjust opacity and position. Generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Password-protect it
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://parchpdf.com/protect.html" rel="noopener noreferrer"&gt;Protect tool&lt;/a&gt;. Upload the watermarked PDF. Set a password. Download the encrypted file.&lt;/p&gt;

&lt;p&gt;Total time: about 90 seconds. Total cost: $0. Files uploaded to a server: zero — everything runs in your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use Adobe?
&lt;/h2&gt;

&lt;p&gt;Adobe Acrobat Pro costs $19.99/month. For most people, you need page numbers once a quarter. You need to compress a PDF before emailing it. You need to merge two contracts.&lt;/p&gt;

&lt;p&gt;Compare the &lt;a href="https://parchpdf.com/best-pdf-editor.html" rel="noopener noreferrer"&gt;best free PDF editors in 2026&lt;/a&gt; — you might be surprised how much you can do without paying a subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other things you can do
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;Parchment&lt;/a&gt; has 15 PDF tools total — merge, split, compress, convert to images, extract pages, unlock, reorder, and more. All free, all client-side, all open source.&lt;/p&gt;

&lt;p&gt;If you find it useful, &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;you can support the project here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Format SQL Queries in Seconds — No Extensions, No Installs</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Sun, 22 Mar 2026 01:02:12 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/format-sql-queries-in-seconds-no-extensions-no-installs-3j01</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/format-sql-queries-in-seconds-no-extensions-no-installs-3j01</guid>
      <description>&lt;p&gt;Ever stare at a 400-character single-line SQL query in a Slack message and try to figure out what it's joining?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-01'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;active&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You could paste it into your IDE. Or install a VS Code extension. Or you could just... paste it into a browser tab and get this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
  &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;
  &lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
  &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-01'&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;active&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
  &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt;
  &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built a &lt;a href="https://devbrew.org/sql-formatter.html" rel="noopener noreferrer"&gt;SQL Formatter&lt;/a&gt; as part of DevToolbox — a collection of browser-based dev tools. Paste SQL in, get formatted SQL out. Also minifies if you need to go the other way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same deal for YAML
&lt;/h2&gt;

&lt;p&gt;Debugging a Kubernetes manifest? CI pipeline config? The &lt;a href="https://devbrew.org/yaml-validator.html" rel="noopener noreferrer"&gt;YAML Validator&lt;/a&gt; catches syntax errors with line numbers and can convert between YAML and JSON.&lt;/p&gt;

&lt;p&gt;Paste broken YAML, get instant error highlighting telling you exactly which line has the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why browser-based?
&lt;/h2&gt;

&lt;p&gt;No installs, no extensions, works on any machine including locked-down work laptops. Everything runs client-side — nothing gets sent anywhere.&lt;/p&gt;

&lt;p&gt;All 25 tools: &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;DevToolbox&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 PDF Tools That Don't Upload Your Files (And Why That Matters)</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Sat, 21 Mar 2026 00:05:35 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/5-pdf-tools-that-dont-upload-your-files-and-why-that-matters-2ipp</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/5-pdf-tools-that-dont-upload-your-files-and-why-that-matters-2ipp</guid>
      <description>&lt;p&gt;Most online PDF tools work the same way: you upload your file, their server processes it, and you download the result. Your document — contracts, tax forms, medical records — passes through someone else's infrastructure.&lt;/p&gt;

&lt;p&gt;Here are 5 PDF tools that work differently. They run entirely in your browser. Your files never leave your device.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Merge PDFs
&lt;/h2&gt;

&lt;p&gt;Combine multiple PDFs into a single document. Drag to reorder. No file size limits (your browser is the only constraint).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Merging contracts or financial documents on a third-party server means those documents exist on that server — even briefly.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://parchpdf.com/merge.html" rel="noopener noreferrer"&gt;Merge PDFs — Parchment&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Split PDF
&lt;/h2&gt;

&lt;p&gt;Extract specific pages or split a PDF into multiple files. Select pages visually or enter page ranges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; If you're extracting pages from an NDA or employee record, "briefly on a server" is still a liability.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://parchpdf.com/split.html" rel="noopener noreferrer"&gt;Split PDF — Parchment&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Compress PDF
&lt;/h2&gt;

&lt;p&gt;Reduce PDF file size for email or storage. Adjustable quality settings. Works on image-heavy PDFs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Compression typically requires heavy server-side processing. Parchment does it client-side using canvas resampling.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://parchpdf.com/compress.html" rel="noopener noreferrer"&gt;Compress PDF — Parchment&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. PDF to Text
&lt;/h2&gt;

&lt;p&gt;Extract all text content from a PDF. Useful for searching, indexing, or feeding into other tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Text extraction means the tool reads every word of your document. Do you want a remote server doing that?&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://parchpdf.com/pdf-to-text.html" rel="noopener noreferrer"&gt;PDF to Text — Parchment&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Protect PDF (Password)
&lt;/h2&gt;

&lt;p&gt;Add password protection to any PDF. Set permissions for printing, copying, and editing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; The irony of uploading a document to a server &lt;em&gt;in order to password-protect it&lt;/em&gt; should not need explaining.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://parchpdf.com/protect.html" rel="noopener noreferrer"&gt;Protect PDF — Parchment&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;All five tools use &lt;a href="https://github.com/Pdfio/pdf-lib" rel="noopener noreferrer"&gt;pdf-lib&lt;/a&gt; and the browser's built-in canvas API. When you drop a file, JavaScript processes it in your browser tab. The file never touches a network request.&lt;/p&gt;

&lt;p&gt;You can verify this yourself: open DevTools → Network tab → use any tool. Zero requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Suite
&lt;/h2&gt;

&lt;p&gt;Parchment has 15 PDF tools — all free, all client-side, no signup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge, Split, Compress, Rotate, Reorder&lt;/li&gt;
&lt;li&gt;Images to PDF, PDF to Text, Flatten&lt;/li&gt;
&lt;li&gt;Add Page Numbers, Extract Pages&lt;/li&gt;
&lt;li&gt;Protect, Unlock, Watermark&lt;/li&gt;
&lt;li&gt;And more being added weekly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Parchment — Free PDF Tools&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built as part of an experiment in autonomous software ventures. All tools are open source and free forever.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>privacy</category>
      <category>webdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>How to Debug JWT Tokens Without Sending Them to a Server</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Fri, 20 Mar 2026 23:51:17 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/how-to-debug-jwt-tokens-without-sending-them-to-a-server-5826</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/how-to-debug-jwt-tokens-without-sending-them-to-a-server-5826</guid>
      <description>&lt;p&gt;Every developer has pasted a JWT into jwt.io at some point. But have you thought about what happens to that token?&lt;/p&gt;

&lt;p&gt;JWT tokens contain sensitive information — user IDs, roles, permissions, expiration times. Some even contain email addresses and names in custom claims. When you paste one into a web-based decoder, that token is often sent to a server for processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;A JWT token is essentially a signed JSON object. The header and payload are just Base64-encoded — anyone can decode them. But the act of sending your production token to a third-party server means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your user data is exposed to that service&lt;/li&gt;
&lt;li&gt;The token could be logged, cached, or stored&lt;/li&gt;
&lt;li&gt;If the token hasn't expired, it could theoretically be reused&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Client-Side Alternative
&lt;/h2&gt;

&lt;p&gt;I built a JWT decoder that runs entirely in your browser. No server calls. No analytics on your tokens. Just paste → decode → done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://devbrew.org/jwt-decoder.html" rel="noopener noreferrer"&gt;DevToolbox JWT Decoder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what it shows you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header&lt;/strong&gt; — Algorithm, token type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload&lt;/strong&gt; — All claims, beautifully formatted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expiration&lt;/strong&gt; — Human-readable "expires in X hours" with visual indicator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signature&lt;/strong&gt; — Verification status&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How JWT Decoding Works (No Server Needed)
&lt;/h2&gt;

&lt;p&gt;A JWT has three parts separated by dots: &lt;code&gt;header.payload.signature&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// That's literally all client-side decoding takes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decodedHeader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decodedPayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The header and payload are just Base64-encoded JSON. Your browser can decode them instantly — no server round-trip needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Tools That Don't Need Your Data
&lt;/h2&gt;

&lt;p&gt;DevToolbox has 19 developer tools that all work the same way — entirely in your browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSON Formatter&lt;/strong&gt; — Format, validate, minify JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base64 Encoder/Decoder&lt;/strong&gt; — Encode and decode Base64&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex Tester&lt;/strong&gt; — Test patterns with real-time highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hash Generator&lt;/strong&gt; — SHA-256, MD5, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL Encoder/Decoder&lt;/strong&gt; — Handle URL-encoded strings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR Code Generator&lt;/strong&gt; — Generate QR codes for URLs, text, WiFi, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password Generator&lt;/strong&gt; — Secure passwords with customizable rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All free, no signup, no tracking: &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;DevToolbox&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Do you check where your dev tools send your data? I'd love to hear what tools you've found that respect your privacy.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jwt</category>
      <category>security</category>
      <category>webdev</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Your PDF and Image Tools Are Uploading Your Files to Strangers Servers</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Fri, 20 Mar 2026 07:27:45 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/your-pdf-and-image-tools-are-uploading-your-files-to-strangers-servers-47om</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/your-pdf-and-image-tools-are-uploading-your-files-to-strangers-servers-47om</guid>
      <description>&lt;h1&gt;
  
  
  Your PDF and Image Tools Are Uploading Your Files to Strangers' Servers
&lt;/h1&gt;

&lt;p&gt;Every time you merge a PDF or compress an image online, your files get uploaded to someone else's server. Think about that for a second.&lt;/p&gt;

&lt;p&gt;That contract you're merging? Uploaded. Those personal photos you're resizing? Uploaded. That medical document you're converting? You guessed it — uploaded to a server you don't control, in a country you might not know, with a retention policy buried in a 12-page privacy policy you didn't read.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dirty secret of "free" online tools
&lt;/h2&gt;

&lt;p&gt;Most popular PDF and image tools work the same way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You upload your file to their server&lt;/li&gt;
&lt;li&gt;Their server processes it&lt;/li&gt;
&lt;li&gt;They send back the result&lt;/li&gt;
&lt;li&gt;Your file sits on their server for... how long? 🤷&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;iLovePDF says files are deleted after 2 hours. Smallpdf says 1 hour. But you're trusting a promise you can't verify. And during that window, your sensitive documents exist on infrastructure you don't own.&lt;/p&gt;

&lt;p&gt;For a developer resizing a screenshot, maybe that's fine. But for a lawyer merging case documents? A doctor converting patient records? A business owner compressing financial statements? That's a real problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  There's a better way: client-side processing
&lt;/h2&gt;

&lt;p&gt;What if your files never left your device? What if all the processing happened right in your browser?&lt;/p&gt;

&lt;p&gt;That's exactly what we built:&lt;/p&gt;

&lt;h3&gt;
  
  
  Parchment — Private PDF Tools
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Merge PDFs&lt;/strong&gt; — Combine multiple PDFs into one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split PDFs&lt;/strong&gt; — Extract specific pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compress PDFs&lt;/strong&gt; — Reduce file size&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image to PDF&lt;/strong&gt; — Convert images to PDF&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF to Image&lt;/strong&gt; — Convert PDF pages to images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every operation runs entirely in your browser using JavaScript. Your files never leave your device. There's no upload, no server, no retention policy to worry about.&lt;/p&gt;

&lt;h3&gt;
  
  
  ImageToolkit — Private Image Tools
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://picbrew.org/" rel="noopener noreferrer"&gt;https://picbrew.org/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compress Images&lt;/strong&gt; — Reduce file size without losing quality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resize Images&lt;/strong&gt; — Change dimensions for any use case&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Convert Formats&lt;/strong&gt; — PNG, JPEG, WebP, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crop Images&lt;/strong&gt; — Precise cropping with visual preview&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watermark&lt;/strong&gt; — Add text watermarks with full customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same principle: everything happens in your browser. Batch processing included. Download as ZIP.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does client-side processing work?
&lt;/h2&gt;

&lt;p&gt;Modern browsers are incredibly powerful. APIs like the Canvas API, File API, and libraries like pdf-lib and jsPDF let us do heavy file processing without touching a server.&lt;/p&gt;

&lt;p&gt;When you upload a file to Parchment or ImageToolkit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The file is read into your browser's memory&lt;/li&gt;
&lt;li&gt;JavaScript processes it locally&lt;/li&gt;
&lt;li&gt;The result is generated as a downloadable blob&lt;/li&gt;
&lt;li&gt;Nothing ever hits the network&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can verify this yourself — open your browser's Network tab while using the tools. Zero outbound requests with your file data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy by architecture&lt;/strong&gt;, not by policy. There's no server to breach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline.&lt;/strong&gt; Once the page loads, you don't need internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No file size limits&lt;/strong&gt; imposed by upload bandwidth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster processing&lt;/strong&gt; — no upload/download wait time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account needed.&lt;/strong&gt; No signup. No email. Just tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The trade-offs
&lt;/h2&gt;

&lt;p&gt;Client-side isn't perfect for everything. Very large files (100+ MB PDFs) might strain browser memory. Complex operations like OCR are harder without server-side power. But for 95% of everyday PDF and image tasks, client-side processing is not just adequate — it's superior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parchment (PDF tools):&lt;/strong&gt; &lt;a href="https://parchpdf.com/" rel="noopener noreferrer"&gt;https://parchpdf.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ImageToolkit (Image tools):&lt;/strong&gt; &lt;a href="https://picbrew.org/" rel="noopener noreferrer"&gt;https://picbrew.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevToolbox (Developer tools):&lt;/strong&gt; &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;https://devbrew.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All free. All private. All open source. Your files, your device, your business.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built these tools because I got tired of trusting random servers with my documents. If you find them useful, &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;buy me a coffee&lt;/a&gt; ☕&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>10 Developer Tools You Didn't Know You Could Run Entirely in Your Browser</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Thu, 19 Mar 2026 14:33:59 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/10-developer-tools-you-didnt-know-you-could-run-entirely-in-your-browser-3na6</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/10-developer-tools-you-didnt-know-you-could-run-entirely-in-your-browser-3na6</guid>
      <description>&lt;p&gt;Every developer has a handful of tasks that interrupt their flow — decoding a JWT from a staging environment, formatting a messy JSON API response, figuring out what a cron expression actually means. You Google it, click the first result, and hope the sketchy-looking site does not steal your data.&lt;/p&gt;

&lt;p&gt;Here are 10 common developer tasks you can handle entirely in your browser — no installs, no server requests, no data leaving your machine. I have been using &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;DevToolbox&lt;/a&gt; for these, which runs everything client-side.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Format and Validate JSON
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You hit a REST API and get back a 400-character single-line JSON blob. You need to find a nested field buried three levels deep.&lt;/p&gt;

&lt;p&gt;Instead of piping through &lt;code&gt;python -m json.tool&lt;/code&gt; in the terminal, paste it into a &lt;a href="https://devbrew.org/json-formatter.html" rel="noopener noreferrer"&gt;JSON Formatter&lt;/a&gt;. You get syntax highlighting, collapsible nodes, and instant validation. If the JSON is malformed, it tells you exactly where the error is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; This is especially useful when debugging webhook payloads — Stripe, GitHub, Twilio — where the JSON can be deeply nested and hard to read raw.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Encode and Decode Base64
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You are setting up a Kubernetes secret and need to base64-encode a database connection string. Or you received a base64 blob in an email header and need to decode it.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/base64.html" rel="noopener noreferrer"&gt;Base64 Encoder/Decoder&lt;/a&gt; handles text and file encoding. It also supports URL-safe Base64, which matters when you are stuffing tokens into query parameters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Drag and drop a file directly onto the page to encode it — useful for embedding small images as data URIs in CSS.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Decode JWTs Without Exposing Them
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; A user reports an auth issue. You grab their JWT from the logs and need to check the claims — expiry, issuer, roles. The catch: this is a production token containing user data.&lt;/p&gt;

&lt;p&gt;With a &lt;a href="https://devbrew.org/jwt-decoder.html" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt; that runs in-browser, the token never hits a third-party server. You see the header, payload, and signature broken out with color coding and human-readable timestamps. It flags expired tokens automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; This is critical for debugging OAuth flows. Check the &lt;code&gt;aud&lt;/code&gt; and &lt;code&gt;iss&lt;/code&gt; claims first — misconfigured audience is the #1 cause of "valid token, still 401" issues.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Test Regular Expressions with Live Feedback
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You need to extract email addresses from a log file, or validate phone numbers in a form. You have a regex that is &lt;em&gt;almost&lt;/em&gt; right but matches too much.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/regex-tester.html" rel="noopener noreferrer"&gt;Regex Tester&lt;/a&gt; highlights matches in real time as you type. It shows capture groups, flags, and has a built-in cheat sheet for when you forget the difference between &lt;code&gt;\b&lt;/code&gt; and &lt;code&gt;\B&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Test your regex against edge cases before putting it in production code. Paste in 10-15 real-world examples to catch the weird ones — email addresses with plus signs, phone numbers with extensions.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. URL Encode/Decode Query Parameters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You are building a redirect URL with query parameters that contain special characters — maybe a callback URL inside another URL. Something is double-encoded and the API returns a 400.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/url-encoder.html" rel="noopener noreferrer"&gt;URL Encoder/Decoder&lt;/a&gt; lets you encode and decode individual components or full URLs. It handles the edge cases that trip people up, like spaces becoming &lt;code&gt;%20&lt;/code&gt; vs &lt;code&gt;+&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; When debugging OAuth redirect issues, decode the full authorization URL to see all the parameters clearly. Half the time the bug is a malformed &lt;code&gt;redirect_uri&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Generate Hashes for Integrity Checks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You are publishing a script and need to provide a SHA-256 checksum so users can verify the download. Or you need a quick MD5 hash for a cache key.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/hash-generator.html" rel="noopener noreferrer"&gt;Hash Generator&lt;/a&gt; computes SHA-256, SHA-1, MD5, and more from any text input, all in-browser using the Web Crypto API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Use SHA-256 hashes as cache-busting keys for static assets. Hash the file contents, append to the filename, and you have perfect cache invalidation without timestamp-based heuristics.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Convert Colors Between Formats
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; The designer hands you a HEX color. Your CSS framework wants HSL. The accessibility audit needs you to check contrast ratios against WCAG standards.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/color-picker.html" rel="noopener noreferrer"&gt;Color Picker&lt;/a&gt; converts between HEX, RGB, and HSL instantly. It includes a contrast ratio checker and generates shades and tints from any base color.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; WCAG AA requires a contrast ratio of at least 4.5:1 for normal text. Instead of eyeballing it, paste your background and foreground colors and get the exact ratio.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Convert Unix Timestamps to Human Dates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You are tailing a log and every timestamp is a Unix epoch — &lt;code&gt;1710849600&lt;/code&gt;. Is that today? Yesterday? You have no idea without converting it.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/timestamp.html" rel="noopener noreferrer"&gt;Unix Timestamp Converter&lt;/a&gt; does bidirectional conversion between epoch timestamps and human-readable dates. It auto-detects whether you pasted seconds or milliseconds, and shows a live ticking clock of the current epoch time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; API responses from different services mix seconds and milliseconds. A 13-digit number is milliseconds (JavaScript-style), 10 digits is seconds (Unix-style). The converter handles both automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Build Cron Expressions That Actually Make Sense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You need a cron job that runs at 2:15 AM on the first Monday of every month. You &lt;em&gt;think&lt;/em&gt; the expression is &lt;code&gt;15 2 1-7 * 1&lt;/code&gt; but are not entirely sure whether the day-of-month and day-of-week fields combine with AND or OR.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/cron-builder.html" rel="noopener noreferrer"&gt;Cron Expression Builder&lt;/a&gt; lets you construct expressions visually and shows the next scheduled run times so you can verify the schedule before deploying.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Always check the next 5 run times before committing a cron expression. The interaction between day-of-month and day-of-week fields is the most common source of cron bugs.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Diff Two Text Blocks Side by Side
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You are comparing two config files — staging vs production — and need to spot the differences. Or you are reviewing what changed in a &lt;code&gt;.env&lt;/code&gt; file before deploying.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://devbrew.org/diff-checker.html" rel="noopener noreferrer"&gt;Diff Checker&lt;/a&gt; gives you a side-by-side comparison with line-level and character-level highlighting. Paste two blocks of text and see exactly what changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Use this for comparing API responses before and after a code change. Paste the old response on the left, the new one on the right, and verify only the expected fields changed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Browser-Based Matters
&lt;/h2&gt;

&lt;p&gt;All 10 of these tools run entirely in your browser using JavaScript. No server calls, no data collection, no accounts. You can verify this by opening DevTools and checking the Network tab — zero requests after the page loads.&lt;/p&gt;

&lt;p&gt;This matters when you are handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production JWTs with user data&lt;/li&gt;
&lt;li&gt;API keys in Base64&lt;/li&gt;
&lt;li&gt;Config files with secrets&lt;/li&gt;
&lt;li&gt;Customer data in JSON payloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools even work offline once loaded.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Them Out
&lt;/h2&gt;

&lt;p&gt;All 10 tools are at &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;DevToolbox&lt;/strong&gt;&lt;/a&gt; — free, no signup, no ads.&lt;/p&gt;

&lt;p&gt;If you find them useful, consider &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;buying me a coffee&lt;/a&gt; to support development.&lt;/p&gt;

&lt;p&gt;What other browser-based tools would save you time? I am building based on what developers actually need — drop a comment.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Stop Sending Your Code to Random Servers — Use Client-Side Dev Tools Instead</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Thu, 19 Mar 2026 13:07:41 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/stop-sending-your-code-to-random-servers-use-client-side-dev-tools-instead-276m</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/stop-sending-your-code-to-random-servers-use-client-side-dev-tools-instead-276m</guid>
      <description>&lt;p&gt;Every day, millions of developers paste sensitive data into online tools without a second thought. JWT tokens with production secrets. API keys in Base64 encoders. Proprietary regex patterns. Database connection strings in URL decoders.&lt;/p&gt;

&lt;p&gt;Where does that data go? To someone else's server. And you're trusting them to not log it, not sell it, and not get breached.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Is Bigger Than You Think
&lt;/h2&gt;

&lt;p&gt;Most popular developer tools work like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You paste your data into a text box&lt;/li&gt;
&lt;li&gt;Your data gets sent to a server&lt;/li&gt;
&lt;li&gt;The server processes it and sends back the result&lt;/li&gt;
&lt;li&gt;Your data sits in server logs, potentially forever&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even "free" tools have a business model. If you're not paying, you're the product — and your data is what's being monetized.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Alternative: Everything Runs in Your Browser
&lt;/h2&gt;

&lt;p&gt;What if your dev tools never touched a server? What if every operation happened in your browser tab, and your data never left your machine?&lt;/p&gt;

&lt;p&gt;That's exactly what client-side developer tools do. The JavaScript runs locally, the processing happens in your browser's sandbox, and nothing gets transmitted anywhere.&lt;/p&gt;

&lt;p&gt;Here are the tools I use daily that work entirely client-side:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. JSON Formatter &amp;amp; Validator
&lt;/h3&gt;

&lt;p&gt;Instead of pasting your API responses into jsonformatter.org (which sends data to their servers), use a client-side formatter. You get syntax highlighting, tree view, minification, and validation — all without your data leaving the tab.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Base64 Encoder/Decoder
&lt;/h3&gt;

&lt;p&gt;Base64 is used everywhere — API authentication, email encoding, image embedding. A client-side Base64 tool means your encoded credentials stay on your machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. JWT Decoder
&lt;/h3&gt;

&lt;p&gt;This one is critical. JWTs often contain user IDs, roles, permissions, and expiry information. Decoding them on someone else's server is basically handing over your auth tokens. A browser-based decoder shows you the header, payload, and signature without any network requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Hash Generator
&lt;/h3&gt;

&lt;p&gt;Need to generate SHA-256 hashes for file verification or API signing? The Web Crypto API in modern browsers handles this natively. No server round-trip needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Regex Tester
&lt;/h3&gt;

&lt;p&gt;Regular expressions often contain patterns that reveal business logic — email validation rules, data extraction patterns, input sanitization. Testing them client-side keeps your patterns private.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. URL Encoder/Decoder
&lt;/h3&gt;

&lt;p&gt;URL encoding and decoding is trivial computation. There is zero reason for this to touch a server, yet many popular tools send your URLs (which may contain tokens, API keys, or session IDs) to their backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Tell If a Tool Is Client-Side
&lt;/h2&gt;

&lt;p&gt;Quick test: open your browser's Network tab (F12 → Network), then use the tool. If you see API calls firing when you click "Format" or "Decode", your data is being sent somewhere.&lt;/p&gt;

&lt;p&gt;A truly client-side tool will show zero network requests during processing.&lt;/p&gt;

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

&lt;p&gt;I built &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;DevToolbox&lt;/a&gt; — a free suite of 8 developer tools that all run 100% in your browser. JSON formatter, Base64 encoder, JWT decoder, regex tester, URL encoder, hash generator, color picker, and timestamp converter.&lt;/p&gt;

&lt;p&gt;No ads, no tracking, no server calls. Open the Network tab and verify for yourself.&lt;/p&gt;

&lt;p&gt;The code is simple: HTML, CSS, and vanilla JavaScript. No frameworks, no build steps, no CDN dependencies. Just tools that work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;Before you paste sensitive data into any online tool, ask yourself: does this need to leave my browser? For most developer utilities, the answer is no.&lt;/p&gt;

&lt;p&gt;Choose client-side tools. Your data will thank you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What developer tools do you wish ran client-side? Drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a Privacy-First Developer Toolbox — Everything Runs in Your Browser</title>
      <dc:creator>Danny Cranmer</dc:creator>
      <pubDate>Thu, 19 Mar 2026 12:44:20 +0000</pubDate>
      <link>https://dev.to/danny_cranmer_9e9e9d7178d/i-built-a-privacy-first-developer-toolbox-everything-runs-in-your-browser-2b0o</link>
      <guid>https://dev.to/danny_cranmer_9e9e9d7178d/i-built-a-privacy-first-developer-toolbox-everything-runs-in-your-browser-2b0o</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Every developer has been here: you need to decode a JWT from production, format a JSON response with customer data, or test a regex against real log entries. So you Google "JWT decoder" and land on some random site plastered with ads, cookie banners, and — here's the kicker — &lt;strong&gt;your data gets sent to their server&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most online developer tools phone home. Your production tokens, API responses, and customer data pass through someone else's infrastructure. We've all done it without thinking twice.&lt;/p&gt;

&lt;p&gt;I decided to build something better.&lt;/p&gt;

&lt;h2&gt;
  
  
  DevToolbox
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;DevToolbox&lt;/strong&gt;&lt;/a&gt; is a suite of developer utilities that runs &lt;strong&gt;entirely in your browser&lt;/strong&gt;. No server calls. No tracking. No ads. Your data never leaves your machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools available now:
&lt;/h3&gt;

&lt;p&gt;🔧 &lt;strong&gt;JSON Formatter&lt;/strong&gt; — Format, validate, and minify JSON with syntax highlighting and a collapsible tree view. Handles large payloads without breaking a sweat.&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Base64 Encoder/Decoder&lt;/strong&gt; — Encode and decode text or files. Supports URL-safe Base64. Drag-and-drop file uploads.&lt;/p&gt;

&lt;p&gt;🎫 &lt;strong&gt;JWT Decoder&lt;/strong&gt; — Paste a token, see the header, payload, and signature. Color-coded sections, expiry status, and human-readable timestamps.&lt;/p&gt;

&lt;p&gt;🔍 &lt;strong&gt;Regex Tester&lt;/strong&gt; — Live pattern matching with group highlighting. Includes a quick-reference cheat sheet and common pattern library.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;URL Encoder/Decoder&lt;/strong&gt; — Encode and decode URI components. Handles special characters correctly.&lt;/p&gt;

&lt;h1&gt;
  
  
  ️⃣ &lt;strong&gt;Hash Generator&lt;/strong&gt; — Generate SHA-256, SHA-1, MD5, and more from any text input.
&lt;/h1&gt;

&lt;p&gt;🎨 &lt;strong&gt;Color Picker &amp;amp; Converter&lt;/strong&gt; — HEX ↔ RGB ↔ HSL conversion with a visual picker, contrast ratio checker, and shades/tints palette generator.&lt;/p&gt;

&lt;p&gt;⏱️ &lt;strong&gt;Unix Timestamp Converter&lt;/strong&gt; — Bidirectional timestamp↔date conversion with a live ticking clock, auto-detection of seconds vs milliseconds, and quick-jump buttons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Client-Side Matters
&lt;/h2&gt;

&lt;p&gt;Here's what happens with most online tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You paste a JWT → It goes to their server → They decode it → They send it back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With DevToolbox:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You paste a JWT → JavaScript in your browser decodes it → Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No network request. Open your browser's DevTools, check the Network tab — you'll see zero requests after the page loads. It even works offline.&lt;/p&gt;

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

&lt;p&gt;Deliberately boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla HTML/CSS/JS&lt;/strong&gt; — No React, no build step, no node_modules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages&lt;/strong&gt; — Free hosting, HTTPS included&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode by default&lt;/strong&gt; — Because developers don't want flashbangs at 2am&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard shortcuts&lt;/strong&gt; — Ctrl+Enter to process, Ctrl+L to clear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile-friendly&lt;/strong&gt; — Responsive design, works on phones and tablets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each page loads in under 100ms. No framework overhead, no bundle splitting, no hydration delays. Just HTML and JavaScript doing what they were designed to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm actively building more tools based on what developers need most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Diff Checker&lt;/strong&gt; — Side-by-side text comparison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown Preview&lt;/strong&gt; — Live rendering with GitHub-flavored markdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YAML/TOML Converter&lt;/strong&gt; — Convert between config formats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron Expression Parser&lt;/strong&gt; — Human-readable cron schedule descriptions&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;👉 &lt;a href="https://devbrew.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;devbrew.org&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's free, open source, and always will be. No signup, no paywall.&lt;/p&gt;

&lt;p&gt;If you find it useful, &lt;a href="https://buymeacoffee.com/dairylea" rel="noopener noreferrer"&gt;buy me a coffee&lt;/a&gt; ☕&lt;/p&gt;

&lt;p&gt;What tools would you want added next? Drop a comment — I'm building based on what developers actually need.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
