<?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: minh</title>
    <description>The latest articles on DEV Community by minh (@mnh_10c67ea5971f38774b74).</description>
    <link>https://dev.to/mnh_10c67ea5971f38774b74</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%2F4217974%2F9574da4b-0d73-4b65-aedf-b1e487a0f6ff.png</url>
      <title>DEV Community: minh</title>
      <link>https://dev.to/mnh_10c67ea5971f38774b74</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mnh_10c67ea5971f38774b74"/>
    <language>en</language>
    <item>
      <title>I built 22 free data converters that never leave your browser (Next.js 16)</title>
      <dc:creator>minh</dc:creator>
      <pubDate>Fri, 30 Oct 2026 21:18:38 +0000</pubDate>
      <link>https://dev.to/mnh_10c67ea5971f38774b74/i-built-22-free-data-converters-that-never-leave-your-browser-nextjs-16-424c</link>
      <guid>https://dev.to/mnh_10c67ea5971f38774b74/i-built-22-free-data-converters-that-never-leave-your-browser-nextjs-16-424c</guid>
      <description>&lt;p&gt;Every time I needed to turn an API response into a CSV, or paste a JSON blob out of ChatGPT into something usable, I ended up on a tool site that either wanted me to upload my data, buried the tool under 15 ads, or choked on quoted fields.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://jsonsheet.com" rel="noopener noreferrer"&gt;JSONSheet&lt;/a&gt; — &lt;strong&gt;22 converters that run 100% in your browser&lt;/strong&gt;. No upload. No signup. No server-side processing at all.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSON ↔ CSV&lt;/strong&gt; with proper RFC 4180 parsing (quoted fields, embedded commas/newlines, escaped quotes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON ↔ YAML&lt;/strong&gt; — clean block-style output, correct quoting of ambiguous values&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON → XML&lt;/strong&gt; and &lt;strong&gt;JSON → JSONL&lt;/strong&gt; (NDJSON) for pipelines and fine-tuning datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON ↔ Markdown tables&lt;/strong&gt; — for READMEs, Notion, GitHub issues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV/JSON → SQL INSERTs&lt;/strong&gt; (Postgres &amp;amp; MySQL, with CREATE TABLE + type inference)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON → TypeScript interfaces&lt;/strong&gt; — nested objects become named interfaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flatten / unflatten JSON&lt;/strong&gt; to dot-notation paths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON escape/unescape&lt;/strong&gt;, &lt;strong&gt;Base64 encode/decode&lt;/strong&gt; (UTF-8 safe), &lt;strong&gt;TSV → JSON&lt;/strong&gt; (paste straight from Excel/Sheets), &lt;strong&gt;CSV dedupe &amp;amp; transpose&lt;/strong&gt;, &lt;strong&gt;CSV → HTML table&lt;/strong&gt;, &lt;strong&gt;JSON ↔ URL query string&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "AI-paste" feature
&lt;/h3&gt;

&lt;p&gt;The part I use daily: paste JSON straight out of ChatGPT/Claude — markdown fences, "Here's your data:" prose and all — and the tool strips the noise before converting. One step instead of four. I wrote a full guide about this workflow: &lt;a href="https://jsonsheet.com/guides/chatgpt-json-to-csv/" rel="noopener noreferrer"&gt;Convert ChatGPT / Claude output to CSV the clean way&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The privacy angle (and why it's also cheap)
&lt;/h2&gt;

&lt;p&gt;Everything is a pure TypeScript function running in your tab. There is no API to call, so:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your data never leaves your device&lt;/strong&gt; — genuinely, not as a marketing line&lt;/li&gt;
&lt;li&gt;The whole site is a &lt;strong&gt;static export&lt;/strong&gt; — nginx serves ~2MB of files, the VPS idles at 0% CPU&lt;/li&gt;
&lt;li&gt;No DB, no auth, no PII to protect — the security surface is tiny&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16.4.3&lt;/strong&gt;, static export (&lt;code&gt;output: 'export'&lt;/code&gt;) — no Node runtime needed in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React 19 + TypeScript&lt;/strong&gt;, zero UI libraries — the converters are plain functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;76 unit tests&lt;/strong&gt; on the converter core (&lt;code&gt;npm test&lt;/code&gt; in the repo)&lt;/li&gt;
&lt;li&gt;Deployed on a small VPS behind Cloudflare with Let's Encrypt; deploys via a 30-line bash script (no CI/CD needed at this scale)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;👉 &lt;a href="https://jsonsheet.com" rel="noopener noreferrer"&gt;jsonsheet.com&lt;/a&gt; · Source: &lt;a href="https://github.com/kami2k1/jsonsheet" rel="noopener noreferrer"&gt;github.com/kami2k1/jsonsheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you hit a file it chokes on, open an issue with a sample — the CSV parser is RFC 4180-tested but real-world data always finds new edge cases.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
