<?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: Leo</title>
    <description>The latest articles on DEV Community by Leo (@tinglongyang).</description>
    <link>https://dev.to/tinglongyang</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%2F3857654%2F6c9cebd1-9aa9-4f5a-99d8-b1df6d04765e.jpeg</url>
      <title>DEV Community: Leo</title>
      <link>https://dev.to/tinglongyang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tinglongyang"/>
    <language>en</language>
    <item>
      <title>I Built a Privacy-First Developer Toolbox That Runs 100% in Your Browser</title>
      <dc:creator>Leo</dc:creator>
      <pubDate>Thu, 02 Apr 2026 12:52:28 +0000</pubDate>
      <link>https://dev.to/tinglongyang/i-built-a-privacy-first-developer-toolbox-that-runs-100-in-your-browser-2ho2</link>
      <guid>https://dev.to/tinglongyang/i-built-a-privacy-first-developer-toolbox-that-runs-100-in-your-browser-2ho2</guid>
      <description>&lt;p&gt;Every developer has a handful of tools they reach for daily: a JSON formatter, a Base64 decoder, a timestamp converter. I got tired of pasting sensitive data into random websites that "promise" not to store it, so I built my own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://tools.ytlm.space/" rel="noopener noreferrer"&gt;DevTools&lt;/a&gt;&lt;/strong&gt; is a collection of 8 developer tools that run entirely client-side. No server uploads. No data collection. Everything happens in your browser tab.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/json/" rel="noopener noreferrer"&gt;JSON Formatter&lt;/a&gt;&lt;/strong&gt; - Format, validate, and minify JSON with auto-detection of nested escaped strings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/base64/" rel="noopener noreferrer"&gt;Base64 Converter&lt;/a&gt;&lt;/strong&gt; - Encode and decode Base64 with full UTF-8 and emoji support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/url/" rel="noopener noreferrer"&gt;URL Encoder&lt;/a&gt;&lt;/strong&gt; - Percent-encode/decode URLs with international character support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/jwt/" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt;&lt;/strong&gt; - Decode JSON Web Tokens locally without ever sending your tokens to a server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/timestamp/" rel="noopener noreferrer"&gt;Timestamp Converter&lt;/a&gt;&lt;/strong&gt; - Convert between Unix timestamps and human-readable dates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/uuid/" rel="noopener noreferrer"&gt;UUID Generator&lt;/a&gt;&lt;/strong&gt; - Generate cryptographically secure UUID v4 in bulk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/hash/" rel="noopener noreferrer"&gt;Hash Generator&lt;/a&gt;&lt;/strong&gt; - Calculate MD5, SHA-256, and SHA-512 hashes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tools.ytlm.space/regex/" rel="noopener noreferrer"&gt;Regex Tester&lt;/a&gt;&lt;/strong&gt; - Test and debug regular expressions with live matching and replacement&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Think about what you paste into online tools every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JWT tokens containing user IDs and permissions&lt;/li&gt;
&lt;li&gt;API responses with customer data&lt;/li&gt;
&lt;li&gt;Configuration files with connection strings&lt;/li&gt;
&lt;li&gt;Hashed passwords you're debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most online tools send your input to a server for processing. Even if they don't log it intentionally, your data passes through their infrastructure. With client-side processing, the data literally cannot leave your machine.&lt;/p&gt;

&lt;p&gt;You can verify this yourself: open the Network tab in your browser's DevTools while using any tool. You'll see zero outbound requests after the page loads.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; with static export (&lt;code&gt;output: "export"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; for the UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS 4&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CodeMirror&lt;/strong&gt; for the code editors with syntax highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Crypto API&lt;/strong&gt; for hash generation (not a JS polyfill)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployed on Cloudflare Pages&lt;/strong&gt; for global edge delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The static export means the entire site is pre-rendered HTML + JS. No server-side runtime, no API routes, no database. Just files served from Cloudflare's CDN.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Few Things I'm Proud Of
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nested JSON detection&lt;/strong&gt;: The JSON formatter auto-detects and recursively parses escaped JSON strings. If you have a log line where JSON is double-escaped (&lt;code&gt;"{\"key\":\"value\"}"&lt;/code&gt;), it will unwrap it for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hex UTF-8 decoding&lt;/strong&gt;: Paste a string with &lt;code&gt;\xE4\xB8\xAD&lt;/code&gt; and the formatter converts it to the actual Chinese character. Useful when debugging logs from Go or Python services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theme system&lt;/strong&gt;: 7 built-in themes (Midnight, Dracula, Nord, Monokai, GitHub Dark, Solarized, Light) with instant switching and localStorage persistence. The theme loads before React hydrates, so there's no flash of wrong colors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cmd+K command palette&lt;/strong&gt;: Quick-jump to any tool without touching the sidebar.&lt;/p&gt;

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

&lt;p&gt;I'm planning to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color picker / converter (HEX, RGB, HSL)&lt;/li&gt;
&lt;li&gt;Markdown previewer&lt;/li&gt;
&lt;li&gt;Diff tool (compare two text blocks)&lt;/li&gt;
&lt;li&gt;Cron expression parser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have suggestions for tools you'd find useful, I'd love to hear them in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it out: &lt;a href="https://tools.ytlm.space/" rel="noopener noreferrer"&gt;tools.ytlm.space&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
