<?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: Kevin Tan</title>
    <description>The latest articles on DEV Community by Kevin Tan (@kevin_tan_29e4fbebec2fd64).</description>
    <link>https://dev.to/kevin_tan_29e4fbebec2fd64</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%2F3718969%2F9c4cdab4-9e7e-46ab-bc91-a2a770994df5.jpg</url>
      <title>DEV Community: Kevin Tan</title>
      <link>https://dev.to/kevin_tan_29e4fbebec2fd64</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kevin_tan_29e4fbebec2fd64"/>
    <language>en</language>
    <item>
      <title>I Replaced My scripts/ Folder With a Browser Tool — Here's Why</title>
      <dc:creator>Kevin Tan</dc:creator>
      <pubDate>Mon, 19 Jan 2026 07:09:39 +0000</pubDate>
      <link>https://dev.to/kevin_tan_29e4fbebec2fd64/i-replaced-my-scripts-folder-with-a-browser-tool-heres-why-1hhl</link>
      <guid>https://dev.to/kevin_tan_29e4fbebec2fd64/i-replaced-my-scripts-folder-with-a-browser-tool-heres-why-1hhl</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8d5b8qur223mmmwczd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8d5b8qur223mmmwczd2.png" alt=" " width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;$ ls scripts/&lt;br&gt;
  check_duplicates.py&lt;br&gt;
  find_duplicates_v2.py&lt;br&gt;
  json_to_csv.py&lt;br&gt;
  csv_to_json.py&lt;br&gt;
  extract_emails.py&lt;br&gt;
  validate_users.py&lt;br&gt;
  map_fields.py&lt;br&gt;
  ...&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;I had 47 of these. One-off scripts I wrote to handle quick data tasks, used once, then forgotten. Last month I decided to build a tool to replace all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tools Backend Engineers Actually Need&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After auditing my scripts folder, I found the same operations repeating:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find duplicates by key&lt;/strong&gt; — "Are there duplicate emails in this export?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map/extract fields&lt;/strong&gt; — "I just need &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt; from these 50 fields"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate data&lt;/strong&gt; — "Which rows have null values?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Convert formats&lt;/strong&gt; — JSON ↔ CSV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decode tokens&lt;/strong&gt; — "What's in this JWT?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these require code. They require a tool that accepts input and returns output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://lazydev.website" rel="noopener noreferrer"&gt;LazyDev&lt;/a&gt;&lt;/strong&gt; — a browser-based toolkit for data operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate Checker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste JSON or CSV, select a key:&lt;/p&gt;

&lt;p&gt;// Input&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  [
    { "id": 1, "email": "alice@test.com" },
    { "id": 2, "email": "bob@test.com" },
    { "id": 3, "email": "alice@test.com" }
  ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select email as the key → instantly see that &lt;a href="mailto:alice@test.com"&gt;alice@test.com&lt;/a&gt; appears twice with row indices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Mapper&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Extract only the fields you need, rename them inline:&lt;/p&gt;

&lt;p&gt;Input fields: id, firstName, lastName, email, createdAt, updatedAt, role, department&lt;br&gt;
  ↓&lt;br&gt;
  Output: { "user_id": id, "full_name": firstName, "email": email }&lt;/p&gt;

&lt;p&gt;No Array.map() required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Validator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing required fields&lt;/li&gt;
&lt;li&gt;Null/empty values&lt;/li&gt;
&lt;li&gt;Type mismatches (string vs number)&lt;/li&gt;
&lt;li&gt;Format validation (email, URL)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns valid rows, invalid rows, and detailed error messages per row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also Included&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON Formatter — Beautify, minify, convert to CSV&lt;/li&gt;
&lt;li&gt;Base64/JWT Decoder — Inspect tokens, see expiration, extract claims&lt;/li&gt;
&lt;li&gt;URL Encoder/Decoder — Parse query strings, encode components&lt;/li&gt;
&lt;li&gt;UUID Generator — Bulk generate v4 UUIDs, nanoids, custom IDs&lt;/li&gt;
&lt;li&gt;Regex Tester — Test patterns with match highlighting&lt;/li&gt;
&lt;li&gt;JSON Diff — Compare two objects, see additions/removals/changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Privacy-First&lt;/p&gt;

&lt;p&gt;Free tier processes entirely client-side. Your data never hits a server. I built it this way because I needed a tool I could trust with real data.&lt;/p&gt;

&lt;p&gt;The Real Win&lt;/p&gt;

&lt;p&gt;It's not about the features — it's about removing friction.&lt;/p&gt;

&lt;p&gt;The old workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open editor&lt;/li&gt;
&lt;li&gt;Write script&lt;/li&gt;
&lt;li&gt;Handle edge cases&lt;/li&gt;
&lt;li&gt;Run it&lt;/li&gt;
&lt;li&gt;Format output&lt;/li&gt;
&lt;li&gt;Never use script again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The new workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste data&lt;/li&gt;
&lt;li&gt;Done&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those 10-15 minute tasks become 30-second tasks. Multiply by a few times per week, and you get hours back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lazydev.website" rel="noopener noreferrer"&gt;https://lazydev.website&lt;/a&gt; — no signup required for basic features.&lt;/p&gt;

&lt;p&gt;If you've ever written a throwaway script to check duplicates, convert JSON, or validate a data file — this is for you.&lt;/p&gt;

&lt;p&gt;What's in your scripts/ folder?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>softwaredevelopment</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
