<?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: Kaewkamphon Suesirithamrong</title>
    <description>The latest articles on DEV Community by Kaewkamphon Suesirithamrong (@kkp).</description>
    <link>https://dev.to/kkp</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%2F4175733%2F248d4521-ec1d-4388-9e24-1e014789ed72.png</url>
      <title>DEV Community: Kaewkamphon Suesirithamrong</title>
      <link>https://dev.to/kkp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kkp"/>
    <language>en</language>
    <item>
      <title>Does your online dev tool upload your data? Check in 30 seconds</title>
      <dc:creator>Kaewkamphon Suesirithamrong</dc:creator>
      <pubDate>Thu, 15 Oct 2026 06:55:04 +0000</pubDate>
      <link>https://dev.to/kkp/does-your-online-dev-tool-upload-your-data-check-in-30-seconds-i7k</link>
      <guid>https://dev.to/kkp/does-your-online-dev-tool-upload-your-data-check-in-30-seconds-i7k</guid>
      <description>&lt;p&gt;You paste JWTs, configs and logs into online tools every day. Do you know where they go?&lt;/p&gt;

&lt;h2&gt;
  
  
  The 30-second check
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the tool, press &lt;strong&gt;F12&lt;/strong&gt; → &lt;strong&gt;Network&lt;/strong&gt;, and clear the list.&lt;/li&gt;
&lt;li&gt;Paste fake input and run the tool.&lt;/li&gt;
&lt;li&gt;Click any new request → &lt;strong&gt;Payload&lt;/strong&gt;. See your input? It left your machine.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 Bonus: click the page itself and find &lt;code&gt;content-security-policy&lt;/code&gt; in the response headers. &lt;code&gt;connect-src 'self'&lt;/code&gt; means the page can only talk to its own site. Not proof, but a good sign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jobs that should pass this check
&lt;/h2&gt;

&lt;p&gt;None of these need a server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔒 Redacting a log before you paste it into an AI&lt;/li&gt;
&lt;li&gt;📂 Diffing two config files&lt;/li&gt;
&lt;li&gt;✅ Verifying a download's SHA-256&lt;/li&gt;
&lt;li&gt;🖼️ Turning an image into a data URI
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR payment failed for jane.doe@example.com from 203.0.113.42
→ ERROR payment failed for [EMAIL_1] from [IP_1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I build &lt;a href="https://dev-trove.com/tools" rel="noopener noreferrer"&gt;DevTrove&lt;/a&gt;, where all four run in your browser. Go ahead and run the check on it. 😉&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which tool are you checking first?&lt;/strong&gt; 👇&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built and written with help from AI, reviewed and tested by me.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A JSON Schema validator that runs in your browser and never downloads your $refs</title>
      <dc:creator>Kaewkamphon Suesirithamrong</dc:creator>
      <pubDate>Wed, 14 Oct 2026 04:29:24 +0000</pubDate>
      <link>https://dev.to/kkp/a-json-schema-validator-that-runs-in-your-browser-and-never-downloads-your-refs-4b3</link>
      <guid>https://dev.to/kkp/a-json-schema-validator-that-runs-in-your-browser-and-never-downloads-your-refs-4b3</guid>
      <description>&lt;p&gt;When I validate JSON against a schema, the data is often something I'd rather not paste into a random website: API responses, config files, payloads from work. So I built a JSON Schema validator that runs entirely in the browser, as part of &lt;a href="https://dev-trove.com" rel="noopener noreferrer"&gt;DevTrove&lt;/a&gt;, my set of privacy-first developer tools.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://dev-trove.com/tools/json-schema-validator" rel="noopener noreferrer"&gt;JSON Schema Validator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Paste a schema on one side and JSON data on the other, then press Validate (or Ctrl/⌘+Enter). You get either &lt;strong&gt;Valid&lt;/strong&gt; or a list of errors. Each error shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where it is in your data, as a JSON Pointer path like &lt;code&gt;/users/0/email&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;what is wrong and which keyword failed;&lt;/li&gt;
&lt;li&gt;where that keyword sits in the schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports &lt;strong&gt;Draft 2020-12 and Draft-07&lt;/strong&gt;. The version comes from &lt;code&gt;$schema&lt;/code&gt;, or from a Draft selector if the schema has none. Other drafts are rejected instead of being checked with the wrong rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things I cared about
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Nothing leaves the page.&lt;/strong&gt; The schema and the data are not uploaded, not stored and not put in the URL. Validation runs in a Web Worker, which is stopped after 5 seconds, so a pathological regex can't freeze the tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;$ref&lt;/code&gt; is never fetched.&lt;/strong&gt; References are resolved only inside the schema you paste (&lt;code&gt;#/$defs/...&lt;/code&gt;, &lt;code&gt;$id&lt;/code&gt;, &lt;code&gt;$anchor&lt;/code&gt;, &lt;code&gt;$dynamicAnchor&lt;/code&gt;). A reference to another URL is reported as an error rather than downloaded. If you need another schema, copy it under &lt;code&gt;$defs&lt;/code&gt;. The official 2020-12 and Draft-07 metaschemas are built in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Numbers are compared exactly.&lt;/strong&gt; JavaScript reads &lt;code&gt;9007199254740993&lt;/code&gt; and &lt;code&gt;9007199254740992&lt;/code&gt; as the same number. This validator compares decimal values exactly, so the schema &lt;code&gt;{ "maximum": 9007199254740992 }&lt;/code&gt; rejects the data &lt;code&gt;9007199254740993&lt;/code&gt;, as it should. Likewise &lt;code&gt;1.0000001&lt;/code&gt; is not a multiple of &lt;code&gt;1&lt;/code&gt;, and &lt;code&gt;0.30000000000000001&lt;/code&gt; is not equal to &lt;code&gt;0.3&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;format&lt;/code&gt; (email, date-time, …) is treated as an annotation, the 2020-12 default, so it is &lt;strong&gt;not&lt;/strong&gt; checked. The page tells you how many &lt;code&gt;format&lt;/code&gt; keywords it skipped.&lt;/li&gt;
&lt;li&gt;Input is strict JSON: no comments or trailing commas, and duplicate keys are rejected.&lt;/li&gt;
&lt;li&gt;Each box takes up to 1,000,000 characters.&lt;/li&gt;
&lt;li&gt;I've tested it in Chromium-based browsers. Firefox and Safari aren't verified yet.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;It's free, needs no sign-up, and has a &lt;strong&gt;Load example&lt;/strong&gt; button if you just want to see it work:&lt;br&gt;
&lt;a href="https://dev-trove.com/tools/json-schema-validator" rel="noopener noreferrer"&gt;https://dev-trove.com/tools/json-schema-validator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find a schema it gets wrong, I'd like to hear about it in the comments.&lt;/p&gt;

</description>
      <category>json</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
    </item>
    <item>
      <title>I built a set of developer tools that run entirely in your browser</title>
      <dc:creator>Kaewkamphon Suesirithamrong</dc:creator>
      <pubDate>Tue, 13 Oct 2026 10:23:42 +0000</pubDate>
      <link>https://dev.to/kkp/i-built-a-set-of-developer-tools-that-run-entirely-in-your-browser-3pjc</link>
      <guid>https://dev.to/kkp/i-built-a-set-of-developer-tools-that-run-entirely-in-your-browser-3pjc</guid>
      <description>&lt;p&gt;I kept pasting JWTs, JSON with real customer data, and config files into random online tools, and never knew where that data went. So I built &lt;strong&gt;DevTrove&lt;/strong&gt;: &lt;a href="https://dev-trove.com" rel="noopener noreferrer"&gt;https://dev-trove.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;22 free developer tools: JSON formatter and validator, JSON Schema validator, JSON semantic diff, YAML ↔ JSON, CSV ↔ JSON, JWT decoder and encoder/verifier, Base64, URL and HTML encoding, hash and password generators, a regex tester, a cron explainer, a timestamp converter, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it handles your data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your input is processed in your browser. Tools don't send it to a server, store it, or put it in the URL.&lt;/li&gt;
&lt;li&gt;No analytics, no ads, no sign-up.&lt;/li&gt;
&lt;li&gt;Heavy tools (regex, YAML, JSON diff and schema validation) run in a Web Worker with a timeout, so a catastrophic regex can't freeze the page.&lt;/li&gt;
&lt;li&gt;The JWT tools use the Web Crypto API, reject &lt;code&gt;alg: none&lt;/code&gt;, and enforce minimum HMAC key lengths.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Next.js, React, TypeScript. Each tool has unit tests and Playwright end-to-end tests, including accessibility checks on desktop and mobile.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'd love feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Which tool do you reach for that's missing?&lt;/li&gt;
&lt;li&gt;Anything that feels slow, confusing, or broken on your device?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

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